From 443c9917779ef86ee6d284f5edc5e60704cb002a Mon Sep 17 00:00:00 2001 From: Rebecca Stevens Date: Thu, 28 Mar 2024 23:58:06 +1300 Subject: [PATCH] feat: migrate to eslint 9 and add more plugins BREAKING CHANGE: ESLint 9 is now required --- .commitlintrc.cjs | 2 +- .cspell.json | 70 - .eslintrc.json | 29 - .github/FUNDING.yml | 1 + .github/actions/prepare/action.yml | 8 +- .github/codecov.yml | 8 + .github/labels.yml | 61 +- .github/renovate.json | 52 +- .../workflows/accessibility-alt-text-bot.yml | 26 + .github/workflows/build-node.yml | 2 +- .github/workflows/done-label.yml | 2 +- .github/workflows/lint-js.yml | 2 +- .github/workflows/lint-knip-dev.yml | 2 +- .github/workflows/lint-knip-prod.yml | 2 +- .github/workflows/lint-markdown.yml | 2 +- .../{build.yml => lint-packages.yml} | 8 +- .github/workflows/lint-prettier.yml | 2 +- .github/workflows/lint-spelling.yml | 2 +- .github/workflows/release.yml | 14 +- .github/workflows/semantic-pr.yml | 4 +- .github/workflows/stale.yml | 10 +- .github/workflows/sync-labels.yml | 7 +- .github/workflows/type-check.yml | 2 +- .gitignore | 3 +- .husky/commit-msg | 3 - .husky/pre-commit | 3 - .lintstagedrc.yml | 9 +- .markdownlint.json | 355 +- .markdownlintignore | 3 +- .npmrc | 3 + .nvmrc | 2 +- .prettierignore | 4 +- .prettierrc.yml | 14 +- .vscode/extensions.json | 4 +- .vscode/settings.json | 49 +- LICENSE | 2 +- README.md | 107 +- cspell.config.yml | 66 + eslint.config.js | 35 + knip.jsonc | 28 +- package.json | 259 +- pnpm-lock.yaml | 3338 ++++++++++------- project-dictionary.txt | 33 + rollup.config.ts | 87 +- scripts/generate-preview.ts | 24 - scripts/tsconfig.json | 6 - scripts/typegen.ts | 54 + src/builtin/deprecated.ts | 29 - src/builtin/index.ts | 32 - src/builtin/layout+formatting.ts | 289 -- src/builtin/possible-problems.ts | 86 - src/builtin/suggestions.ts | 201 - src/common/files.ts | 24 - src/common/merge-configs.ts | 94 - src/configs/comments.ts | 29 + src/configs/common-overrides.ts | 45 - src/configs/formatters.ts | 406 ++ src/configs/functional.ts | 238 ++ src/configs/ignores.ts | 10 + src/configs/imports.ts | 178 + src/configs/index.ts | 19 + src/configs/javascript.ts | 408 ++ src/configs/jsdoc.ts | 99 + src/configs/jsonc.ts | 97 + src/configs/markdown.ts | 134 + src/configs/modern.ts | 54 - src/configs/node.ts | 82 + src/configs/script.ts | 22 - src/configs/sort.ts | 132 + src/configs/stylistic.ts | 239 ++ src/configs/test.ts | 81 +- src/configs/toml.ts | 70 + src/configs/typescript.ts | 415 +- src/configs/unicorn.ts | 131 + src/configs/unocss.ts | 36 + src/configs/vue.ts | 243 ++ src/configs/yaml.ts | 73 + src/factory.ts | 261 ++ src/globs.ts | 90 + src/index.ts | 7 + src/plugins/eslint-comments.ts | 11 - src/plugins/functional.ts | 78 - src/plugins/import.ts | 150 - src/plugins/jsdoc.ts | 85 - src/plugins/markdown.ts | 76 - src/plugins/node.ts | 84 - src/plugins/optimize-regex.ts | 9 - src/plugins/promise.ts | 19 - src/plugins/sonarjs.ts | 15 - src/plugins/typescript.ts | 326 -- src/plugins/unicorn.ts | 64 - src/types.ts | 237 ++ src/utils.ts | 79 + tsconfig.base.json | 21 +- tsconfig.build.json | 3 +- tsconfig.eslint.json | 4 + tsconfig.json | 2 +- 97 files changed, 6711 insertions(+), 3715 deletions(-) delete mode 100644 .cspell.json delete mode 100644 .eslintrc.json create mode 100644 .github/codecov.yml create mode 100644 .github/workflows/accessibility-alt-text-bot.yml rename .github/workflows/{build.yml => lint-packages.yml} (57%) create mode 100644 .npmrc create mode 100644 cspell.config.yml create mode 100644 eslint.config.js create mode 100644 project-dictionary.txt delete mode 100644 scripts/generate-preview.ts delete mode 100644 scripts/tsconfig.json create mode 100644 scripts/typegen.ts delete mode 100644 src/builtin/deprecated.ts delete mode 100644 src/builtin/index.ts delete mode 100644 src/builtin/layout+formatting.ts delete mode 100644 src/builtin/possible-problems.ts delete mode 100644 src/builtin/suggestions.ts delete mode 100644 src/common/files.ts delete mode 100644 src/common/merge-configs.ts create mode 100644 src/configs/comments.ts delete mode 100644 src/configs/common-overrides.ts create mode 100644 src/configs/formatters.ts create mode 100644 src/configs/functional.ts create mode 100644 src/configs/ignores.ts create mode 100644 src/configs/imports.ts create mode 100644 src/configs/index.ts create mode 100644 src/configs/javascript.ts create mode 100644 src/configs/jsdoc.ts create mode 100644 src/configs/jsonc.ts create mode 100644 src/configs/markdown.ts delete mode 100644 src/configs/modern.ts create mode 100644 src/configs/node.ts delete mode 100644 src/configs/script.ts create mode 100644 src/configs/sort.ts create mode 100644 src/configs/stylistic.ts create mode 100644 src/configs/toml.ts create mode 100644 src/configs/unicorn.ts create mode 100644 src/configs/unocss.ts create mode 100644 src/configs/vue.ts create mode 100644 src/configs/yaml.ts create mode 100644 src/factory.ts create mode 100644 src/globs.ts create mode 100644 src/index.ts delete mode 100644 src/plugins/eslint-comments.ts delete mode 100644 src/plugins/functional.ts delete mode 100644 src/plugins/import.ts delete mode 100644 src/plugins/jsdoc.ts delete mode 100644 src/plugins/markdown.ts delete mode 100644 src/plugins/node.ts delete mode 100644 src/plugins/optimize-regex.ts delete mode 100644 src/plugins/promise.ts delete mode 100644 src/plugins/sonarjs.ts delete mode 100644 src/plugins/typescript.ts delete mode 100644 src/plugins/unicorn.ts create mode 100644 src/types.ts create mode 100644 src/utils.ts create mode 100644 tsconfig.eslint.json diff --git a/.commitlintrc.cjs b/.commitlintrc.cjs index 450a0353b..3000575b4 100644 --- a/.commitlintrc.cjs +++ b/.commitlintrc.cjs @@ -2,7 +2,7 @@ module.exports = { extends: ["@commitlint/config-conventional"], parserPreset: { parserOpts: { - headerPattern: /^(\w*)(?:\((.*)\))?!?: (.*)$/, + headerPattern: /^(\w*)(?:\((.*)\))?!?: (.*)$/u, }, }, }; diff --git a/.cspell.json b/.cspell.json deleted file mode 100644 index 5d88e1d81..000000000 --- a/.cspell.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "version": "0.2", - "language": "en", - "ignorePaths": [ - ".github/workflows/**", - "**/*.json", - "**/*.jsonc", - "**/CHANGELOG.md", - "**/dist/**", - "**/node_modules/**", - "pnpm-lock.yaml" - ], - "dictionaries": [ - "en_US", - "filetypes", - "misc", - "node", - "npm", - "softwareTerms", - "typescript" - ], - "import": ["./node_modules/@cspell/dict-cryptocurrencies/cspell-ext.json"], - "ignoreRegExpList": [ - "/[^\\s@]+@([^\\s@]+\\.)+[^\\s@]{2,4}/", - "/\\b[A-Fa-f0-9]{6}\\b/", - "/\\b[A-Za-z0-9]{32,}\\b/", - "// @ts-.*", - "/\\STS\\S+/", - "/`[^`]*`/", - "/``[\\w\\W]*?``/", - "/```[\\w\\W]*?```/", - "/~~~[\\w\\W]*?~~~/", - "\\(#.+?\\)" - ], - "words": [ - "bar", - "baz", - "cjsx", - "corge", - "ctsx", - "foo", - "fred", - "garply", - "grault", - "litecoin", - "mjsx", - "monero", - "mtsx", - "noreply", - "plugh", - "quux", - "qux", - "Rebecca", - "rebeccastevens", - "sonarjs", - "thud", - "waldo", - "xyzzy" - ], - "overrides": [ - { - "filename": "**/*.{ts,js}", - "ignoreRegExpList": ["/@[a-z]+/", "/#(end)?region/"], - "includeRegExpList": [ - "/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/", - "/(\\/\\/[^\\n\\r]*[\\n\\r]+)/" - ] - } - ] -} diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index a218275d1..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "root": true, - "env": { - "node": true - }, - "plugins": ["prettier"], - "extends": [ - "@rebeccastevens/eslint-config/modern", - "@rebeccastevens/eslint-config/typescript", - "@rebeccastevens/eslint-config/common-overrides", - "plugin:prettier/recommended", - "prettier" - ], - "parserOptions": { - "project": ["./tsconfig.json"] - }, - "ignorePatterns": ["/dist/"], - "rules": { - "functional/no-throw-statements": "off" - }, - "overrides": [ - { - "files": ["src/**/*.{ts,js}"], - "rules": { - "sonarjs/no-duplicate-string": "off" - } - } - ] -} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 969e4451d..fdf3aba65 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,3 @@ +issuehunt: RebeccaStevens/eslint-config-rebeccastevens ko_fi: rebeccastevens custom: https://github.com/RebeccaStevens/eslint-config-rebeccastevens/blob/main/DONATIONS.md diff --git a/.github/actions/prepare/action.yml b/.github/actions/prepare/action.yml index 527ad4bce..e82c7c7ae 100644 --- a/.github/actions/prepare/action.yml +++ b/.github/actions/prepare/action.yml @@ -5,10 +5,10 @@ inputs: node-version: required: false description: "`node-version` passed to `actions/setup-node`." - default: v20 + default: latest runs: - using: "composite" + using: composite steps: - name: Configure Git run: | @@ -16,9 +16,9 @@ runs: git config --global user.name ${GITHUB_ACTOR} shell: bash - uses: pnpm/action-setup@v2 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: ${{ inputs.node-version }} - cache: "pnpm" + cache: pnpm - run: pnpm install --frozen-lockfile --ignore-scripts shell: bash diff --git a/.github/codecov.yml b/.github/codecov.yml new file mode 100644 index 000000000..bfdc9877d --- /dev/null +++ b/.github/codecov.yml @@ -0,0 +1,8 @@ +coverage: + status: + project: + default: + informational: true + patch: + default: + informational: true diff --git a/.github/labels.yml b/.github/labels.yml index f2090a35d..f4789c5db 100644 --- a/.github/labels.yml +++ b/.github/labels.yml @@ -1,7 +1,7 @@ # Priority labels - name: "Priority: Critical" color: ee0701 - description: "This should be dealt with ASAP. Not fixing this issue would be a serious error." + description: This should be dealt with ASAP. Not fixing this issue would be a serious error. - name: "Priority: High" color: b60205 description: "After critical issues are fixed, these should be dealt with before any further issues." @@ -15,10 +15,10 @@ # Type labels - name: "Type: Bug" color: ee0701 - description: "Inconsistencies or issues which will cause a problem for users or implementors." + description: Inconsistencies or issues which will cause a problem for users or implementors. - name: "Type: Documentation" color: 0052cc - description: "Solely about the documentation of the project." + description: Solely about the documentation of the project. - name: "Type: Enhancement" color: 1d76db description: "Enhancement of the code, not introducing new features." @@ -27,61 +27,61 @@ description: "Marks an idea, which might be accepted and implemented." - name: "Type: Feature" color: 0e8a16 - description: "New features or options." + description: New features or options. - name: "Type: Maintenance" color: 2af79e description: "Generic maintenance tasks, e.g., package updates." # Additional markers -- name: "Security" +- name: Security color: ee0701 - description: "Marks an security issues that needs to be resolved asap." -- name: "Accepted" + description: Marks an security issues that needs to be resolved asap. +- name: Accepted color: c2e0c6 - description: "This issue or PR has been accepted." -- name: "Declined" + description: This issue or PR has been accepted. +- name: Declined color: f9d0c4 - description: "This issue or PR has been declined." -- name: "Breaking Change" + description: This issue or PR has been declined. +- name: Breaking Change color: a80016 - description: "This change will require a new major release." -- name: "Feature Removal" + description: This change will require a new major release. +- name: Feature Removal color: a80016 - description: "A feature is no longer wanted/needed (remove/deprecate it)" + description: A feature is no longer wanted/needed (remove/deprecate it) # Ongoing Status labels - name: "Status: Triage" color: fbca04 - description: "This issue needs to be triaged." + description: This issue needs to be triaged. - name: "Status: Investigation Needed" color: fef2c0 - description: "Issue need to be investigated further." + description: Issue need to be investigated further. - name: "Status: On Hold" color: cccccc - description: "Issue or PR that has been placed on hold for now." + description: Issue or PR that has been placed on hold for now. - name: "Status: In Progress" color: fbca04 - description: "Issue is currently being resolved by a developer." + description: Issue is currently being resolved by a developer. - name: "Status: Stale" color: fef2c0 - description: "There has not been activity on this issue or PR for quite some time." + description: There has not been activity on this issue or PR for quite some time. - name: "Status: Awaiting Response" color: fef2c0 - description: "Issue or PR awaits response from the creator." + description: Issue or PR awaits response from the creator. - name: "Status: Awaiting Feedback" color: fef2c0 - description: "Issue or PR awaits feedback from the community." + description: Issue or PR awaits feedback from the community. - name: "Status: Blocked" color: fef2c0 - description: "Progress on this issue is currently not possible." + description: Progress on this issue is currently not possible. # Resolution Status labels - name: "Resolution: By Design" color: e6e6e6 - description: "The behavior reported in the issue is actually correct." + description: The behavior reported in the issue is actually correct. - name: "Resolution: Duplicate" color: e6e6e6 - description: "This issue or pull request already exists" + description: This issue or pull request already exists - name: "Resolution: External" color: e6e6e6 description: "It was a real bug, but not in the code in this repo." @@ -90,24 +90,27 @@ description: "" - name: "Resolution: Not Applicable" color: e6e6e6 - description: "The issue is not relevant to code in this repo and is not an external issue. (Out of scope)" + description: The issue is not relevant to code in this repo and is not an external issue. (Out of scope) - name: "Resolution: Not Reproducible" color: e6e6e6 - description: "The bug could not be reproduced." + description: The bug could not be reproduced. - name: "Resolution: Won't Fix" color: e6e6e6 description: "A real bug or issue, but the issue is not impactful enough to spend time on." - name: "Resolution: Fixed" color: c2e0c6 - description: "The issue has been fixed." + description: The issue has been fixed. - name: "Resolution: Added" color: c2e0c6 - description: "This has been added to the project." + description: This has been added to the project. # Bots - name: ":blue_heart:" color: ffffff - description: "Renovate" + description: Renovate - name: "Status: Released" color: c2e0c6 description: "It's now live." +- name: "Status: Beta Released" + color: fef2c0 + description: "It's now live." diff --git a/.github/renovate.json b/.github/renovate.json index 494255842..66be8d19e 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -1,54 +1,56 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "automergeStrategy": "rebase", "extends": [ - ":ignoreModulesAndTests", - "group:monorepos", - "group:recommended", ":automergeAll", ":automergePr", - ":semanticCommits", - ":prHourlyLimitNone", + ":ignoreModulesAndTests", ":prConcurrentLimitNone", + ":prHourlyLimitNone", + ":semanticCommits", + "group:allNonMajor", + "group:monorepos", + "group:recommended", "helpers:disableTypesNodeMajor", - "workarounds:typesNodeVersioning", - "schedule:weekly" + "replacements:all", + "schedule:monthly", + "workarounds:all" ], "labels": ["Type: Maintenance", ":blue_heart:"], - "automergeStrategy": "rebase", - "postUpdateOptions": ["pnpmDedupe"], "packageRules": [ { - "matchManagers": ["npm"], + "major": { + "semanticCommitType": "build" + }, "matchDepTypes": ["dependencies"], + "matchManagers": ["npm"], "rangeStrategy": "update-lockfile", - "semanticCommitType": "chore", "semanticCommitScope": "deps", - "major": { - "semanticCommitType": "build" - } + "semanticCommitType": "chore" }, { - "matchManagers": ["npm"], "matchDepTypes": ["devDependencies"], + "matchManagers": ["npm"], "rangeStrategy": "pin", - "semanticCommitType": "chore", - "semanticCommitScope": "dev-deps" + "semanticCommitScope": "dev-deps", + "semanticCommitType": "chore" }, { - "matchManagers": ["npm"], + "major": { + "semanticCommitType": "build" + }, "matchDepTypes": ["peerDependencies"], + "matchManagers": ["npm"], "rangeStrategy": "widen", - "semanticCommitType": "chore", "semanticCommitScope": "peer-deps", - "major": { - "semanticCommitType": "build" - } + "semanticCommitType": "chore" }, { "matchManagers": ["github-actions"], "rangeStrategy": "replace", - "semanticCommitType": "ci", - "semanticCommitScope": "dev-deps" + "semanticCommitScope": "dev-deps", + "semanticCommitType": "ci" } - ] + ], + "postUpdateOptions": ["pnpmDedupe"] } diff --git a/.github/workflows/accessibility-alt-text-bot.yml b/.github/workflows/accessibility-alt-text-bot.yml new file mode 100644 index 000000000..7db3761d1 --- /dev/null +++ b/.github/workflows/accessibility-alt-text-bot.yml @@ -0,0 +1,26 @@ +name: Accessibility Alt Text Bot + +on: + issue_comment: + types: + - created + - edited + issues: + types: + - edited + - opened + pull_request: + types: + - edited + - opened + +permissions: + issues: write + pull-requests: write + +jobs: + accessibility_alt_text_bot: + if: ${{ !endsWith(github.actor, '[bot]') }} + runs-on: ubuntu-latest + steps: + - uses: github/accessibility-alt-text-bot@v1.4.0 diff --git a/.github/workflows/build-node.yml b/.github/workflows/build-node.yml index d699ad38f..d670bbf54 100644 --- a/.github/workflows/build-node.yml +++ b/.github/workflows/build-node.yml @@ -9,6 +9,6 @@ jobs: build_node: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/prepare - run: pnpm run build:node diff --git a/.github/workflows/done-label.yml b/.github/workflows/done-label.yml index be14dc73b..4471bc630 100644 --- a/.github/workflows/done-label.yml +++ b/.github/workflows/done-label.yml @@ -7,7 +7,7 @@ on: jobs: run: - name: "Update Labels" + name: Update Labels runs-on: ubuntu-latest steps: - uses: RebeccaStevens/issue-closed-labeler-action@v1 diff --git a/.github/workflows/lint-js.yml b/.github/workflows/lint-js.yml index 430f9cfb9..e1f667057 100644 --- a/.github/workflows/lint-js.yml +++ b/.github/workflows/lint-js.yml @@ -9,6 +9,6 @@ jobs: lint_js: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/prepare - run: pnpm run lint:js diff --git a/.github/workflows/lint-knip-dev.yml b/.github/workflows/lint-knip-dev.yml index de4bc1c3d..94d5a4b5e 100644 --- a/.github/workflows/lint-knip-dev.yml +++ b/.github/workflows/lint-knip-dev.yml @@ -9,6 +9,6 @@ jobs: lint_knip_dev: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/prepare - run: pnpm run lint:knip:development diff --git a/.github/workflows/lint-knip-prod.yml b/.github/workflows/lint-knip-prod.yml index 70c86902e..8c707e922 100644 --- a/.github/workflows/lint-knip-prod.yml +++ b/.github/workflows/lint-knip-prod.yml @@ -9,6 +9,6 @@ jobs: lint_knip_prod: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/prepare - run: pnpm run lint:knip:production diff --git a/.github/workflows/lint-markdown.yml b/.github/workflows/lint-markdown.yml index 278f375b5..cfbd02ab2 100644 --- a/.github/workflows/lint-markdown.yml +++ b/.github/workflows/lint-markdown.yml @@ -9,6 +9,6 @@ jobs: lint_markdown: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/prepare - run: pnpm run lint:md diff --git a/.github/workflows/build.yml b/.github/workflows/lint-packages.yml similarity index 57% rename from .github/workflows/build.yml rename to .github/workflows/lint-packages.yml index 088a302a5..9a21e8f15 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/lint-packages.yml @@ -1,4 +1,4 @@ -name: Build +name: Lint Packages on: pull_request: @@ -6,9 +6,9 @@ on: workflow_call: jobs: - build: + lint_packages: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/prepare - - run: pnpm run build + - run: pnpm run lint:packages diff --git a/.github/workflows/lint-prettier.yml b/.github/workflows/lint-prettier.yml index c666f1e1e..63f9b4fa7 100644 --- a/.github/workflows/lint-prettier.yml +++ b/.github/workflows/lint-prettier.yml @@ -9,6 +9,6 @@ jobs: lint_prettier: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/prepare - run: pnpm run lint:prettier diff --git a/.github/workflows/lint-spelling.yml b/.github/workflows/lint-spelling.yml index e877d46d8..d54881b9c 100644 --- a/.github/workflows/lint-spelling.yml +++ b/.github/workflows/lint-spelling.yml @@ -9,6 +9,6 @@ jobs: lint_spelling: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/prepare - run: pnpm run lint:spelling diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 59f7147cc..5d4697ca8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,28 +17,34 @@ concurrency: jobs: lint_js: uses: ./.github/workflows/lint-js.yml + lint_knip_dev: + uses: ./.github/workflows/lint-knip-dev.yml lint_knip_prod: uses: ./.github/workflows/lint-knip-prod.yml lint_markdown: uses: ./.github/workflows/lint-markdown.yml - lint_spelling: - uses: ./.github/workflows/lint-spelling.yml + lint_packages: + uses: ./.github/workflows/lint-packages.yml lint_prettier: uses: ./.github/workflows/lint-prettier.yml + lint_spelling: + uses: ./.github/workflows/lint-spelling.yml type_check: uses: ./.github/workflows/type-check.yml release: needs: - lint_js + - lint_knip_dev - lint_knip_prod - lint_markdown - - lint_spelling + - lint_packages - lint_prettier + - lint_spelling - type_check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/semantic-pr.yml b/.github/workflows/semantic-pr.yml index ba4e89a86..a4229ee87 100644 --- a/.github/workflows/semantic-pr.yml +++ b/.github/workflows/semantic-pr.yml @@ -1,4 +1,4 @@ -name: "Semantic PR" +name: Semantic PR on: pull_request_target: @@ -12,6 +12,6 @@ jobs: name: Validate PR title runs-on: ubuntu-latest steps: - - uses: amannn/action-semantic-pull-request@v5.2.0 + - uses: amannn/action-semantic-pull-request@v5.4.0 env: GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index de1b6569a..cdb1fd08c 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,4 +1,4 @@ -name: "Close stale issues and PRs" +name: Close stale issues and PRs on: schedule: @@ -9,7 +9,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@v8 + - uses: actions/stale@v9 with: days-before-issue-stale: 60 days-before-issue-close: 7 @@ -22,6 +22,6 @@ jobs: stale-issue-label: "Status: Stale" stale-pr-label: "Status: Stale" - stale-issue-message: "This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days." - close-issue-message: "This issue was closed because it has been stalled for 7 days with no activity." - stale-pr-message: "This PR is stale because it has been open 60 days with no activity." + stale-issue-message: This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days. + close-issue-message: This issue was closed because it has been stalled for 7 days with no activity. + stale-pr-message: This PR is stale because it has been open 60 days with no activity. diff --git a/.github/workflows/sync-labels.yml b/.github/workflows/sync-labels.yml index 2d312b982..4ac0ddab3 100644 --- a/.github/workflows/sync-labels.yml +++ b/.github/workflows/sync-labels.yml @@ -8,17 +8,12 @@ on: - .github/labels.yml workflow_dispatch: -permissions: - pull-requests: write - jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: micnncim/action-label-syncer@v1 - with: - manifest: .github/labels.yml env: GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/type-check.yml b/.github/workflows/type-check.yml index d6cba21c8..a3edaaf0c 100644 --- a/.github/workflows/type-check.yml +++ b/.github/workflows/type-check.yml @@ -9,6 +9,6 @@ jobs: type-check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/prepare - run: pnpm run type-check diff --git a/.gitignore b/.gitignore index 01f09d670..383744e88 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ node_modules/ +/coverage/ /dist/ -/.eslintrc.preview.json +/src/typegen.d.ts *.log diff --git a/.husky/commit-msg b/.husky/commit-msg index 61681a81f..6a2e4c842 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - pnpm exec commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit index 5e5927356..5ee7abd87 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - pnpm exec lint-staged diff --git a/.lintstagedrc.yml b/.lintstagedrc.yml index a024f9980..b04d48eea 100644 --- a/.lintstagedrc.yml +++ b/.lintstagedrc.yml @@ -1,12 +1,17 @@ "*.{json,yml}": - prettier --ignore-unknown --write + - cspell lint --no-progress --show-suggestions --show-context --no-must-find-files --dot "*.ts": - prettier --ignore-unknown --write - eslint --fix - - cspell + - cspell lint --no-progress --show-suggestions --show-context --no-must-find-files --dot + - tsc-files -p tsconfig.build.json --noEmit "*.md": - prettier --ignore-unknown --write - markdownlint --config=.markdownlint.json --ignore-path=.markdownlintignore - - cspell + - cspell lint --no-progress --show-suggestions --show-context --no-must-find-files --dot + +pnpm-lock.yaml: + - "pnpm dedupe && :" diff --git a/.markdownlint.json b/.markdownlint.json index bfaa9566f..8a5e46565 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,102 +1,297 @@ { "default": false, + "extends": "markdownlint/style/prettier", - // MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time + // MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md001.md "MD001": true, - // MD003/heading-style/header-style - Heading style - "MD003": { "style": "atx" }, - // MD004/ul-style - Unordered list style - "MD004": { "style": "dash" }, - // MD005/list-indent - Inconsistent indentation for list items at the same level + + // MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md003.md + "MD003": { + // Heading style + "style": "atx" + }, + + // MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md004.md + "MD004": { + // List style + "style": "dash" + }, + + // MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md005.md "MD005": true, - // MD007/ul-indent - Unordered list indentation - "MD007": true, - // MD009/no-trailing-spaces - Trailing spaces - "MD009": true, - // MD010/no-hard-tabs - Hard tabs - "MD010": true, - // MD011/no-reversed-links - Reversed link syntax + + // MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md007.md + "MD007": { + // Spaces for indent + "indent": 2, + // Whether to indent the first level of the list + "start_indented": false, + // Spaces for first level indent (when start_indented is set) + "start_indent": 2 + }, + + // MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md009.md + "MD009": { + // Spaces for line break - 0 to disable + "br_spaces": 0, + // Allow spaces for empty lines in list items + "list_item_empty_lines": false, + // Include unnecessary breaks + "strict": false + }, + + // MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md010.md + "MD010": { + // Include code blocks + "code_blocks": true, + // Fenced code languages to ignore + "ignore_code_languages": [], + // Number of spaces for each hard tab + "spaces_per_tab": 2 + }, + + // MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md011.md "MD011": true, - // MD012/no-multiple-blanks - Multiple consecutive blank lines - "MD012": true, - // MD013/line-length - Line length - "MD013": { "line_length": 99999 }, // no line length - // MD014/commands-show-output - Dollar signs used before commands without showing output - "MD014": false, - // MD018/no-missing-space-atx - No space after hash on atx style heading + + // MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md012.md + "MD012": { + // Consecutive blank lines + "maximum": 1 + }, + + // MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md013.md + "MD013": { + // Number of characters + "line_length": 160, + // Number of characters for headings + "heading_line_length": 160, + // Number of characters for code blocks + "code_block_line_length": 120, + // Include code blocks + "code_blocks": true, + // Include tables + "tables": false, + // Include headings + "headings": true, + // Strict length checking + "strict": false, + // Stern length checking + "stern": false + }, + + // MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md014.md + // "MD014": true, + + // MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md018.md "MD018": true, - // MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading + + // MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md019.md "MD019": true, - // MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading - // "MD020": false, - // MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading - // "MD021": true, - // MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines - "MD022": true, - // MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line + + // MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md020.md + "MD020": true, + + // MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md021.md + "MD021": true, + + // MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md022.md + "MD022": { + // Blank lines above heading + "lines_above": 1, + // Blank lines below heading + "lines_below": 1 + }, + + // MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md023.md "MD023": true, - // MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content - "MD024": { "siblings_only": true }, - // MD025/single-title/single-h1 - Multiple top level headings in the same document - "MD025": false, - // MD026/no-trailing-punctuation - Trailing punctuation in heading - "MD026": true, - // MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol + + // MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md024.md + "MD024": { + // Only check sibling headings + "siblings_only": true + }, + + // MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md025.md + "MD025": { + // Heading level + "level": 1, + // RegExp for matching title in front matter + "front_matter_title": "^\\s*title\\s*[:=]" + }, + + // MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md026.md + "MD026": { + // Punctuation characters + "punctuation": ".,;:!。,;:!" + }, + + // MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md027.md "MD027": true, - // MD028/no-blanks-blockquote - Blank line inside blockquote + + // MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md028.md "MD028": true, - // MD029/ol-prefix - Ordered list item prefix - "MD029": true, - // MD030/list-marker-space - Spaces after list markers - "MD030": true, - // MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines - "MD031": true, - // MD032/blanks-around-lists - Lists should be surrounded by blank lines + + // MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md + "MD029": { + // List style + "style": "one_or_ordered" + }, + + // MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md030.md + "MD030": { + // Spaces for single-line unordered list items + "ul_single": 1, + // Spaces for single-line ordered list items + "ol_single": 1, + // Spaces for multi-line unordered list items + "ul_multi": 1, + // Spaces for multi-line ordered list items + "ol_multi": 1 + }, + + // MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md031.md + "MD031": { + // Include list items + "list_items": true + }, + + // MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md032.md "MD032": true, - // MD033/no-inline-html - Inline HTML - "MD033": { - "allowed_elements": [ - "br", - "div", - "img", - "sub", - "sup", - "span", - "details", - "summary" - ] - }, - // MD034/no-bare-urls - Bare URL used + + // MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md033.md + // "MD033": { + // // Allowed elements + // "allowed_elements": ["details", "summary", "sub", "sup", "img"] + // }, + + // MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md034.md "MD034": true, - // MD035/hr-style - Horizontal rule style - "MD035": { "style": "---" }, - // MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading - "MD036": true, - // MD037/no-space-in-emphasis - Spaces inside emphasis markers + + // MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md035.md + "MD035": { + // Horizontal rule style + "style": "---" + }, + + // MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md036.md + "MD036": { + // Punctuation characters + "punctuation": ".,;:!?。,;:!?" + }, + + // MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md037.md "MD037": true, - // MD038/no-space-in-code - Spaces inside code span elements + + // MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md038.md "MD038": true, - // MD039/no-space-in-links - Spaces inside link text + + // MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md039.md "MD039": true, - // MD040/fenced-code-language - Fenced code blocks should have a language specified - "MD040": true, - // MD041/first-line-heading/first-line-h1 - First line in file should be a top level heading - "MD041": false, - // MD042/no-empty-links - No empty links + + // MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md040.md + "MD040": { + // List of languages + "allowed_languages": [], + // Require language only + "language_only": false + }, + + // MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md041.md + // "MD041": { + // // Heading level + // "level": 1, + // // RegExp for matching title in front matter + // "front_matter_title": "^\\s*title\\s*[:=]" + // }, + + // MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md042.md "MD042": true, - // MD043/required-headings/required-headers - Required heading structure - "MD043": false, - // MD044/proper-names - Proper names should have the correct capitalization + + // MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md043.md + // "MD043": { + // // List of headings + // "headings": [], + // // Match case of headings + // "match_case": false + // }, + + // MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md044.md // "MD044": { - // "names": ["JavaScript", "TypeScript"], - // "code_blocks": false + // // List of proper names + // "names": [], + // // Include code blocks + // "code_blocks": true, + // // Include HTML elements + // "html_elements": true // }, - // MD045/no-alt-text - Images should have alternate text (alt text) + + // MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md045.md "MD045": true, - // MD046/code-block-style - Code block style - "MD046": { "style": "fenced" }, - // MD047/single-trailing-newline - Files should end with a single newline character + + // MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md046.md + "MD046": { + // Block style + "style": "fenced" + }, + + // MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md047.md "MD047": true, - // MD048/code-fence-style - Code fence style - "MD048": { "style": "backtick" } + + // MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md048.md + "MD048": { + // Code fence style + "style": "backtick" + }, + + // MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md049.md + "MD049": { + // Emphasis style + "style": "underscore" + }, + + // MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md050.md + "MD050": { + // Strong style + "style": "asterisk" + }, + + // MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md051.md + "MD051": true, + + // MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md052.md + "MD052": { + // Include shortcut syntax + "shortcut_syntax": false + }, + + // MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md053.md + "MD053": { + // Ignored definitions + "ignored_definitions": ["//"] + }, + + // MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md054.md + "MD054": { + // Allow autolinks + "autolink": true, + // Allow inline links and images + "inline": true, + // Allow full reference links and images + "full": true, + // Allow collapsed reference links and images + "collapsed": true, + // Allow shortcut reference links and images + "shortcut": true, + // Allow URLs as inline links + "url_inline": true + }, + + // MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md055.md + "MD055": { + // Table pipe style + "style": "leading_and_trailing" + }, + + // MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md056.md + "MD056": true } diff --git a/.markdownlintignore b/.markdownlintignore index e7becf85b..06a1096d5 100644 --- a/.markdownlintignore +++ b/.markdownlintignore @@ -1,2 +1,3 @@ -node_modules +dist/ +node_modules/ CHANGELOG.md diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..7c245e155 --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +save-prefix="" +shamefully-hoist=true +strict-peer-dependencies=false diff --git a/.nvmrc b/.nvmrc index 6d80269a4..2dbbe00e6 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.16.0 +20.11.1 diff --git a/.prettierignore b/.prettierignore index d5e154424..51733ec2a 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,4 @@ -/CHANGELOG.md +/coverage*/ /dist/ -/.eslintrc.preview.json +/CHANGELOG.md /pnpm-lock.yaml diff --git a/.prettierrc.yml b/.prettierrc.yml index 01d3a913c..27b3a5280 100644 --- a/.prettierrc.yml +++ b/.prettierrc.yml @@ -1,7 +1,15 @@ -"$schema": http://json.schemastore.org/prettierrc +$schema: http://json.schemastore.org/prettierrc plugins: - prettier-plugin-packagejson + - prettier-plugin-multiline-arrays -embeddedLanguageFormatting: "off" -quoteProps: "consistent" +trailingComma: all + +overrides: + - files: "*.md" + options: + embeddedLanguageFormatting: off + - files: .nvmrc + options: + parser: yaml diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 17fab0c02..876c534ba 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,9 @@ { "recommendations": [ + "DavidAnson.vscode-markdownlint", "dbaeumer.vscode-eslint", "editorconfig.editorconfig", - "esbenp.prettier-vscode" + "esbenp.prettier-vscode", + "streetsidesoftware.code-spell-checker" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index e222e0741..95f21934c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,26 +1,45 @@ { + "editor.codeActionsOnSave": { + "source.fixAll": "explicit", + "source.fixAll.eslint": "explicit", + "source.formatDocument": "explicit", + "source.organizeImports": "explicit", + "source.sortImports": "explicit" + }, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "editor.formatOnSaveMode": "file", + "editor.rulers": [80], + "eslint.probe": [ + "html", + "javascript", + "javascriptreact", + "json", + "jsonc", + "markdown", + "toml", + "typescript", + "typescriptreact", + "vue", + "yaml" + ], + "files.associations": { + ".markdownlint.json": "jsonc", + ".markdownlintignore": "ignore" + }, + "files.exclude": { + "coverage/": true + }, "files.trimTrailingWhitespace": true, "search.exclude": { "**/.git/": true, + ".nyc_output/": true, ".vscode/": true, "dist/": true, "pnpm-lock.yaml": true }, "typescript.tsdk": "./node_modules/typescript/lib", - "files.associations": { - ".markdownlint.json": "jsonc", - ".markdownlintignore": "ignore" - }, - "[json]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true - }, - "[jsonc]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true - }, - "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true + "[markdown]": { + "editor.rulers": [160] } } diff --git a/LICENSE b/LICENSE index 292b45133..924bbecd2 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2019, Rebecca Stevens +Copyright (c) 2024, Rebecca Stevens All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/README.md b/README.md index eae64b7b5..219acd383 100644 --- a/README.md +++ b/README.md @@ -5,16 +5,19 @@ An [ESLint Shareable Config](https://eslint.org/docs/developer-guide/shareable-configs.html). [![npm version](https://img.shields.io/npm/v/@rebeccastevens/eslint-config.svg)](https://www.npmjs.com/package/@rebeccastevens/eslint-config) -[![CI](https://github.com/RebeccaStevens/template-typescript-node-package/actions/workflows/release.yml/badge.svg)](https://github.com/RebeccaStevens/template-typescript-node-package/actions/workflows/release.yml) +[![CI](https://github.com/RebeccaStevens/eslint-config-rebeccastevens/actions/workflows/release.yml/badge.svg)](https://github.com/RebeccaStevens/eslint-config-rebeccastevens/actions/workflows/release.yml) +[![Coverage Status](https://codecov.io/gh/RebeccaStevens/eslint-config-rebeccastevens/branch/main/graph/badge.svg?token=MVpR1oAbIT)](https://codecov.io/gh/RebeccaStevens/eslint-config-rebeccastevens)\ [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) -[![GitHub Discussions](https://img.shields.io/github/discussions/RebeccaStevens/template-typescript-node-package?style=flat-square)](https://github.com/RebeccaStevens/template-typescript-node-package/discussions) -[![BSD 3 Clause license](https://img.shields.io/github/license/RebeccaStevens/template-typescript-node-package.svg?style=flat-square)](https://opensource.org/licenses/BSD-3-Clause) +[![GitHub Discussions](https://img.shields.io/github/discussions/RebeccaStevens/eslint-config-rebeccastevens?style=flat-square)](https://github.com/RebeccaStevens/eslint-config-rebeccastevens/discussions) +[![BSD 3 Clause license](https://img.shields.io/github/license/RebeccaStevens/eslint-config-rebeccastevens.svg?style=flat-square)](https://opensource.org/licenses/BSD-3-Clause) [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=flat-square)](https://commitizen.github.io/cz-cli/) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square)](https://github.com/semantic-release/semantic-release) -
+## Donate + +[Any donations would be much appreciated](./DONATIONS.md). 😄 ## Installation @@ -32,95 +35,21 @@ Note: This project doesn't strictly follow semantic versioning so be sure to pin ## Usage -### Language - -
- JavaScript (Modern) - -Install Peer Dependencies: +```js +// eslint.config.js +import rsEslint from "@rebeccastevens/eslint-config"; -```sh -pnpm add -D \ - babel-eslint \ - eslint-plugin-eslint-comments \ - eslint-plugin-functional \ - eslint-plugin-import \ - eslint-import-resolver-typescript \ - eslint-plugin-jsdoc \ - eslint-plugin-markdown \ - eslint-plugin-n \ - eslint-plugin-optimize-regex \ - eslint-plugin-promise \ - eslint-plugin-sonarjs \ - eslint-plugin-unicorn -``` - -Configure your project's `.eslintrc.json` file. - -```jsonc -{ - "root": true, - "extends": ["@rebeccastevens/eslint-config/modern"], - "rules": { - // Additional, per-project rules... +export default rsEslint( + { + // general config. }, - "overrides": [ - { - "files": ["**/*.test.ts"], - "rules": {} - } - ] -} -``` - -
- -
- TypeScript - -Install Peer Dependencies: - -```sh -pnpm add -D \ - @typescript-eslint/parser \ - @typescript-eslint/eslint-plugin \ - eslint-plugin-eslint-comments \ - eslint-plugin-functional \ - eslint-plugin-import \ - eslint-import-resolver-typescript \ - eslint-plugin-jsdoc \ - eslint-plugin-markdown \ - eslint-plugin-n \ - eslint-plugin-optimize-regex \ - eslint-plugin-promise \ - eslint-plugin-sonarjs \ - eslint-plugin-unicorn -``` - -Configure your project's `.eslintrc.json` file. - -```jsonc -{ - "root": true, - "parserOptions": { - "project": "tsconfig.json" + { + // project specific config. }, - "extends": [ - "@rebeccastevens/eslint-config/modern", - "@rebeccastevens/eslint-config/typescript" - ], - "rules": { - // Additional, per-project rules... + { + // another project specific config. }, - "overrides": [ - { - "files": ["**/*.test.ts"], - "rules": {} - } - ] -} +); ``` -
- See [ESLint configuration](http://eslint.org/docs/user-guide/configuring) for more information. diff --git a/cspell.config.yml b/cspell.config.yml new file mode 100644 index 000000000..3d86c053f --- /dev/null +++ b/cspell.config.yml @@ -0,0 +1,66 @@ +$schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json +version: "0.2" + +language: en-US + +dictionaryDefinitions: + - name: project-dictionary + path: ./project-dictionary.txt + addWords: true + +allowCompoundWords: true +caseSensitive: false +useGitignore: true + +dictionaries: + - en_US + - bash + - filetypes + - fonts + - html + - misc + - node + - npm + - softwareTerms + - typescript + - project-dictionary + +import: + - "@cspell/dict-cryptocurrencies/cspell-ext.json" + +ignorePaths: + - .eslintrc.json + - .git + - .gitattributes + - .gitignore + - .husky + - .lintstagedrc.yml + - .markdownlint.json + - .npmrc + - .prettierignore + - .prettierrc.yml + - .vscode + - CHANGELOG.md + - coverage + - cspell.config.yml + - dist + - node_modules + - package.json + - patches + - pnpm-lock.yaml + - project-dictionary.txt + +ignoreRegExpList: + - /\b[a-f0-9]{6}\b/ui # ignore hex color codes + - /\b[a-z0-9]{32,}\b/ui # ignore long string of hex characters + - /`[^`]*`/u # ignore things in `...` + - /```[\w\W]*?```/u # ignore things in ```...``` + +overrides: + - filename: "**/*.yml" + ignoreRegExpList: + - /^\s*(?:[a-z0-9]|-|_|\"|')+:/ui # ignore keys + + - filename: ".github/(actions|workflows)/*.yml" + ignoreRegExpList: + - /\b(?:[A-Za-z0-9\-_])+\/(?:[A-Za-z0-9\-_])+@v\d+(?:\.\d+){0,2}\b/ui # ignore action diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..a7613e6e1 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,35 @@ +// @ts-check +import styleMigrate from "@stylistic/eslint-plugin-migrate"; +import JITI from "jiti"; + +const jiti = JITI(import.meta.url); + +/** + * @type {import('./src').default} + */ +const rsEslint = jiti("./src").default; + +export default rsEslint( + { + typescript: { + tsconfig: "./tsconfig.eslint.json", + }, + functional: "lite", + formatters: true, + stylistic: true, + }, + { + rules: { + "jsdoc/require-jsdoc": "off", + }, + }, + { + files: ["src/configs/*.ts"], + plugins: { + "style-migrate": styleMigrate, + }, + rules: { + "style-migrate/migrate": ["error", { namespaceTo: "style" }], + }, + }, +); diff --git a/knip.jsonc b/knip.jsonc index 7d97057aa..0d33870d0 100644 --- a/knip.jsonc +++ b/knip.jsonc @@ -1,21 +1,43 @@ { "$schema": "node_modules/knip/schema-jsonc.json", - "entry": ["src/configs/*.ts!"], - "project": ["src/**/*.ts!"], + "entry": ["src/index.ts!", "tests/**/*.test.ts"], + "project": ["src/**/*.ts!", "tests/**/*.ts"], "ignoreDependencies": [ + "@stylistic/eslint-plugin", "@typescript-eslint/eslint-plugin", "@typescript-eslint/parser", - "eslint", + "@typescript-eslint/utils", + "@unocss/eslint-plugin", + "eslint-config-prettier", + "eslint-flat-config-utils", "eslint-import-resolver-typescript", + "eslint-merge-processors", "eslint-plugin-eslint-comments", + "eslint-plugin-format", "eslint-plugin-functional", "eslint-plugin-import", "eslint-plugin-jsdoc", + "eslint-plugin-jsonc", "eslint-plugin-markdown", "eslint-plugin-n", + "eslint-plugin-no-only-tests", "eslint-plugin-optimize-regex", + "eslint-plugin-perfectionist", + "eslint-plugin-prettier", "eslint-plugin-promise", "eslint-plugin-sonarjs", + "eslint-plugin-toml", "eslint-plugin-unicorn", + "eslint-plugin-vitest", + "eslint-plugin-vue", + "eslint-plugin-yml", + "eslint-processor-vue-blocks", + "jsonc-eslint-parser", + "prettier-plugin-multiline-arrays", + "prettier-plugin-packagejson", + "prettier", + "toml-eslint-parser", + "vue-eslint-parser", + "yaml-eslint-parser", ], } diff --git a/package.json b/package.json index bc8190610..ac64f74a2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "@rebeccastevens/eslint-config", "version": "0.0.0-development", + "private": true, "description": "My ESLint shareable config.", "keywords": [ "eslint config" @@ -9,133 +10,277 @@ "bugs": { "url": "https://github.com/RebeccaStevens/eslint-config-rebeccastevens/issues" }, - "repository": "git@github.com:RebeccaStevens/eslint-config-rebeccastevens.git", + "repository": { + "type": "git", + "url": "git+https://github.com/RebeccaStevens/eslint-config-rebeccastevens" + }, "license": "BSD-3-Clause", "author": { "name": "Rebecca Stevens", "email": "rebecca.stevens@outlook.co.nz" }, + "type": "module", "exports": { - "./common-overrides": { - "import": "./dist/common-overrides.mjs", - "require": "./dist/common-overrides.cjs" - }, - "./modern": { - "import": "./dist/modern.mjs", - "require": "./dist/modern.cjs" - }, - "./script": { - "import": "./dist/script.mjs", - "require": "./dist/script.cjs" - }, - "./test": { - "import": "./dist/test.mjs", - "require": "./dist/test.cjs" - }, - "./typescript": { - "import": "./dist/typescript.mjs", - "require": "./dist/typescript.cjs" + "import": { + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" } }, "files": [ "dist/", "package.json", - "LICENSE", - "README.md" + "LICENSE" ], "scripts": { "build": "pnpm run build:node", - "build:node": "rimraf dist && rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript", + "build:node": "rimraf dist && rollup -c rollup.config.ts --configPlugin rollup-plugin-ts", "cz": "git-cz", - "generate-preview": "ts-node -P scripts/tsconfig.json -r tsconfig-paths/register scripts/generate-preview.ts", - "lint": "pnpm run lint:js && pnpm run lint:md && pnpm run lint:prettier && pnpm run lint:knip && pnpm run lint:spelling", - "lint:js": "pnpm run build && eslint .", - "lint:js-fix": "pnpm run build && eslint . --fix", + "lint": "pnpm run typegen && pnpm run lint:js && pnpm run lint:md && pnpm run lint:prettier && pnpm run lint:knip && pnpm run lint:spelling && pnpm run lint:packages", + "lint-fix": "pnpm run typegen && pnpm run lint:js-fix && pnpm run lint:prettier-fix && pnpm run lint:packages-fix", + "lint:js": "eslint .", + "lint:js-fix": "eslint . --fix", "lint:knip": "pnpm run lint:knip:development && pnpm run lint:knip:production", - "lint:knip:development": "knip --exclude exports", - "lint:knip:production": "knip --production --strict --exclude exports", + "lint:knip:development": "knip --exclude exports,nsExports,types,nsTypes", + "lint:knip:production": "knip --production --strict --exclude exports,nsExports,types,nsTypes", "lint:md": "markdownlint \"**/*.md\" --config=.markdownlint.json --ignore-path=.markdownlintignore", + "lint:packages": "pnpm dedupe --check", + "lint:packages-fix": "pnpm dedupe", "lint:prettier": "prettier \"**/*\" --ignore-unknown --list-different", "lint:prettier-fix": "prettier \"**/*\" --ignore-unknown --write", "lint:spelling": "cspell \"**\" \".github/**/*\"", - "prepare": "husky install", + "prepare": "husky && pnpm run typegen", "release": "semantic-release", - "test": "echo no tests", - "type-check": "tsc --noEmit --skipLibCheck" + "type-check": "pnpm run typegen && tsc --noEmit -p tsconfig.build.json", + "typegen": "tsx scripts/typegen.ts" }, "dependencies": { - "deepmerge-ts": "^5.1.0" + "@antfu/install-pkg": "0.3.1", + "@clack/prompts": "0.7.0", + "globals": "15.0.0", + "local-pkg": "0.5.0" }, "devDependencies": { "@commitlint/cli": "19.2.1", "@commitlint/config-conventional": "19.1.0", "@cspell/dict-cryptocurrencies": "5.0.0", - "@rollup/plugin-commonjs": "25.0.7", - "@rollup/plugin-node-resolve": "15.2.3", - "@rollup/plugin-typescript": "11.1.6", + "@rollup/plugin-replace": "5.0.5", "@semantic-release/changelog": "6.0.3", "@semantic-release/commit-analyzer": "12.0.0", "@semantic-release/git": "10.0.1", "@semantic-release/github": "10.0.2", "@semantic-release/npm": "12.0.0", "@semantic-release/release-notes-generator": "13.0.0", - "@types/eslint": "8.56.6", - "@types/eslint-config-prettier": "6.11.3", - "@types/eslint-plugin-prettier": "3.1.3", - "@types/node": "18.11.9", + "@stylistic/eslint-plugin": "1.7.0", + "@stylistic/eslint-plugin-migrate": "1.7.0", + "@types/node": "20.11.30", "@types/rollup-plugin-auto-external": "2.0.5", - "@typescript-eslint/eslint-plugin": "7.3.1", - "@typescript-eslint/parser": "7.3.1", + "@typescript-eslint/eslint-plugin": "7.4.0", + "@typescript-eslint/parser": "7.4.0", + "@typescript-eslint/utils": "7.4.0", + "@unocss/eslint-plugin": "0.58.7", "commitizen": "4.3.0", "cspell": "8.6.1", "cz-conventional-changelog": "3.3.0", - "eslint": "8.57.0", + "deassert": "1.0.2", + "eslint": "9.0.0-rc.0", "eslint-config-prettier": "9.1.0", + "eslint-flat-config-utils": "0.1.0", "eslint-import-resolver-typescript": "3.6.1", + "eslint-merge-processors": "0.1.0", "eslint-plugin-eslint-comments": "3.2.0", + "eslint-plugin-format": "0.1.0", "eslint-plugin-functional": "6.3.0", "eslint-plugin-import": "2.29.1", "eslint-plugin-jsdoc": "48.2.1", - "eslint-plugin-markdown": "3.0.1", + "eslint-plugin-jsonc": "2.14.1", + "eslint-plugin-markdown": "4.0.1", "eslint-plugin-n": "16.6.2", + "eslint-plugin-no-only-tests": "3.1.0", "eslint-plugin-optimize-regex": "1.2.1", + "eslint-plugin-perfectionist": "2.7.0", "eslint-plugin-prettier": "5.1.3", "eslint-plugin-promise": "6.1.1", "eslint-plugin-sonarjs": "0.24.0", + "eslint-plugin-toml": "0.10.0", "eslint-plugin-unicorn": "51.0.1", + "eslint-plugin-vitest": "0.4.0", + "eslint-plugin-vue": "9.24.0", + "eslint-plugin-yml": "1.13.2", + "eslint-processor-vue-blocks": "0.1.1", + "eslint-typegen": "0.1.3", "husky": "9.0.11", - "knip": "5.5.0", + "jiti": "1.21.0", + "jsonc-eslint-parser": "2.4.0", + "knip": "5.6.1", "lint-staged": "15.2.2", + "markdownlint": "0.34.0", "markdownlint-cli": "0.39.0", "prettier": "3.2.5", + "prettier-plugin-multiline-arrays": "3.0.4", "prettier-plugin-packagejson": "2.4.12", "rimraf": "5.0.5", - "rollup": "4.13.0", + "rollup": "4.13.1", "rollup-plugin-auto-external": "2.0.0", + "rollup-plugin-ts": "3.4.5", "semantic-release": "23.0.6", - "ts-node": "10.9.2", - "tsconfig-paths": "4.2.0", - "tslib": "2.6.2", - "typescript": "5.4.3" + "toml-eslint-parser": "0.9.3", + "tsc-files": "1.1.4", + "tsx": "4.7.1", + "typescript": "5.4.3", + "vue-eslint-parser": "9.4.2", + "yaml-eslint-parser": "1.2.2" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": ">=6.0.0", - "@typescript-eslint/parser": ">=6.0.0", - "eslint": ">=8.24.0", + "@stylistic/eslint-plugin": "*", + "@typescript-eslint/eslint-plugin": "*", + "@typescript-eslint/parser": "*", + "@typescript-eslint/utils": "*", + "@unocss/eslint-plugin": "*", + "eslint": "*", + "eslint-config-prettier": "*", + "eslint-flat-config-utils": "*", "eslint-import-resolver-typescript": "*", + "eslint-merge-processors": "*", "eslint-plugin-eslint-comments": "*", - "eslint-plugin-functional": ">=5.0.0", + "eslint-plugin-format": "*", + "eslint-plugin-functional": "*", "eslint-plugin-import": "*", "eslint-plugin-jsdoc": "*", + "eslint-plugin-jsonc": "*", "eslint-plugin-markdown": "*", "eslint-plugin-n": "*", + "eslint-plugin-no-only-tests": "*", "eslint-plugin-optimize-regex": "*", + "eslint-plugin-perfectionist": "*", + "eslint-plugin-prettier": "*", "eslint-plugin-promise": "*", "eslint-plugin-sonarjs": "*", - "eslint-plugin-unicorn": "*" + "eslint-plugin-toml": "*", + "eslint-plugin-unicorn": "*", + "eslint-plugin-vitest": "*", + "eslint-plugin-vue": "*", + "eslint-plugin-yml": "*", + "eslint-processor-vue-blocks": "*", + "jsonc-eslint-parser": "*", + "prettier": "*", + "prettier-plugin-multiline-arrays": "*", + "prettier-plugin-packagejson": "*", + "toml-eslint-parser": "*", + "vue-eslint-parser": "*", + "yaml-eslint-parser": "*" + }, + "peerDependenciesMeta": { + "@stylistic/eslint-plugin": { + "optional": true + }, + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "@typescript-eslint/parser": { + "optional": true + }, + "@typescript-eslint/utils": { + "optional": true + }, + "@unocss/eslint-plugin": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + }, + "eslint-flat-config-utils": { + "optional": true + }, + "eslint-import-resolver-typescript": { + "optional": true + }, + "eslint-merge-processors": { + "optional": true + }, + "eslint-plugin-eslint-comments": { + "optional": true + }, + "eslint-plugin-format": { + "optional": true + }, + "eslint-plugin-functional": { + "optional": true + }, + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-jsdoc": { + "optional": true + }, + "eslint-plugin-jsonc": { + "optional": true + }, + "eslint-plugin-markdown": { + "optional": true + }, + "eslint-plugin-n": { + "optional": true + }, + "eslint-plugin-no-only-tests": { + "optional": true + }, + "eslint-plugin-optimize-regex": { + "optional": true + }, + "eslint-plugin-perfectionist": { + "optional": true + }, + "eslint-plugin-prettier": { + "optional": true + }, + "eslint-plugin-promise": { + "optional": true + }, + "eslint-plugin-sonarjs": { + "optional": true + }, + "eslint-plugin-toml": { + "optional": true + }, + "eslint-plugin-unicorn": { + "optional": true + }, + "eslint-plugin-vitest": { + "optional": true + }, + "eslint-plugin-vue": { + "optional": true + }, + "eslint-plugin-yml": { + "optional": true + }, + "eslint-processor-vue-blocks": { + "optional": true + }, + "jsonc-eslint-parser": { + "optional": true + }, + "prettier": { + "optional": true + }, + "prettier-plugin-multiline-arrays": { + "optional": true + }, + "prettier-plugin-packagejson": { + "optional": true + }, + "toml-eslint-parser": { + "optional": true + }, + "vue-eslint-parser": { + "optional": true + }, + "yaml-eslint-parser": { + "optional": true + } }, - "packageManager": "pnpm@8.6.2", + "packageManager": "pnpm@8.15.4", "engines": { - "node": ">=18.12.1" + "node": ">=20.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b79387597..c3692b06b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,29 +5,32 @@ settings: excludeLinksFromLockfile: false dependencies: - deepmerge-ts: - specifier: ^5.1.0 - version: 5.1.0 + '@antfu/install-pkg': + specifier: 0.3.1 + version: 0.3.1 + '@clack/prompts': + specifier: 0.7.0 + version: 0.7.0 + globals: + specifier: 15.0.0 + version: 15.0.0 + local-pkg: + specifier: 0.5.0 + version: 0.5.0 devDependencies: '@commitlint/cli': specifier: 19.2.1 - version: 19.2.1(@types/node@18.11.9)(typescript@5.4.3) + version: 19.2.1(@types/node@20.11.30)(typescript@5.4.3) '@commitlint/config-conventional': specifier: 19.1.0 version: 19.1.0 '@cspell/dict-cryptocurrencies': specifier: 5.0.0 version: 5.0.0 - '@rollup/plugin-commonjs': - specifier: 25.0.7 - version: 25.0.7(rollup@4.13.0) - '@rollup/plugin-node-resolve': - specifier: 15.2.3 - version: 15.2.3(rollup@4.13.0) - '@rollup/plugin-typescript': - specifier: 11.1.6 - version: 11.1.6(rollup@4.13.0)(tslib@2.6.2)(typescript@5.4.3) + '@rollup/plugin-replace': + specifier: 5.0.5 + version: 5.0.5(rollup@4.13.1) '@semantic-release/changelog': specifier: 6.0.3 version: 6.0.3(semantic-release@23.0.6) @@ -46,93 +49,147 @@ devDependencies: '@semantic-release/release-notes-generator': specifier: 13.0.0 version: 13.0.0(semantic-release@23.0.6) - '@types/eslint': - specifier: 8.56.6 - version: 8.56.6 - '@types/eslint-config-prettier': - specifier: 6.11.3 - version: 6.11.3 - '@types/eslint-plugin-prettier': - specifier: 3.1.3 - version: 3.1.3 + '@stylistic/eslint-plugin': + specifier: 1.7.0 + version: 1.7.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + '@stylistic/eslint-plugin-migrate': + specifier: 1.7.0 + version: 1.7.0(eslint@9.0.0-rc.0)(typescript@5.4.3) '@types/node': - specifier: 18.11.9 - version: 18.11.9 + specifier: 20.11.30 + version: 20.11.30 '@types/rollup-plugin-auto-external': specifier: 2.0.5 version: 2.0.5 '@typescript-eslint/eslint-plugin': - specifier: 7.3.1 - version: 7.3.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0)(typescript@5.4.3) + specifier: 7.4.0 + version: 7.4.0(@typescript-eslint/parser@7.4.0)(eslint@9.0.0-rc.0)(typescript@5.4.3) '@typescript-eslint/parser': - specifier: 7.3.1 - version: 7.3.1(eslint@8.57.0)(typescript@5.4.3) + specifier: 7.4.0 + version: 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + '@typescript-eslint/utils': + specifier: 7.4.0 + version: 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + '@unocss/eslint-plugin': + specifier: 0.58.7 + version: 0.58.7(eslint@9.0.0-rc.0)(typescript@5.4.3) commitizen: specifier: 4.3.0 - version: 4.3.0(@types/node@18.11.9)(typescript@5.4.3) + version: 4.3.0(@types/node@20.11.30)(typescript@5.4.3) cspell: specifier: 8.6.1 version: 8.6.1 cz-conventional-changelog: specifier: 3.3.0 - version: 3.3.0(@types/node@18.11.9)(typescript@5.4.3) + version: 3.3.0(@types/node@20.11.30)(typescript@5.4.3) + deassert: + specifier: 1.0.2 + version: 1.0.2(rollup@4.13.1) eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 9.0.0-rc.0 + version: 9.0.0-rc.0 eslint-config-prettier: specifier: 9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@9.0.0-rc.0) + eslint-flat-config-utils: + specifier: 0.1.0 + version: 0.1.0 eslint-import-resolver-typescript: specifier: 3.6.1 - version: 3.6.1(@typescript-eslint/parser@7.3.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + version: 3.6.1(@typescript-eslint/parser@7.4.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0-rc.0) + eslint-merge-processors: + specifier: 0.1.0 + version: 0.1.0(eslint@9.0.0-rc.0) eslint-plugin-eslint-comments: specifier: 3.2.0 - version: 3.2.0(eslint@8.57.0) + version: 3.2.0(eslint@9.0.0-rc.0) + eslint-plugin-format: + specifier: 0.1.0 + version: 0.1.0(eslint@9.0.0-rc.0) eslint-plugin-functional: specifier: 6.3.0 - version: 6.3.0(eslint@8.57.0)(typescript@5.4.3) + version: 6.3.0(eslint@9.0.0-rc.0)(typescript@5.4.3) eslint-plugin-import: specifier: 2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.3.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0-rc.0) eslint-plugin-jsdoc: specifier: 48.2.1 - version: 48.2.1(eslint@8.57.0) + version: 48.2.1(eslint@9.0.0-rc.0) + eslint-plugin-jsonc: + specifier: 2.14.1 + version: 2.14.1(eslint@9.0.0-rc.0) eslint-plugin-markdown: - specifier: 3.0.1 - version: 3.0.1(eslint@8.57.0) + specifier: 4.0.1 + version: 4.0.1(eslint@9.0.0-rc.0) eslint-plugin-n: specifier: 16.6.2 - version: 16.6.2(eslint@8.57.0) + version: 16.6.2(eslint@9.0.0-rc.0) + eslint-plugin-no-only-tests: + specifier: 3.1.0 + version: 3.1.0 eslint-plugin-optimize-regex: specifier: 1.2.1 version: 1.2.1 + eslint-plugin-perfectionist: + specifier: 2.7.0 + version: 2.7.0(eslint@9.0.0-rc.0)(typescript@5.4.3)(vue-eslint-parser@9.4.2) eslint-plugin-prettier: specifier: 5.1.3 - version: 5.1.3(@types/eslint@8.56.6)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) + version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@9.0.0-rc.0)(prettier@3.2.5) eslint-plugin-promise: specifier: 6.1.1 - version: 6.1.1(eslint@8.57.0) + version: 6.1.1(eslint@9.0.0-rc.0) eslint-plugin-sonarjs: specifier: 0.24.0 - version: 0.24.0(eslint@8.57.0) + version: 0.24.0(eslint@9.0.0-rc.0) + eslint-plugin-toml: + specifier: 0.10.0 + version: 0.10.0(eslint@9.0.0-rc.0) eslint-plugin-unicorn: specifier: 51.0.1 - version: 51.0.1(eslint@8.57.0) + version: 51.0.1(eslint@9.0.0-rc.0) + eslint-plugin-vitest: + specifier: 0.4.0 + version: 0.4.0(@typescript-eslint/eslint-plugin@7.4.0)(eslint@9.0.0-rc.0)(typescript@5.4.3) + eslint-plugin-vue: + specifier: 9.24.0 + version: 9.24.0(eslint@9.0.0-rc.0) + eslint-plugin-yml: + specifier: 1.13.2 + version: 1.13.2(eslint@9.0.0-rc.0) + eslint-processor-vue-blocks: + specifier: 0.1.1 + version: 0.1.1(@vue/compiler-sfc@3.4.21)(eslint@9.0.0-rc.0) + eslint-typegen: + specifier: 0.1.3 + version: 0.1.3 husky: specifier: 9.0.11 version: 9.0.11 + jiti: + specifier: 1.21.0 + version: 1.21.0 + jsonc-eslint-parser: + specifier: 2.4.0 + version: 2.4.0 knip: - specifier: 5.5.0 - version: 5.5.0(@types/node@18.11.9)(typescript@5.4.3) + specifier: 5.6.1 + version: 5.6.1(@types/node@20.11.30)(typescript@5.4.3) lint-staged: specifier: 15.2.2 version: 15.2.2 + markdownlint: + specifier: 0.34.0 + version: 0.34.0 markdownlint-cli: specifier: 0.39.0 version: 0.39.0 prettier: specifier: 3.2.5 version: 3.2.5 + prettier-plugin-multiline-arrays: + specifier: 3.0.4 + version: 3.0.4(prettier@3.2.5) prettier-plugin-packagejson: specifier: 2.4.12 version: 2.4.12(prettier@3.2.5) @@ -140,26 +197,35 @@ devDependencies: specifier: 5.0.5 version: 5.0.5 rollup: - specifier: 4.13.0 - version: 4.13.0 + specifier: 4.13.1 + version: 4.13.1 rollup-plugin-auto-external: specifier: 2.0.0 - version: 2.0.0(rollup@4.13.0) + version: 2.0.0(rollup@4.13.1) + rollup-plugin-ts: + specifier: 3.4.5 + version: 3.4.5(rollup@4.13.1)(typescript@5.4.3) semantic-release: specifier: 23.0.6 version: 23.0.6(typescript@5.4.3) - ts-node: - specifier: 10.9.2 - version: 10.9.2(@types/node@18.11.9)(typescript@5.4.3) - tsconfig-paths: - specifier: 4.2.0 - version: 4.2.0 - tslib: - specifier: 2.6.2 - version: 2.6.2 + toml-eslint-parser: + specifier: 0.9.3 + version: 0.9.3 + tsc-files: + specifier: 1.1.4 + version: 1.1.4(typescript@5.4.3) + tsx: + specifier: 4.7.1 + version: 4.7.1 typescript: specifier: 5.4.3 version: 5.4.3 + vue-eslint-parser: + specifier: 9.4.2 + version: 9.4.2(eslint@9.0.0-rc.0) + yaml-eslint-parser: + specifier: 1.2.2 + version: 1.2.2 packages: @@ -168,19 +234,43 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@babel/code-frame@7.22.5: - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} - engines: {node: '>=6.9.0'} + /@antfu/install-pkg@0.3.1: + resolution: {integrity: sha512-A3zWY9VeTPnxlMiZtsGHw2lSd3ghwvL8s9RiGOtqvDxhhFfZ781ynsGBa/iUnDJ5zBrmTFQrJDud3TGgRISaxw==} + dependencies: + execa: 8.0.1 + dev: false + + /@antfu/utils@0.7.7: + resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==} + dev: true + + /@augment-vir/common@23.4.0: + resolution: {integrity: sha512-QIrJ1doD00TNbOzeVrk9KgPTzRlIjayxERnhtbQjK/AFPj5yElcB03GbnGdQZPzws/R+5gfMM5cZiH7QyBP+Kg==} + dependencies: + browser-or-node: 2.1.1 + run-time-assertions: 1.1.0 + type-fest: 4.14.0 + dev: true + + /@augment-vir/common@26.1.0: + resolution: {integrity: sha512-sXZwtDtRQp/us/6Y/Fc5Tl2ZoWrMinlgGinvuDbx0+BNxcMqyH1N8S+tigYYXlqo0xCMHDTbwIYMcbMB7DnD+Q==} dependencies: - '@babel/highlight': 7.22.5 + browser-or-node: 2.1.1 + run-time-assertions: 1.1.0 + type-fest: 4.14.0 dev: true - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.2 - picocolors: 1.0.0 + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} dev: true /@babel/helper-validator-identifier@7.22.20: @@ -188,25 +278,60 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} + requiresBuild: true dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 dev: true - /@babel/highlight@7.24.2: - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + /@babel/parser@7.24.1: + resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} dependencies: + '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.0 + to-fast-properties: 2.0.0 dev: true + /@bcherny/json-schema-ref-parser@10.0.5-fork: + resolution: {integrity: sha512-E/jKbPoca1tfUPj3iSbitDZTGnq6FUFjkH6L8U2oDwSuwK1WhnnVtCG7oFOTg/DDnyoXbQYUiUiGOibHqaGVnw==} + engines: {node: '>= 16'} + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + call-me-maybe: 1.0.2 + js-yaml: 4.1.0 + dev: true + + /@clack/core@0.3.4: + resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==} + dependencies: + picocolors: 1.0.0 + sisteransi: 1.0.5 + dev: false + + /@clack/prompts@0.7.0: + resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} + dependencies: + '@clack/core': 0.3.4 + picocolors: 1.0.0 + sisteransi: 1.0.5 + dev: false + bundledDependencies: + - is-unicode-supported + /@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -214,18 +339,18 @@ packages: dev: true optional: true - /@commitlint/cli@19.2.1(@types/node@18.11.9)(typescript@5.4.3): + /@commitlint/cli@19.2.1(@types/node@20.11.30)(typescript@5.4.3): resolution: {integrity: sha512-cbkYUJsLqRomccNxvoJTyv5yn0bSy05BBizVyIcLACkRbVUqYorC351Diw/XFSWC/GtpwiwT2eOvQgFZa374bg==} engines: {node: '>=v18'} hasBin: true dependencies: '@commitlint/format': 19.0.3 '@commitlint/lint': 19.1.0 - '@commitlint/load': 19.2.0(@types/node@18.11.9)(typescript@5.4.3) + '@commitlint/load': 19.2.0(@types/node@20.11.30)(typescript@5.4.3) '@commitlint/read': 19.2.1 '@commitlint/types': 19.0.3 execa: 8.0.1 - yargs: 17.7.1 + yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - typescript @@ -242,6 +367,7 @@ packages: /@commitlint/config-validator@19.0.3: resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} engines: {node: '>=v18'} + requiresBuild: true dependencies: '@commitlint/types': 19.0.3 ajv: 8.12.0 @@ -262,6 +388,7 @@ packages: /@commitlint/execute-rule@19.0.0: resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} engines: {node: '>=v18'} + requiresBuild: true dev: true /@commitlint/format@19.0.3: @@ -290,7 +417,7 @@ packages: '@commitlint/types': 19.0.3 dev: true - /@commitlint/load@19.2.0(@types/node@18.11.9)(typescript@5.4.3): + /@commitlint/load@19.2.0(@types/node@20.11.30)(typescript@5.4.3): resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} engines: {node: '>=v18'} dependencies: @@ -300,7 +427,7 @@ packages: '@commitlint/types': 19.0.3 chalk: 5.3.0 cosmiconfig: 9.0.0(typescript@5.4.3) - cosmiconfig-typescript-loader: 5.0.0(@types/node@18.11.9)(cosmiconfig@9.0.0)(typescript@5.4.3) + cosmiconfig-typescript-loader: 5.0.0(@types/node@20.11.30)(cosmiconfig@9.0.0)(typescript@5.4.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -680,11 +807,16 @@ packages: engines: {node: '>=18'} dev: true - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 + /@dprint/formatter@0.2.1: + resolution: {integrity: sha512-GCzgRt2o4mhZLy8L47k2A+q9EMG/jWhzZebE29EqKsxmjDrSfv2VisEj/Q+39OOf04jTkEfB/TRO+IZSyxHdYg==} + dev: true + + /@dprint/markdown@0.16.4: + resolution: {integrity: sha512-WjsC4yLybR5/76+d/2s36nOBGjETe+jJR//ddFHohDXKdis+FTUv7dJ00kmd6g0AKQwDITayM1Nid10gFNG0Yg==} + dev: true + + /@dprint/toml@0.5.4: + resolution: {integrity: sha512-d+5GwwzztZD0QixmOBhaO6nWVLsAeYsJ1HJYNxDoDRbASFCpza9BBVshG5ctBRXCkkIHhD9BO1SnbOoRQltUQw==} dev: true /@ericcornelissen/bash-parser@0.5.2: @@ -721,21 +853,232 @@ packages: jsdoc-type-pratt-parser: 4.0.0 dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + /@esbuild/aix-ppc64@0.19.11: + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.19.11: + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.11: + resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.11: + resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.11: + resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.11: + resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.11: + resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.11: + resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.11: + resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.11: + resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.11: + resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.11: + resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.11: + resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.11: + resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.11: + resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.11: + resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.11: + resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.11: + resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.11: + resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.11: + resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.11: + resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.11: + resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.11: + resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@9.0.0-rc.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.57.0 + eslint: 9.0.0-rc.0 eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.6.2: - resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true + /@eslint-stylistic/metadata@1.7.0: + resolution: {integrity: sha512-EdyFKr1BHcx45o6gMZuCkFS64XHzVGFql0V3oL6mZwepnueulpmjsPxTiRRdrYdRknmQA+vjj1/znFkGRrPWHQ==} + dev: true + /@eslint/eslintrc@2.1.4: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -744,7 +1087,7 @@ packages: debug: 4.3.4 espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 + ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -753,9 +1096,26 @@ packages: - supports-color dev: true - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/eslintrc@3.0.2: + resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 10.0.1 + globals: 14.0.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@9.0.0-rc.0: + resolution: {integrity: sha512-xKe0bSy6LRzfoibzCo7QcpdspzLOm80hLUtVdtLMYGjGioELbRizJIxMLZb6jl0BOmIexLtOBr3Tgdtj4eGaEQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true /@humanwhocodes/config-array@0.11.14: @@ -790,20 +1150,16 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.15 + /@jsdevtools/ono@7.1.3: + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + dev: true + + /@mdn/browser-compat-data@5.5.14: + resolution: {integrity: sha512-K7e35i4XtNWpiOr+aPiy3UccAhFop0HsfVz9RSzlcgaaHb2aD/nN0J3uPPLedyTokMiebxN0gxkL/WXpzNQuKg==} dev: true /@nodelib/fs.scandir@2.1.5: @@ -837,7 +1193,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.16.0 dev: true /@nodelib/fs.walk@2.0.0: @@ -845,7 +1201,7 @@ packages: engines: {node: '>=16.14.0'} dependencies: '@nodelib/fs.scandir': 3.0.0 - fastq: 1.15.0 + fastq: 1.16.0 dev: true /@npmcli/git@5.0.4: @@ -853,7 +1209,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: '@npmcli/promise-spawn': 7.0.1 - lru-cache: 10.2.0 + lru-cache: 10.1.0 npm-pick-manifest: 9.0.0 proc-log: 3.0.0 promise-inflight: 1.0.1 @@ -886,7 +1242,7 @@ packages: '@npmcli/git': 5.0.4 glob: 10.3.10 hosted-git-info: 7.0.1 - json-parse-even-better-errors: 3.0.0 + json-parse-even-better-errors: 3.0.1 normalize-package-data: 6.0.0 proc-log: 3.0.0 semver: 7.6.0 @@ -1003,13 +1359,13 @@ packages: dev: true optional: true - /@pkgr/core@0.1.1: - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + /@pkgr/core@0.1.0: + resolution: {integrity: sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true - /@pnpm/config.env-replace@1.0.0: - resolution: {integrity: sha512-ZVPVDi1E8oeXlYqkGRtX0CkzLTwE2zt62bjWaWKaAvI8NZqHzlMvGeSNDpW+JB3+aKanYb4UETJOF1/CxGPemA==} + /@pnpm/config.env-replace@1.1.0: + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} dev: true @@ -1056,7 +1412,7 @@ packages: resolution: {integrity: sha512-YfcB2QrX+Wx1o6LD1G2Y2fhDhOix/bAY/oAnMpHoNLsKkWIRbt1oKLkIFvxBMzLwAEPqnYWguJrYC+J6i4ywbw==} engines: {node: '>=12.17'} dependencies: - bole: 5.0.11 + bole: 5.0.10 ndjson: 2.0.0 dev: true @@ -1067,11 +1423,11 @@ packages: graceful-fs: 4.2.10 dev: true - /@pnpm/npm-conf@2.1.0: - resolution: {integrity: sha512-Oe6ntvgsMTE3hDIqy6sajqHF+MnzJrOF06qC2QSiUEybLL7cp6tjoKUa32gpd9+KPVl4QyMs3E3nsXrx/Vdnlw==} + /@pnpm/npm-conf@2.2.2: + resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} dependencies: - '@pnpm/config.env-replace': 1.0.0 + '@pnpm/config.env-replace': 1.1.0 '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 dev: true @@ -1102,7 +1458,7 @@ packages: '@zkochan/retry': 0.2.0 encode-registry: 3.0.1 load-json-file: 6.2.0 - lru-cache: 10.2.0 + lru-cache: 10.1.0 normalize-path: 3.0.0 p-limit: 3.1.0 p-memoize: 4.0.1 @@ -1153,78 +1509,21 @@ packages: - domexception dev: true - /@rollup/plugin-commonjs@25.0.7(rollup@4.13.0): - resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} + /@rollup/plugin-replace@5.0.5(rollup@4.13.1): + resolution: {integrity: sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@4.13.0) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 8.1.0 - is-reference: 1.2.1 + '@rollup/pluginutils': 5.1.0(rollup@4.13.1) magic-string: 0.30.8 - rollup: 4.13.0 - dev: true - - /@rollup/plugin-node-resolve@15.2.3(rollup@4.13.0): - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.0.2(rollup@4.13.0) - '@types/resolve': 1.20.2 - deepmerge: 4.3.0 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.4 - rollup: 4.13.0 - dev: true - - /@rollup/plugin-typescript@11.1.6(rollup@4.13.0)(tslib@2.6.2)(typescript@5.4.3): - resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.14.0||^3.0.0||^4.0.0 - tslib: '*' - typescript: '>=3.7.0' - peerDependenciesMeta: - rollup: - optional: true - tslib: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.13.0) - resolve: 1.22.4 - rollup: 4.13.0 - tslib: 2.6.2 - typescript: 5.4.3 + rollup: 4.13.1 dev: true - /@rollup/pluginutils@5.0.2(rollup@4.13.0): - resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 4.13.0 - dev: true - - /@rollup/pluginutils@5.1.0(rollup@4.13.0): + /@rollup/pluginutils@5.1.0(rollup@4.13.1): resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1236,107 +1535,115 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.13.0 + rollup: 4.13.1 dev: true - /@rollup/rollup-android-arm-eabi@4.13.0: - resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} + /@rollup/rollup-android-arm-eabi@4.13.1: + resolution: {integrity: sha512-4C4UERETjXpC4WpBXDbkgNVgHyWfG3B/NKY46e7w5H134UDOFqUJKpsLm0UYmuupW+aJmRgeScrDNfvZ5WV80A==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.13.0: - resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==} + /@rollup/rollup-android-arm64@4.13.1: + resolution: {integrity: sha512-TrTaFJ9pXgfXEiJKQ3yQRelpQFqgRzVR9it8DbeRzG0RX7mKUy0bqhCFsgevwXLJepQKTnLl95TnPGf9T9AMOA==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.13.0: - resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==} + /@rollup/rollup-darwin-arm64@4.13.1: + resolution: {integrity: sha512-fz7jN6ahTI3cKzDO2otQuybts5cyu0feymg0bjvYCBrZQ8tSgE8pc0sSNEuGvifrQJWiwx9F05BowihmLxeQKw==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.13.0: - resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==} + /@rollup/rollup-darwin-x64@4.13.1: + resolution: {integrity: sha512-WTvdz7SLMlJpektdrnWRUN9C0N2qNHwNbWpNo0a3Tod3gb9leX+yrYdCeB7VV36OtoyiPAivl7/xZ3G1z5h20g==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.13.0: - resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==} + /@rollup/rollup-linux-arm-gnueabihf@4.13.1: + resolution: {integrity: sha512-dBHQl+7wZzBYcIF6o4k2XkAfwP2ks1mYW2q/Gzv9n39uDcDiAGDqEyml08OdY0BIct0yLSPkDTqn4i6czpBLLw==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.13.0: - resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==} + /@rollup/rollup-linux-arm64-gnu@4.13.1: + resolution: {integrity: sha512-bur4JOxvYxfrAmocRJIW0SADs3QdEYK6TQ7dTNz6Z4/lySeu3Z1H/+tl0a4qDYv0bCdBpUYM0sYa/X+9ZqgfSQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.13.0: - resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==} + /@rollup/rollup-linux-arm64-musl@4.13.1: + resolution: {integrity: sha512-ssp77SjcDIUSoUyj7DU7/5iwM4ZEluY+N8umtCT9nBRs3u045t0KkW02LTyHouHDomnMXaXSZcCSr2bdMK63kA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.13.0: - resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==} + /@rollup/rollup-linux-riscv64-gnu@4.13.1: + resolution: {integrity: sha512-Jv1DkIvwEPAb+v25/Unrnnq9BO3F5cbFPT821n3S5litkz+O5NuXuNhqtPx5KtcwOTtaqkTsO+IVzJOsxd11aQ==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.13.0: - resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==} + /@rollup/rollup-linux-s390x-gnu@4.13.1: + resolution: {integrity: sha512-U564BrhEfaNChdATQaEODtquCC7Ez+8Hxz1h5MAdMYj0AqD0GA9rHCpElajb/sQcaFL6NXmHc5O+7FXpWMa73Q==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.13.1: + resolution: {integrity: sha512-zGRDulLTeDemR8DFYyFIQ8kMP02xpUsX4IBikc7lwL9PrwR3gWmX2NopqiGlI2ZVWMl15qZeUjumTwpv18N7sQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.13.0: - resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==} + /@rollup/rollup-linux-x64-musl@4.13.1: + resolution: {integrity: sha512-VTk/MveyPdMFkYJJPCkYBw07KcTkGU2hLEyqYMsU4NjiOfzoaDTW9PWGRsNwiOA3qI0k/JQPjkl/4FCK1smskQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.13.0: - resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==} + /@rollup/rollup-win32-arm64-msvc@4.13.1: + resolution: {integrity: sha512-L+hX8Dtibb02r/OYCsp4sQQIi3ldZkFI0EUkMTDwRfFykXBPptoz/tuuGqEd3bThBSLRWPR6wsixDSgOx/U3Zw==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.13.0: - resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==} + /@rollup/rollup-win32-ia32-msvc@4.13.1: + resolution: {integrity: sha512-+dI2jVPfM5A8zme8riEoNC7UKk0Lzc7jCj/U89cQIrOjrZTCWZl/+IXUeRT2rEZ5j25lnSA9G9H1Ob9azaF/KQ==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.13.0: - resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==} + /@rollup/rollup-win32-x64-msvc@4.13.1: + resolution: {integrity: sha512-YY1Exxo2viZ/O2dMHuwQvimJ0SqvL+OAWQLLY6rvXavgQKjhQUzn7nc1Dd29gjB5Fqi00nrBWctJBOyfVMIVxw==} cpu: [x64] os: [win32] requiresBuild: true @@ -1351,7 +1658,7 @@ packages: dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 - fs-extra: 11.1.0 + fs-extra: 11.2.0 lodash: 4.17.21 semantic-release: 23.0.6(typescript@5.4.3) dev: true @@ -1417,9 +1724,9 @@ packages: aggregate-error: 5.0.0 debug: 4.3.4 dir-glob: 3.0.1 - globby: 14.0.1 + globby: 14.0.0 http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 issue-parser: 7.0.0 lodash-es: 4.17.21 mime: 4.0.1 @@ -1439,7 +1746,7 @@ packages: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 execa: 8.0.1 - fs-extra: 11.1.0 + fs-extra: 11.2.0 lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.0.0 @@ -1449,7 +1756,7 @@ packages: registry-auth-token: 5.0.2 semantic-release: 23.0.6(typescript@5.4.3) semver: 7.6.0 - tempy: 3.0.0 + tempy: 3.1.0 dev: true /@semantic-release/release-notes-generator@13.0.0(semantic-release@23.0.6): @@ -1463,7 +1770,7 @@ packages: conventional-commits-filter: 4.0.0 conventional-commits-parser: 5.0.0 debug: 4.3.4 - get-stream: 7.0.0 + get-stream: 7.0.1 import-from-esm: 1.3.3 into-stream: 7.0.0 lodash-es: 4.17.21 @@ -1478,8 +1785,8 @@ packages: engines: {node: '>=10'} dev: true - /@sindresorhus/merge-streams@2.3.0: - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + /@sindresorhus/merge-streams@1.0.0: + resolution: {integrity: sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==} engines: {node: '>=18'} dev: true @@ -1489,103 +1796,187 @@ packages: hasBin: true dependencies: commander: 4.1.1 - ignore: 5.3.1 + ignore: 5.3.0 p-map: 4.0.0 dev: true - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + /@stylistic/eslint-plugin-js@1.7.0(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-PN6On/+or63FGnhhMKSQfYcWutRlzOiYlVdLM6yN7lquoBTqUJHYnl4TA4MHwiAt46X5gRxDr1+xPZ1lOLcL+Q==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@types/eslint': 8.56.6 + acorn: 8.11.3 + escape-string-regexp: 4.0.0 + eslint: 9.0.0-rc.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 dev: true - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + /@stylistic/eslint-plugin-jsx@1.7.0(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-BACdBwXakQvjYIST5N2WWhRbvhRsIxa/F59BiZol+0IH4FSmDXhie7v/yaxDIIA9CbfElzOmIA5nWNYTVXcnwQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.7.0(eslint@9.0.0-rc.0) + '@types/eslint': 8.56.6 + eslint: 9.0.0-rc.0 + estraverse: 5.3.0 + picomatch: 4.0.1 dev: true - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + /@stylistic/eslint-plugin-migrate@1.7.0(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-1xcTyY8EIyRLtI86c2XM2GYLv9tBAuelYCH8i2H84k8lSWO8fTg9ArohG3Oo2bj55KFkOHO39lU1QlfKDMpxLQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@eslint-stylistic/metadata': 1.7.0 + '@typescript-eslint/utils': 6.21.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + transitivePeerDependencies: + - eslint + - supports-color + - typescript dev: true - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + /@stylistic/eslint-plugin-plus@1.7.0(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-AabDw8sXsc70Ydx3qnbeTlRHZnIwY6UKEenBPURPhY3bfYWX+/pDpZH40HkOu94v8D0DUrocPkeeEUxl4e0JDg==} + peerDependencies: + eslint: '*' + dependencies: + '@types/eslint': 8.56.6 + '@typescript-eslint/utils': 6.21.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + eslint: 9.0.0-rc.0 + transitivePeerDependencies: + - supports-color + - typescript dev: true - /@types/conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + /@stylistic/eslint-plugin-ts@1.7.0(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-QsHv98mmW1xaucVYQTyLDgEpybPJ/6jPPxVBrIchntWWwj74xCWKUiw79hu+TpYj/Pbhd9rkqJYLNq3pQGYuyA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' dependencies: - '@types/node': 18.11.9 + '@stylistic/eslint-plugin-js': 1.7.0(eslint@9.0.0-rc.0) + '@types/eslint': 8.56.6 + '@typescript-eslint/utils': 6.21.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + eslint: 9.0.0-rc.0 + transitivePeerDependencies: + - supports-color + - typescript dev: true - /@types/eslint-config-prettier@6.11.3: - resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==} + /@stylistic/eslint-plugin@1.7.0(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-ThMUjGIi/jeWYNvOdjZkoLw1EOVs0tEuKXDgWvTn8uWaEz55HuPlajKxjKLpv19C+qRDbKczJfzUODfCdME53A==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.7.0(eslint@9.0.0-rc.0) + '@stylistic/eslint-plugin-jsx': 1.7.0(eslint@9.0.0-rc.0) + '@stylistic/eslint-plugin-plus': 1.7.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + '@stylistic/eslint-plugin-ts': 1.7.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + '@types/eslint': 8.56.6 + eslint: 9.0.0-rc.0 + transitivePeerDependencies: + - supports-color + - typescript dev: true - /@types/eslint-plugin-prettier@3.1.3: - resolution: {integrity: sha512-Jk+lgBZM0u9ETUyqe2HvykL1j6uE7L1oEqbInWtsVHT6sP+AdwLb4ncmQBqASTS+YzYOPF6hKX0zgEhblRMjqA==} + /@types/conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + requiresBuild: true dependencies: - '@types/eslint': 8.56.6 + '@types/node': 20.11.30 dev: true /@types/eslint@8.56.6: resolution: {integrity: sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==} dependencies: - '@types/estree': 1.0.0 - '@types/json-schema': 7.0.12 - dev: true - - /@types/estree@1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 dev: true /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.11.30 + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/mdast@3.0.10: - resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} + /@types/lodash@4.17.0: + resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} + dev: true + + /@types/mdast@3.0.15: + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.10 dev: true - /@types/node@18.11.9: - resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true + + /@types/node@17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + dev: true + + /@types/node@20.11.30: + resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} + dependencies: + undici-types: 5.26.5 dev: true /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true + /@types/object-path@0.11.4: + resolution: {integrity: sha512-4tgJ1Z3elF/tOMpA8JLVuR9spt9Ynsf7+JjqsQ2IqtiPJtcLoHoXcT6qU4E10cPFqyXX5HDm9QwIzZhBSkLxsw==} + dev: true + /@types/picomatch@2.3.3: resolution: {integrity: sha512-Yll76ZHikRFCyz/pffKGjrCwe/le2CDwOP5F210KQo27kpRE46U2rDnzikNlVn6/ezH3Mhn46bJMTfeVTtcYMg==} dev: true - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} dev: true /@types/rollup-plugin-auto-external@2.0.5: resolution: {integrity: sha512-jspE/1q/4MjrC0lilOpF7Ej5z2vvByPq6lb5ERHt9jCRnp0WJRq+SLK9oPfYroy0xhFhDqQoXLeSHcKqATDaoA==} dependencies: - rollup: 4.13.0 + rollup: 4.13.1 dev: true - /@types/semver@7.5.0: - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@types/unist@2.0.6: - resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} + /@types/ua-parser-js@0.7.39: + resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==} dev: true - /@typescript-eslint/eslint-plugin@7.3.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==} + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + dev: true + + /@typescript-eslint/eslint-plugin@7.4.0(@typescript-eslint/parser@7.4.0)(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -1595,26 +1986,26 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/scope-manager': 7.3.1 - '@typescript-eslint/type-utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 7.3.1 + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + '@typescript-eslint/scope-manager': 7.4.0 + '@typescript-eslint/type-utils': 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + '@typescript-eslint/utils': 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + '@typescript-eslint/visitor-keys': 7.4.0 debug: 4.3.4 - eslint: 8.57.0 + eslint: 9.0.0-rc.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.4.3) + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.3.1(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==} + /@typescript-eslint/parser@7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -1623,27 +2014,35 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.3.1 - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 7.3.1 + '@typescript-eslint/scope-manager': 7.4.0 + '@typescript-eslint/types': 7.4.0 + '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.3) + '@typescript-eslint/visitor-keys': 7.4.0 debug: 4.3.4 - eslint: 8.57.0 + eslint: 9.0.0-rc.0 typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@7.3.1: - resolution: {integrity: sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==} + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + dev: true + + /@typescript-eslint/scope-manager@7.4.0: + resolution: {integrity: sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/visitor-keys': 7.3.1 + '@typescript-eslint/types': 7.4.0 + '@typescript-eslint/visitor-keys': 7.4.0 dev: true - /@typescript-eslint/type-utils@7.3.1(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==} + /@typescript-eslint/type-utils@7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -1652,23 +2051,50 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) - '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.3) + '@typescript-eslint/utils': 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + debug: 4.3.4 + eslint: 9.0.0-rc.0 + ts-api-utils: 1.3.0(typescript@5.4.3) + typescript: 5.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/types@7.4.0: + resolution: {integrity: sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.3): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.0.1(typescript@5.4.3) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@7.3.1: - resolution: {integrity: sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==} - engines: {node: ^18.18.0 || >=20.0.0} - dev: true - - /@typescript-eslint/typescript-estree@7.3.1(typescript@5.4.3): - resolution: {integrity: sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==} + /@typescript-eslint/typescript-estree@7.4.0(typescript@5.4.3): + resolution: {integrity: sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -1676,48 +2102,145 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/visitor-keys': 7.3.1 + '@typescript-eslint/types': 7.4.0 + '@typescript-eslint/visitor-keys': 7.4.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.0.1(typescript@5.4.3) + ts-api-utils: 1.3.0(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@7.3.1(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==} + /@typescript-eslint/utils@6.21.0(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0-rc.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.3) + eslint: 9.0.0-rc.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 7.3.1 - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0-rc.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 7.4.0 + '@typescript-eslint/types': 7.4.0 + '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.3) + eslint: 9.0.0-rc.0 semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@7.3.1: - resolution: {integrity: sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==} + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@7.4.0: + resolution: {integrity: sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.3.1 + '@typescript-eslint/types': 7.4.0 eslint-visitor-keys: 3.4.3 dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + /@unocss/config@0.58.7: + resolution: {integrity: sha512-ZMSFWJI8DfE/4HiIU+hkTSKUtEkennRn+raej5HCGTfy5xpdYCm9Zdrw/cYqkN2LPHM8o076Z2sD6H4MV5HrvA==} + engines: {node: '>=14'} + dependencies: + '@unocss/core': 0.58.7 + unconfig: 0.3.11 + dev: true + + /@unocss/core@0.58.7: + resolution: {integrity: sha512-Df5ytibV0MB7kWLggzLHsJUj08Of2oqXmPg7QjRUghMvCT3dl2LUIZXiztYPMH0F4x0cPebNoa/pavNt8xz9eQ==} + dev: true + + /@unocss/eslint-plugin@0.58.7(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-b2i18LAADv0j5L4O+6ju+6PHBucnvgD8ipvDZvZWEX0EFIiFVO9CoMLJhMpONcahnPmWWrs/sELhwQu3uyCKVg==} + engines: {node: '>=14'} + dependencies: + '@typescript-eslint/utils': 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + '@unocss/config': 0.58.7 + '@unocss/core': 0.58.7 + magic-string: 0.30.8 + synckit: 0.9.0 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + dev: true + + /@vue/compiler-core@3.4.21: + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + dependencies: + '@babel/parser': 7.24.1 + '@vue/shared': 3.4.21 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + dev: true + + /@vue/compiler-dom@3.4.21: + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + dependencies: + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/compiler-sfc@3.4.21: + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} + dependencies: + '@babel/parser': 7.24.1 + '@vue/compiler-core': 3.4.21 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + estree-walker: 2.0.2 + magic-string: 0.30.8 + postcss: 8.4.38 + source-map-js: 1.2.0 + dev: true + + /@vue/compiler-ssr@3.4.21: + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + dev: true + + /@wessberg/stringutil@1.0.19: + resolution: {integrity: sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==} + engines: {node: '>=8.0.0'} dev: true /@zkochan/retry@0.2.0: @@ -1740,24 +2263,23 @@ packages: through: 2.3.8 dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.11.3 dev: true - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} dev: true - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} @@ -1795,6 +2317,7 @@ packages: /ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + requiresBuild: true dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -1802,6 +2325,11 @@ packages: uri-js: 4.4.1 dev: true + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: true + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -1809,9 +2337,11 @@ packages: type-fest: 0.21.3 dev: true - /ansi-escapes@6.2.1: - resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} + /ansi-escapes@6.2.0: + resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} engines: {node: '>=14.16'} + dependencies: + type-fest: 3.13.1 dev: true /ansi-regex@5.0.1: @@ -1852,10 +2382,6 @@ packages: engines: {node: '>=14'} dev: true - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -1871,31 +2397,22 @@ packages: /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - dev: true - - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 + call-bind: 1.0.5 + is-array-buffer: 3.0.2 dev: true /array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.2 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-string: 1.0.7 dev: true @@ -1915,62 +2432,48 @@ packages: engines: {node: '>=8'} dev: true - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.2 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 dev: true /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 dev: true /array.prototype.flatmap@1.3.2: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - dev: true - - /arraybuffer.prototype.slice@1.0.1: - resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 dev: true - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.2 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 dev: true /at-least-node@1.0.0: @@ -1983,13 +2486,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 - dev: true - /babylon@6.18.0: resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} hasBin: true @@ -2012,16 +2508,20 @@ packages: dependencies: buffer: 5.7.1 inherits: 2.0.4 - readable-stream: 3.6.1 + readable-stream: 3.6.2 dev: true - /bole@5.0.11: - resolution: {integrity: sha512-KB0Ye0iMAW5BnNbnLfMSQcnI186hKUzE2fpkZWqcxsoTR7eqzlTidSOMYPHJOn/yR7VGH7uSZp37qH9q2Et0zQ==} + /bole@5.0.10: + resolution: {integrity: sha512-5IiUWQ8QRQ8yHf46VPQ7GH3nj0Jy7P4heaENBVmsGfHP1Gtd0wqkvK6C3iHLUMdG3SMFx2DD8FqoIQcnMpdIdQ==} dependencies: fast-safe-stringify: 2.1.1 individual: 3.0.0 dev: true + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: true + /bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} dev: true @@ -2046,15 +2546,35 @@ packages: fill-range: 7.0.1 dev: true - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + /browser-or-node@2.1.1: + resolution: {integrity: sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==} + dev: true + + /browserslist-generator@2.1.0: + resolution: {integrity: sha512-ZFz4mAOgqm0cbwKaZsfJbYDbTXGoPANlte7qRsRJOfjB9KmmISQrXJxAVrnXG8C8v/QHNzXyeJt0Cfcks6zZvQ==} + engines: {node: '>=16.15.1', npm: '>=7.0.0', pnpm: '>=3.2.0', yarn: '>=1.13'} + dependencies: + '@mdn/browser-compat-data': 5.5.14 + '@types/object-path': 0.11.4 + '@types/semver': 7.5.6 + '@types/ua-parser-js': 0.7.39 + browserslist: 4.22.2 + caniuse-lite: 1.0.30001574 + isbot: 3.8.0 + object-path: 0.11.8 + semver: 7.6.0 + ua-parser-js: 1.0.37 + dev: true + + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001600 - electron-to-chromium: 1.4.715 + caniuse-lite: 1.0.30001574 + electron-to-chromium: 1.4.622 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) + update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true /buffer@5.7.1: @@ -2086,22 +2606,16 @@ packages: engines: {node: '>=6'} dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 dev: true - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 + /call-me-maybe@1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} dev: true /callsites@3.1.0: @@ -2109,8 +2623,8 @@ packages: engines: {node: '>=6'} dev: true - /caniuse-lite@1.0.30001600: - resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} + /caniuse-lite@1.0.30001574: + resolution: {integrity: sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg==} dev: true /chalk-template@1.1.0: @@ -2195,6 +2709,17 @@ packages: resolve-from: 5.0.0 dev: true + /cli-color@2.0.4: + resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + memoizee: 0.4.15 + timers-ext: 0.1.7 + dev: true + /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -2222,8 +2747,8 @@ packages: yargs: 16.2.0 dev: true - /cli-spinners@2.7.0: - resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} dev: true @@ -2241,7 +2766,7 @@ packages: engines: {node: '>=18'} dependencies: slice-ansi: 5.0.0 - string-width: 7.1.0 + string-width: 7.0.0 dev: true /cli-width@3.0.0: @@ -2269,6 +2794,7 @@ packages: /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + requiresBuild: true dev: true /color-convert@1.9.3: @@ -2327,13 +2853,13 @@ packages: engines: {node: '>= 12.0.0'} dev: true - /commitizen@4.3.0(@types/node@18.11.9)(typescript@5.4.3): + /commitizen@4.3.0(@types/node@20.11.30)(typescript@5.4.3): resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} hasBin: true dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@types/node@18.11.9)(typescript@5.4.3) + cz-conventional-changelog: 3.3.0(@types/node@20.11.30)(typescript@5.4.3) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -2351,10 +2877,6 @@ packages: - typescript dev: true - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true - /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: @@ -2362,6 +2884,16 @@ packages: dot-prop: 5.3.0 dev: true + /compatfactory@3.0.0(typescript@5.4.3): + resolution: {integrity: sha512-WD5kF7koPwVoyKL8p0LlrmIZtilrD46sQStyzzxzTFinMKN2Dxk1hN+sddLSQU1mGIZvQfU8c+ONSghvvM40jg==} + engines: {node: '>=14.9.0'} + peerDependencies: + typescript: '>=3.x || >= 4.x || >= 5.x' + dependencies: + helpertypes: 0.0.19 + typescript: 5.4.3 + dev: true + /compose-function@3.0.3: resolution: {integrity: sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==} dependencies: @@ -2384,7 +2916,7 @@ packages: engines: {node: '>=12'} dependencies: dot-prop: 6.0.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 unique-string: 3.0.0 write-file-atomic: 3.0.3 xdg-basedir: 5.1.0 @@ -2410,7 +2942,7 @@ packages: hasBin: true dependencies: conventional-commits-filter: 4.0.0 - handlebars: 4.7.7 + handlebars: 4.7.8 json-stringify-safe: 5.0.1 meow: 12.1.1 semver: 7.6.0 @@ -2437,17 +2969,17 @@ packages: split2: 4.2.0 dev: true - /core-js-compat@3.36.1: - resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + /core-js-compat@3.35.0: + resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} dependencies: - browserslist: 4.23.0 + browserslist: 4.22.2 dev: true /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig-typescript-loader@5.0.0(@types/node@18.11.9)(cosmiconfig@9.0.0)(typescript@5.4.3): + /cosmiconfig-typescript-loader@5.0.0(@types/node@20.11.30)(cosmiconfig@9.0.0)(typescript@5.4.3): resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} engines: {node: '>=v16'} peerDependencies: @@ -2455,7 +2987,7 @@ packages: cosmiconfig: '>=8.2' typescript: '>=4' dependencies: - '@types/node': 18.11.9 + '@types/node': 20.11.30 cosmiconfig: 9.0.0(typescript@5.4.3) jiti: 1.21.0 typescript: 5.4.3 @@ -2477,10 +3009,6 @@ packages: typescript: 5.4.3 dev: true - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -2488,6 +3016,12 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + + /crosspath@2.0.0: + resolution: {integrity: sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==} + engines: {node: '>=14.9.0'} + dependencies: + '@types/node': 17.0.45 dev: true /crypto-random-string@2.0.0: @@ -2615,23 +3149,37 @@ packages: vscode-uri: 3.0.8 dev: true - /cz-conventional-changelog@3.3.0(@types/node@18.11.9)(typescript@5.4.3): + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /cz-conventional-changelog@3.3.0(@types/node@20.11.30)(typescript@5.4.3): resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} dependencies: chalk: 2.4.2 - commitizen: 4.3.0(@types/node@18.11.9)(typescript@5.4.3) + commitizen: 4.3.0(@types/node@20.11.30)(typescript@5.4.3) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 - word-wrap: 1.2.3 + word-wrap: 1.2.5 optionalDependencies: - '@commitlint/load': 19.2.0(@types/node@18.11.9)(typescript@5.4.3) + '@commitlint/load': 19.2.0(@types/node@20.11.30)(typescript@5.4.3) transitivePeerDependencies: - '@types/node' - typescript dev: true + /d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + dependencies: + es5-ext: 0.10.64 + type: 2.7.2 + dev: true + /dargs@8.1.0: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} @@ -2642,31 +3190,16 @@ packages: engines: {node: '>= 6'} dev: true - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + /deassert@1.0.2(rollup@4.13.1): + resolution: {integrity: sha512-cF1/OfxthRQkkC4vOGVT9fs0wuPWIBAPzEk/YI1XSq3JZdgSXmLW1aEegpNLq9VgypeAtmvI8vHiQ31YBK5vvQ==} + hasBin: true dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 + '@rollup/pluginutils': 5.1.0(rollup@4.13.1) + acorn: 8.11.3 + acorn-walk: 8.3.2 + magic-string: 0.30.8 + transitivePeerDependencies: + - rollup dev: true /debug@3.2.7: @@ -2712,44 +3245,37 @@ packages: /deepmerge-ts@5.1.0: resolution: {integrity: sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==} engines: {node: '>=16.0.0'} - - /deepmerge@4.3.0: - resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} - engines: {node: '>=0.10.0'} dev: true /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + requiresBuild: true dependencies: clone: 1.0.4 dev: true - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 + get-intrinsic: 1.2.2 gopd: 1.0.1 - dev: true - - /define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} - engines: {node: '>= 0.4'} - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 + has-property-descriptors: 1.0.1 dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.0 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 dev: true + /defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + dev: true + /detect-file@1.0.0: resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} engines: {node: '>=0.10.0'} @@ -2765,16 +3291,11 @@ packages: engines: {node: '>=12.20'} dev: true - /detect-newline@4.0.0: - resolution: {integrity: sha512-1aXUEPdfGdzVPFpzGJJNgq9o81bGg1s09uxTWsqBlo9PI332uyJRQq13+LK/UN4JfxJbFdCXonUFQ9R/p7yCtw==} + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2789,13 +3310,6 @@ packages: esutils: 2.0.3 dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - /dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -2828,8 +3342,8 @@ packages: wcwidth: 1.0.1 dev: true - /electron-to-chromium@1.4.715: - resolution: {integrity: sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==} + /electron-to-chromium@1.4.622: + resolution: {integrity: sha512-GZ47DEy0Gm2Z8RVG092CkFvX7SdotG57c4YZOe8W8qD4rOmk3plgeNmiLVRHP/Liqj1wRiY3uUUod9vb9hnxZA==} dev: true /emoji-regex@10.3.0: @@ -2855,11 +3369,11 @@ packages: mem: 8.1.1 dev: true - /enhanced-resolve@5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 tapable: 2.2.1 dev: true @@ -2891,159 +3405,140 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.1: - resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.1 + arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.7 - es-set-tostringtag: 2.0.1 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.2.4 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.5 + hasown: 2.0.0 + internal-slot: 1.0.6 is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 is-string: 1.0.7 - is-typed-array: 1.1.10 + is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.0 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 typed-array-buffer: 1.0.0 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 dev: true - /es-abstract@1.23.2: - resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==} + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 dev: true - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - get-intrinsic: 1.2.4 - dev: true - - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + hasown: 2.0.0 dev: true - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: - es-errors: 1.3.0 + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 dev: true - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} + /es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + requiresBuild: true dependencies: - get-intrinsic: 1.2.4 - has: 1.0.3 - has-tostringtag: 1.0.2 + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 dev: true - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} + /es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 dev: true - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + /es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} dependencies: - has: 1.0.3 + d: 1.0.2 + ext: 1.7.0 dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + /es6-weak-map@2.0.3: + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} dependencies: - hasown: 2.0.2 + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 + /esbuild@0.19.11: + resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.11 + '@esbuild/android-arm': 0.19.11 + '@esbuild/android-arm64': 0.19.11 + '@esbuild/android-x64': 0.19.11 + '@esbuild/darwin-arm64': 0.19.11 + '@esbuild/darwin-x64': 0.19.11 + '@esbuild/freebsd-arm64': 0.19.11 + '@esbuild/freebsd-x64': 0.19.11 + '@esbuild/linux-arm': 0.19.11 + '@esbuild/linux-arm64': 0.19.11 + '@esbuild/linux-ia32': 0.19.11 + '@esbuild/linux-loong64': 0.19.11 + '@esbuild/linux-mips64el': 0.19.11 + '@esbuild/linux-ppc64': 0.19.11 + '@esbuild/linux-riscv64': 0.19.11 + '@esbuild/linux-s390x': 0.19.11 + '@esbuild/linux-x64': 0.19.11 + '@esbuild/netbsd-x64': 0.19.11 + '@esbuild/openbsd-x64': 0.19.11 + '@esbuild/sunos-x64': 0.19.11 + '@esbuild/win32-arm64': 0.19.11 + '@esbuild/win32-ia32': 0.19.11 + '@esbuild/win32-x64': 0.19.11 dev: true /escalade@3.1.1: @@ -3066,23 +3561,47 @@ packages: engines: {node: '>=12'} dev: true - /eslint-compat-utils@0.5.0(eslint@8.57.0): + /eslint-compat-utils@0.1.2(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 9.0.0-rc.0 + dev: true + + /eslint-compat-utils@0.5.0(eslint@9.0.0-rc.0): resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' dependencies: - eslint: 8.57.0 + eslint: 9.0.0-rc.0 semver: 7.6.0 dev: true - /eslint-config-prettier@9.1.0(eslint@8.57.0): + /eslint-config-prettier@9.1.0(eslint@9.0.0-rc.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.57.0 + eslint: 9.0.0-rc.0 + dev: true + + /eslint-flat-config-utils@0.1.0: + resolution: {integrity: sha512-GVjeM6BITHRpax/lLV8IEdsyIFHH0/4ggN3WJ3IcMTxKRmbo1pA8chPE/WP4sjvkEo8W6WaeIopUMhlzHYeP4g==} + dependencies: + '@types/eslint': 8.56.6 + dev: true + + /eslint-formatting-reporter@0.0.0(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-k9RdyTqxqN/wNYVaTk/ds5B5rA8lgoAmvceYN7bcZMBwU7TuXx5ntewJv81eF3pIL/CiJE+pJZm36llG8yhyyw==} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + eslint: 9.0.0-rc.0 + prettier-linter-helpers: 1.0.0 dev: true /eslint-import-resolver-node@0.3.9: @@ -3090,12 +3609,12 @@ packages: dependencies: debug: 3.2.7 is-core-module: 2.13.1 - resolve: 1.22.4 + resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.3.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.4.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0-rc.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3103,13 +3622,13 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.4 - enhanced-resolve: 5.12.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.3.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.3.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + enhanced-resolve: 5.15.0 + eslint: 9.0.0-rc.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0-rc.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0-rc.0) fast-glob: 3.3.2 - get-tsconfig: 4.5.0 - is-core-module: 2.13.0 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: - '@typescript-eslint/parser' @@ -3118,7 +3637,15 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.3.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-merge-processors@0.1.0(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==} + peerDependencies: + eslint: '*' + dependencies: + eslint: 9.0.0-rc.0 + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0-rc.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3139,39 +3666,58 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.3.1(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) debug: 3.2.7 - eslint: 8.57.0 + eslint: 9.0.0-rc.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.3.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.4.0)(eslint-plugin-import@2.29.1)(eslint@9.0.0-rc.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es-x@7.6.0(eslint@8.57.0): - resolution: {integrity: sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==} + /eslint-parser-plain@0.1.0: + resolution: {integrity: sha512-oOeA6FWU0UJT/Rxc3XF5Cq0nbIZbylm7j8+plqq0CZoE6m4u32OXJrR+9iy4srGMmF6v6pmgvP1zPxSRIGh3sg==} + dev: true + + /eslint-plugin-es-x@7.5.0(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.6.2 - eslint: 8.57.0 - eslint-compat-utils: 0.5.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0-rc.0) + '@eslint-community/regexpp': 4.10.0 + eslint: 9.0.0-rc.0 + eslint-compat-utils: 0.1.2(eslint@9.0.0-rc.0) dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@9.0.0-rc.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.57.0 - ignore: 5.2.4 + eslint: 9.0.0-rc.0 + ignore: 5.3.0 + dev: true + + /eslint-plugin-format@0.1.0(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-IgOu+GEH+PdKnpuPrFzY8q8QgnzAUijDZsNLhpp5jx0Lbu9u968/STcmEZGnIMVBw3zeTNN/FsU6d2Rdgcy6Aw==} + peerDependencies: + eslint: ^8.40.0 + dependencies: + '@dprint/formatter': 0.2.1 + '@dprint/markdown': 0.16.4 + '@dprint/toml': 0.5.4 + eslint: 9.0.0-rc.0 + eslint-formatting-reporter: 0.0.0(eslint@9.0.0-rc.0) + eslint-parser-plain: 0.1.0 + prettier: 3.2.5 + synckit: 0.8.8 dev: true - /eslint-plugin-functional@6.3.0(eslint@8.57.0)(typescript@5.4.3): + /eslint-plugin-functional@6.3.0(eslint@9.0.0-rc.0)(typescript@5.4.3): resolution: {integrity: sha512-QuODFnj0kaQAIicniMQaV9t9aCkwJo6Ibx/5pDVWgluFZKwl9jfUZL09jF5S0E9A0eL45hq7sCybAb7FEnIorQ==} engines: {node: '>=16.10.0'} peerDependencies: @@ -3181,11 +3727,11 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/utils': 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) deepmerge-ts: 5.1.0 escape-string-regexp: 4.0.0 - eslint: 8.57.0 - is-immutable-type: 2.0.4(eslint@8.57.0)(typescript@5.4.3) + eslint: 9.0.0-rc.0 + is-immutable-type: 2.0.4(eslint@9.0.0-rc.0)(typescript@5.4.3) semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.3) typescript: 5.4.3 @@ -3193,7 +3739,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.3.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0-rc.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -3203,23 +3749,23 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 + '@typescript-eslint/parser': 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 9.0.0-rc.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.3.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - hasown: 2.0.2 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.0.0-rc.0) + hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 semver: 6.3.1 tsconfig-paths: 3.15.0 transitivePeerDependencies: @@ -3228,7 +3774,7 @@ packages: - supports-color dev: true - /eslint-plugin-jsdoc@48.2.1(eslint@8.57.0): + /eslint-plugin-jsdoc@48.2.1(eslint@9.0.0-rc.0): resolution: {integrity: sha512-iUvbcyDZSO/9xSuRv2HQBw++8VkV/pt3UWtX9cpPH0l7GKPq78QC/6+PmyQHHvNZaTjAce6QVciEbnc6J/zH5g==} engines: {node: '>=18'} peerDependencies: @@ -3239,7 +3785,7 @@ packages: comment-parser: 1.4.1 debug: 4.3.4 escape-string-regexp: 4.0.0 - eslint: 8.57.0 + eslint: 9.0.0-rc.0 esquery: 1.5.0 is-builtin-module: 3.2.1 semver: 7.6.0 @@ -3248,46 +3794,95 @@ packages: - supports-color dev: true - /eslint-plugin-markdown@3.0.1(eslint@8.57.0): - resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} + /eslint-plugin-jsonc@2.14.1(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-Tei6G4N7pZulP5MHi0EIdtseiCqUPkDMd0O8Zrw4muMIlsjJ5/B9X+U3Pfo6B7l0mTL9LN9FwuWT70dRJ6z7tg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: '>=6.0.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0-rc.0) + eslint: 9.0.0-rc.0 + eslint-compat-utils: 0.5.0(eslint@9.0.0-rc.0) + espree: 9.6.1 + graphemer: 1.4.0 + jsonc-eslint-parser: 2.4.0 + natural-compare: 1.4.0 + synckit: 0.6.2 + dev: true + + /eslint-plugin-markdown@4.0.1(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-5/MnGvYU0i8MbHH5cg8S+Vl3DL+bqRNYshk1xUO86DilNBaxtTkhH+5FD0/yO03AmlI6+lfNFdk2yOw72EPzpA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8' dependencies: - eslint: 8.57.0 + eslint: 9.0.0-rc.0 mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-n@16.6.2(eslint@8.57.0): + /eslint-plugin-n@16.6.2(eslint@9.0.0-rc.0): resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0-rc.0) builtins: 5.0.1 - eslint: 8.57.0 - eslint-plugin-es-x: 7.6.0(eslint@8.57.0) - get-tsconfig: 4.7.3 + eslint: 9.0.0-rc.0 + eslint-plugin-es-x: 7.5.0(eslint@9.0.0-rc.0) + get-tsconfig: 4.7.2 globals: 13.24.0 - ignore: 5.2.4 + ignore: 5.3.0 is-builtin-module: 3.2.1 - is-core-module: 2.13.0 + is-core-module: 2.13.1 minimatch: 3.1.2 - resolve: 1.22.4 - semver: 7.5.4 + resolve: 1.22.8 + semver: 7.6.0 + dev: true + + /eslint-plugin-no-only-tests@3.1.0: + resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} + engines: {node: '>=5.0.0'} dev: true /eslint-plugin-optimize-regex@1.2.1: resolution: {integrity: sha512-fUaU7Tj1G/KSTDTABJw4Wp427Rl7RPl9ViYTu1Jrv36fJw4DFhd4elPdXiuYtdPsNsvzn9GcVlKEssGIVjw0UQ==} engines: {node: '>=10'} dependencies: - regexp-tree: 0.1.24 + regexp-tree: 0.1.27 + dev: true + + /eslint-plugin-perfectionist@2.7.0(eslint@9.0.0-rc.0)(typescript@5.4.3)(vue-eslint-parser@9.4.2): + resolution: {integrity: sha512-RpSMc0T0DT9DlOj4APzwlAjCqQMxFdsIYlupe73eDkKLn1mMK7fVw2z3nj2y822szKOpvHA7bDa56ySOlr4GXw==} + peerDependencies: + astro-eslint-parser: ^0.16.0 + eslint: '>=8.0.0' + svelte: '>=3.0.0' + svelte-eslint-parser: ^0.33.0 + vue-eslint-parser: '>=9.0.0' + peerDependenciesMeta: + astro-eslint-parser: + optional: true + svelte: + optional: true + svelte-eslint-parser: + optional: true + vue-eslint-parser: + optional: true + dependencies: + '@typescript-eslint/utils': 6.21.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + eslint: 9.0.0-rc.0 + minimatch: 9.0.3 + natural-compare-lite: 1.4.0 + vue-eslint-parser: 9.4.2(eslint@9.0.0-rc.0) + transitivePeerDependencies: + - supports-color + - typescript dev: true - /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.6)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): + /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@9.0.0-rc.0)(prettier@3.2.5): resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3301,45 +3896,59 @@ packages: eslint-config-prettier: optional: true dependencies: - '@types/eslint': 8.56.6 - eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) + eslint: 9.0.0-rc.0 + eslint-config-prettier: 9.1.0(eslint@9.0.0-rc.0) prettier: 3.2.5 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.57.0): + /eslint-plugin-promise@6.1.1(eslint@9.0.0-rc.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.57.0 + eslint: 9.0.0-rc.0 dev: true - /eslint-plugin-sonarjs@0.24.0(eslint@8.57.0): + /eslint-plugin-sonarjs@0.24.0(eslint@9.0.0-rc.0): resolution: {integrity: sha512-87zp50mbbNrSTuoEOebdRQBPa0mdejA5UEjyuScyIw8hEpEjfWP89Qhkq5xVZfVyVSRQKZc9alVm7yRKQvvUmg==} engines: {node: '>=16'} peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.57.0 + eslint: 9.0.0-rc.0 + dev: true + + /eslint-plugin-toml@0.10.0(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-HzhRjePs4FDszPRY6ryHXV90MsSEkJsWnP175x33Iop/W6/hb80qjzImO5LlQfqhX3B0TkotOFSIigNI4AdGsw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.4 + eslint: 9.0.0-rc.0 + eslint-compat-utils: 0.5.0(eslint@9.0.0-rc.0) + lodash: 4.17.21 + toml-eslint-parser: 0.9.3 + transitivePeerDependencies: + - supports-color dev: true - /eslint-plugin-unicorn@51.0.1(eslint@8.57.0): + /eslint-plugin-unicorn@51.0.1(eslint@9.0.0-rc.0): resolution: {integrity: sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==} engines: {node: '>=16'} peerDependencies: eslint: '>=8.56.0' dependencies: '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0-rc.0) '@eslint/eslintrc': 2.1.4 ci-info: 4.0.0 clean-regexp: 1.0.0 - core-js-compat: 3.36.1 - eslint: 8.57.0 + core-js-compat: 3.35.0 + eslint: 9.0.0-rc.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -3348,12 +3957,78 @@ packages: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - semver: 7.5.4 + semver: 7.6.0 strip-indent: 3.0.0 transitivePeerDependencies: - supports-color dev: true + /eslint-plugin-vitest@0.4.0(@typescript-eslint/eslint-plugin@7.4.0)(eslint@9.0.0-rc.0)(typescript@5.4.3): + resolution: {integrity: sha512-3oWgZIwdWVBQ5plvkmOBjreIGLQRdYb7x54OP8uIRHeZyRVJIdOn9o/qWVb9292fDMC8jn7H7d9TSFBZqhrykQ==} + engines: {node: ^18.0.0 || >= 20.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': '*' + eslint: '>=8.0.0' + vitest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + vitest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 7.4.0(@typescript-eslint/parser@7.4.0)(eslint@9.0.0-rc.0)(typescript@5.4.3) + '@typescript-eslint/utils': 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + eslint: 9.0.0-rc.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-vue@9.24.0(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-9SkJMvF8NGMT9aQCwFc5rj8Wo1XWSMSHk36i7ZwdI614BU7sIOR28ZjuFPKp8YGymZN12BSEbiSwa7qikp+PBw==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0-rc.0) + eslint: 9.0.0-rc.0 + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.0.16 + semver: 7.6.0 + vue-eslint-parser: 9.4.2(eslint@9.0.0-rc.0) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-yml@1.13.2(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-1i71VhmsG5UxE41rIJmJjhlTTxYy7upAY5Hqj8AdBc7rfJzRIZr3a2spuOS8+N7ZDCWsHAWY3J6lzQNQHDv6Uw==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.4 + eslint: 9.0.0-rc.0 + eslint-compat-utils: 0.5.0(eslint@9.0.0-rc.0) + lodash: 4.17.21 + natural-compare: 1.4.0 + yaml-eslint-parser: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-processor-vue-blocks@0.1.1(@vue/compiler-sfc@3.4.21)(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-9+dU5lU881log570oBwpelaJmOfOzSniben7IWEDRYQPPWwlvaV7NhOtsTuUWDqpYT+dtKKWPsgz4OkOi+aZnA==} + peerDependencies: + '@vue/compiler-sfc': ^3.3.0 + eslint: ^8.50.0 + dependencies: + '@vue/compiler-sfc': 3.4.21 + eslint: 9.0.0-rc.0 + dev: true + /eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3362,46 +4037,63 @@ packages: estraverse: 5.3.0 dev: true + /eslint-scope@8.0.1: + resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-typegen@0.1.3: + resolution: {integrity: sha512-ry+4sLT/HyhjcBQMcCwir1/luU08EcPKir5cH6W4AFq9YmaIlHJPA61gISAmTSV6/yXnNDJwcBtpSCGVMG74bw==} + dependencies: + '@types/eslint': 8.56.6 + json-schema-to-typescript: 13.1.2 + ohash: 1.1.3 + dev: true + /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /eslint@9.0.0-rc.0: + resolution: {integrity: sha512-Xc4DSm5oJZyv/KFk3yoUhZNTyTsbXZTtyIGjhle0QSC9J/QPhdCC0U9c1RRmWqAoqZWVDnctWqFhaHVHJ1II2g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.6.2 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0-rc.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 3.0.2 + '@eslint/js': 9.0.0-rc.0 '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.0.1 + eslint-visitor-keys: 4.0.0 + espree: 10.0.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.20.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -3414,12 +4106,31 @@ packages: - supports-color dev: true + /esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.2 + dev: true + + /espree@10.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 4.0.0 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true @@ -3457,6 +4168,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + dev: true + /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} dev: true @@ -3485,11 +4203,10 @@ packages: human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.1.0 + npm-run-path: 5.2.0 onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 - dev: true /expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} @@ -3498,6 +4215,16 @@ packages: homedir-polyfill: 1.0.3 dev: true + /expect-type@0.15.0: + resolution: {integrity: sha512-yWnriYB4e8G54M5/fAFj7rCIBiKs1HAACaY13kCz6Ku0dezjS9aMcfcdVK2X8Tv2tEV1BPz/wKfQ7WA4S/d8aA==} + dev: true + + /ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + dependencies: + type: 2.7.2 + dev: true + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -3511,8 +4238,8 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff@1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true /fast-equals@5.0.1: @@ -3543,8 +4270,8 @@ packages: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + /fastq@1.16.0: + resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} dependencies: reusify: 1.0.4 dev: true @@ -3573,25 +4300,18 @@ packages: escape-string-regexp: 1.0.5 dev: true - /figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + /figures@6.0.1: + resolution: {integrity: sha512-0oY/olScYD4IhQ8u//gCPA4F3mlTn2dacYmiDm/mbDQvpmLjV4uH+zhsQ5IyXRyvqkvtUkXkNdGvg5OFJTCsuQ==} engines: {node: '>=18'} dependencies: is-unicode-supported: 2.0.0 dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.0.4 - dev: true - /file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} dependencies: - flat-cache: 4.0.1 + flat-cache: 4.0.0 dev: true /fill-range@7.0.1: @@ -3675,28 +4395,17 @@ packages: resolve-dir: 1.0.1 dev: true - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.7 - rimraf: 3.0.2 - dev: true - - /flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + /flat-cache@4.0.0: + resolution: {integrity: sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==} engines: {node: '>=16'} dependencies: - flatted: 3.3.1 + flatted: 3.2.9 keyv: 4.5.4 + rimraf: 5.0.5 dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true - - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /for-each@0.3.3: @@ -3726,16 +4435,16 @@ packages: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: true - /fs-extra@11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: true /fs-extra@9.1.0: @@ -3743,17 +4452,17 @@ packages: engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: true /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true @@ -3764,23 +4473,13 @@ packages: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.2 - functions-have-names: 1.2.3 - dev: true - /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.22.3 functions-have-names: 1.2.3 dev: true @@ -3803,15 +4502,18 @@ packages: engines: {node: '>=18'} dev: true - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: - es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.2 + hasown: 2.0.0 + dev: true + + /get-stdin@8.0.0: + resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} + engines: {node: '>=10'} dev: true /get-stdin@9.0.0: @@ -3824,39 +4526,25 @@ packages: engines: {node: '>=10'} dev: true - /get-stream@7.0.0: - resolution: {integrity: sha512-ql6FW5b8tgMYvI4UaoxG3EQN3VyZ6VeQpxNBGg5BZ4xD4u+HJeprzhMMA4OCBEGQgSR+m87pstWMpiVW64W8Fw==} + /get-stream@7.0.1: + resolution: {integrity: sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==} engines: {node: '>=16'} dev: true /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - dev: true /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 dev: true - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - dev: true - - /get-tsconfig@4.5.0: - resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} - dev: true - - /get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} dependencies: resolve-pkg-maps: 1.0.0 dev: true @@ -3873,7 +4561,7 @@ packages: split2: 1.0.0 stream-combiner2: 1.1.1 through2: 2.0.5 - traverse: 0.6.7 + traverse: 0.6.8 dev: true /git-raw-commits@4.0.0: @@ -3900,6 +4588,16 @@ packages: is-glob: 4.0.3 dev: true + /glob-promise@4.2.2(glob@7.2.3): + resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==} + engines: {node: '>=12'} + peerDependencies: + glob: ^7.1.6 + dependencies: + '@types/glob': 7.2.0 + glob: 7.2.3 + dev: true + /glob@10.3.10: resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} engines: {node: '>=16 || 14 >=14.17'} @@ -3908,7 +4606,7 @@ packages: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.3 - minipass: 6.0.2 + minipass: 7.0.4 path-scurry: 1.10.1 dev: true @@ -3923,17 +4621,6 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - dev: true - /global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} @@ -3961,13 +4648,6 @@ packages: which: 1.3.1 dev: true - /globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -3975,6 +4655,16 @@ packages: type-fest: 0.20.2 dev: true + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + dev: true + + /globals@15.0.0: + resolution: {integrity: sha512-m/C/yR4mjO6pXDTm9/R/SpYTAIyaUB4EOzcaaMEl7mds7Mshct9GfejiJNQGjHHbdMPey13Kpu4TMbYi9ex1pw==} + engines: {node: '>=18'} + dev: false + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -3989,29 +4679,29 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.0 merge2: 1.4.1 slash: 3.0.0 dev: true - /globby@13.1.4: - resolution: {integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==} + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.0 merge2: 1.4.1 slash: 4.0.0 dev: true - /globby@14.0.1: - resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} + /globby@14.0.0: + resolution: {integrity: sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==} engines: {node: '>=18'} dependencies: - '@sindresorhus/merge-streams': 2.3.0 + '@sindresorhus/merge-streams': 1.0.0 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.0 path-type: 5.0.0 slash: 5.1.0 unicorn-magic: 0.1.0 @@ -4020,7 +4710,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.2 dev: true /graceful-fs@4.2.10: @@ -4035,8 +4725,8 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /handlebars@4.7.7: - resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} hasBin: true dependencies: @@ -4071,16 +4761,10 @@ packages: resolution: {integrity: sha512-14qdBKoonU99XDhWcFKZTShK+QV47qU97u8zzoVo9cL5TZ3BmBHXogItSt9qJjR0KUMFRhcCW8uGIGl8nkl7Aw==} dev: true - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - dependencies: - get-intrinsic: 1.2.4 - dev: true - - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - es-define-property: 1.0.0 + get-intrinsic: 1.2.2 dev: true /has-proto@1.0.1: @@ -4088,11 +4772,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true - /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -4105,25 +4784,16 @@ packages: has-symbols: 1.0.3 dev: true - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.2 dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 + /helpertypes@0.0.19: + resolution: {integrity: sha512-J00e55zffgi3yVnUp0UdbMztNkr2PnizEkOe9URNohnrNhW5X0QpegkuLpOmFQInpi93Nb8MCjQRHAiCDF42NQ==} + engines: {node: '>=10.0.0'} dev: true /highlight.js@10.7.3: @@ -4157,7 +4827,7 @@ packages: resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} engines: {node: ^16.14.0 || >=18.0.0} dependencies: - lru-cache: 10.2.0 + lru-cache: 10.1.0 dev: true /http-proxy-agent@7.0.0: @@ -4170,8 +4840,8 @@ packages: - supports-color dev: true - /https-proxy-agent@7.0.0: - resolution: {integrity: sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==} + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 @@ -4188,7 +4858,6 @@ packages: /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - dev: true /husky@9.0.11: resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} @@ -4211,13 +4880,8 @@ packages: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true - - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} dev: true @@ -4287,11 +4951,6 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /ini@4.1.2: - resolution: {integrity: sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - /inquirer@8.2.5: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} @@ -4306,28 +4965,19 @@ packages: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.8.0 + rxjs: 7.8.1 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 7.0.0 dev: true - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has: 1.0.3 - side-channel: 1.0.4 - dev: true - - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 + get-intrinsic: 1.2.2 + hasown: 2.0.0 side-channel: 1.0.4 dev: true @@ -4353,21 +5003,14 @@ packages: /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-typed-array: 1.1.13 - dev: true - - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 dev: true /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + requiresBuild: true dev: true /is-bigint@1.0.4: @@ -4380,8 +5023,8 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.5 + has-tostringtag: 1.0.0 dev: true /is-builtin-module@3.2.1: @@ -4396,30 +5039,17 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - dependencies: - has: 1.0.3 - dev: true - /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.2 - dev: true - - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - dependencies: - is-typed-array: 1.1.13 + hasown: 2.0.0 dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-decimal@1.0.4: @@ -4459,14 +5089,14 @@ packages: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: true - /is-immutable-type@2.0.4(eslint@8.57.0)(typescript@5.4.3): + /is-immutable-type@2.0.4(eslint@9.0.0-rc.0)(typescript@5.4.3): resolution: {integrity: sha512-kjNGSmAQdEj7NJ/Cim9u6OUB/efEsuoUU3fCygl+o0DBwNS0blVjRHumRBX9cBwpZQEQaYVpVLO635HqWvdZRw==} peerDependencies: eslint: '*' typescript: '>=4.7.4' dependencies: - '@typescript-eslint/type-utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - eslint: 8.57.0 + '@typescript-eslint/type-utils': 7.4.0(eslint@9.0.0-rc.0)(typescript@5.4.3) + eslint: 9.0.0-rc.0 ts-api-utils: 1.3.0(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: @@ -4483,25 +5113,16 @@ packages: engines: {node: '>= 4'} dev: true - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true - /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true - /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-number@4.0.0: @@ -4529,31 +5150,22 @@ packages: engines: {node: '>=12'} dev: true - /is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - dependencies: - '@types/estree': 1.0.5 + /is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} dev: true /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.5 + has-tostringtag: 1.0.0 dev: true /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.7 - dev: true - - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 dev: true /is-stream@2.0.1: @@ -4564,7 +5176,6 @@ packages: /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -4587,22 +5198,11 @@ packages: text-extensions: 2.4.0 dev: true - /is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: true - - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.15 + which-typed-array: 1.1.13 dev: true /is-typedarray@1.0.0: @@ -4626,7 +5226,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 dev: true /is-windows@1.0.2: @@ -4642,9 +5242,13 @@ packages: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true + /isbot@3.8.0: + resolution: {integrity: sha512-vne1mzQUTR+qsMLeCBL9+/tgnDXRyc2pygLGl/WsgA+EZKIiB5Ehu0CiVTHIIk30zhJ24uGz4M5Ppse37aR0Hg==} + engines: {node: '>=12'} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true /isexe@3.1.1: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} @@ -4688,6 +5292,7 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + requiresBuild: true dev: true /js-yaml@4.1.0: @@ -4723,19 +5328,42 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + requiresBuild: true dev: true - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} + /json-parse-even-better-errors@3.0.1: + resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true + /json-schema-to-typescript@13.1.2: + resolution: {integrity: sha512-17G+mjx4nunvOpkPvcz7fdwUwYCEwyH8vR3Ym3rFiQ8uzAL3go+c1306Kk7iGRk8HuXBXqy+JJJmpYl0cvOllw==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + '@bcherny/json-schema-ref-parser': 10.0.5-fork + '@types/json-schema': 7.0.15 + '@types/lodash': 4.17.0 + '@types/prettier': 2.7.3 + cli-color: 2.0.4 + get-stdin: 8.0.0 + glob: 7.2.3 + glob-promise: 4.2.2(glob@7.2.3) + is-glob: 4.0.3 + lodash: 4.17.21 + minimist: 1.2.8 + mkdirp: 1.0.4 + mz: 2.7.0 + prettier: 2.8.8 + dev: true + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + requiresBuild: true dev: true /json-stable-stringify-without-jsonify@1.0.1: @@ -4753,22 +5381,25 @@ packages: minimist: 1.2.8 dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + /jsonc-eslint-parser@2.4.0: + resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.6.0 dev: true /jsonc-parser@3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - dev: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jsonparse@1.3.1: @@ -4782,8 +5413,8 @@ packages: json-buffer: 3.0.1 dev: true - /knip@5.5.0(@types/node@18.11.9)(typescript@5.4.3): - resolution: {integrity: sha512-50hMAFPBW2z/IJeW5rNKKNNLXVQNJFJDQ72C4o+vsCNCiPv5mn4M52iQVsp8hwjOcVGYB7bKFKaNVzPAQ6C4gw==} + /knip@5.6.1(@types/node@20.11.30)(typescript@5.4.3): + resolution: {integrity: sha512-occwYqHrV6KSyM1DbpWj8qQ8pCQzsdxVxYbjhYcryoXxWmHG2scyxxB4HyxVmp3Xdora4Px+3ZV5QQDi2ArerA==} engines: {node: '>=18.6.0'} hasBin: true peerDependencies: @@ -4797,7 +5428,7 @@ packages: '@pnpm/logger': 5.0.0 '@pnpm/workspace.pkgs-graph': 2.0.15(@pnpm/logger@5.0.0) '@snyk/github-codeowners': 1.1.0 - '@types/node': 18.11.9 + '@types/node': 20.11.30 '@types/picomatch': 2.3.3 easy-table: 1.2.0 fast-glob: 3.3.2 @@ -4834,6 +5465,7 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + requiresBuild: true dev: true /linkify-it@5.0.0: @@ -4877,7 +5509,7 @@ packages: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 @@ -4887,12 +5519,20 @@ packages: resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 5.2.0 strip-bom: 4.0.0 type-fest: 0.6.0 dev: true + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.4.2 + pkg-types: 1.0.3 + dev: false + /locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -4964,6 +5604,7 @@ packages: /lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + requiresBuild: true dev: true /lodash.snakecase@4.1.1: @@ -4976,6 +5617,7 @@ packages: /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + requiresBuild: true dev: true /lodash.uniqby@4.7.0: @@ -5002,7 +5644,7 @@ packages: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} dependencies: - ansi-escapes: 6.2.1 + ansi-escapes: 6.2.0 cli-cursor: 4.0.0 slice-ansi: 7.1.0 strip-ansi: 7.1.0 @@ -5014,8 +5656,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} engines: {node: 14 || >=16.14} dev: true @@ -5026,6 +5668,12 @@ packages: yallist: 4.0.0 dev: true + /lru-queue@0.1.0: + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + dependencies: + es5-ext: 0.10.64 + dev: true + /magic-string@0.16.0: resolution: {integrity: sha512-c4BEos3y6G2qO0B9X7K0FVLOPT9uGrjYwYRLFmDqyl5YMboUviyecnXWp94fJTSMwPw2/sf+CEYt5AGpmklkkQ==} dependencies: @@ -5039,10 +5687,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - /map-age-cleaner@0.1.3: resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} engines: {node: '>=6'} @@ -5067,6 +5711,18 @@ packages: uc.micro: 2.1.0 dev: true + /markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + dev: true + /markdownlint-cli@0.39.0: resolution: {integrity: sha512-ZuFN7Xpsbn1Nbp0YYkeLOfXOMOfLQBik2lKRy8pVI/llmKQ2uW7x+8k5OMgF6o7XCsTDSYC/OOmeJ+3qplvnJQ==} engines: {node: '>=18'} @@ -5075,7 +5731,7 @@ packages: commander: 11.1.0 get-stdin: 9.0.0 glob: 10.3.10 - ignore: 5.3.1 + ignore: 5.3.0 js-yaml: 4.1.0 jsonc-parser: 3.2.1 markdownlint: 0.33.0 @@ -5088,6 +5744,11 @@ packages: engines: {node: '>=16'} dev: true + /markdownlint-micromark@0.1.9: + resolution: {integrity: sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==} + engines: {node: '>=18'} + dev: true + /markdownlint@0.33.0: resolution: {integrity: sha512-4lbtT14A3m0LPX1WS/3d1m7Blg+ZwiLq36WvjQqFGsX3Gik99NV+VXp/PW3n+Q62xyPdbvGOCfjPqjW+/SKMig==} engines: {node: '>=18'} @@ -5096,23 +5757,31 @@ packages: markdownlint-micromark: 0.1.8 dev: true - /marked-terminal@7.0.0(marked@12.0.1): + /markdownlint@0.34.0: + resolution: {integrity: sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==} + engines: {node: '>=18'} + dependencies: + markdown-it: 14.1.0 + markdownlint-micromark: 0.1.9 + dev: true + + /marked-terminal@7.0.0(marked@12.0.0): resolution: {integrity: sha512-sNEx8nn9Ktcm6pL0TnRz8tnXq/mSS0Q1FRSwJOAqw4lAB4l49UeDf85Gm1n9RPFm5qurCPjwi1StAQT2XExhZw==} engines: {node: '>=16.0.0'} peerDependencies: marked: '>=1 <13' dependencies: - ansi-escapes: 6.2.1 + ansi-escapes: 6.2.0 chalk: 5.3.0 cli-highlight: 2.1.11 cli-table3: 0.6.3 - marked: 12.0.1 + marked: 12.0.0 node-emoji: 2.1.3 supports-hyperlinks: 3.0.0 dev: true - /marked@12.0.1: - resolution: {integrity: sha512-Y1/V2yafOcOdWQCX0XpAKXzDakPOpn6U0YLxTJs3cww6VxOzZV1BTOOYWLvH3gX38cq+iLwljHHTnMtlDfg01Q==} + /marked@12.0.0: + resolution: {integrity: sha512-Vkwtq9rLqXryZnWaQc86+FHLC6tr/fycMfYAhiOIXkrNmeGAyhSxjqu0Rs1i0bBqw5u0S7+lV9fdH2ZSVaoa0w==} engines: {node: '>= 18'} hasBin: true dev: true @@ -5120,7 +5789,7 @@ packages: /mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} dependencies: - '@types/mdast': 3.0.10 + '@types/mdast': 3.0.15 mdast-util-to-string: 2.0.0 micromark: 2.11.4 parse-entities: 2.0.0 @@ -5153,6 +5822,19 @@ packages: mimic-fn: 3.1.0 dev: true + /memoizee@0.4.15: + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-weak-map: 2.0.3 + event-emitter: 0.3.5 + is-promise: 2.2.2 + lru-queue: 0.1.0 + next-tick: 1.1.0 + timers-ext: 0.1.7 + dev: true + /meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} @@ -5160,7 +5842,6 @@ packages: /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -5207,7 +5888,6 @@ packages: /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: true /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -5215,16 +5895,9 @@ packages: dev: true /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: - brace-expansion: 2.0.1 + brace-expansion: 1.1.11 dev: true /minimatch@9.0.3: @@ -5242,16 +5915,25 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@6.0.2: - resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true - /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} dev: true + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.2 + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true @@ -5272,6 +5954,16 @@ packages: thenify-all: 1.6.0 dev: true + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -5283,7 +5975,7 @@ packages: dependencies: json-stringify-safe: 5.0.1 minimist: 1.2.8 - readable-stream: 3.6.1 + readable-stream: 3.6.2 split2: 3.2.2 through2: 4.0.2 dev: true @@ -5296,6 +5988,10 @@ packages: resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} dev: true + /next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + dev: true + /node-emoji@2.1.3: resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} engines: {node: '>=18'} @@ -5324,8 +6020,8 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.4 - semver: 5.7.1 + resolve: 1.22.8 + semver: 5.7.2 validate-npm-package-license: 3.0.4 dev: true @@ -5356,8 +6052,8 @@ packages: semver: 7.6.0 dev: true - /npm-normalize-package-bin@3.0.0: - resolution: {integrity: sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==} + /npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true @@ -5376,7 +6072,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: npm-install-checks: 6.3.0 - npm-normalize-package-bin: 3.0.0 + npm-normalize-package-bin: 3.0.1 npm-package-arg: 11.0.1 semver: 7.6.0 dev: true @@ -5388,12 +6084,11 @@ packages: path-key: 3.1.1 dev: true - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + /npm-run-path@5.2.0: + resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 - dev: true /npm@10.5.0: resolution: {integrity: sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A==} @@ -5472,15 +6167,17 @@ packages: - which - write-file-atomic + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: true + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true - /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true @@ -5494,57 +6191,55 @@ packages: resolution: {integrity: sha512-3ECr6K831I4xX/Mduxr9UC+HPOz/d6WKKYj9p4cmC8Lg8p7g8gitzsxNX5IWlSIgFWN/a4JgrJaoAMKn20oKwA==} dev: true + /object-path@0.11.8: + resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} + engines: {node: '>= 10.12.0'} + dev: true + /object-values@1.0.0: resolution: {integrity: sha512-+8hwcz/JnQ9EpLIXzN0Rs7DLsBpJNT/xYehtB/jU93tHYr5BFEO8E+JGQNOSqE7opVzz5cGksKFHt7uUJVLSjQ==} engines: {node: '>=0.10.0'} dev: true - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - /object.assign@4.1.5: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.2 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: true - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 dev: true - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 + dev: true + + /ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} dev: true /once@1.4.0: @@ -5565,7 +6260,6 @@ packages: engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 - dev: true /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -5586,7 +6280,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.7.0 + cli-spinners: 2.9.2 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -5720,6 +6414,7 @@ packages: /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + requiresBuild: true dependencies: callsites: 3.1.0 dev: true @@ -5754,7 +6449,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -5764,7 +6459,7 @@ packages: resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} engines: {node: '>=18'} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.23.5 index-to-position: 0.1.2 type-fest: 4.14.0 dev: true @@ -5823,12 +6518,10 @@ packages: /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: true /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -5838,8 +6531,8 @@ packages: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.2.0 - minipass: 6.0.2 + lru-cache: 10.1.0 + minipass: 7.0.4 dev: true /path-temp@2.1.0: @@ -5866,9 +6559,11 @@ packages: engines: {node: '>=12'} dev: true + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -5899,14 +6594,33 @@ packages: load-json-file: 4.0.0 dev: true + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.1 + mlly: 1.4.2 + pathe: 1.1.1 + /pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} dev: true - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 dev: true /prelude-ls@1.2.1: @@ -5918,7 +6632,17 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} dependencies: - fast-diff: 1.2.0 + fast-diff: 1.3.0 + dev: true + + /prettier-plugin-multiline-arrays@3.0.4(prettier@3.2.5): + resolution: {integrity: sha512-Oj9ZfEisLOF0did1CGXXQLTA0WEChT2pfI06pNA1PbvWqbys9a5xoys6DoZlDL+Uio0uW1XwKZkeKMAkG1EEfQ==} + peerDependencies: + prettier: '>=3.0.0' + dependencies: + '@augment-vir/common': 23.4.0 + prettier: 3.2.5 + proxy-vir: 1.0.0 dev: true /prettier-plugin-packagejson@2.4.12(prettier@3.2.5): @@ -5934,6 +6658,12 @@ packages: synckit: 0.9.0 dev: true + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + /prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} @@ -5977,14 +6707,21 @@ packages: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} dev: true + /proxy-vir@1.0.0: + resolution: {integrity: sha512-WV1gkBxUOwLSz0Bn09tisIqLK7leAqtFm/474t3L0hQKJw7/gdrkGcWw0/OT1PhSy+TDS6swfq7Niuoq3XJhkQ==} + dependencies: + '@augment-vir/common': 23.4.0 + dev: true + /punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} dev: true - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + requiresBuild: true dev: true /queue-microtask@1.2.3: @@ -6005,8 +6742,8 @@ packages: resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - json-parse-even-better-errors: 3.0.0 - npm-normalize-package-bin: 3.0.0 + json-parse-even-better-errors: 3.0.1 + npm-normalize-package-bin: 3.0.1 dev: true /read-pkg-up@11.0.0: @@ -6070,8 +6807,8 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream@3.6.1: - resolution: {integrity: sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==} + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: inherits: 2.0.4 @@ -6079,40 +6816,25 @@ packages: util-deprecate: 1.0.2 dev: true - /regexp-tree@0.1.24: - resolution: {integrity: sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==} - hasBin: true - dev: true - /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true dev: true - /regexp.prototype.flags@1.5.0: - resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - functions-have-names: 1.2.3 - dev: true - - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 + set-function-name: 2.0.1 dev: true /registry-auth-token@5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} dependencies: - '@pnpm/npm-conf': 2.1.0 + '@pnpm/npm-conf': 2.2.2 dev: true /regjsparser@0.10.0: @@ -6143,6 +6865,7 @@ packages: /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: true /resolve-dir@1.0.1: @@ -6156,6 +6879,7 @@ packages: /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + requiresBuild: true dev: true /resolve-from@5.0.0: @@ -6167,8 +6891,8 @@ packages: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true - /resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: is-core-module: 2.13.1 @@ -6225,7 +6949,7 @@ packages: glob: 10.3.10 dev: true - /rollup-plugin-auto-external@2.0.0(rollup@4.13.0): + /rollup-plugin-auto-external@2.0.0(rollup@4.13.1): resolution: {integrity: sha512-HQM3ZkZYfSam1uoZtAB9sK26EiAsfs1phrkf91c/YX+S07wugyRXSigBxrIwiLr5EPPilKYmoMxsrnlGBsXnuQ==} engines: {node: '>=6'} peerDependencies: @@ -6233,32 +6957,76 @@ packages: dependencies: builtins: 2.0.1 read-pkg: 3.0.0 - rollup: 4.13.0 + rollup: 4.13.1 safe-resolve: 1.0.0 - semver: 5.7.1 + semver: 5.7.2 + dev: true + + /rollup-plugin-ts@3.4.5(rollup@4.13.1)(typescript@5.4.3): + resolution: {integrity: sha512-9iCstRJpEZXSRQuXitlSZAzcGlrqTbJg1pE4CMbEi6xYldxVncdPyzA2I+j6vnh73wBymZckerS+Q/iEE/M3Ow==} + engines: {node: '>=16.15.1', npm: '>=7.0.0', pnpm: '>=3.2.0', yarn: '>=1.13'} + peerDependencies: + '@babel/core': '>=7.x' + '@babel/plugin-transform-runtime': '>=7.x' + '@babel/preset-env': '>=7.x' + '@babel/preset-typescript': '>=7.x' + '@babel/runtime': '>=7.x' + '@swc/core': '>=1.x' + '@swc/helpers': '>=0.2' + rollup: '>=1.x || >=2.x || >=3.x' + typescript: '>=3.2.x || >= 4.x || >= 5.x' + peerDependenciesMeta: + '@babel/core': + optional: true + '@babel/plugin-transform-runtime': + optional: true + '@babel/preset-env': + optional: true + '@babel/preset-typescript': + optional: true + '@babel/runtime': + optional: true + '@swc/core': + optional: true + '@swc/helpers': + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.13.1) + '@wessberg/stringutil': 1.0.19 + ansi-colors: 4.1.3 + browserslist: 4.22.2 + browserslist-generator: 2.1.0 + compatfactory: 3.0.0(typescript@5.4.3) + crosspath: 2.0.0 + magic-string: 0.30.8 + rollup: 4.13.1 + ts-clone-node: 3.0.0(typescript@5.4.3) + tslib: 2.6.2 + typescript: 5.4.3 dev: true - /rollup@4.13.0: - resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==} + /rollup@4.13.1: + resolution: {integrity: sha512-hFi+fU132IvJ2ZuihN56dwgpltpmLZHZWsx27rMCTZ2sYwrqlgL5sECGy1eeV2lAihD8EzChBVVhsXci0wD4Tg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.13.0 - '@rollup/rollup-android-arm64': 4.13.0 - '@rollup/rollup-darwin-arm64': 4.13.0 - '@rollup/rollup-darwin-x64': 4.13.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.13.0 - '@rollup/rollup-linux-arm64-gnu': 4.13.0 - '@rollup/rollup-linux-arm64-musl': 4.13.0 - '@rollup/rollup-linux-riscv64-gnu': 4.13.0 - '@rollup/rollup-linux-x64-gnu': 4.13.0 - '@rollup/rollup-linux-x64-musl': 4.13.0 - '@rollup/rollup-win32-arm64-msvc': 4.13.0 - '@rollup/rollup-win32-ia32-msvc': 4.13.0 - '@rollup/rollup-win32-x64-msvc': 4.13.0 - fsevents: 2.3.2 + '@rollup/rollup-android-arm-eabi': 4.13.1 + '@rollup/rollup-android-arm64': 4.13.1 + '@rollup/rollup-darwin-arm64': 4.13.1 + '@rollup/rollup-darwin-x64': 4.13.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.13.1 + '@rollup/rollup-linux-arm64-gnu': 4.13.1 + '@rollup/rollup-linux-arm64-musl': 4.13.1 + '@rollup/rollup-linux-riscv64-gnu': 4.13.1 + '@rollup/rollup-linux-s390x-gnu': 4.13.1 + '@rollup/rollup-linux-x64-gnu': 4.13.1 + '@rollup/rollup-linux-x64-musl': 4.13.1 + '@rollup/rollup-win32-arm64-msvc': 4.13.1 + '@rollup/rollup-win32-ia32-msvc': 4.13.1 + '@rollup/rollup-win32-x64-msvc': 4.13.1 + fsevents: 2.3.3 dev: true /run-async@2.4.1: @@ -6271,7 +7039,7 @@ packages: hasBin: true dependencies: deep-extend: 0.6.0 - ini: 4.1.2 + ini: 4.1.1 minimist: 1.2.8 strip-json-comments: 3.1.1 dev: true @@ -6282,28 +7050,26 @@ packages: queue-microtask: 1.2.3 dev: true - /rxjs@7.8.0: - resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} + /run-time-assertions@1.1.0: + resolution: {integrity: sha512-PDSUPKzDKF2KB+gv3/0c0M4ppsX4gJouHJHq3Ed1RqWF+wyRBRlRE+lsXfok2mrDtn593J6LgZXbOJH6GSb4QA==} dependencies: - tslib: 2.6.2 + '@augment-vir/common': 26.1.0 + expect-type: 0.15.0 + type-fest: 4.14.0 dev: true - /safe-array-concat@1.0.0: - resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} - engines: {node: '>=0.4'} + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 + tslib: 2.6.2 dev: true - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -6319,17 +7085,8 @@ packages: /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-regex: 1.1.4 - dev: true - - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-regex: 1.1.4 dev: true @@ -6356,7 +7113,7 @@ packages: debug: 4.3.4 env-ci: 11.0.0 execa: 8.0.1 - figures: 6.1.0 + figures: 6.0.1 find-versions: 5.1.0 get-stream: 6.0.1 git-log-parser: 1.2.0 @@ -6364,8 +7121,8 @@ packages: hosted-git-info: 7.0.1 import-from-esm: 1.3.3 lodash-es: 4.17.21 - marked: 12.0.1 - marked-terminal: 7.0.0(marked@12.0.1) + marked: 12.0.0 + marked-terminal: 7.0.0(marked@12.0.0) micromatch: 4.0.5 p-each-series: 3.0.0 p-reduce: 3.0.0 @@ -6374,7 +7131,7 @@ packages: semver: 7.6.0 semver-diff: 4.0.0 signale: 1.4.0 - yargs: 17.7.1 + yargs: 17.7.2 transitivePeerDependencies: - supports-color - typescript @@ -6392,8 +7149,8 @@ packages: engines: {node: '>=12'} dev: true - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true dev: true @@ -6402,14 +7159,6 @@ packages: hasBin: true dev: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} @@ -6418,26 +7167,23 @@ packages: lru-cache: 6.0.0 dev: true - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 gopd: 1.0.1 - has-property-descriptors: 1.0.2 + has-property-descriptors: 1.0.1 dev: true - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 + define-data-property: 1.1.1 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 + has-property-descriptors: 1.0.1 dev: true /shebang-command@2.0.0: @@ -6445,12 +7191,10 @@ packages: engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true /shell-quote-word@1.0.1: resolution: {integrity: sha512-lT297f1WLAdq0A4O+AknIFRP6kkiI3s8C913eJ0XqBxJbZPGWUNkRQk2u8zk4bEAjUJ5i+fSLwB6z1HzeT+DEg==} @@ -6459,8 +7203,8 @@ packages: /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 object-inspect: 1.13.1 dev: true @@ -6471,7 +7215,6 @@ packages: /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - dev: true /signale@1.4.0: resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} @@ -6482,6 +7225,10 @@ packages: pkg-conf: 2.1.0 dev: true + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: false + /skin-tone@2.0.0: resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} engines: {node: '>=8'} @@ -6534,14 +7281,19 @@ packages: hasBin: true dependencies: detect-indent: 7.0.1 - detect-newline: 4.0.0 + detect-newline: 4.0.1 get-stdin: 9.0.0 git-hooks-list: 3.1.0 - globby: 13.1.4 + globby: 13.2.2 is-plain-obj: 4.1.0 sort-object-keys: 1.1.3 dev: true + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + dev: true + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -6555,7 +7307,7 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.16 dev: true /spdx-exceptions@2.3.0: @@ -6566,18 +7318,18 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.16 dev: true /spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.16 dev: true - /spdx-license-ids@3.0.12: - resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true /split2@1.0.0: @@ -6589,7 +7341,7 @@ packages: /split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: - readable-stream: 3.6.1 + readable-stream: 3.6.2 dev: true /split2@4.2.0: @@ -6634,8 +7386,8 @@ packages: strip-ansi: 7.1.0 dev: true - /string-width@7.1.0: - resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + /string-width@7.0.0: + resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} engines: {node: '>=18'} dependencies: emoji-regex: 10.3.0 @@ -6647,56 +7399,29 @@ packages: resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} dev: true - /string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.2 - dev: true - - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.2 - es-object-atoms: 1.0.0 - dev: true - - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.2 - dev: true - - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: true - /string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.22.3 dev: true - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: true /string_decoder@1.1.1: @@ -6743,7 +7468,6 @@ packages: /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: true /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -6798,11 +7522,18 @@ packages: engines: {node: '>= 0.4'} dev: true + /synckit@0.6.2: + resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} + engines: {node: '>=12.20'} + dependencies: + tslib: 2.6.2 + dev: true + /synckit@0.8.8: resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/core': 0.1.1 + '@pkgr/core': 0.1.0 tslib: 2.6.2 dev: true @@ -6810,7 +7541,7 @@ packages: resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/core': 0.1.1 + '@pkgr/core': 0.1.0 tslib: 2.6.2 dev: true @@ -6819,17 +7550,17 @@ packages: engines: {node: '>=6'} dev: true - /temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} + /temp-dir@3.0.0: + resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} + engines: {node: '>=14.16'} dev: true - /tempy@3.0.0: - resolution: {integrity: sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==} + /tempy@3.1.0: + resolution: {integrity: sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==} engines: {node: '>=14.16'} dependencies: is-stream: 3.0.0 - temp-dir: 2.0.0 + temp-dir: 3.0.0 type-fest: 2.19.0 unique-string: 3.0.0 dev: true @@ -6866,13 +7597,20 @@ packages: /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: - readable-stream: 3.6.1 + readable-stream: 3.6.2 dev: true /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true + /timers-ext@0.1.7: + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + dependencies: + es5-ext: 0.10.64 + next-tick: 1.1.0 + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -6880,6 +7618,11 @@ packages: os-tmpdir: 1.0.2 dev: true + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + /to-no-case@1.0.2: resolution: {integrity: sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==} dev: true @@ -6903,17 +7646,16 @@ packages: to-no-case: 1.0.2 dev: true - /traverse@0.6.7: - resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} + /toml-eslint-parser@0.9.3: + resolution: {integrity: sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + eslint-visitor-keys: 3.4.3 dev: true - /ts-api-utils@1.0.1(typescript@5.4.3): - resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - dependencies: - typescript: 5.4.3 + /traverse@0.6.8: + resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} + engines: {node: '>= 0.4'} dev: true /ts-api-utils@1.3.0(typescript@5.4.3): @@ -6925,35 +7667,23 @@ packages: typescript: 5.4.3 dev: true - /ts-node@10.9.2(@types/node@18.11.9)(typescript@5.4.3): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + /ts-clone-node@3.0.0(typescript@5.4.3): + resolution: {integrity: sha512-egavvyHbIoelkgh1IC2agNB1uMNjB8VJgh0g/cn0bg2XXTcrtjrGMzEk4OD3Fi2hocICjP3vMa56nkzIzq0FRg==} + engines: {node: '>=14.9.0'} + peerDependencies: + typescript: ^3.x || ^4.x || ^5.x + dependencies: + compatfactory: 3.0.0(typescript@5.4.3) + typescript: 5.4.3 + dev: true + + /tsc-files@1.1.4(typescript@5.4.3): + resolution: {integrity: sha512-RePsRsOLru3BPpnf237y1Xe1oCGta8rmSYzM76kYo5tLGsv5R2r3s64yapYorGTPuuLyfS9NVbh9ydzmvNie2w==} hasBin: true peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + typescript: '>=3' dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 18.11.9 - acorn: 8.10.0 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 typescript: 5.4.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 dev: true /tsconfig-paths@3.15.0: @@ -6965,19 +7695,21 @@ packages: strip-bom: 3.0.0 dev: true - /tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true + /tsx@4.7.1: + resolution: {integrity: sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + esbuild: 0.19.11 + get-tsconfig: 4.7.2 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -7015,91 +7747,56 @@ packages: engines: {node: '>=12.20'} dev: true + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: true + /type-fest@4.14.0: resolution: {integrity: sha512-on5/Cw89wwqGZQu+yWO0gGMGu8VNxsaW9SB2HE8yJjllEk7IDTwnSN1dUVldYILhYPN5HzD7WAaw2cc/jBfn0Q==} engines: {node: '>=16'} dev: true - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-typed-array: 1.1.13 + /type@2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} dev: true - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 dev: true /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + has-proto: 1.0.1 + is-typed-array: 1.1.12 dev: true /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + has-proto: 1.0.1 + is-typed-array: 1.1.12 dev: true /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - is-typed-array: 1.1.13 - dev: true - - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 + is-typed-array: 1.1.12 dev: true /typedarray-to-buffer@3.1.5: @@ -7114,10 +7811,17 @@ packages: hasBin: true dev: true + /ua-parser-js@1.0.37: + resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} + dev: true + /uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} dev: true + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -7129,12 +7833,25 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 dev: true + /unconfig@0.3.11: + resolution: {integrity: sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==} + dependencies: + '@antfu/utils': 0.7.7 + defu: 6.1.4 + jiti: 1.21.0 + mlly: 1.4.2 + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + /unescape-js@1.1.4: resolution: {integrity: sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==} dependencies: @@ -7168,25 +7885,25 @@ packages: /unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.10 dev: true /universal-user-agent@7.0.2: resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} dev: true - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} dev: true - /update-browserslist-db@1.0.13(browserslist@4.23.0): + /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.23.0 + browserslist: 4.22.2 escalade: 3.1.1 picocolors: 1.0.0 dev: true @@ -7194,7 +7911,7 @@ packages: /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /url-join@5.0.0: @@ -7206,10 +7923,6 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -7250,6 +7963,24 @@ packages: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} dev: true + /vue-eslint-parser@9.4.2(eslint@9.0.0-rc.0): + resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.4 + eslint: 9.0.0-rc.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + lodash: 4.17.21 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + dev: true + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7266,26 +7997,15 @@ packages: is-symbol: 1.0.4 dev: true - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: true - - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /which@1.3.1: @@ -7301,7 +8021,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /which@4.0.0: resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} @@ -7311,8 +8030,8 @@ packages: isexe: 3.1.1 dev: true - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} dev: true @@ -7343,7 +8062,7 @@ packages: engines: {node: '>=18'} dependencies: ansi-styles: 6.2.1 - string-width: 7.1.0 + string-width: 7.0.0 strip-ansi: 7.1.0 dev: true @@ -7365,6 +8084,11 @@ packages: engines: {node: '>=12'} dev: true + /xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + dev: true + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -7379,6 +8103,15 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yaml-eslint-parser@1.2.2: + resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} + engines: {node: ^14.17.0 || >=16.0.0} + dependencies: + eslint-visitor-keys: 3.4.3 + lodash: 4.17.21 + yaml: 2.4.1 + dev: true + /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} @@ -7413,8 +8146,8 @@ packages: yargs-parser: 20.2.9 dev: true - /yargs@17.7.1: - resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} dependencies: cliui: 8.0.1 @@ -7426,11 +8159,6 @@ packages: yargs-parser: 21.1.1 dev: true - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true - /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/project-dictionary.txt b/project-dictionary.txt new file mode 100644 index 000000000..0ac1dab06 --- /dev/null +++ b/project-dictionary.txt @@ -0,0 +1,33 @@ +antfu +attributify +bar +baz +boop +corge +deassert +foo +fred +garply +grault +iife +jiti +knip +litecoin +lockb +monero +nocheck +noreply +nuxt +plugh +quux +qux +Rebecca +slidev +sonarjs +Stevens +thud +TSES +unocss +vitepress +waldo +xyzzy diff --git a/rollup.config.ts b/rollup.config.ts index 8f8e10ceb..421c58a24 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -1,64 +1,43 @@ -import * as fs from "node:fs"; -import * as path from "node:path"; - -import rollupPluginCommonjs from "@rollup/plugin-commonjs"; -import rollupPluginNodeResolve from "@rollup/plugin-node-resolve"; -import rollupPluginTypescript from "@rollup/plugin-typescript"; +import rollupPluginReplace from "@rollup/plugin-replace"; +import { rollupPlugin as rollupPluginDeassert } from "deassert"; import { type RollupOptions } from "rollup"; import rollupPluginAutoExternal from "rollup-plugin-auto-external"; +import rollupPluginTs from "rollup-plugin-ts"; + +import pkg from "./package.json" assert { type: "json" }; -const configDir = "./src/configs/"; +const treeshake = { + annotations: true, + moduleSideEffects: [], + propertyReadSideEffects: false, + unknownGlobalSideEffects: false, +} satisfies RollupOptions["treeshake"]; -const configFiles: ReadonlyArray = fs - .readdirSync(configDir) - .filter((file) => file !== "index.ts" && file.endsWith(".ts")); +export default { + input: "src/index.ts", -const common: Partial = { output: { - dir: "./dist", + file: pkg.exports.import.default, + format: "esm", sourcemap: false, - exports: "default", }, - treeshake: { - annotations: true, - moduleSideEffects: [], - propertyReadSideEffects: false, - unknownGlobalSideEffects: false, - }, -}; - -/** - * Get the rollup config for the given eslint config. - */ -function getConfig(filename: string): RollupOptions { - return { - ...common, - - input: `${configDir}${filename}`, - - output: [ - { - ...common.output, - entryFileNames: `${path.basename(filename, ".ts")}.cjs`, - format: "cjs", - }, - { - ...common.output, - entryFileNames: `${path.basename(filename, ".ts")}.mjs`, - format: "esm", + plugins: [ + rollupPluginAutoExternal(), + rollupPluginTs({ + transpileOnly: true, + tsconfig: "tsconfig.build.json", + }), + rollupPluginReplace({ + values: { + "import.meta.vitest": "undefined", }, - ], - - plugins: [ - rollupPluginAutoExternal(), - rollupPluginNodeResolve(), - rollupPluginCommonjs(), - rollupPluginTypescript({ - tsconfig: "tsconfig.build.json", - }), - ], - }; -} - -export default configFiles.map((filename) => getConfig(filename)); + preventAssignment: true, + }), + rollupPluginDeassert({ + include: ["**/*.{js,ts}"], + }), + ], + + treeshake, +} satisfies RollupOptions; diff --git a/scripts/generate-preview.ts b/scripts/generate-preview.ts deleted file mode 100644 index a535655ee..000000000 --- a/scripts/generate-preview.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { promises as fs } from "node:fs"; - -import prettierConfig from "eslint-config-prettier"; -import { configs as prettierPluginConfigs } from "eslint-plugin-prettier"; - -import overridesConfig from "~/configs/common-overrides"; -import modernConfig from "~/configs/modern"; -import typescriptConfig from "~/configs/typescript"; -import { mergeConfigs } from "~/merge-configs"; - -// Merged config. -const config = mergeConfigs( - modernConfig, - typescriptConfig, - overridesConfig, - prettierPluginConfigs!["recommended"]!, - prettierConfig, -); - -// Write the file. -void fs.writeFile( - ".eslintrc.preview.json", - JSON.stringify(config, undefined, 2), -); diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json deleted file mode 100644 index 035f11be3..000000000 --- a/scripts/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../tsconfig.base.json", - "compilerOptions": { - "module": "commonjs" - } -} diff --git a/scripts/typegen.ts b/scripts/typegen.ts new file mode 100644 index 000000000..298aa6b55 --- /dev/null +++ b/scripts/typegen.ts @@ -0,0 +1,54 @@ +import fs from "node:fs/promises"; + +import { flatConfigsToRulesDTS } from "eslint-typegen/core"; + +import { + comments, + formatters, + functional, + ignores, + imports, + javascript, + jsdoc, + jsonc, + markdown, + node, + sortTsconfig, + stylistic, + test, + toml, + typescript, + unicorn, + unocss, + vue, + yaml, +} from "../src/configs"; +import { combine } from "../src/utils"; + +const configs = await combine( + comments(), + formatters(), + functional(), + ignores(), + imports(), + javascript(), + jsdoc(), + jsonc(), + markdown(), + node(), + sortTsconfig(), + stylistic(), + test(), + toml(), + typescript(), + unicorn(), + unocss(), + vue(), + yaml(), +); + +const dts = await flatConfigsToRulesDTS(configs, { + includeAugmentation: false, +}); + +await fs.writeFile("src/typegen.d.ts", dts); diff --git a/src/builtin/deprecated.ts b/src/builtin/deprecated.ts deleted file mode 100644 index a705b4145..000000000 --- a/src/builtin/deprecated.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { type Linter } from "eslint"; - -export const rules: Linter.Config["rules"] = { - "callback-return": "off", - "global-require": "off", - "handle-callback-err": "off", - "id-blacklist": "off", - "indent-legacy": "off", - "lines-around-directive": "off", - "newline-after-var": "off", - "newline-before-return": "off", - "no-buffer-constructor": "off", - "no-catch-shadow": "off", - "no-mixed-requires": "off", - "no-native-reassign": "off", - "no-negated-in-lhs": "off", - "no-new-require": "off", - "no-path-concat": "off", - "no-process-env": "off", - "no-process-exit": "off", - "no-restricted-modules": "off", - "no-spaced-func": "off", - "no-sync": "off", - "prefer-reflect": "off", - "require-jsdoc": "off", - "valid-jsdoc": "off", -}; - -export const overrides: NonNullable = []; diff --git a/src/builtin/index.ts b/src/builtin/index.ts deleted file mode 100644 index 49b7c53f4..000000000 --- a/src/builtin/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { type Linter } from "eslint"; - -import { - rules as deprecatedRules, - overrides as deprecatedOverrides, -} from "./deprecated"; -import { - rules as layoutRules, - overrides as layoutOverrides, -} from "./layout+formatting"; -import { - rules as possibleProblemsRules, - overrides as possibleProblemsOverrides, -} from "./possible-problems"; -import { - rules as suggestionsRules, - overrides as suggestionsOverrides, -} from "./suggestions"; - -export const rules: Linter.Config["rules"] = { - ...possibleProblemsRules, - ...suggestionsRules, - ...layoutRules, - ...deprecatedRules, -}; - -export const overrides: NonNullable = [ - ...deprecatedOverrides, - ...layoutOverrides, - ...possibleProblemsOverrides, - ...suggestionsOverrides, -]; diff --git a/src/builtin/layout+formatting.ts b/src/builtin/layout+formatting.ts deleted file mode 100644 index ccc308d40..000000000 --- a/src/builtin/layout+formatting.ts +++ /dev/null @@ -1,289 +0,0 @@ -import { type Linter } from "eslint"; - -export const rules: Linter.Config["rules"] = { - "array-bracket-spacing": ["error", "never"], - "arrow-parens": ["error", "always"], - "arrow-spacing": ["error", { before: true, after: true }], - "block-spacing": ["error", "always"], - "brace-style": "error", - "capitalized-comments": "off", - "comma-dangle": [ - "error", - { - arrays: "only-multiline", - objects: "only-multiline", - imports: "only-multiline", - exports: "only-multiline", - functions: "ignore", - }, - ], - "comma-spacing": ["error", { before: false, after: true }], - "comma-style": ["error", "last"], - "computed-property-spacing": "error", - "consistent-this": "off", - "dot-location": ["error", "property"], - "eol-last": "error", - "func-call-spacing": ["error", "never"], - "func-name-matching": "error", - "func-names": ["error", "as-needed"], - "func-style": ["error", "declaration", { allowArrowFunctions: true }], - "function-paren-newline": "off", - "generator-star-spacing": ["error", "after"], - "implicit-arrow-linebreak": "off", - "indent": [ - "error", - 2, - { - SwitchCase: 1, - VariableDeclarator: 1, - outerIIFEBody: 1, - MemberExpression: 1, - FunctionDeclaration: { - parameters: 1, - body: 1, - }, - FunctionExpression: { - parameters: 1, - body: 1, - }, - CallExpression: { - arguments: 1, - }, - ArrayExpression: 1, - ObjectExpression: 1, - ImportDeclaration: 1, - flatTernaryExpressions: false, - ignoreComments: false, - }, - ], - "key-spacing": ["error", { beforeColon: false, afterColon: true }], - "keyword-spacing": ["error", { before: true, after: true }], - "line-comment-position": "off", - "linebreak-style": ["error", "unix"], - "lines-around-comment": [ - "warn", - { - beforeBlockComment: true, - beforeLineComment: false, - afterBlockComment: false, - afterLineComment: false, - allowBlockStart: true, - allowBlockEnd: true, - allowObjectStart: true, - allowObjectEnd: true, - allowArrayStart: true, - allowArrayEnd: true, - allowClassStart: true, - allowClassEnd: true, - }, - ], - "lines-between-class-members": [ - "error", - "always", - { - exceptAfterSingleLine: true, - }, - ], - "max-depth": ["error", 10], - "max-len": [ - "off", - { - code: 100, - ignoreComments: true, - }, - ], - "max-lines-per-function": "off", - "max-nested-callbacks": "off", - "max-params": "off", - "max-statements-per-line": ["error", { max: 1 }], - "multiline-comment-style": "off", - "multiline-ternary": ["error", "always-multiline"], - // This rule is implemented in a not very nice way when it comes to working with 3rd parties. - "new-cap": "off", - "new-parens": "error", - "newline-per-chained-call": [ - "error", - { - ignoreChainWithDepth: 2, - }, - ], - "no-array-constructor": "error", - "no-inline-comments": "off", - "no-lonely-if": "error", - "no-mixed-operators": [ - "error", - { - groups: [ - ["+", "-", "*", "/", "%", "**"], - ["&", "|", "^", "~", "<<", ">>", ">>>"], - ["==", "!=", "===", "!==", ">", ">=", "<", "<="], - ["&&", "||"], - ["in", "instanceof"], - ], - allowSamePrecedence: true, - }, - ], - "no-mixed-spaces-and-tabs": "error", - "no-multi-assign": "error", - "no-multiple-empty-lines": [ - "error", - { - max: 1, - maxEOF: 1, - }, - ], - "no-negated-condition": "off", - "no-nested-ternary": "off", - "no-new-object": "error", - "no-plusplus": "off", - "no-restricted-syntax": [ - "error", - { - selector: "ForInStatement", - message: - "for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.", - }, - { - selector: "WithStatement", - message: - "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", - }, - { - selector: - ':not(ArrowFunctionExpression) > UnaryExpression[operator="void"] > :not(CallExpression)', - message: 'Don\'t use "void".', - }, - ], - "no-tabs": "error", - "no-trailing-spaces": "error", - "no-underscore-dangle": "off", - "no-unneeded-ternary": "error", - "no-whitespace-before-property": "error", - "no-multi-spaces": [ - "error", - { - ignoreEOLComments: true, - }, - ], - "nonblock-statement-body-position": [ - "error", - "beside", - { - overrides: {}, - }, - ], - "object-curly-newline": [ - "error", - { - ObjectExpression: { - minProperties: 3, - multiline: true, - consistent: true, - }, - ObjectPattern: { - minProperties: 3, - multiline: true, - consistent: true, - }, - }, - ], - "object-curly-spacing": ["error", "always"], - "object-property-newline": [ - "error", - { - allowAllPropertiesOnSameLine: true, - }, - ], - "one-var": [ - "error", - { - var: "never", - let: "never", - const: "never", - }, - ], - "one-var-declaration-per-line": ["error", "always"], - "operator-assignment": ["error", "always"], - "operator-linebreak": [ - "error", - "after", - { - overrides: { - "=": "none", - "==": "none", - "===": "none", - "?": "before", - ":": "before", - }, - }, - ], - "padded-blocks": [ - "error", - { - blocks: "never", - switches: "never", - classes: "never", - }, - ], - "prefer-object-spread": "error", - "quote-props": ["error", "consistent-as-needed"], - "quotes": [ - "error", - "double", - { - avoidEscape: true, - allowTemplateLiterals: true, - }, - ], - "rest-spread-spacing": ["error", "never"], - "semi": ["error", "always"], - "semi-spacing": ["error", { before: false, after: true }], - "semi-style": ["error", "last"], - "space-before-blocks": ["error", "always"], - "space-before-function-paren": [ - "error", - { - asyncArrow: "always", - anonymous: "never", - named: "never", - }, - ], - "space-in-parens": ["error", "never"], - "space-infix-ops": "error", - "space-unary-ops": [ - "error", - { - words: true, - nonwords: false, - }, - ], - "spaced-comment": [ - "error", - "always", - { - line: { - exceptions: ["-", "+", "*"], - markers: ["*package", "!", "/", ",", "="], - }, - block: { - balanced: true, - exceptions: ["-", "+", "*"], - markers: ["*package", "!", "*", ",", ":", "::", "flow-include"], - }, - }, - ], - "switch-colon-spacing": ["error", { after: true, before: false }], - "template-curly-spacing": ["error", "never"], - "template-tag-spacing": ["error", "never"], - "unicode-bom": ["error", "never"], - "wrap-iife": [ - "error", - "inside", - { - functionPrototypeMethods: true, - }, - ], - "yield-star-spacing": ["error", "after"], -}; - -export const overrides: NonNullable = []; diff --git a/src/builtin/possible-problems.ts b/src/builtin/possible-problems.ts deleted file mode 100644 index 5e8ab173d..000000000 --- a/src/builtin/possible-problems.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { type Linter } from "eslint"; - -export const rules: Linter.Config["rules"] = { - "constructor-super": "error", - "for-direction": "error", - "getter-return": "error", - "no-await-in-loop": "error", - "no-compare-neg-zero": "error", - "no-cond-assign": ["error", "always"], - "no-console": "off", - "no-constant-binary-expression": "error", - "no-constant-condition": "error", - "no-constructor-return": "error", - "no-control-regex": "error", - "no-debugger": "warn", - "no-dupe-args": "error", - "no-dupe-keys": "error", - "no-duplicate-case": "error", - "no-empty-character-class": "error", - "no-empty-pattern": "error", - "no-empty": ["warn", { allowEmptyCatch: true }], - "no-ex-assign": "error", - "no-extra-boolean-cast": "error", - "no-extra-parens": [ - "error", - "all", - { - nestedBinaryExpressions: false, - }, - ], - "no-class-assign": "error", - "no-const-assign": "error", - "no-dupe-class-members": "error", - "no-duplicate-imports": "off", - "no-extra-semi": "error", - "no-fallthrough": "error", - "no-func-assign": "error", - "no-inner-declarations": ["error", "functions"], - "no-invalid-regexp": "error", - "no-irregular-whitespace": "error", - "no-misleading-character-class": "error", - "no-new-symbol": "error", - "no-obj-calls": "error", - "no-promise-executor-return": "error", - "no-prototype-builtins": "error", - "no-regex-spaces": "error", - "no-self-assign": "error", - "no-self-compare": "error", - "no-sparse-arrays": "error", - "no-template-curly-in-string": "warn", - "no-this-before-super": "error", - "no-undef": "error", - "no-unexpected-multiline": "error", - "no-unmodified-loop-condition": "error", - "no-unreachable-loop": "error", - "no-unreachable": "error", - "no-unsafe-finally": "error", - "no-unsafe-negation": "error", - "no-unused-private-class-members": "error", - "no-unused-vars": [ - "error", - { - vars: "all", - args: "after-used", - ignoreRestSiblings: true, - }, - ], - "no-use-before-define": [ - "error", - { - functions: true, - classes: true, - variables: true, - }, - ], - "require-atomic-updates": "error", - "use-isnan": "error", - "valid-typeof": [ - "error", - { - requireStringLiterals: true, - }, - ], -}; - -export const overrides: NonNullable = []; diff --git a/src/builtin/suggestions.ts b/src/builtin/suggestions.ts deleted file mode 100644 index e5b5485f2..000000000 --- a/src/builtin/suggestions.ts +++ /dev/null @@ -1,201 +0,0 @@ -import { type Linter } from "eslint"; - -import { typescriptDeclarationFiles } from "~/files"; - -const useNumberIsFinite = "Please use Number.isFinite instead"; -const useNumberIsNan = "Please use Number.isNaN instead"; -const useObjectDefineProperty = "Please use Object.defineProperty instead."; - -export const rules: Linter.Config["rules"] = { - "accessor-pairs": "error", - "arrow-body-style": ["error", "as-needed"], - "block-scoped-var": "error", - "class-methods-use-this": "error", - "consistent-return": [ - "error", - { - treatUndefinedAsUnspecified: false, - }, - ], - "curly": ["error", "all"], - "default-case-last": "error", - "default-param-last": "off", - "dot-notation": "error", - "eqeqeq": ["error", "always", { null: "always" }], - "grouped-accessor-pairs": "error", - "guard-for-in": "error", - "init-declarations": "off", - "logical-assignment-operators": "error", - "max-classes-per-file": ["error", 1], - "no-alert": "error", - "no-caller": "error", - "no-case-declarations": "error", - "no-else-return": [ - "error", - { - allowElseIf: false, - }, - ], - "no-empty-function": "off", - "no-eq-null": "error", - "no-eval": "error", - "no-extend-native": "error", - "no-extra-bind": "error", - "no-extra-label": "error", - "no-floating-decimal": "error", - "no-global-assign": "error", - "no-implicit-coercion": "error", - "no-implicit-globals": "error", - "no-implied-eval": "error", - "no-invalid-this": "error", - "no-iterator": "error", - "no-labels": [ - "error", - { - allowLoop: true, - allowSwitch: true, - }, - ], - "no-lone-blocks": "error", - "no-loop-func": "error", - "no-multi-str": "off", - "no-new-func": "error", - "no-new-object": "error", - "no-new-wrappers": "error", - "no-new": "error", - "no-octal-escape": "error", - "no-octal": "error", - "no-param-reassign": "error", - "no-proto": "error", - "no-redeclare": "error", - "no-restricted-properties": [ - "error", - { - object: "arguments", - property: "callee", - message: "arguments.callee is deprecated", - }, - { - object: "global", - property: "isFinite", - message: useNumberIsFinite, - }, - { - object: "self", - property: "isFinite", - message: useNumberIsFinite, - }, - { - object: "window", - property: "isFinite", - message: useNumberIsFinite, - }, - { - object: "global", - property: "isNaN", - message: useNumberIsNan, - }, - { - object: "self", - property: "isNaN", - message: useNumberIsNan, - }, - { - object: "window", - property: "isNaN", - message: useNumberIsNan, - }, - { - property: "__defineGetter__", - message: useObjectDefineProperty, - }, - { - property: "__defineSetter__", - message: useObjectDefineProperty, - }, - ], - "object-shorthand": "error", - "no-delete-var": "error", - "no-label-var": "error", - "no-restricted-globals": [ - "error", - { - name: "event", - message: "Use local parameter instead.", - }, - ], - "no-return-assign": "error", - "no-return-await": "error", - "no-script-url": "error", - "no-sequences": "error", - "no-shadow": [ - "warn", - { - builtinGlobals: false, - hoist: "never", - allow: ["resolve", "reject", "done", "cb"], - }, - ], - "no-shadow-restricted-names": "error", - "no-throw-literal": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-useless-call": "error", - "no-useless-computed-key": "error", - "no-useless-concat": "error", - "no-useless-constructor": "warn", - "no-useless-escape": "error", - "no-useless-rename": "error", - "no-useless-return": "error", - "no-var": "error", - "no-void": "off", - "no-warning-comments": "off", - "no-with": "error", - "prefer-arrow-callback": "error", - "prefer-const": [ - "error", - { - destructuring: "all", - }, - ], - "prefer-destructuring": [ - "error", - { - VariableDeclarator: { - array: false, - object: true, - }, - AssignmentExpression: { - array: true, - object: true, - }, - }, - { - enforceForRenamedProperties: false, - }, - ], - "prefer-exponentiation-operator": "error", - "prefer-numeric-literals": "error", - "prefer-object-has-own": "error", - "prefer-promise-reject-errors": "error", - "prefer-regex-literals": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "prefer-template": "error", - "radix": "error", - "require-await": "error", - "require-unicode-regexp": "error", - "require-yield": "error", - "strict": ["error", "never"], - "symbol-description": "error", - "yoda": ["error", "never"], -}; - -export const overrides: NonNullable = [ - { - files: typescriptDeclarationFiles, - rules: { - "init-declarations": "off", - }, - }, -]; diff --git a/src/common/files.ts b/src/common/files.ts deleted file mode 100644 index 5453a38bc..000000000 --- a/src/common/files.ts +++ /dev/null @@ -1,24 +0,0 @@ -export const typescriptExtensions = [".ts", ".tsx", ".mts", ".cts"]; -export const typescriptDeclarationExtensions = [".d.ts", ".d.mts", ".d.cts"]; -export const jsExtensions = [".js", ".mjs", ".cjs"]; -export const jsxExtensions = [".jsx", ".tsx"]; -export const commonJsExtensions = [".cjs", ".cts"]; - -export const typescriptSupportedExtensions = [ - ...new Set([ - ...typescriptExtensions, - ...typescriptDeclarationExtensions, - ...jsExtensions, - ...jsxExtensions, - ]), -]; - -export const typescriptFiles = [`**/*{${typescriptExtensions.join(",")}}`]; -export const typescriptDeclarationFiles = [ - `**/*{${typescriptDeclarationExtensions.join(",")}}`, -]; -export const jsxFiles = [`**/*{${jsxExtensions.join(",")}}`]; -export const commonJsFiles = [`**/*{${commonJsExtensions.join(",")}}`]; -export const jsFiles = [`**/*{${jsExtensions.join(",")}}`]; - -export const testFiles = ["{test,tests}/**/*", "**/*.{spec,test}.*"]; diff --git a/src/common/merge-configs.ts b/src/common/merge-configs.ts deleted file mode 100644 index 5f0dab070..000000000 --- a/src/common/merge-configs.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { - type DeepMergeMergeFunctionUtils, - deepmergeCustom, -} from "deepmerge-ts"; -import { type Linter } from "eslint"; - -type Meta = Readonly<{ - keyPath: PropertyKey[]; -}>; - -/** - * Merge multiple eslint configs into one. - */ -export const mergeConfigs = deepmergeCustom<{}, Meta>({ - metaDataUpdater: (previousMeta, metaMeta): Meta => { - if (previousMeta === undefined) { - if (metaMeta.key === undefined) { - return { keyPath: [] }; - } - return { keyPath: [metaMeta.key] }; - } - if (metaMeta.key === undefined) { - return previousMeta; - } - return { - ...metaMeta, - keyPath: [...previousMeta.keyPath, metaMeta.key], - }; - }, - mergeArrays(values, utils, meta): unknown { - if (isRuleSettings(meta)) { - return mergeRuleSettings(values, utils); - } - - return [...new Set(utils.defaultMergeFunctions.mergeArrays(values))]; - }, - mergeOthers(values, utils, meta): unknown { - if (isRuleSettings(meta)) { - return mergeRuleSettings(values, utils); - } - - return utils.actions.defaultMerge; - }, -}); - -/** - * Based on the meta data, should the current data be for rule settings. - */ -function isRuleSettings(meta: Meta | undefined) { - return ( - meta !== undefined && - ((meta.keyPath.length === 2 && meta.keyPath[0] === "rules") || - (meta.keyPath.length === 4 && - meta.keyPath[1] === "overrides" && - typeof meta.keyPath[2] === "number" && - meta.keyPath[3] === "rules")) - ); -} - -/** - * Merge eslint rule settings. - * - * @throws When invalid rule setting syntax are given. - */ -function mergeRuleSettings( - values: ReadonlyArray, - utils: DeepMergeMergeFunctionUtils, -): Linter.RuleEntry | (typeof utils.actions)[keyof typeof utils.actions] { - const settingsData = values.findLast( - (value): value is [unknown, ...unknown[]] => - Array.isArray(value) && value.length >= 2, - ); - if (settingsData === undefined) { - return utils.actions.defaultMerge; - } - const severityData = values.at(-1); - const severity: unknown = Array.isArray(severityData) - ? severityData[0] - : severityData; - - if (severity === "off" || severity === 0) { - return severity; - } - if ( - severity !== "error" && - severity !== 2 && - severity !== "warn" && - severity !== 1 - ) { - throw new Error(`Unknow rule severity: "${String(severity)}"`); - } - const settings = settingsData.slice(1); - return [severity, ...settings]; -} diff --git a/src/configs/comments.ts b/src/configs/comments.ts new file mode 100644 index 000000000..3717030b9 --- /dev/null +++ b/src/configs/comments.ts @@ -0,0 +1,29 @@ +import { type ESLint } from "eslint"; + +import { type FlatConfigItem } from "../types"; +import { loadPackages } from "../utils"; + +export async function comments(): Promise { + const [pluginComments] = (await loadPackages([ + "eslint-plugin-eslint-comments", + ])) as [ESLint.Plugin]; + + return [ + { + name: "rs:comments", + plugins: { + "eslint-comments": pluginComments, + }, + rules: { + "eslint-comments/no-aggregating-enable": "error", + "eslint-comments/no-duplicate-disable": "error", + "eslint-comments/no-unlimited-disable": "error", + "eslint-comments/no-unused-enable": "error", + "eslint-comments/disable-enable-pair": [ + "error", + { allowWholeFile: true }, + ], + }, + }, + ]; +} diff --git a/src/configs/common-overrides.ts b/src/configs/common-overrides.ts deleted file mode 100644 index d781444d4..000000000 --- a/src/configs/common-overrides.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { type Linter } from "eslint"; - -import { jsFiles, jsxFiles, testFiles } from "~/files"; - -export default { - overrides: [ - { - files: ["./*"], - extends: ["@rebeccastevens/eslint-config/script"], - rules: { - "functional/immutable-data": "off", - }, - }, - { - files: ["scripts/**/*"], - extends: ["@rebeccastevens/eslint-config/script"], - }, - { - files: testFiles, - extends: ["@rebeccastevens/eslint-config/test"], - }, - { - files: jsFiles, - extends: [ - "plugin:@typescript-eslint/disable-type-checked", - "plugin:functional/disable-type-checked", - ], - parserOptions: { - project: false, - }, - }, - { - files: jsxFiles, - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - ecmaFeatures: { - globalReturn: false, - impliedStrict: true, - jsx: true, - }, - }, - }, - ], -} as Linter.Config; diff --git a/src/configs/formatters.ts b/src/configs/formatters.ts new file mode 100644 index 000000000..81e365bba --- /dev/null +++ b/src/configs/formatters.ts @@ -0,0 +1,406 @@ +import { type ESLint } from "eslint"; +import { isPackageExists } from "local-pkg"; +import { type Options as PrettierOptions } from "prettier"; + +import { + GLOB_CSS, + GLOB_DTS, + GLOB_GRAPHQL, + GLOB_JS, + GLOB_JSON, + GLOB_JSON5, + GLOB_JSONC, + GLOB_JSX, + GLOB_LESS, + GLOB_MARKDOWN, + GLOB_POSTCSS, + GLOB_SCSS, + GLOB_TS, + GLOB_TSX, + GLOB_YAML, +} from ".."; +import { + type FlatConfigItem, + type OptionsFormatters, + type StylisticConfig, +} from "../types"; +import { loadPackages, parserPlain } from "../utils"; + +export async function formatters( + opts: OptionsFormatters | true = {}, + stylistic: StylisticConfig = {}, +): Promise { + const options = + opts === true + ? { + js: true, + ts: true, + dts: false, + json: true, + yaml: true, + css: true, + graphql: true, + html: true, + markdown: true, + slidev: isPackageExists("@slidev/cli"), + } + : opts; + + if ( + options.slidev !== false && + options.slidev !== undefined && + options.markdown !== true + ) + throw new Error( + "`slidev` option only works when `markdown` is enabled with `prettier`", + ); + + const { indent, quotes, semi } = stylistic; + + const prettierOptions: PrettierOptions = Object.assign( + { + endOfLine: "lf", + semi: semi ?? true, + singleQuote: quotes === "single", + tabWidth: typeof indent === "number" ? indent : 2, + trailingComma: "all", + useTabs: indent === "tab", + } satisfies PrettierOptions, + + options.prettierOptions ?? {}, + ); + + const [pluginFormat, configPrettier] = (await loadPackages([ + "eslint-plugin-format", + "eslint-config-prettier", + "prettier", + "prettier-plugin-multiline-arrays", + ])) as [ESLint.Plugin, ESLint.ConfigData]; + + const turnOffRulesForPrettier = { + ...configPrettier.rules, + + "style/block-spacing": "off", + "style/brace-style": "off", + "style/comma-dangle": "off", + "style/comma-spacing": "off", + "style/func-call-spacing": "off", + "style/indent": "off", + "style/indent-binary-ops": "off", + "style/key-spacing": "off", + "style/keyword-spacing": "off", + "style/lines-around-comment": "off", + "style/member-delimiter-style": "off", + "style/no-extra-parens": "off", + "style/no-extra-semi": "off", + "style/nonblock-statement-body-position": "off", + "style/object-curly-newline": "off", + "style/object-curly-spacing": "off", + "style/operator-linebreak": "off", + "style/quote-props": "off", + "style/quotes": "off", + "style/semi": "off", + "style/space-before-blocks": "off", + "style/space-before-function-paren": "off", + "style/space-infix-ops": "off", + "style/type-annotation-spacing": "off", + + "yaml/block-sequence-hyphen-indicator-newline": "off", + } satisfies FlatConfigItem["rules"]; + + const configs: FlatConfigItem[] = [ + { + name: "rs:formatters:setup", + plugins: { + format: pluginFormat, + }, + }, + ]; + + if (options.js !== undefined && options.js !== false) { + configs.push({ + name: "rs:formatter:javascript", + files: [GLOB_JS, GLOB_JSX], + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "babel", + }, + ], + }, + }); + } + + if (options.ts !== undefined && options.ts !== false) { + configs.push({ + name: "rs:formatter:typescript", + files: [GLOB_TS, GLOB_TSX], + ignores: options.dts === true ? [] : [GLOB_DTS], + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "typescript", + }, + ], + }, + }); + } + + if (options.yaml !== undefined && options.yaml !== false) { + configs.push({ + name: "rs:formatter:yaml", + files: [GLOB_YAML], + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "yaml", + plugins: ["prettier-plugin-multiline-arrays"], + }, + ], + }, + }); + } + + if (options.json !== undefined && options.json !== false) { + configs.push( + { + name: "rs:formatter:json", + files: [GLOB_JSON], + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "json", + plugins: ["prettier-plugin-multiline-arrays"], + }, + ], + }, + }, + { + name: "rs:formatter:jsonc", + files: [GLOB_JSONC], + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "jsonc", + plugins: ["prettier-plugin-multiline-arrays"], + }, + ], + }, + }, + { + name: "rs:formatter:json5", + files: [GLOB_JSON5], + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + plugins: ["prettier-plugin-multiline-arrays"], + parser: "json5", + }, + ], + }, + }, + { + name: "rs:formatter:json", + files: ["**/package.json"], + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "json", + plugins: [ + // "prettier-plugin-packagejson", + "prettier-plugin-multiline-arrays", + ], + }, + ], + }, + }, + ); + } + + if (options.css !== undefined && options.css !== false) { + configs.push( + { + name: "rs:formatter:css", + files: [GLOB_CSS, GLOB_POSTCSS], + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "css", + }, + ], + }, + }, + { + name: "rs:formatter:scss", + files: [GLOB_SCSS], + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "scss", + }, + ], + }, + }, + { + name: "rs:formatter:less", + files: [GLOB_LESS], + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "less", + }, + ], + }, + }, + ); + } + + if (options.html !== undefined && options.html !== false) { + configs.push({ + name: "rs:formatter:html", + files: ["**/*.html"], + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "html", + }, + ], + }, + }); + } + + if (options.markdown !== undefined && options.markdown !== false) { + const GLOB_SLIDEV = + options.slidev === undefined || options.slidev === false + ? [] + : options.slidev === true + ? ["**/slides.md"] + : options.slidev.files ?? []; + + configs.push({ + name: "rs:formatter:markdown", + files: [GLOB_MARKDOWN], + ignores: GLOB_SLIDEV, + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + printWidth: 120, + ...prettierOptions, + embeddedLanguageFormatting: "off", + parser: "markdown", + }, + ], + }, + }); + + if (options.slidev !== undefined && options.slidev !== false) { + configs.push({ + name: "rs:formatter:slidev", + files: GLOB_SLIDEV, + languageOptions: { + parser: parserPlain, + }, + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + printWidth: 120, + ...prettierOptions, + embeddedLanguageFormatting: "off", + parser: "slidev", + plugins: ["prettier-plugin-slidev"], + }, + ], + }, + }); + } + } + + if (options.graphql !== undefined && options.graphql !== false) { + configs.push({ + files: [GLOB_GRAPHQL], + languageOptions: { + parser: parserPlain, + }, + name: "rs:formatter:graphql", + rules: { + ...turnOffRulesForPrettier, + "format/prettier": [ + "error", + { + ...prettierOptions, + parser: "graphql", + }, + ], + }, + }); + } + + return configs; +} diff --git a/src/configs/functional.ts b/src/configs/functional.ts new file mode 100644 index 000000000..7cc17d046 --- /dev/null +++ b/src/configs/functional.ts @@ -0,0 +1,238 @@ +import { type ESLint } from "eslint"; + +import { GLOB_TS } from "../globs"; +import { + type FlatConfigItem, + type OptionsFunctional, + type OptionsOverrides, + type OptionsStylistic, + type OptionsTypeScriptParserOptions, +} from "../types"; +import { loadPackages } from "../utils"; + +export async function functional( + options: OptionsFunctional & + OptionsStylistic & + OptionsOverrides & + OptionsTypeScriptParserOptions = {}, +): Promise { + const { + overrides = {}, + stylistic = true, + filesTypeAware = [GLOB_TS], + functionalEnforcement = "none", + } = options; + + if (functionalEnforcement === "none") { + return []; + } + + const [pluginFunctional] = (await loadPackages([ + "eslint-plugin-functional/flat", + ])) as [(typeof import("eslint-plugin-functional/flat"))["default"]]; + + const strictRules = { + "functional/functional-parameters": "error", + "functional/no-promise-reject": "error", + "functional/no-throw-statements": "error", + "functional/no-try-statements": "error", + "functional/no-let": "error", + "functional/no-classes": "error", + "functional/no-this-expressions": "error", + "functional/no-loop-statements": "error", + "functional/immutable-data": "error", + "functional/prefer-immutable-types": "error", + "functional/prefer-readonly-type": "error", + "functional/type-declaration-immutability": "error", + "functional/no-mixed-types": "error", + "functional/no-conditional-statements": "error", + "functional/no-expression-statements": "error", + "functional/no-return-void": "error", + + ...(stylistic === false + ? {} + : { + "functional/prefer-property-signatures": "error", + "functional/prefer-tacit": "error", + "functional/readonly-type": "error", + }), + } satisfies FlatConfigItem["rules"]; + + const recommendedRules = { + "functional/functional-parameters": [ + "error", + { + allowRestParameter: true, + enforceParameterCount: false, + }, + ], + "functional/no-let": [ + "error", + { + allowInForLoopInit: true, + ignoreIdentifierPattern: ["^mutable", "^m_"], + }, + ], + "functional/no-loop-statements": "error", + "functional/no-throw-statements": [ + "error", + { + allowInAsyncFunctions: true, + }, + ], + + "functional/immutable-data": [ + "error", + { + ignoreAccessorPattern: ["**.mutable*.**", "**.m_*.**"], + ignoreClasses: "fieldsOnly", + ignoreImmediateMutation: true, + ignoreNonConstDeclarations: true, + }, + ], + "functional/no-conditional-statements": [ + "error", + { + allowReturningBranches: true, + }, + ], + "functional/no-expression-statements": [ + "error", + { + ignoreCodePattern: "^assert", + ignoreSelfReturning: true, + ignoreVoid: true, + }, + ], + "functional/no-return-void": "error", + "ts/prefer-readonly-parameter-types": "off", + "functional/prefer-immutable-types": [ + "warn", + { + enforcement: "None", + ignoreInferredTypes: true, + ignoreNamePattern: ["^[mM]_"], + parameters: { enforcement: "ReadonlyShallow" }, + suggestions: { + ReadonlyShallow: [ + [ + { + pattern: "^(Array|Map|Set)<(.+)>$", + replace: "Readonly$1<$2>", + }, + { pattern: "^(.+)$", replace: "Readonly<$1>" }, + ], + ], + ReadonlyDeep: [ + [ + { + pattern: "^(?:Readonly<(.+)>|(.+))$", + replace: "ReadonlyDeep<$1$2>", + }, + ], + ], + Immutable: [ + [ + { + pattern: "^(?:Readonly(?:Deep)?<(.+)>|(.+))$", + replace: "Immutable<$1$2>", + }, + ], + ], + }, + }, + ], + "functional/type-declaration-immutability": [ + "error", + { + rules: [ + { + identifiers: "I?Immutable.+", + immutability: "Immutable", + comparator: "AtLeast", + }, + { + identifiers: "I?ReadonlyDeep.+", + immutability: "ReadonlyDeep", + comparator: "AtLeast", + }, + { + identifiers: "I?Readonly.+", + immutability: "ReadonlyShallow", + comparator: "AtLeast", + fixer: [ + { + pattern: "^(Array|Map|Set)<(.+)>$", + replace: "Readonly$1<$2>", + }, + { + pattern: "^(.+)$", + replace: "Readonly<$1>", + }, + ], + }, + { + identifiers: "I?Mutable.+", + immutability: "Mutable", + comparator: "AtMost", + fixer: [ + { + pattern: "^Readonly(Array|Map|Set)<(.+)>$", + replace: "$1<$2>", + }, + { + pattern: "^Readonly<(.+)>$", + replace: "$1", + }, + ], + }, + ], + }, + ], + + ...(stylistic === false + ? {} + : { + "functional/prefer-property-signatures": "error", + "functional/prefer-tacit": "error", + "functional/readonly-type": "error", + }), + } satisfies FlatConfigItem["rules"]; + + const liteRules = { + ...recommendedRules, + "functional/no-conditional-statements": "off", + "functional/no-expression-statements": "off", + } satisfies FlatConfigItem["rules"]; + + return [ + { + name: "rs:functional", + plugins: { + functional: pluginFunctional as unknown as ESLint.Plugin, + }, + settings: { + immutability: { + overrides: [ + { type: "^Readonly<.+>$", to: "ReadonlyShallow" }, + { type: "^ReadonlyDeep<.+>$", to: "ReadonlyDeep" }, + { type: "^Immutable<.+>$", to: "Immutable" }, + ], + }, + }, + rules: { + ...(functionalEnforcement === "lite" + ? liteRules + : functionalEnforcement === "strict" + ? strictRules + : recommendedRules), + ...overrides, + }, + }, + { + name: "rs:functional:disable-type-aware", + ignores: filesTypeAware, + rules: pluginFunctional.configs.disableTypeChecked.rules, + }, + ]; +} diff --git a/src/configs/ignores.ts b/src/configs/ignores.ts new file mode 100644 index 000000000..2bb5c87e9 --- /dev/null +++ b/src/configs/ignores.ts @@ -0,0 +1,10 @@ +import { GLOB_EXCLUDE } from "../globs"; +import { type FlatConfigItem } from "../types"; + +export function ignores(): FlatConfigItem[] { + return [ + { + ignores: GLOB_EXCLUDE, + }, + ]; +} diff --git a/src/configs/imports.ts b/src/configs/imports.ts new file mode 100644 index 000000000..9c2622454 --- /dev/null +++ b/src/configs/imports.ts @@ -0,0 +1,178 @@ +import { type ESLint } from "eslint"; + +import { GLOB_DTS, GLOB_MJS, GLOB_MTS, GLOB_TS, GLOB_TSX } from ".."; +import { type FlatConfigItem, type OptionsStylistic } from "../types"; +import { loadPackages } from "../utils"; + +export async function imports( + options: OptionsStylistic = {}, +): Promise { + const { stylistic = true } = options; + + const [pluginImport] = (await loadPackages(["eslint-plugin-import"])) as [ + ESLint.Plugin, + ]; + + return [ + { + name: "rs:imports", + plugins: { + import: pluginImport, + }, + settings: { + "import/external-module-folders": ["node_modules"], + "import/internal-regex": "^(?:#|(?:@|~)\\/).*", + "import/resolver": { + node: { + extensions: ["js", "cjs", "mjs", "ts", "cts", "mts", "jsx", "tsx"], + }, + }, + }, + rules: { + "import/consistent-type-specifier-style": ["error", "prefer-inline"], + "import/default": "error", + // "import/dynamic-import-chunkname": "off", + "import/export": "error", + // "import/exports-last": "off", + // "import/extensions": "off", + "import/first": "error", + // "import/group-exports": "off", + // "import/max-dependencies": [ + // "off", + // { + // max: 10, + // }, + // ], + "import/named": "error", + "import/namespace": [ + "error", + { + allowComputed: true, + }, + ], + "import/no-absolute-path": "error", + // "import/no-amd": "error", // Doesn't work with eslint 9 yet + // "import/no-anonymous-default-export": "off", + // "import/no-commonjs": "off", + // "import/no-cycle": "off", + // "import/no-default-export": "off", + // "import/no-deprecated": "warn", + "import/no-duplicates": ["error", { "prefer-inline": true }], + // "import/no-dynamic-require": "off", + "import/no-empty-named-blocks": "error", + "import/no-extraneous-dependencies": [ + "error", + { + bundledDependencies: true, + devDependencies: [ + "*.{js,cjs,mjs,ts,cts,mts,jsx,tsx}", + "**/scripts/**", + "**/spec/**", + "**/test/**", + "**/tests/**", + "**/__mocks__/**", + "**/__tests__/**", + "**/*{.,_}{test,spec}.{js,cjs,mjs,ts,cts,mts,jsx,tsx}", + "**/Gruntfile{,.{js,cjs,mjs,ts}}", + "**/gulpfile.{js,cjs,mjs,ts}", + "**/gulpfile.*.{js,cjs,mjs,ts}", + "**/jest.config.{js,cjs,mjs,ts}", + "**/jest.setup.{js,cjs,mjs,ts}", + "**/karma.conf.{js,cjs,mjs,ts}", + "**/postcss.config.{js,cjs,mjs,ts}", + "**/protractor.conf.{js,cjs,mjs,ts}", + "**/protractor.conf.*.{js,cjs,mjs,ts}", + "**/rollup.config.{js,cjs,mjs,ts}", + "**/rollup.config.*.{js,cjs,mjs,ts}", + "**/vite.config.{js,cjs,mjs,ts}", + "**/vitest.config.{js,cjs,mjs,ts}", + "**/vue.config.{js,cjs,mjs,ts}", + "**/webpack.config.{js,cjs,mjs,ts}", + "**/webpack.config.*.{js,cjs,mjs,ts}", + ], + optionalDependencies: true, + peerDependencies: true, + }, + ], + // "import/no-internal-modules": "off", + // "import/no-mutable-exports": "error", // Doesn't work with eslint 9 yet + // "import/no-named-as-default": "off", + // "import/no-named-as-default-member": "off", + "import/no-named-default": "error", + // "import/no-named-export": "off", + // "import/no-namespace": "off", + // "import/no-nodejs-modules": "off", + // "import/no-relative-parent-imports": "off", + // "import/no-restricted-paths": "off", + "import/no-self-import": "error", + "import/no-unassigned-import": "error", + // "import/no-unused-modules": "off", + "import/no-unresolved": "error", + "import/no-useless-path-segments": [ + "error", + { + commonjs: true, + noUselessIndex: true, + }, + ], + "import/no-webpack-loader-syntax": "error", + // "import/prefer-default-export": "off", + // "import/unambiguous": "off", + + ...(stylistic === false + ? {} + : { + // "import/newline-after-import": ["error", { count: 1 }], // Doesn't work with eslint 9 yet + "import/order": [ + "error", + { + alphabetize: { + caseInsensitive: false, + order: "asc", + }, + groups: [ + "builtin", + "external", + "internal", + "parent", + "sibling", + "index", + ], + "newlines-between": "always", + }, + ], + }), + }, + }, + { + files: [GLOB_MJS, GLOB_MTS], + rules: { + "import/no-commonjs": "error", + "import/no-dynamic-require": "error", + }, + }, + { + files: [GLOB_TS, GLOB_TSX, GLOB_DTS], + rules: { + "import/no-unresolved": "off", + "import/named": "off", + "import/default": "off", + "import/namespace": "off", + + ...(stylistic === false + ? {} + : { + // "ts/no-import-type-side-effects": "off", + "ts/consistent-type-imports": [ + "error", + { + prefer: "type-imports", + fixStyle: "inline-type-imports", + disallowTypeAnnotations: false, + }, + ], + }), + }, + }, + ]; +} diff --git a/src/configs/index.ts b/src/configs/index.ts new file mode 100644 index 000000000..f23daf449 --- /dev/null +++ b/src/configs/index.ts @@ -0,0 +1,19 @@ +export * from "./comments"; +export * from "./formatters"; +export * from "./functional"; +export * from "./ignores"; +export * from "./imports"; +export * from "./javascript"; +export * from "./jsdoc"; +export * from "./jsonc"; +export * from "./markdown"; +export * from "./node"; +export * from "./sort"; +export * from "./stylistic"; +export * from "./test"; +export * from "./toml"; +export * from "./typescript"; +export * from "./unicorn"; +export * from "./unocss"; +export * from "./vue"; +export * from "./yaml"; diff --git a/src/configs/javascript.ts b/src/configs/javascript.ts new file mode 100644 index 000000000..02b9356a3 --- /dev/null +++ b/src/configs/javascript.ts @@ -0,0 +1,408 @@ +import { type ESLint } from "eslint"; +import globals from "globals"; + +import { GLOB_SRC, GLOB_SRC_EXT } from "../globs"; +import { + type FlatConfigItem, + type OptionsFunctional, + type OptionsIsInEditor, + type OptionsOverrides, +} from "../types"; +import { loadPackages } from "../utils"; + +const useNumberIsFinite = "Please use Number.isFinite instead"; +const useNumberIsNan = "Please use Number.isNaN instead"; +const useObjectDefineProperty = "Please use Object.defineProperty instead."; + +export async function javascript( + options: OptionsIsInEditor & OptionsOverrides & OptionsFunctional = {}, +): Promise { + const { + isInEditor = false, + functionalEnforcement = "none", + overrides = {}, + } = options; + + const [pluginOptimizeRegex, pluginPromise, pluginSonar] = (await loadPackages( + [ + "eslint-plugin-optimize-regex", + "eslint-plugin-promise", + "eslint-plugin-sonarjs", + ], + )) as [ESLint.Plugin, ESLint.Plugin, ESLint.Plugin]; + + return [ + { + name: "rs:javascript", + languageOptions: { + ecmaVersion: "latest", + globals: { + ...globals.browser, + ...globals.es2021, + ...globals.node, + document: "readonly", + navigator: "readonly", + window: "readonly", + }, + parserOptions: { + ecmaFeatures: { jsx: true }, + ecmaVersion: "latest", + sourceType: "module", + }, + sourceType: "module", + }, + linterOptions: { + reportUnusedDisableDirectives: true, + }, + plugins: { + "optimize-regex": pluginOptimizeRegex, + promise: pluginPromise, + sonar: pluginSonar, + }, + rules: { + "accessor-pairs": "error", + "array-callback-return": "error", + "arrow-body-style": ["error", "as-needed"], + "block-scoped-var": "error", + "class-methods-use-this": "error", + "consistent-return": ["error", { treatUndefinedAsUnspecified: false }], + "constructor-super": "error", + curly: ["error", "all"], + "default-case-last": "error", + "dot-notation": ["error", { allowKeywords: true }], + eqeqeq: ["error", "always", { null: "always" }], + "for-direction": "error", + "func-name-matching": "error", + "func-names": ["error", "as-needed"], + "func-style": ["error", "declaration", { allowArrowFunctions: true }], + "getter-return": "error", + "grouped-accessor-pairs": "error", + "guard-for-in": "error", + "logical-assignment-operators": "error", + "max-classes-per-file": ["error", 1], + "max-depth": ["error", 10], + "new-cap": [ + "error", + { capIsNew: false, newIsCap: true, properties: true }, + ], + "no-alert": "error", + "no-array-constructor": "error", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": ["error", "always"], + "no-console": isInEditor + ? "off" + : ["error", { allow: ["warn", "error"] }], + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "error", + "no-constructor-return": "error", + "no-control-regex": "error", + "no-debugger": isInEditor ? "off" : "error", + "no-delete-var": "error", + "no-dupe-args": "error", + "no-dupe-class-members": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-else-return": ["error", { allowElseIf: false }], + "no-empty-character-class": "error", + "no-empty-pattern": "error", + "no-empty": ["error", { allowEmptyCatch: true }], + "no-eq-null": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": "error", + "no-implicit-coercion": "error", + "no-implicit-globals": "error", + "no-implied-eval": "error", + "no-import-assign": "error", + "no-inner-declarations": ["error", "functions"], + "no-invalid-regexp": "error", + "no-invalid-this": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": ["error", { allowLoop: true, allowSwitch: true }], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "error", + "no-loss-of-precision": "error", + "no-misleading-character-class": "error", + "no-multi-assign": "error", + "no-multi-str": "error", + "no-new-func": "error", + "no-new-object": "error", + "no-new-symbol": "error", + "no-new-wrappers": "error", + "no-new": "error", + "no-obj-calls": "error", + "no-octal-escape": "error", + "no-octal": "error", + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": ["error", { builtinGlobals: false }], + "no-regex-spaces": "error", + "no-restricted-globals": [ + "error", + { name: "event", message: "Use local parameter instead." }, + { name: "global", message: "Use `globalThis` instead." }, + { name: "self", message: "Use `globalThis` instead." }, + { name: "window", message: "Use `globalThis` instead." }, + ], + "no-restricted-properties": [ + "error", + { + property: "__proto__", + message: + "Use `Object.getPrototypeOf` or `Object.setPrototypeOf` instead.", + }, + { + property: "__lookupGetter__", + message: "Use `Object.getOwnPropertyDescriptor` instead.", + }, + { + property: "__lookupSetter__", + message: "Use `Object.getOwnPropertyDescriptor` instead.", + }, + { + object: "arguments", + property: "callee", + message: "arguments.callee is deprecated", + }, + { + object: "global", + property: "isFinite", + message: useNumberIsFinite, + }, + { object: "self", property: "isFinite", message: useNumberIsFinite }, + { + object: "window", + property: "isFinite", + message: useNumberIsFinite, + }, + { object: "global", property: "isNaN", message: useNumberIsNan }, + { object: "self", property: "isNaN", message: useNumberIsNan }, + { object: "window", property: "isNaN", message: useNumberIsNan }, + { property: "__defineGetter__", message: useObjectDefineProperty }, + { property: "__defineSetter__", message: useObjectDefineProperty }, + ], + "no-restricted-syntax": [ + "error", + { + selector: "ForInStatement", + message: + "for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.", + }, + { + selector: "WithStatement", + message: + "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + }, + { + selector: + ':not(ArrowFunctionExpression) > UnaryExpression[operator="void"] > :not(CallExpression)', + message: 'Don\'t use "void".', + }, + ], + "no-return-assign": "error", + "no-return-await": "error", + "no-script-url": "error", + "no-self-assign": ["error", { props: true }], + "no-self-compare": "error", + "no-sequences": "error", + "no-shadow-restricted-names": "error", + "no-shadow": [ + "warn", + { + allow: ["resolve", "reject", "done", "cb"], + builtinGlobals: false, + hoist: "never", + }, + ], + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "error", + "no-throw-literal": "error", + "no-undef-init": "error", + "no-undef": "error", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": ["error", { defaultAssignment: false }], + "no-unreachable-loop": "error", + "no-unreachable": "error", + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unused-expressions": [ + "error", + { + allowShortCircuit: true, + allowTaggedTemplates: true, + allowTernary: true, + }, + ], + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": [ + "error", + { + args: "none", + caughtErrors: "none", + ignoreRestSiblings: true, + vars: "all", + }, + ], + "no-use-before-define": [ + "error", + { classes: true, functions: false, variables: true }, + ], + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", + "no-useless-rename": "error", + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { avoidQuotes: true, ignoreConstructors: false }, + ], + "one-var": ["error", { var: "never", let: "never", const: "never" }], + "operator-assignment": ["error", "always"], + "prefer-arrow-callback": [ + "error", + { allowNamedFunctions: false, allowUnboundThis: true }, + ], + "prefer-const": isInEditor + ? "off" + : ["error", { destructuring: "all", ignoreReadBeforeAssign: true }], + "prefer-destructuring": [ + "error", + { + VariableDeclarator: { array: false, object: true }, + AssignmentExpression: { array: true, object: true }, + }, + { enforceForRenamedProperties: false }, + ], + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": "error", + "prefer-regex-literals": ["error", { disallowRedundantWrapping: true }], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + radix: "error", + "require-atomic-updates": "error", + "require-await": "error", + "require-unicode-regexp": "error", + "require-yield": "error", + "sort-imports": [ + "error", + { + allowSeparatedGroups: false, + ignoreCase: false, + ignoreDeclarationSort: true, + ignoreMemberSort: false, + memberSyntaxSortOrder: ["none", "all", "multiple", "single"], + }, + ], + strict: ["error", "never"], + "symbol-description": "error", + "unicode-bom": ["error", "never"], + "use-isnan": [ + "error", + { enforceForIndexOf: true, enforceForSwitchCase: true }, + ], + "valid-typeof": ["error", { requireStringLiterals: true }], + "vars-on-top": "error", + yoda: ["error", "never"], + + "optimize-regex/optimize-regex": "error", + + "promise/avoid-new": "warn", + "promise/no-callback-in-promise": "error", + // "promise/no-nesting": "error", // Doesn't work with eslint 9 yet + "promise/no-new-statics": "error", + // "promise/no-promise-in-callback": "error", // Doesn't work with eslint 9 yet + "promise/no-return-in-finally": "error", + // "promise/no-return-wrap": "error", // Doesn't work with eslint 9 yet + "promise/param-names": "error", + "promise/valid-params": "error", + + ...(isInEditor + ? {} + : { + "sonar/no-all-duplicated-branches": "error", + "sonar/no-collapsible-if": "error", + "sonar/no-collection-size-mischeck": "error", + "sonar/no-duplicated-branches": "error", + "sonar/no-element-overwrite": "error", + // "sonar/no-empty-collection": "error", // Doesn't work with eslint 9 yet + // "sonar/no-extra-arguments": "error", // Doesn't work with eslint 9 yet + // "sonar/no-gratuitous-expressions": "error", // Doesn't work with eslint 9 yet + "sonar/no-identical-conditions": "error", + "sonar/no-identical-expressions": "error", + "sonar/no-identical-functions": "error", + "sonar/no-ignored-return": "error", + "sonar/no-inverted-boolean-check": "error", + "sonar/no-nested-switch": "error", + "sonar/no-nested-template-literals": "error", + "sonar/no-one-iteration-loop": "error", + "sonar/no-redundant-boolean": "error", + // "sonar/no-redundant-jump": "error", // Doesn't work with eslint 9 yet + "sonar/no-same-line-conditional": "error", + // "sonar/no-unused-collection": "error", // Doesn't work with eslint 9 yet + // "sonar/no-use-of-empty-return-value": "error", // Doesn't work with eslint 9 yet + "sonar/no-useless-catch": "error", + "sonar/non-existent-operator": "error", + "sonar/prefer-immediate-return": "error", + "sonar/prefer-object-literal": "error", + "sonar/prefer-single-boolean-return": "error", + "sonar/prefer-while": "error", + }), + + ...(functionalEnforcement === "none" + ? {} + : { + "no-param-reassign": "error", + "sonar/elseif-without-else": "error", + }), + + ...overrides, + }, + }, + { + files: [`scripts/${GLOB_SRC}`, `cli.${GLOB_SRC_EXT}`], + name: "rs:scripts-overrides", + rules: { + "no-console": "off", + + "functional/no-conditional-statements": "off", + "functional/no-expression-statements": "off", + "functional/no-loop-statements": "off", + "functional/no-return-void": "off", + "functional/no-throw-statements": "off", + + "node/no-sync": "off", + "node/no-unpublished-import": "off", + }, + }, + ]; +} diff --git a/src/configs/jsdoc.ts b/src/configs/jsdoc.ts new file mode 100644 index 000000000..abe59a792 --- /dev/null +++ b/src/configs/jsdoc.ts @@ -0,0 +1,99 @@ +import { type ESLint } from "eslint"; + +import { type FlatConfigItem, type OptionsStylistic } from "../types"; +import { loadPackages } from "../utils"; + +export async function jsdoc( + options: OptionsStylistic = {}, +): Promise { + const { stylistic = true } = options; + + const [pluginJSDoc] = (await loadPackages(["eslint-plugin-jsdoc"])) as [ + typeof import("eslint-plugin-jsdoc"), + ]; + + return [ + { + name: "rs:jsdoc", + plugins: { + jsdoc: pluginJSDoc as ESLint.Plugin, + }, + rules: { + // waiting on https://github.com/eslint/eslint/issues/14745 + // "jsdoc/check-examples": "error", + "jsdoc/check-indentation": "error", + "jsdoc/check-line-alignment": "error", + "jsdoc/check-param-names": "error", + "jsdoc/check-property-names": "error", + "jsdoc/check-types": "error", + "jsdoc/check-values": "error", + "jsdoc/no-bad-blocks": [ + "error", + { + ignore: [ + "ts-check", + "ts-expect-error", + "ts-ignore", + "ts-nocheck", + "vue-ignore", + ], + }, + ], + "jsdoc/no-defaults": "warn", + "jsdoc/require-asterisk-prefix": "error", + "jsdoc/require-description": "warn", + // Rule is too strict. + // "jsdoc/require-description-complete-sentence": "off", + "jsdoc/require-hyphen-before-param-description": "error", + "jsdoc/require-jsdoc": [ + "warn", + { + contexts: [ + ":not(ExportNamedDeclaration) > FunctionDeclaration:not(TSDeclareFunction + FunctionDeclaration)", + "ExportNamedDeclaration > FunctionDeclaration:not(ExportNamedDeclaration:has(TSDeclareFunction) + ExportNamedDeclaration > FunctionDeclaration)", + "TSDeclareFunction", + "ExportNamedDeclaration > TSTypeAliasDeclaration", + "ExportNamedDeclaration > TSInterfaceDeclaration", + "TSEnumDeclaration", + ], + enableFixer: false, + require: { + FunctionDeclaration: false, + }, + }, + ], + "jsdoc/require-param-name": "error", + // "jsdoc/require-param": "off", + "jsdoc/require-property-name": "error", + // "jsdoc/require-property": "off", + "jsdoc/require-returns-check": "error", + // "jsdoc/require-returns": "off", + "jsdoc/require-throws": "warn", + "jsdoc/require-yields-check": "error", + "jsdoc/tag-lines": [ + "warn", + "never", + { + applyToEndTag: false, + startLines: 1, + tags: { example: { lines: "always" } }, + }, + ], + + "jsdoc/check-access": "warn", + "jsdoc/empty-tags": "warn", + "jsdoc/implements-on-classes": "warn", + "jsdoc/no-multi-asterisks": "warn", + "jsdoc/require-property-description": "warn", + "jsdoc/require-returns-description": "warn", + + ...(stylistic === false + ? {} + : { + "jsdoc/check-alignment": "error", + "jsdoc/multiline-blocks": "error", + }), + }, + }, + ]; +} diff --git a/src/configs/jsonc.ts b/src/configs/jsonc.ts new file mode 100644 index 000000000..48a144d7d --- /dev/null +++ b/src/configs/jsonc.ts @@ -0,0 +1,97 @@ +import { type ESLint } from "eslint"; + +import { GLOB_JSON, GLOB_JSON5, GLOB_JSONC } from "../globs"; +import { + type FlatConfigItem, + type OptionsFiles, + type OptionsOverrides, + type OptionsStylistic, +} from "../types"; +import { loadPackages } from "../utils"; + +export async function jsonc( + options: OptionsFiles & OptionsStylistic & OptionsOverrides = {}, +): Promise { + const { + files = [GLOB_JSON, GLOB_JSON5, GLOB_JSONC], + overrides = {}, + stylistic = true, + } = options; + + const { indent = 2 } = typeof stylistic === "boolean" ? {} : stylistic; + + const [pluginJsonc, parserJsonc] = (await loadPackages([ + "eslint-plugin-jsonc", + "jsonc-eslint-parser", + ])) as [ESLint.Plugin, typeof import("jsonc-eslint-parser")]; + + return [ + { + name: "rs:jsonc:setup", + plugins: { + jsonc: pluginJsonc, + }, + }, + { + name: "rs:jsonc:rules", + files, + languageOptions: { + parser: parserJsonc, + }, + rules: { + "jsonc/no-bigint-literals": "error", + "jsonc/no-binary-expression": "error", + "jsonc/no-binary-numeric-literals": "error", + "jsonc/no-dupe-keys": "error", + "jsonc/no-escape-sequence-in-identifier": "error", + "jsonc/no-floating-decimal": "error", + "jsonc/no-hexadecimal-numeric-literals": "error", + "jsonc/no-infinity": "error", + "jsonc/no-multi-str": "error", + "jsonc/no-nan": "error", + "jsonc/no-number-props": "error", + "jsonc/no-numeric-separators": "error", + "jsonc/no-octal": "error", + "jsonc/no-octal-escape": "error", + "jsonc/no-octal-numeric-literals": "error", + "jsonc/no-parenthesized": "error", + "jsonc/no-plus-sign": "error", + "jsonc/no-regexp-literals": "error", + "jsonc/no-sparse-arrays": "error", + "jsonc/no-template-literals": "error", + "jsonc/no-undefined-value": "error", + "jsonc/no-unicode-codepoint-escapes": "error", + "jsonc/no-useless-escape": "error", + "jsonc/space-unary-ops": "error", + "jsonc/valid-json-number": "error", + "jsonc/vue-custom-block/no-parsing-error": "error", + + ...(stylistic === false + ? {} + : { + "jsonc/array-bracket-spacing": ["error", "never"], + "jsonc/comma-dangle": ["error", "never"], + "jsonc/comma-style": ["error", "last"], + "jsonc/indent": ["error", indent], + "jsonc/key-spacing": [ + "error", + { afterColon: true, beforeColon: false }, + ], + "jsonc/object-curly-newline": [ + "error", + { consistent: true, multiline: true }, + ], + "jsonc/object-curly-spacing": ["error", "always"], + "jsonc/object-property-newline": [ + "error", + { allowMultiplePropertiesPerLine: true }, + ], + "jsonc/quote-props": "error", + "jsonc/quotes": "error", + }), + + ...overrides, + }, + }, + ]; +} diff --git a/src/configs/markdown.ts b/src/configs/markdown.ts new file mode 100644 index 000000000..971e81ca5 --- /dev/null +++ b/src/configs/markdown.ts @@ -0,0 +1,134 @@ +import { type ESLint, type Linter } from "eslint"; +import { mergeProcessors, processorPassThrough } from "eslint-merge-processors"; + +import { + GLOB_MARKDOWN, + GLOB_MARKDOWN_CODE, + GLOB_MARKDOWN_IN_MARKDOWN, +} from ".."; +import { + type FlatConfigItem, + type OptionsComponentExts, + type OptionsFiles, + type OptionsOverrides, +} from "../types"; +import { interopDefault, loadPackages, parserPlain } from "../utils"; + +export async function markdown( + options: OptionsFiles & OptionsComponentExts & OptionsOverrides = {}, +): Promise { + const { + componentExts = [], + files = [GLOB_MARKDOWN], + overrides = {}, + } = options; + + const [pluginMarkdown] = (await loadPackages(["eslint-plugin-markdown"])) as [ + ESLint.Plugin, + ]; + + const [pluginTs, pluginFunctional] = await Promise.all([ + interopDefault(import("@typescript-eslint/eslint-plugin")).catch( + () => undefined, + ), + interopDefault(import("eslint-plugin-functional/flat")).catch( + () => undefined, + ), + ]); + + return [ + { + name: "rs:markdown:setup", + plugins: { + pluginMarkdown, + }, + }, + { + name: "rs:markdown:processor", + files, + ignores: [GLOB_MARKDOWN_IN_MARKDOWN], + // `eslint-plugin-markdown` only creates virtual files for code blocks, + // but not the markdown file itself. We use `eslint-merge-processors` to + // add a pass-through processor for the markdown file itself. + processor: mergeProcessors([ + // eslint-disable-next-line ts/no-explicit-any, ts/no-unsafe-member-access + (pluginMarkdown as any).processors.markdown as Linter.Processor, + processorPassThrough, + ]), + }, + { + name: "rs:markdown:parser", + files, + languageOptions: { + parser: parserPlain, + }, + }, + { + name: "rs:markdown:disables", + files: [ + GLOB_MARKDOWN_CODE, + ...componentExts.map((ext) => `${GLOB_MARKDOWN}/**/*.${ext}`), + ], + languageOptions: { + parserOptions: { + ecmaFeatures: { + impliedStrict: true, + }, + }, + }, + rules: { + ...pluginTs?.configs["disable-type-checked"]?.rules, + ...pluginFunctional?.configs.off.rules, + + "import/newline-after-import": "off", + "no-alert": "off", + "no-console": "off", + "no-labels": "off", + "no-lone-blocks": "off", + "no-restricted-syntax": "off", + "no-undef": "off", + "no-unused-expressions": "off", + "no-unused-labels": "off", + "no-unused-vars": "off", + "node/prefer-global/process": "off", + "style/comma-dangle": "off", + "style/eol-last": "off", + "ts/consistent-type-imports": "off", + "ts/no-namespace": "off", + "ts/no-redeclare": "off", + "ts/no-require-imports": "off", + "ts/no-unused-vars": "off", + "ts/no-use-before-define": "off", + "ts/no-var-requires": "off", + "unicode-bom": "off", + "dot-notation": "off", + "import/extensions": "off", + "import/no-unresolved": "off", + "init-declarations": "off", + "jsdoc/require-jsdoc": "off", + "n/handle-callback-err": "off", + "no-empty-function": "off", + "no-empty": "off", + "no-invalid-this": "off", + "no-throw-literal": "off", + "no-useless-return": "off", + "prefer-const": "off", + "prettier/prettier": "off", + "sonarjs/no-extra-arguments": "off", + "sonarjs/no-unused-collection": "off", + "ts/consistent-generic-constructors": "off", + "ts/consistent-type-definitions": "off", + "ts/explicit-member-accessibility": "off", + "ts/no-empty-function": "off", + "ts/no-explicit-any": "off", + "ts/no-unused-expressions": "off", + "ts/prefer-function-type": "off", + "unicorn/prefer-optional-catch-binding": "off", + "unicorn/prefer-top-level-await": "off", + "unicorn/switch-case-braces": "off", + + ...overrides, + }, + }, + ]; +} diff --git a/src/configs/modern.ts b/src/configs/modern.ts deleted file mode 100644 index ede0d325c..000000000 --- a/src/configs/modern.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { type Linter } from "eslint"; - -import { - rules as builtinRules, - overrides as builtinOverrides, -} from "~/builtin"; -import { mergeConfigs } from "~/merge-configs"; -import { settings as eslintComments } from "~/plugins/eslint-comments"; -import { settings as functional } from "~/plugins/functional"; -import { settings as importPlugin } from "~/plugins/import"; -import { settings as jsdoc } from "~/plugins/jsdoc"; -import { settings as markdown } from "~/plugins/markdown"; -import { settings as node } from "~/plugins/node"; -import { settings as optimizeRegex } from "~/plugins/optimize-regex"; -import { settings as promise } from "~/plugins/promise"; -import { settings as sonarjs } from "~/plugins/sonarjs"; -import { settings as unicorn } from "~/plugins/unicorn"; - -const baseConfig: Linter.Config = { - parser: "babel-eslint", - - parserOptions: { - ecmaVersion: "latest", - ecmaFeatures: { - globalReturn: false, - impliedStrict: true, - }, - sourceType: "module", - }, - - extends: ["eslint:recommended"], - - rules: builtinRules, - - overrides: builtinOverrides, - - ignorePatterns: ["/dist"], - - reportUnusedDisableDirectives: true, -}; - -export default mergeConfigs( - baseConfig, - eslintComments, - functional, - importPlugin, - jsdoc, - markdown, - node, - optimizeRegex, - promise, - sonarjs, - unicorn, -); diff --git a/src/configs/node.ts b/src/configs/node.ts new file mode 100644 index 000000000..9840f4b69 --- /dev/null +++ b/src/configs/node.ts @@ -0,0 +1,82 @@ +import { type ESLint } from "eslint"; + +import { GLOB_MJS, GLOB_TS } from "../globs"; +import { type FlatConfigItem } from "../types"; +import { loadPackages } from "../utils"; + +export async function node(): Promise { + const [pluginNode] = (await loadPackages(["eslint-plugin-n"])) as [ + ESLint.Plugin, + ]; + + return [ + { + name: "rs:node", + plugins: { + node: pluginNode, + }, + rules: { + "node/callback-return": "error", + "node/exports-style": ["error", "module.exports"], + "node/global-require": "off", + "node/handle-callback-err": ["error", "^(err|error)$"], + "node/no-callback-literal": "error", + "node/no-missing-import": "off", + "node/no-mixed-requires": [ + "error", + { + allowCall: true, + grouping: true, + }, + ], + "node/no-new-require": "error", + "node/no-path-concat": "error", + "node/no-process-exit": "error", + "node/no-restricted-import": [ + "error", + [ + { + name: "assert", + message: "Please use assert/strict instead.", + }, + { + name: "node:assert", + message: "Please use node:assert/strict instead.", + }, + ], + ], + "node/no-restricted-require": [ + "error", + [ + { + name: "assert", + message: "Please use assert/strict instead.", + }, + { + name: "node:assert", + message: "Please use node:assert/strict instead.", + }, + ], + ], + "node/no-sync": "error", + "node/no-unpublished-import": "warn", + "node/no-unsupported-features/es-syntax": "off", + "node/prefer-global/buffer": ["error", "never"], + "node/prefer-global/console": ["error", "always"], + "node/prefer-global/process": ["error", "never"], + "node/prefer-global/text-decoder": ["error", "never"], + "node/prefer-global/text-encoder": ["error", "never"], + "node/prefer-global/url": ["error", "never"], + "node/prefer-global/url-search-params": ["error", "never"], + "node/prefer-promises/dns": "error", + "node/prefer-promises/fs": "error", + }, + }, + { + files: [GLOB_TS, GLOB_MJS], + rules: { + "node/no-unsupported-features/es-syntax": "off", + }, + }, + ]; +} diff --git a/src/configs/script.ts b/src/configs/script.ts deleted file mode 100644 index f72698701..000000000 --- a/src/configs/script.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { type Linter } from "eslint"; - -const baseConfig: Linter.Config = { - rules: { - "functional/functional-parameters": [ - "error", - { - enforceParameterCount: false, - }, - ], - "functional/no-conditional-statements": "off", - "functional/no-expression-statements": "off", - "functional/no-loop-statements": "off", - "functional/no-return-void": "off", - "functional/no-throw-statements": "off", - "n/no-process-exit": "off", - "n/no-sync": "off", - "n/no-unpublished-import": "off", - }, -}; - -export default baseConfig; diff --git a/src/configs/sort.ts b/src/configs/sort.ts new file mode 100644 index 000000000..eba72bd42 --- /dev/null +++ b/src/configs/sort.ts @@ -0,0 +1,132 @@ +import { type FlatConfigItem } from "../types"; + +/** + * Sort tsconfig.json + * + * Requires `jsonc` config + */ +export function sortTsconfig(): FlatConfigItem[] { + return [ + { + files: ["**/tsconfig.json", "**/tsconfig.*.json"], + name: "", + rules: { + "jsonc/sort-keys": [ + "error", + { + order: [ + "extends", + "compilerOptions", + "references", + "files", + "include", + "exclude", + ], + pathPattern: "^$", + }, + { + order: [ + /* Projects */ + "incremental", + "composite", + "tsBuildInfoFile", + "disableSourceOfProjectReferenceRedirect", + "disableSolutionSearching", + "disableReferencedProjectLoad", + /* Language and Environment */ + "target", + "jsx", + "jsxFactory", + "jsxFragmentFactory", + "jsxImportSource", + "lib", + "moduleDetection", + "noLib", + "reactNamespace", + "useDefineForClassFields", + "emitDecoratorMetadata", + "experimentalDecorators", + /* Modules */ + "baseUrl", + "rootDir", + "rootDirs", + "customConditions", + "module", + "moduleResolution", + "moduleSuffixes", + "noResolve", + "paths", + "resolveJsonModule", + "resolvePackageJsonExports", + "resolvePackageJsonImports", + "typeRoots", + "types", + "allowArbitraryExtensions", + "allowImportingTsExtensions", + "allowUmdGlobalAccess", + /* JavaScript Support */ + "allowJs", + "checkJs", + "maxNodeModuleJsDepth", + /* Type Checking */ + "strict", + "strictBindCallApply", + "strictFunctionTypes", + "strictNullChecks", + "strictPropertyInitialization", + "allowUnreachableCode", + "allowUnusedLabels", + "alwaysStrict", + "exactOptionalPropertyTypes", + "noFallthroughCasesInSwitch", + "noImplicitAny", + "noImplicitOverride", + "noImplicitReturns", + "noImplicitThis", + "noPropertyAccessFromIndexSignature", + "noUncheckedIndexedAccess", + "noUnusedLocals", + "noUnusedParameters", + "useUnknownInCatchVariables", + /* Emit */ + "declaration", + "declarationDir", + "declarationMap", + "downlevelIteration", + "emitBOM", + "emitDeclarationOnly", + "importHelpers", + "importsNotUsedAsValues", + "inlineSourceMap", + "inlineSources", + "mapRoot", + "newLine", + "noEmit", + "noEmitHelpers", + "noEmitOnError", + "outDir", + "outFile", + "preserveConstEnums", + "preserveValueImports", + "removeComments", + "sourceMap", + "sourceRoot", + "stripInternal", + /* Interop Constraints */ + "allowSyntheticDefaultImports", + "esModuleInterop", + "forceConsistentCasingInFileNames", + "isolatedModules", + "preserveSymlinks", + "verbatimModuleSyntax", + /* Completeness */ + "skipDefaultLibCheck", + "skipLibCheck", + ], + pathPattern: "^compilerOptions$", + }, + ], + }, + }, + ]; +} diff --git a/src/configs/stylistic.ts b/src/configs/stylistic.ts new file mode 100644 index 000000000..9e6320c9a --- /dev/null +++ b/src/configs/stylistic.ts @@ -0,0 +1,239 @@ +import { type StylisticCustomizeOptions } from "@stylistic/eslint-plugin"; +import { type ESLint } from "eslint"; + +import { + type FlatConfigItem, + type OptionsOverrides, + type StylisticConfig, +} from "../types"; +import { loadPackages } from "../utils"; + +export const StylisticConfigDefaults: StylisticConfig = { + indent: 2, + jsx: true, + quotes: "double", + semi: true, +}; + +export async function stylistic( + options: StylisticConfig & OptionsOverrides = {}, +): Promise { + const { indent, jsx, overrides = {}, quotes, semi } = options; + + const [pluginStylistic] = (await loadPackages([ + "@stylistic/eslint-plugin", + ])) as [typeof import("@stylistic/eslint-plugin")]; + + const config = pluginStylistic.configs.customize({ + flat: true, + indent, + jsx, + pluginName: "style", + quotes, + semi, + } as StylisticCustomizeOptions); + + return [ + { + name: "rs:stylistic", + plugins: { + style: pluginStylistic as ESLint.Plugin, + }, + rules: { + ...config.rules, + + "style/array-bracket-spacing": ["error", "never"], + "style/arrow-parens": ["error", "always"], + "style/arrow-spacing": ["error", { before: true, after: true }], + "style/block-spacing": ["error", "always"], + "style/brace-style": "error", + "style/comma-dangle": [ + "error", + { + arrays: "only-multiline", + exports: "only-multiline", + functions: "ignore", + imports: "only-multiline", + objects: "only-multiline", + }, + ], + "style/comma-spacing": ["error", { before: false, after: true }], + "style/comma-style": ["error", "last"], + "style/computed-property-spacing": "error", + "style/dot-location": ["error", "property"], + "style/eol-last": "error", + "style/func-call-spacing": ["error", "never"], + "style/generator-star-spacing": ["error", "after"], + "style/indent": [ + "error", + indent ?? 2, + { + SwitchCase: 1, + VariableDeclarator: 1, + outerIIFEBody: 1, + MemberExpression: 1, + FunctionDeclaration: { parameters: 1, body: 1 }, + FunctionExpression: { parameters: 1, body: 1 }, + CallExpression: { arguments: 1 }, + ArrayExpression: 1, + ObjectExpression: 1, + ImportDeclaration: 1, + flatTernaryExpressions: false, + ignoreComments: false, + }, + ], + "style/indent-binary-ops": "error", + "style/key-spacing": [ + "error", + { beforeColon: false, afterColon: true }, + ], + "style/keyword-spacing": ["error", { before: true, after: true }], + "style/linebreak-style": ["error", "unix"], + "style/lines-around-comment": [ + "warn", + { + beforeBlockComment: true, + beforeLineComment: false, + afterBlockComment: false, + afterLineComment: false, + allowBlockStart: true, + allowBlockEnd: true, + allowObjectStart: true, + allowObjectEnd: true, + allowArrayStart: true, + allowArrayEnd: true, + allowClassStart: true, + allowClassEnd: true, + }, + ], + "style/lines-between-class-members": [ + "error", + "always", + { exceptAfterSingleLine: true }, + ], + "style/max-statements-per-line": ["error", { max: 1 }], + "style/multiline-ternary": ["error", "always-multiline"], + "style/new-parens": "error", + "style/newline-per-chained-call": [ + "error", + { ignoreChainWithDepth: 2 }, + ], + "style/no-extra-parens": [ + "error", + "all", + { nestedBinaryExpressions: false }, + ], + "style/no-extra-semi": "error", + "style/no-floating-decimal": "error", + "style/no-mixed-operators": [ + "error", + { + groups: [ + ["+", "-", "*", "/", "%", "**"], + ["&", "|", "^", "~", "<<", ">>", ">>>"], + ["==", "!=", "===", "!==", ">", ">=", "<", "<="], + ["&&", "||"], + ["in", "instanceof"], + ], + allowSamePrecedence: true, + }, + ], + "style/no-mixed-spaces-and-tabs": "error", + "style/no-multi-spaces": ["error", { ignoreEOLComments: true }], + "style/no-multiple-empty-lines": ["error", { max: 1, maxEOF: 1 }], + "style/no-tabs": "error", + "style/no-trailing-spaces": "error", + "style/no-whitespace-before-property": "error", + "style/nonblock-statement-body-position": [ + "error", + "beside", + { overrides: {} }, + ], + "style/object-curly-newline": [ + "error", + { + ObjectExpression: { + minProperties: 3, + multiline: true, + consistent: true, + }, + ObjectPattern: { + minProperties: 3, + multiline: true, + consistent: true, + }, + }, + ], + "style/object-curly-spacing": ["error", "always"], + "style/object-property-newline": [ + "error", + { allowAllPropertiesOnSameLine: true }, + ], + "style/one-var-declaration-per-line": ["error", "always"], + "style/operator-linebreak": [ + "error", + "after", + { + overrides: { + "=": "none", + "==": "none", + "===": "none", + "?": "before", + ":": "before", + }, + }, + ], + "style/padded-blocks": [ + "error", + { blocks: "never", switches: "never", classes: "never" }, + ], + "style/quote-props": ["error", "consistent-as-needed"], + "style/quotes": [ + "error", + quotes ?? "double", + { avoidEscape: true, allowTemplateLiterals: true }, + ], + "style/rest-spread-spacing": ["error", "never"], + "style/semi-spacing": ["error", { before: false, after: true }], + "style/semi-style": ["error", "last"], + "style/semi": ["error", semi === false ? "never" : "always"], + "style/space-before-blocks": ["error", "always"], + "style/space-before-function-paren": [ + "error", + { asyncArrow: "always", anonymous: "never", named: "never" }, + ], + "style/space-in-parens": ["error", "never"], + "style/space-infix-ops": "error", + "style/space-unary-ops": ["error", { words: true, nonwords: false }], + "style/spaced-comment": [ + "error", + "always", + { + line: { + exceptions: ["-", "+", "*"], + markers: ["*package", "!", "/", ",", "="], + }, + block: { + balanced: true, + exceptions: ["-", "+", "*"], + markers: ["*package", "!", "*", ",", ":", "::", "flow-include"], + }, + }, + ], + "style/switch-colon-spacing": ["error", { after: true, before: false }], + "style/template-curly-spacing": ["error", "never"], + "style/template-tag-spacing": ["error", "never"], + "style/wrap-iife": [ + "error", + "inside", + { functionPrototypeMethods: true }, + ], + "style/yield-star-spacing": ["error", "after"], + "style/type-annotation-spacing": "error", + "style/member-delimiter-style": "error", + + ...overrides, + }, + }, + ]; +} diff --git a/src/configs/test.ts b/src/configs/test.ts index f653b1c7d..0e6a6352f 100644 --- a/src/configs/test.ts +++ b/src/configs/test.ts @@ -1,32 +1,55 @@ -import { type Linter } from "eslint"; +import { type ESLint } from "eslint"; -const baseConfig: Linter.Config = { - extends: ["@rebeccastevens/eslint-config/script"], +import { GLOB_TESTS } from "../globs"; +import { + type FlatConfigItem, + type OptionsFiles, + type OptionsIsInEditor, + type OptionsOverrides, +} from "../types"; +import { loadPackages } from "../utils"; - rules: { - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/no-unsafe-return": "off", - "@typescript-eslint/restrict-template-expressions": "off", - "eslint-comments/disable-enable-pair": "off", - "functional/functional-parameters": "off", - "functional/immutable-data": "warn", - "functional/no-classes": "off", - "functional/no-conditional-statements": "warn", - "functional/no-expression-statements": "off", - "functional/no-loop-statements": "warn", - "functional/no-throw-statements": "off", - "jsdoc/require-jsdoc": "off", - "lines-between-class-members": "off", - "max-classes-per-file": "off", - "n/no-sync": "off", - "sonarjs/no-duplicate-string": "off", - "sonarjs/no-identical-functions": "off", - "unicorn/consistent-function-scoping": "off", - }, -}; +export async function test( + options: OptionsFiles & OptionsIsInEditor & OptionsOverrides = {}, +): Promise { + const { files = GLOB_TESTS, isInEditor = false, overrides = {} } = options; -export default baseConfig; + const [pluginVitest, pluginNoOnlyTests] = (await loadPackages([ + "eslint-plugin-vitest", + "eslint-plugin-no-only-tests", + ])) as [typeof import("eslint-plugin-vitest"), ESLint.Plugin]; + + return [ + { + name: "rs:test:setup", + plugins: { + test: { + ...pluginVitest, + rules: { + ...(pluginVitest as ESLint.Plugin).rules, + ...pluginNoOnlyTests.rules, + }, + }, + }, + }, + { + files, + name: "rs:test:rules", + rules: { + "node/prefer-global/process": "off", + + "test/consistent-test-it": [ + "error", + { fn: "it", withinDescribe: "it" }, + ], + "test/no-identical-title": "error", + "test/no-import-node-test": "error", + "test/no-only-tests": isInEditor ? "off" : "error", + "test/prefer-hooks-in-order": "error", + "test/prefer-lowercase-title": "error", + + ...overrides, + }, + }, + ]; +} diff --git a/src/configs/toml.ts b/src/configs/toml.ts new file mode 100644 index 000000000..e9a2c5865 --- /dev/null +++ b/src/configs/toml.ts @@ -0,0 +1,70 @@ +import { type ESLint, type Linter } from "eslint"; + +import { GLOB_TOML } from "../globs"; +import { + type FlatConfigItem, + type OptionsFiles, + type OptionsOverrides, + type OptionsStylistic, +} from "../types"; +import { loadPackages } from "../utils"; + +export async function toml( + options: OptionsOverrides & OptionsStylistic & OptionsFiles = {}, +): Promise { + const { files = [GLOB_TOML], overrides = {}, stylistic = true } = options; + + const { indent = 2 } = typeof stylistic === "boolean" ? {} : stylistic; + + const [pluginToml, parserToml] = (await loadPackages([ + "eslint-plugin-toml", + "toml-eslint-parser", + ])) as [ESLint.Plugin, Linter.FlatConfigParserModule]; + + return [ + { + name: "rs:toml:setup", + plugins: { + toml: pluginToml, + }, + }, + { + files, + languageOptions: { + parser: parserToml, + }, + name: "rs:toml:rules", + rules: { + "style/spaced-comment": "off", + + "toml/comma-style": "error", + "toml/keys-order": "error", + "toml/no-space-dots": "error", + "toml/no-unreadable-number-separator": "error", + "toml/precision-of-fractional-seconds": "error", + "toml/precision-of-integer": "error", + "toml/tables-order": "error", + + "toml/vue-custom-block/no-parsing-error": "error", + + ...(stylistic === false + ? {} + : { + "toml/array-bracket-newline": "error", + "toml/array-bracket-spacing": "error", + "toml/array-element-newline": "error", + "toml/indent": ["error", indent === "tab" ? 2 : indent], + "toml/inline-table-curly-spacing": "error", + "toml/key-spacing": "error", + "toml/padding-line-between-pairs": "error", + "toml/padding-line-between-tables": "error", + "toml/quoted-keys": "error", + "toml/spaced-comment": "error", + "toml/table-bracket-spacing": "error", + }), + + ...overrides, + }, + }, + ]; +} diff --git a/src/configs/typescript.ts b/src/configs/typescript.ts index 05d4d5bf3..f20f6102f 100644 --- a/src/configs/typescript.ts +++ b/src/configs/typescript.ts @@ -1,44 +1,377 @@ -import { type Linter } from "eslint"; - -import { typescriptExtensions, typescriptSupportedExtensions } from "~/files"; -import { mergeConfigs } from "~/merge-configs"; -import { settings as typescript } from "~/plugins/typescript"; - -const baseConfig: Linter.Config = { - parser: "@typescript-eslint/parser", - - rules: { - "camelcase": "off", - "comma-dangle": "off", - "consistent-return": "off", - "dot-notation": "off", - "indent": "off", - "no-constant-condition": "off", - "no-extra-parens": "off", - "no-loop-func": "off", - "no-loss-of-precision": "off", - "no-redeclare": "off", - "no-shadow": "off", - "no-unused-expressions": "off", - "no-unused-vars": "off", - "no-use-before-define": "off", - "object-curly-spacing": "off", - "prefer-destructuring": "off", - "space-infix-ops": "off", - }, - - settings: { - "import/extensions": typescriptSupportedExtensions, - "import/external-module-folders": ["node_modules", "node_modules/@types"], - "import/parsers": { - "@typescript-eslint/parser": typescriptExtensions, +import process from "node:process"; + +import { type ESLint, type Linter } from "eslint"; + +import { GLOB_DTS, GLOB_SRC, GLOB_TESTS, GLOB_TS, GLOB_TSX } from "../globs"; +import { + type FlatConfigItem, + type OptionsComponentExts, + type OptionsFiles, + type OptionsOverrides, + type OptionsTypeScriptParserOptions, + type OptionsTypeScriptWithTypes, +} from "../types"; +import { loadPackages, toArray } from "../utils"; + +export async function typescript( + options: OptionsFiles & + OptionsComponentExts & + OptionsOverrides & + OptionsTypeScriptWithTypes & + OptionsTypeScriptParserOptions = {}, +): Promise { + const { componentExts = [], overrides = {}, parserOptions = {} } = options; + + const files = options.files ?? [ + GLOB_SRC, + ...componentExts.map((ext) => `**/*.${ext}`), + ]; + + const filesTypeAware = options.filesTypeAware ?? [ + GLOB_TS, + GLOB_TSX, + GLOB_DTS, + ]; + const tsconfigPath = + options.tsconfig === undefined + ? undefined + : typeof options.tsconfig === "boolean" + ? options.tsconfig + : toArray(options.tsconfig); + const isTypeAware = Boolean(tsconfigPath); + + const [pluginTs, parserTs] = (await loadPackages([ + "@typescript-eslint/eslint-plugin", + "@typescript-eslint/parser", + ])) as [ESLint.Plugin, Linter.FlatConfigParserModule]; + + function makeParser( + typeAware: boolean, + files: Readonly, + ignores?: Readonly, + ): FlatConfigItem { + return { + name: `rs:typescript:${typeAware ? "type-aware-parser" : "parser"}`, + files: [...files], + ...(ignores === undefined ? {} : { ignores: [...ignores] }), + languageOptions: { + parser: parserTs, + parserOptions: { + extraFileExtensions: componentExts.map((ext) => `.${ext}`), + sourceType: "module", + ...(typeAware + ? { + project: tsconfigPath, + tsconfigRootDir: process.cwd(), + } + : {}), + ...(parserOptions as Linter.ParserOptions), + }, + }, + }; + } + + const rules = { + "no-extra-boolean-cast": "off", + "no-implied-eval": "off", + "ts/ban-types": [ + "error", + { + extendDefaults: true, + types: { + "{}": false, + object: false, + Object: { fixWith: "object", message: "Use `object` instead" }, + }, + }, + ], + "ts/dot-notation": ["error", { allowIndexSignaturePropertyAccess: true }], + // "ts/explicit-function-return-type": [ + // "off", + // { + // allowConciseArrowFunctionExpressionsStartingWithVoid: true, + // allowExpressions: true, + // allowHigherOrderFunctions: true, + // allowTypedFunctionExpressions: true, + // }, + // ], + "ts/explicit-member-accessibility": [ + "error", + { accessibility: "explicit" }, + ], + // "ts/explicit-module-boundary-types": "off", + "ts/naming-convention": [ + "error", + { + selector: "default", + format: ["camelCase", "PascalCase"], + leadingUnderscore: "allow", + trailingUnderscore: "forbid", + }, + { + selector: "variableLike", + filter: { regex: "_[^_]+", match: true }, + format: ["camelCase", "PascalCase"], + prefix: ["m_", "M_"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + { + selector: "variableLike", + format: ["camelCase", "PascalCase"], + leadingUnderscore: "allow", + trailingUnderscore: "forbid", + }, + { + selector: "variable", + format: ["camelCase", "PascalCase", "UPPER_CASE"], + prefix: ["m_", "M_"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + { + selector: "variable", + filter: { regex: "^[A-Z0-9_]+$", match: true }, + format: ["UPPER_CASE"], + modifiers: ["const"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + { + selector: "variable", + filter: { regex: "_[^_]+", match: true }, + format: ["camelCase", "PascalCase"], + modifiers: ["const"], + prefix: ["m_", "M_"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + { + selector: "variable", + format: ["camelCase", "PascalCase", "UPPER_CASE"], + modifiers: ["const"], + leadingUnderscore: "allow", + trailingUnderscore: "forbid", + }, + { selector: "variable", format: null, modifiers: ["destructured"] }, + { + selector: "memberLike", + filter: { regex: "^[A-Z0-9_]+$", match: true }, + format: ["UPPER_CASE"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + { + selector: "memberLike", + format: ["camelCase", "PascalCase"], + prefix: ["m_", "M_"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + { + selector: "memberLike", + filter: { regex: "_[^_]+", match: true }, + format: ["camelCase", "PascalCase"], + modifiers: ["readonly"], + prefix: ["m_", "M_"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + { + selector: "memberLike", + format: ["camelCase", "PascalCase", "UPPER_CASE"], + modifiers: ["readonly"], + leadingUnderscore: "allow", + trailingUnderscore: "forbid", + }, + { + selector: ["accessor", "classMethod", "typeMethod", "typeProperty"], + format: ["camelCase", "PascalCase", "UPPER_CASE"], + leadingUnderscore: "allow", + trailingUnderscore: "forbid", + }, + { + selector: "enumMember", + format: ["PascalCase", "UPPER_CASE"], + leadingUnderscore: "allow", + trailingUnderscore: "forbid", + }, + { + selector: "typeLike", + format: ["PascalCase"], + leadingUnderscore: "allow", + trailingUnderscore: "forbid", + }, + { + selector: ["objectLiteralProperty", "objectLiteralMethod"], + format: null, + }, + ], + "ts/no-confusing-void-expression": [ + "error", + { ignoreArrowShorthand: false, ignoreVoidOperator: true }, + ], + "ts/no-empty-interface": ["error", { allowSingleExtends: true }], + "ts/no-explicit-any": "warn", + "ts/no-invalid-void-type": "error", + "ts/no-loop-func": "error", + "ts/no-loss-of-precision": "error", + // "ts/no-meaningless-void-operator": "off", + // "ts/no-non-null-assertion": "off", + // "ts/no-redeclare": "error", + // "ts/no-require-imports": "off", + "ts/no-shadow": [ + "warn", + { + allow: ["resolve", "reject", "done", "cb"], + builtinGlobals: false, + hoist: "never", + }, + ], + "no-throw-literal": "off", + "ts/only-throw-error": "error", + "ts/no-unnecessary-condition": [ + "error", + { allowConstantLoopConditions: true }, + ], + "ts/no-unnecessary-type-constraint": "error", + "ts/no-unsafe-argument": "warn", + "ts/no-unsafe-assignment": "warn", + "ts/no-unsafe-call": "warn", + "ts/no-unsafe-member-access": "warn", + "ts/no-unsafe-return": "warn", + "ts/no-unused-expressions": [ + "error", + { + allowShortCircuit: true, + allowTaggedTemplates: true, + allowTernary: true, + }, + ], + "ts/no-unused-vars": [ + "error", + { + args: "none", + caughtErrors: "none", + ignoreRestSiblings: true, + vars: "all", + }, + ], + "ts/no-use-before-define": [ + "error", + { classes: true, functions: false, typedefs: true, variables: true }, + ], + "ts/no-var-requires": "error", + "ts/non-nullable-type-assertion-style": "error", + "ts/prefer-for-of": "error", + "ts/prefer-includes": "error", + // "ts/prefer-interface": "off", + "ts/prefer-nullish-coalescing": "error", + "ts/prefer-optional-chain": "error", + "ts/prefer-readonly-parameter-types": "error", + "ts/prefer-regexp-exec": "error", + "ts/prefer-string-starts-ends-with": "error", + "ts/prefer-ts-expect-error": "error", + // "ts/promise-function-async": "off", + "ts/restrict-plus-operands": ["error", { skipCompoundAssignments: true }], + "ts/restrict-template-expressions": [ + "error", + { + allowAny: true, + allowBoolean: true, + allowNullish: true, + allowNumber: true, + }, + ], + "ts/strict-boolean-expressions": [ + "error", + { + allowAny: false, + allowNullableBoolean: false, + allowNullableNumber: false, + allowNullableObject: false, + allowNullableString: false, + allowNumber: false, + allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: false, + allowString: false, + }, + ], + "ts/switch-exhaustiveness-check": "error", + "ts/unbound-method": ["error", { ignoreStatic: true }], + "ts/unified-signatures": [ + "error", + { ignoreDifferentlyNamedParameters: true }, + ], + "ts/array-type": [ + "error", + { default: "array-simple", readonly: "generic" }, + ], + "ts/consistent-indexed-object-style": "error", + "ts/consistent-type-definitions": ["error", "type"], + // "ts/sort-type-union-intersection-members": "off", + + ...overrides, + } satisfies FlatConfigItem["rules"]; + + return [ + { + name: "rs:typescript:setup", + plugins: { ts: pluginTs }, + }, + ...(isTypeAware + ? [ + makeParser(true, filesTypeAware), + makeParser(false, files, filesTypeAware), + ] + : [makeParser(false, files)]), + { + name: "rs:typescript:rules", + files, + rules: Object.fromEntries( + Object.entries(rules).flatMap(([key, value]) => { + if (key.startsWith("ts/")) { + const baseName = key.slice("ts/".length); + return [ + [baseName, "off"], + [key, value], + ]; + } + return [[key, value]]; + }), + ) as NonNullable, }, - "import/resolver": { - typescript: { - extensions: typescriptSupportedExtensions, + { + files, + ignores: filesTypeAware, + name: "rs:typescript:rules-non-type-aware", + rules: ((pluginTs.configs?.["disable-type-checked"] as Linter.FlatConfig) + .rules ?? {}) as NonNullable, + }, + { + files: [GLOB_DTS], + name: "rs:typescript:dts-overrides", + rules: { + "eslint-comments/no-unlimited-disable": "off", + "import/no-duplicates": "off", + "no-restricted-syntax": "off", }, }, - }, -}; - -export default mergeConfigs(baseConfig, typescript); + { + files: GLOB_TESTS, + name: "rs:typescript:tests-overrides", + rules: { + "ts/no-unused-expressions": "off", + "ts/consistent-type-definitions": "off", + "ts/triple-slash-reference": "off", + }, + }, + { + files: ["**/*.js", "**/*.cjs"], + name: "rs:typescript:javascript-overrides", + rules: { + "ts/no-require-imports": "off", + "ts/no-var-requires": "off", + }, + }, + ]; +} diff --git a/src/configs/unicorn.ts b/src/configs/unicorn.ts new file mode 100644 index 000000000..ceec1d7da --- /dev/null +++ b/src/configs/unicorn.ts @@ -0,0 +1,131 @@ +import { type ESLint } from "eslint"; + +import { type FlatConfigItem } from "../types"; +import { loadPackages } from "../utils"; + +export async function unicorn(): Promise { + const [pluginUnicorn] = (await loadPackages(["eslint-plugin-unicorn"])) as [ + ESLint.Plugin, + ]; + + return [ + { + name: "rs:unicorn", + plugins: { + unicorn: pluginUnicorn, + }, + rules: { + "unicorn/better-regex": "error", + "unicorn/catch-error-name": "error", + "unicorn/consistent-function-scoping": "error", + "unicorn/custom-error-definition": "error", + "unicorn/empty-brace-spaces": "error", + "unicorn/error-message": "error", + "unicorn/escape-case": "error", + "unicorn/expiring-todo-comments": "error", + "unicorn/explicit-length-check": "error", + "unicorn/filename-case": [ + "error", + { + cases: { kebabCase: true, pascalCase: true }, + ignore: ["^.*\\.md$", "FUNDING.yml"], + }, + ], + "unicorn/import-style": [ + "error", + { + extendDefaultStyles: false, + styles: { typescript: { default: true, named: true } }, + }, + ], + "unicorn/new-for-builtins": "error", + // "unicorn/no-anonymous-default-export": "error", // https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2302 + "unicorn/no-array-for-each": "error", + "unicorn/no-array-method-this-argument": "error", + "unicorn/no-array-push-push": "error", + "unicorn/no-await-expression-member": "error", + // "unicorn/no-await-in-promise-methods": "error", // https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2302 + "unicorn/no-console-spaces": "error", + "unicorn/no-document-cookie": "error", + "unicorn/no-for-loop": "error", + "unicorn/no-hex-escape": "error", + "unicorn/no-instanceof-array": "error", + "unicorn/no-invalid-remove-event-listener": "error", + "unicorn/no-lonely-if": "error", + "unicorn/no-negated-condition": "error", + "unicorn/no-new-array": "error", + "unicorn/no-new-buffer": "error", + "unicorn/no-object-as-default-parameter": "error", + // "unicorn/no-single-promise-in-promise-methods": "error", // https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2302 + "unicorn/no-static-only-class": "error", + "unicorn/no-thenable": "error", + "unicorn/no-this-assignment": "error", + "unicorn/no-typeof-undefined": "error", + "unicorn/no-unnecessary-await": "error", + "unicorn/no-unnecessary-polyfills": "error", + "unicorn/no-unreadable-array-destructuring": "error", + "unicorn/no-unreadable-iife": "error", + "unicorn/no-useless-fallback-in-spread": "error", + "unicorn/no-useless-length-check": "error", + "unicorn/no-useless-promise-resolve-reject": "error", + "unicorn/no-useless-spread": "error", + "unicorn/no-useless-switch-case": "error", + "unicorn/no-zero-fractions": "error", + "unicorn/number-literal-case": "error", + "unicorn/numeric-separators-style": "error", + "unicorn/prefer-add-event-listener": "error", + "unicorn/prefer-array-find": "error", + "unicorn/prefer-array-flat-map": "error", + "unicorn/prefer-array-flat": "error", + "unicorn/prefer-array-index-of": "error", + "unicorn/prefer-array-some": "error", + "unicorn/prefer-at": ["error", { checkAllIndexAccess: false }], + "unicorn/prefer-blob-reading-methods": "error", + "unicorn/prefer-code-point": "error", + "unicorn/prefer-date-now": "error", + "unicorn/prefer-default-parameters": "error", + "unicorn/prefer-dom-node-append": "error", + "unicorn/prefer-dom-node-dataset": "error", + "unicorn/prefer-dom-node-remove": "error", + "unicorn/prefer-dom-node-text-content": "error", + "unicorn/prefer-event-target": "error", + "unicorn/prefer-export-from": "error", + "unicorn/prefer-includes": "error", + "unicorn/prefer-keyboard-event-key": "error", + "unicorn/prefer-logical-operator-over-ternary": "error", + "unicorn/prefer-math-trunc": "error", + "unicorn/prefer-modern-dom-apis": "error", + "unicorn/prefer-modern-math-apis": "error", + "unicorn/prefer-module": "error", + "unicorn/prefer-native-coercion-functions": "error", + "unicorn/prefer-negative-index": "error", + "unicorn/prefer-node-protocol": "error", + "unicorn/prefer-number-properties": "error", + "unicorn/prefer-object-from-entries": "error", + "unicorn/prefer-optional-catch-binding": "error", + "unicorn/prefer-prototype-methods": "error", + "unicorn/prefer-query-selector": "error", + "unicorn/prefer-reflect-apply": "error", + "unicorn/prefer-regexp-test": "error", + "unicorn/prefer-set-has": "error", + "unicorn/prefer-set-size": "error", + "unicorn/prefer-spread": "error", + "unicorn/prefer-string-replace-all": "error", + "unicorn/prefer-string-slice": "error", + "unicorn/prefer-string-starts-ends-with": "error", + "unicorn/prefer-string-trim-start-end": "error", + "unicorn/prefer-switch": "error", + "unicorn/prefer-ternary": "error", + "unicorn/prefer-top-level-await": "error", + "unicorn/prefer-type-error": "error", + "unicorn/relative-url-style": "error", + "unicorn/require-array-join-separator": "error", + "unicorn/require-number-to-fixed-digits-argument": "error", + "unicorn/switch-case-braces": "error", + "unicorn/template-indent": "error", + "unicorn/text-encoding-identifier-case": "error", + "unicorn/throw-new-error": "error", + }, + }, + ]; +} diff --git a/src/configs/unocss.ts b/src/configs/unocss.ts new file mode 100644 index 000000000..5f5adf571 --- /dev/null +++ b/src/configs/unocss.ts @@ -0,0 +1,36 @@ +import { type ESLint } from "eslint"; + +import { type FlatConfigItem, type OptionsUnoCSS } from "../types"; +import { loadPackages } from "../utils"; + +export async function unocss( + options: OptionsUnoCSS = {}, +): Promise { + const { attributify = true, strict = true } = options; + + const [pluginUnoCSS] = (await loadPackages(["@unocss/eslint-plugin"])) as [ + ESLint.Plugin, + ]; + + return [ + { + name: "js:unocss", + plugins: { + unocss: pluginUnoCSS, + }, + rules: { + "unocss/order": "error", + ...(attributify + ? { + "unocss/order-attributify": "error", + } + : {}), + ...(strict + ? { + "unocss/blocklist": "error", + } + : {}), + }, + }, + ]; +} diff --git a/src/configs/vue.ts b/src/configs/vue.ts new file mode 100644 index 000000000..f294e629e --- /dev/null +++ b/src/configs/vue.ts @@ -0,0 +1,243 @@ +import { type ESLint, type Linter } from "eslint"; +import { mergeProcessors } from "eslint-merge-processors"; + +import { GLOB_VUE } from "../globs"; +import { + type FlatConfigItem, + type OptionsFiles, + type OptionsHasTypeScript, + type OptionsOverrides, + type OptionsStylistic, + type OptionsVue, +} from "../types"; +import { interopDefault, loadPackages } from "../utils"; + +/* eslint-disable ts/naming-convention */ +type PluginVue = ESLint.Plugin & { + configs: { + base: Linter.FlatConfig; + essential: Linter.FlatConfig; + "strongly-recommended": Linter.FlatConfig; + recommended: Linter.FlatConfig; + "vue3-essential": Linter.FlatConfig; + "vue3-strongly-recommended": Linter.FlatConfig; + "vue3-recommended": Linter.FlatConfig; + }; +}; +/* eslint-enable ts/naming-convention */ + +export async function vue( + options: OptionsVue & + OptionsHasTypeScript & + OptionsOverrides & + OptionsStylistic & + OptionsFiles = {}, +): Promise { + const { + files = [GLOB_VUE], + overrides = {}, + stylistic = true, + vueVersion = 3, + typescript = false, + } = options; + + const sfcBlocks = options.sfcBlocks === true ? {} : options.sfcBlocks ?? {}; + + const { indent = 2 } = typeof stylistic === "boolean" ? {} : stylistic; + + const [pluginVue, parserVue, processorVueBlocks] = (await loadPackages([ + "eslint-plugin-vue", + "vue-eslint-parser", + "eslint-processor-vue-blocks", + ])) as [ + PluginVue, + typeof import("vue-eslint-parser"), + (typeof import("eslint-processor-vue-blocks"))["default"], + ]; + + const parserTs = await interopDefault( + import("@typescript-eslint/parser"), + ).catch(() => undefined); + + return [ + { + name: "rs:vue:setup", + languageOptions: { + globals: { + computed: "readonly", + defineEmits: "readonly", + defineExpose: "readonly", + defineProps: "readonly", + onMounted: "readonly", + onUnmounted: "readonly", + reactive: "readonly", + ref: "readonly", + shallowReactive: "readonly", + shallowRef: "readonly", + toRef: "readonly", + toRefs: "readonly", + watch: "readonly", + watchEffect: "readonly", + }, + }, + plugins: { + vue: pluginVue, + }, + }, + { + name: "rs:vue:rules", + files, + languageOptions: { + parser: parserVue, + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + extraFileExtensions: [".vue"], + parser: typescript === true ? parserTs : null, + sourceType: "module", + }, + }, + processor: + sfcBlocks === false + ? pluginVue.processors![".vue"]! + : mergeProcessors([ + pluginVue.processors![".vue"]!, + processorVueBlocks({ + ...sfcBlocks, + blocks: { + styles: true, + ...sfcBlocks.blocks, + }, + }), + ]), + rules: { + ...pluginVue.configs.base.rules, + + ...(vueVersion === 2 + ? { + ...pluginVue.configs.essential.rules, + ...pluginVue.configs["strongly-recommended"].rules, + ...pluginVue.configs.recommended.rules, + } + : { + ...pluginVue.configs["vue3-essential"].rules, + ...pluginVue.configs["vue3-strongly-recommended"].rules, + ...pluginVue.configs["vue3-recommended"].rules, + }), + + "node/prefer-global/process": "off", + "vue/block-order": [ + "error", + { + order: ["script", "template", "style"], + }, + ], + + "vue/component-name-in-template-casing": ["error", "PascalCase"], + "vue/component-options-name-casing": ["error", "PascalCase"], + // this is deprecated + // "vue/component-tags-order": "off", + "vue/custom-event-name-casing": ["error", "camelCase"], + "vue/define-macros-order": [ + "error", + { + order: [ + "defineOptions", + "defineProps", + "defineEmits", + "defineSlots", + ], + }, + ], + "vue/dot-location": ["error", "property"], + "vue/dot-notation": ["error", { allowKeywords: true }], + "vue/eqeqeq": ["error", "smart"], + "vue/html-indent": ["error", indent], + "vue/html-quotes": ["error", "double"], + // "vue/max-attributes-per-line": "off", + // "vue/multi-word-component-names": "off", + // "vue/no-dupe-keys": "off", + "vue/no-empty-pattern": "error", + "vue/no-irregular-whitespace": "error", + "vue/no-loss-of-precision": "error", + "vue/no-restricted-syntax": [ + "error", + "DebuggerStatement", + "LabeledStatement", + "WithStatement", + ], + "vue/no-restricted-v-bind": ["error", "/^v-/"], + // "vue/no-setup-props-reactivity-loss": "off", + "vue/no-sparse-arrays": "error", + "vue/no-unused-refs": "error", + "vue/no-useless-v-bind": "error", + // "vue/no-v-html": "off", + "vue/object-shorthand": [ + "error", + "always", + { + avoidQuotes: true, + ignoreConstructors: false, + }, + ], + "vue/prefer-separate-static-class": "error", + "vue/prefer-template": "error", + "vue/prop-name-casing": ["error", "camelCase"], + // "vue/require-default-prop": "off", + // "vue/require-prop-types": "off", + "vue/space-infix-ops": "error", + "vue/space-unary-ops": ["error", { nonwords: false, words: true }], + + ...(stylistic === false + ? {} + : { + "vue/array-bracket-spacing": ["error", "never"], + "vue/arrow-spacing": ["error", { after: true, before: true }], + "vue/block-spacing": ["error", "always"], + "vue/block-tag-newline": [ + "error", + { + multiline: "always", + singleline: "always", + }, + ], + "vue/brace-style": [ + "error", + // cspell:disable-next-line + "stroustrup", + { allowSingleLine: true }, + ], + "vue/comma-dangle": ["error", "always-multiline"], + "vue/comma-spacing": ["error", { after: true, before: false }], + "vue/comma-style": ["error", "last"], + "vue/html-comment-content-spacing": [ + "error", + "always", + { + exceptions: ["-"], + }, + ], + "vue/key-spacing": [ + "error", + { afterColon: true, beforeColon: false }, + ], + "vue/keyword-spacing": ["error", { after: true, before: true }], + // "vue/object-curly-newline": "off", + "vue/object-curly-spacing": ["error", "always"], + "vue/object-property-newline": [ + "error", + { allowMultiplePropertiesPerLine: true }, + ], + "vue/operator-linebreak": ["error", "before"], + "vue/padding-line-between-blocks": ["error", "always"], + "vue/quote-props": ["error", "consistent-as-needed"], + "vue/space-in-parens": ["error", "never"], + "vue/template-curly-spacing": "error", + }), + + ...overrides, + }, + }, + ]; +} diff --git a/src/configs/yaml.ts b/src/configs/yaml.ts new file mode 100644 index 000000000..dbb6eb70c --- /dev/null +++ b/src/configs/yaml.ts @@ -0,0 +1,73 @@ +import { type ESLint } from "eslint"; + +import { GLOB_YAML } from "../globs"; +import { + type FlatConfigItem, + type OptionsFiles, + type OptionsOverrides, + type OptionsStylistic, +} from "../types"; +import { loadPackages } from "../utils"; + +export async function yaml( + options: OptionsOverrides & OptionsStylistic & OptionsFiles = {}, +): Promise { + const { files = [GLOB_YAML], overrides = {}, stylistic = true } = options; + + const { indent = 2, quotes = "single" } = + typeof stylistic === "boolean" ? {} : stylistic; + + const [pluginYaml, parserYaml] = (await loadPackages([ + "eslint-plugin-yml", + "yaml-eslint-parser", + ])) as [ + typeof import("eslint-plugin-yml"), + typeof import("yaml-eslint-parser"), + ]; + + return [ + { + name: "rs:yaml:setup", + plugins: { + yaml: pluginYaml as unknown as ESLint.Plugin, + }, + }, + { + files, + languageOptions: { + parser: parserYaml, + }, + name: "rs:yaml:rules", + rules: { + "style/spaced-comment": "off", + + "yaml/block-mapping": "error", + "yaml/block-sequence": "error", + "yaml/no-empty-key": "error", + "yaml/no-empty-sequence-entry": "error", + "yaml/no-irregular-whitespace": "error", + "yaml/plain-scalar": "error", + + "yaml/vue-custom-block/no-parsing-error": "error", + + ...(stylistic === false + ? {} + : { + "yaml/block-mapping-question-indicator-newline": "error", + "yaml/block-sequence-hyphen-indicator-newline": "error", + "yaml/flow-mapping-curly-newline": "error", + "yaml/flow-mapping-curly-spacing": "error", + "yaml/flow-sequence-bracket-newline": "error", + "yaml/flow-sequence-bracket-spacing": "error", + "yaml/indent": ["error", indent === "tab" ? 2 : indent], + "yaml/key-spacing": "error", + "yaml/no-tab-indent": "error", + "yaml/quotes": ["error", { avoidEscape: true, prefer: quotes }], + "yaml/spaced-comment": "error", + }), + + ...overrides, + }, + }, + ]; +} diff --git a/src/factory.ts b/src/factory.ts new file mode 100644 index 000000000..c27da5fc2 --- /dev/null +++ b/src/factory.ts @@ -0,0 +1,261 @@ +import process from "node:process"; + +import { FlatConfigPipeline } from "eslint-flat-config-utils"; +import { isPackageExists } from "local-pkg"; + +import { + StylisticConfigDefaults, + comments, + formatters, + functional, + ignores, + imports, + javascript, + jsdoc, + jsonc, + markdown, + node, + sortTsconfig, + stylistic, + test, + toml, + typescript, + unicorn, + unocss, + vue, + yaml, +} from "./configs"; +import { + type Awaitable, + type FlatConfigItem, + type OptionsConfig, +} from "./types"; + +const VuePackages = ["vue", "nuxt", "vitepress", "@slidev/cli"]; + +export const defaultPluginRenaming = { + "@stylistic": "style", + "@typescript-eslint": "ts", + "import-x": "import", + n: "node", + sonarjs: "sonar", + vitest: "test", + yml: "yaml", +}; + +/** + * Construct an array of ESLint flat config items. + * + * @param {OptionsConfig & FlatConfigItem} options - The options for generating the ESLint configurations. + * @param {Awaitable[]} userConfigs - The user configurations to be merged with the generated configurations. + * @returns {Promise} The merged ESLint configurations. + */ +export function rsEslint( + options: OptionsConfig & FlatConfigItem = {}, + ...userConfigs: ReadonlyArray> +): FlatConfigPipeline { + const { + autoRenamePlugins = true, + componentExts = [], + isInEditor = !Boolean(process.env["CI"]) && + (Boolean(process.env["VSCODE_PID"]) || + Boolean(process.env["VSCODE_CWD"]) || + Boolean(process.env["JETBRAINS_IDE"]) || + Boolean(process.env["VIM"])), + typescript: typeScriptOptions = isPackageExists("typescript"), + unocss: unoCSSOptions = isPackageExists("unocss"), + vue: vueOptions = VuePackages.some((i) => isPackageExists(i)), + test: testOptions = true, + jsx: jsxOptions = true, + functional: functionalOptions = true, + jsonc: jsoncOptions = true, + yaml: yamlOptions = true, + toml: tomlOptions = true, + markdown: markdownOptions = true, + formatters: formattersOptions = true, + } = options; + + const stylisticOptions = + options.stylistic === false + ? false + : typeof options.stylistic === "object" + ? { + ...StylisticConfigDefaults, + ...options.stylistic, + } + : StylisticConfigDefaults; + + if (stylisticOptions !== false && !("jsx" in stylisticOptions)) + stylisticOptions.jsx = jsxOptions; + + const functionalEnforcement = + typeof functionalOptions === "string" + ? functionalOptions + : typeof functionalOptions === "object" + ? functionalOptions.functionalEnforcement ?? "default" + : "default"; + + const configs: Array> = []; + + // Base configs + configs.push( + ignores(), + javascript({ + isInEditor, + functionalEnforcement, + overrides: getOverrides(options, "javascript"), + }), + comments(), + node(), + jsdoc({ + stylistic: stylisticOptions, + }), + imports({ + stylistic: stylisticOptions, + }), + unicorn(), + ); + + if (vueOptions !== false) componentExts.push("vue"); + + if (typeScriptOptions !== false) { + configs.push( + typescript({ + ...resolveSubOptions(options, "typescript"), + componentExts, + overrides: getOverrides(options, "typescript"), + }), + ); + } + + if (stylisticOptions !== false) { + configs.push( + stylistic({ + ...stylisticOptions, + overrides: getOverrides(options, "stylistic"), + }), + ); + } + + if (testOptions !== false) { + configs.push( + test({ + isInEditor, + overrides: getOverrides(options, "test"), + }), + ); + } + + if (vueOptions !== false) { + configs.push( + vue({ + ...resolveSubOptions(options, "vue"), + overrides: getOverrides(options, "vue"), + stylistic: stylisticOptions, + typescript: Boolean(typeScriptOptions), + }), + ); + } + + if (functionalOptions !== false) { + configs.push( + functional({ + ...resolveSubOptions(options, "typescript"), + ...resolveSubOptions(options, "functional"), + overrides: getOverrides(options, "functional"), + functionalEnforcement, + stylistic: stylisticOptions, + }), + ); + } + + if (unoCSSOptions !== false) { + configs.push( + unocss({ + ...resolveSubOptions(options, "unocss"), + overrides: getOverrides(options, "unocss"), + }), + ); + } + + if (jsoncOptions !== false) { + configs.push( + jsonc({ + overrides: getOverrides(options, "jsonc"), + stylistic: stylisticOptions, + }), + sortTsconfig(), + ); + } + + if (yamlOptions !== false) { + configs.push( + yaml({ + overrides: getOverrides(options, "yaml"), + stylistic: stylisticOptions, + }), + ); + } + + if (tomlOptions !== false) { + configs.push( + toml({ + overrides: getOverrides(options, "toml"), + stylistic: stylisticOptions, + }), + ); + } + + if (markdownOptions !== false) { + configs.push( + markdown({ + componentExts, + overrides: getOverrides(options, "markdown"), + }), + ); + } + + if (formattersOptions !== false) { + configs.push( + formatters( + formattersOptions, + typeof stylisticOptions === "boolean" ? {} : stylisticOptions, + ), + ); + } + + let m_pipeline = new FlatConfigPipeline(); + + m_pipeline = m_pipeline.append(...configs, ...userConfigs); + + if (autoRenamePlugins) { + m_pipeline = m_pipeline.renamePlugins(defaultPluginRenaming); + } + + return m_pipeline; +} + +export type ResolvedOptions = T extends boolean + ? never + : T extends string + ? never + : NonNullable; + +export function resolveSubOptions( + options: Readonly, + key: K, +): ResolvedOptions { + return ( + typeof options[key] === "boolean" || typeof options[key] === "string" + ? {} + : options[key] ?? {} + ) as ResolvedOptions; +} + +export function getOverrides( + options: Readonly, + key: K, +) { + const sub = resolveSubOptions(options, key); + return "overrides" in sub ? sub.overrides : {}; +} diff --git a/src/globs.ts b/src/globs.ts new file mode 100644 index 000000000..2ba94a09e --- /dev/null +++ b/src/globs.ts @@ -0,0 +1,90 @@ +export const GLOB_SRC_EXT = "?([cm])[jt]s?(x)"; +export const GLOB_SRC = "**/*.?([cm])[jt]s?(x)"; + +export const GLOB_JS = "**/*.?([cm])js"; +export const GLOB_JSX = "**/*.?([cm])jsx"; + +export const GLOB_TS = "**/*.?([cm])ts"; +export const GLOB_TSX = "**/*.?([cm])tsx"; +export const GLOB_DTS = "**/*.d.?([cm])ts"; + +export const GLOB_MJS = "**/*.mjs"; +export const GLOB_MTS = "**/*.mts"; + +export const GLOB_CJS = "**/*.cjs"; +export const GLOB_CTS = "**/*.cts"; + +export const GLOB_STYLE = "**/*.{c,le,sc}ss"; +export const GLOB_CSS = "**/*.css"; +export const GLOB_POSTCSS = "**/*.{p,post}css"; +export const GLOB_LESS = "**/*.less"; +export const GLOB_SCSS = "**/*.scss"; + +export const GLOB_JSON = "**/*.json"; +export const GLOB_JSON5 = "**/*.json5"; +export const GLOB_JSONC = "**/*.jsonc"; + +export const GLOB_MARKDOWN = "**/*.md"; +export const GLOB_MARKDOWN_IN_MARKDOWN = "**/*.md/*.md"; +export const GLOB_VUE = "**/*.vue"; +export const GLOB_YAML = "**/*.y?(a)ml"; +export const GLOB_TOML = "**/*.toml"; +export const GLOB_HTML = "**/*.htm?(l)"; +export const GLOB_GRAPHQL = "**/*.{g,graph}ql"; + +export const GLOB_MARKDOWN_CODE = `${GLOB_MARKDOWN}/${GLOB_SRC}`; + +export const GLOB_TESTS = [ + `**/__tests__/**/*.${GLOB_SRC_EXT}`, + `**/*.spec.${GLOB_SRC_EXT}`, + `**/*.test.${GLOB_SRC_EXT}`, + `**/*.bench.${GLOB_SRC_EXT}`, + `**/*.benchmark.${GLOB_SRC_EXT}`, +]; + +export const GLOB_ALL_SRC = [ + GLOB_SRC, + GLOB_STYLE, + GLOB_JSON, + GLOB_JSON5, + GLOB_MARKDOWN, + GLOB_VUE, + GLOB_YAML, + GLOB_HTML, +]; + +export const GLOB_EXCLUDE = [ + "**/node_modules", + "**/dist", + "**/lib", + "**/package-lock.json", + "**/yarn.lock", + "**/pnpm-lock.yaml", + "**/bun.lockb", + + "**/output", + "**/coverage", + "**/temp", + "**/.temp", + "**/tmp", + "**/.tmp", + "**/.history", + "**/.vitepress/cache", + "**/.nuxt", + "**/.next", + "**/.vercel", + "**/.changeset", + "**/.idea", + "**/.cache", + "**/.output", + "**/.vite-inspect", + "**/.yarn", + + "**/CHANGELOG*.md", + "**/*.min.*", + "**/LICENSE*", + "**/__snapshots__", + "**/auto-import?(s).d.ts", + "**/components.d.ts", + "**/typegen.d.ts", +]; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 000000000..b3fb368e8 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,7 @@ +export * from "./configs"; +export * from "./factory"; +export * from "./globs"; +export * from "./types"; +// export * from "./utils"; + +export { rsEslint as default } from "./factory"; diff --git a/src/plugins/eslint-comments.ts b/src/plugins/eslint-comments.ts deleted file mode 100644 index 7c1374337..000000000 --- a/src/plugins/eslint-comments.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Linter } from "eslint"; - -export const settings: Linter.Config = { - plugins: ["eslint-comments"], - - extends: ["plugin:eslint-comments/recommended"], - - rules: { - "eslint-comments/disable-enable-pair": ["error", { allowWholeFile: true }], - }, -}; diff --git a/src/plugins/functional.ts b/src/plugins/functional.ts deleted file mode 100644 index 7b8727be7..000000000 --- a/src/plugins/functional.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { type Linter } from "eslint"; - -export const settings: Linter.Config = { - plugins: ["functional"], - - extends: ["plugin:functional/recommended"], - - settings: { - immutability: { - overrides: [ - { type: "^ReadonlyDeep<.+>$", to: "ReadonlyDeep" }, - { type: "^Immutable<.+>$", to: "Immutable" }, - ], - }, - }, - - rules: { - "functional/no-expression-statements": [ - "error", - { - ignoreCodePattern: "^assert", - }, - ], - "functional/immutable-data": [ - "error", - { - ignoreAccessorPattern: ["**.mutable*.**", "**.m_*.**"], - ignoreClasses: "fieldsOnly", - ignoreImmediateMutation: true, - }, - ], - "functional/no-classes": "off", - "functional/no-let": [ - "error", - { - allowInForLoopInit: true, - ignoreIdentifierPattern: ["^mutable", "^m_"], - }, - ], - "functional/no-mixed-types": "off", - "functional/functional-parameters": "off", - "functional/prefer-immutable-types": [ - "warn", - { - enforcement: "None", - ignoreInferredTypes: true, - ignoreNamePattern: ["^m_"], - parameters: { - enforcement: "ReadonlyShallow", - }, - fixer: { - ReadonlyShallow: [ - { - pattern: "^(Array|Map|Set)<(.+)>$", - replace: "Readonly$1<$2>", - }, - { - pattern: "^(.+)$", - replace: "Readonly<$1>", - }, - ], - ReadonlyDeep: [ - { - pattern: "^(?:Readonly<(.+)>|(.+))$", - replace: "ReadonlyDeep<$1$2>", - }, - ], - Immutable: [ - { - pattern: "^(?:Readonly(?:Deep)?<(.+)>|(.+))$", - replace: "Immutable<$1$2>", - }, - ], - }, - }, - ], - }, -}; diff --git a/src/plugins/import.ts b/src/plugins/import.ts deleted file mode 100644 index f0d74a231..000000000 --- a/src/plugins/import.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { type Linter } from "eslint"; - -import { commonJsFiles, jsExtensions, typescriptFiles } from "~/files"; - -export const settings: Linter.Config = { - plugins: ["import"], - - extends: ["plugin:import/recommended"], - - rules: { - "import/consistent-type-specifier-style": ["error", "prefer-inline"], - "import/default": "error", - "import/dynamic-import-chunkname": "off", - "import/export": "error", - "import/exports-last": "off", - "import/extensions": "off", - "import/first": "error", - "import/group-exports": "off", - "import/max-dependencies": [ - "off", - { - max: 10, - }, - ], - "import/named": "error", - "import/namespace": [ - "error", - { - allowComputed: true, - }, - ], - "import/newline-after-import": "error", - "import/no-absolute-path": "error", - "import/no-amd": "error", - "import/no-anonymous-default-export": "off", - "import/no-commonjs": "off", - // Should be safe when bundling. - "import/no-cycle": "off", - "import/no-default-export": "off", - "import/no-deprecated": "warn", - "import/no-duplicates": ["error", { "prefer-inline": true }], - "import/no-dynamic-require": "error", - "import/no-empty-named-blocks": "error", - "import/no-extraneous-dependencies": [ - "error", - { - bundledDependencies: true, - devDependencies: [ - "*.{js,cjs,mjs,ts,cts,mts,jsx,tsx}", - "**/scripts/**", - "**/spec/**", - "**/test/**", - "**/tests/**", - "**/__mocks__/**", - "**/__tests__/**", - "**/*{.,_}{test,spec}.{js,cjs,mjs,ts,cts,mts,jsx,tsx}", - "**/Gruntfile{,.{js,cjs,mjs,ts}}", - "**/gulpfile.{js,cjs,mjs,ts}", - "**/gulpfile.*.{js,cjs,mjs,ts}", - "**/jest.config.{js,cjs,mjs,ts}", - "**/jest.setup.{js,cjs,mjs,ts}", - "**/karma.conf.{js,cjs,mjs,ts}", - "**/postcss.config.{js,cjs,mjs,ts}", - "**/protractor.conf.{js,cjs,mjs,ts}", - "**/protractor.conf.*.{js,cjs,mjs,ts}", - "**/rollup.config.{js,cjs,mjs,ts}", - "**/rollup.config.*.{js,cjs,mjs,ts}", - "**/vite.config.{js,cjs,mjs,ts}", - "**/vitest.config.{js,cjs,mjs,ts}", - "**/vue.config.{js,cjs,mjs,ts}", - "**/webpack.config.{js,cjs,mjs,ts}", - "**/webpack.config.*.{js,cjs,mjs,ts}", - ], - optionalDependencies: true, - peerDependencies: true, - }, - ], - "import/no-internal-modules": "off", - "import/no-mutable-exports": "error", - "import/no-named-as-default": "off", - // using unicorn/import-style for per package control - "import/no-named-as-default-member": "off", - "import/no-named-default": "error", - "import/no-named-export": "off", - "import/no-namespace": "off", - "import/no-nodejs-modules": "off", - "import/no-relative-parent-imports": "off", - "import/no-restricted-paths": "off", - "import/no-self-import": "error", - "import/no-unassigned-import": "error", - "import/no-unused-modules": "off", - "import/no-useless-path-segments": [ - "error", - { - commonjs: true, - noUselessIndex: true, - }, - ], - "import/no-webpack-loader-syntax": "error", - "import/order": [ - "error", - { - "alphabetize": { - caseInsensitive: false, - order: "asc", - }, - "groups": [ - "builtin", - "external", - "internal", - "parent", - "sibling", - "index", - ], - "newlines-between": "always", - }, - ], - "import/prefer-default-export": "off", - "import/unambiguous": "off", - }, - - settings: { - "import/external-module-folders": ["node_modules"], - "import/internal-regex": "^(?:#|(?:@|~)\\/).*", - "import/resolver": { - node: { - extensions: jsExtensions, - }, - }, - }, - - overrides: [ - { - files: commonJsFiles, - rules: { - "import/no-commonjs": "off", - "import/no-dynamic-require": "off", - }, - }, - { - files: typescriptFiles, - rules: { - "import/no-unresolved": "off", - "import/named": "off", - "import/default": "off", - "import/namespace": "off", - }, - }, - ], -}; diff --git a/src/plugins/jsdoc.ts b/src/plugins/jsdoc.ts deleted file mode 100644 index 289abbc19..000000000 --- a/src/plugins/jsdoc.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { type Linter } from "eslint"; - -import { typescriptFiles } from "~/files"; - -export const settings: Linter.Config = { - plugins: ["jsdoc"], - - extends: ["plugin:jsdoc/recommended"], - - rules: { - "jsdoc/check-alignment": "error", - // waiting on https://github.com/eslint/eslint/issues/14745 - // "jsdoc/check-examples": "error", - "jsdoc/check-indentation": "error", - "jsdoc/check-line-alignment": "error", - "jsdoc/check-param-names": "error", - "jsdoc/check-property-names": "error", - "jsdoc/check-types": "error", - "jsdoc/check-values": "error", - "jsdoc/no-bad-blocks": [ - "error", - { - ignore: [ - "ts-check", - "ts-expect-error", - "ts-ignore", - "ts-nocheck", - "vue-ignore", - ], - }, - ], - "jsdoc/no-defaults": "warn", - "jsdoc/require-asterisk-prefix": "error", - "jsdoc/require-description": "warn", - // Rule is too strict. - // "jsdoc/require-description-complete-sentence": "off", - "jsdoc/require-hyphen-before-param-description": "error", - "jsdoc/require-jsdoc": [ - "warn", - { - contexts: [ - ":not(ExportNamedDeclaration) > FunctionDeclaration:not(TSDeclareFunction + FunctionDeclaration)", - "ExportNamedDeclaration > FunctionDeclaration:not(ExportNamedDeclaration:has(TSDeclareFunction) + ExportNamedDeclaration > FunctionDeclaration)", - "TSDeclareFunction", - "ExportNamedDeclaration > TSTypeAliasDeclaration", - "ExportNamedDeclaration > TSInterfaceDeclaration", - "TSEnumDeclaration", - ], - enableFixer: false, - require: { - FunctionDeclaration: false, - }, - }, - ], - "jsdoc/require-param-name": "error", - "jsdoc/require-param": "off", - "jsdoc/require-property-name": "error", - "jsdoc/require-property": "off", - "jsdoc/require-returns-check": "error", - "jsdoc/require-returns": "off", - "jsdoc/require-throws": "warn", - "jsdoc/require-yields-check": "error", - "jsdoc/tag-lines": [ - "warn", - "never", - { - applyToEndTag: false, - startLines: 1, - tags: { example: { lines: "always" } }, - }, - ], - }, - - overrides: [ - { - files: typescriptFiles, - rules: { - "jsdoc/no-types": "warn", - "jsdoc/require-param-type": "off", - "jsdoc/require-property-type": "off", - "jsdoc/require-returns-type": "off", - }, - }, - ], -}; diff --git a/src/plugins/markdown.ts b/src/plugins/markdown.ts deleted file mode 100644 index 5de3cdf91..000000000 --- a/src/plugins/markdown.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { type Linter } from "eslint"; - -export const settings: Linter.Config = { - plugins: ["markdown"], - - extends: ["plugin:markdown/recommended"], - - overrides: [ - { - files: ["./**/*.md"], - processor: "markdown/markdown", - }, - { - files: ["./**/*.md/**"], - parserOptions: { - project: null, - }, - extends: [ - "plugin:markdown/recommended", - "plugin:@typescript-eslint/disable-type-checked", - "plugin:functional/off", - ], - rules: { - "@typescript-eslint/consistent-generic-constructors": "off", - "@typescript-eslint/consistent-type-definitions": "off", - "@typescript-eslint/explicit-member-accessibility": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-unused-expressions": "off", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/prefer-function-type": "off", - "dot-notation": "off", - "import/extensions": "off", - "import/newline-after-import": "off", - "import/no-unresolved": "off", - "init-declarations": "off", - "jsdoc/require-jsdoc": "off", - "n/handle-callback-err": "off", - "no-alert": "off", - "no-console": "off", - "no-empty-function": "off", - "no-empty": "off", - "no-invalid-this": "off", - "no-labels": "off", - "no-lone-blocks": "off", - "no-restricted-syntax": "off", - "no-throw-literal": "off", - "no-undef": "off", - "no-unused-expressions": "off", - "no-unused-labels": "off", - "no-unused-vars": "off", - "no-useless-return": "off", - "node/prefer-global/process": "off", - "prefer-const": "off", - "prettier/prettier": "off", - "sonarjs/no-extra-arguments": "off", - "sonarjs/no-unused-collection": "off", - "style/comma-dangle": "off", - "style/eol-last": "off", - "ts/consistent-type-imports": "off", - "ts/no-namespace": "off", - "ts/no-redeclare": "off", - "ts/no-require-imports": "off", - "ts/no-unused-vars": "off", - "ts/no-use-before-define": "off", - "ts/no-var-requires": "off", - "unicode-bom": "off", - "unicorn/prefer-optional-catch-binding": "off", - "unicorn/prefer-top-level-await": "off", - "unicorn/switch-case-braces": "off", - "unused-imports/no-unused-imports": "off", - "unused-imports/no-unused-vars": "off", - }, - }, - ], -}; diff --git a/src/plugins/node.ts b/src/plugins/node.ts deleted file mode 100644 index db83cb690..000000000 --- a/src/plugins/node.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { type Linter } from "eslint"; - -import { commonJsFiles, typescriptFiles } from "~/files"; - -// eslint eslint-plugin-n (instead of eslint-plugin-node) - -export const settings: Linter.Config = { - plugins: ["n"], - - extends: ["plugin:n/recommended"], - - rules: { - "n/callback-return": "error", - "n/exports-style": ["error", "module.exports"], - // Allow dynamic imports. - "n/global-require": "off", - "n/handle-callback-err": ["error", "^(err|error)$"], - "n/no-callback-literal": "error", - "n/no-missing-import": "off", - "n/no-mixed-requires": [ - "error", - { - allowCall: true, - grouping: true, - }, - ], - "n/no-new-require": "error", - "n/no-path-concat": "error", - "n/no-process-exit": "error", - "n/no-restricted-import": [ - "error", - [ - { - name: "assert", - message: "Please use assert/strict instead.", - }, - { - name: "node:assert", - message: "Please use node:assert/strict instead.", - }, - ], - ], - "n/no-restricted-require": [ - "error", - [ - { - name: "assert", - message: "Please use assert/strict instead.", - }, - { - name: "node:assert", - message: "Please use node:assert/strict instead.", - }, - ], - ], - "n/no-sync": "error", - "n/no-unpublished-import": "warn", - "n/no-unsupported-features/es-syntax": "off", - "n/prefer-global/buffer": ["error", "always"], - "n/prefer-global/console": ["error", "always"], - "n/prefer-global/process": ["error", "always"], - "n/prefer-global/text-decoder": ["error", "always"], - "n/prefer-global/text-encoder": ["error", "always"], - "n/prefer-global/url": ["error", "always"], - "n/prefer-global/url-search-params": ["error", "always"], - "n/prefer-promises/dns": "error", - "n/prefer-promises/fs": "error", - }, - - overrides: [ - { - files: commonJsFiles, - rules: { - "n/no-missing-require": "off", - }, - }, - { - files: typescriptFiles, - rules: { - "n/no-unsupported-features/es-syntax": "off", - }, - }, - ], -}; diff --git a/src/plugins/optimize-regex.ts b/src/plugins/optimize-regex.ts deleted file mode 100644 index 9000c5afb..000000000 --- a/src/plugins/optimize-regex.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { type Linter } from "eslint"; - -export const settings: Linter.Config = { - plugins: ["optimize-regex"], - - rules: { - "optimize-regex/optimize-regex": "warn", - }, -}; diff --git a/src/plugins/promise.ts b/src/plugins/promise.ts deleted file mode 100644 index d634893fc..000000000 --- a/src/plugins/promise.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { type Linter } from "eslint"; - -export const settings: Linter.Config = { - plugins: ["promise"], - - extends: ["plugin:promise/recommended"], - - rules: { - "promise/always-return": "off", - "promise/avoid-new": "warn", - "promise/catch-or-return": "off", - "promise/no-nesting": "error", - "promise/no-promise-in-callback": "error", - "promise/no-return-in-finally": "error", - "promise/prefer-await-to-callbacks": "off", - "promise/prefer-await-to-then": "off", - "promise/valid-params": "error", - }, -}; diff --git a/src/plugins/sonarjs.ts b/src/plugins/sonarjs.ts deleted file mode 100644 index a1b27bfbf..000000000 --- a/src/plugins/sonarjs.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { type Linter } from "eslint"; - -export const settings: Linter.Config = { - plugins: ["sonarjs"], - - extends: ["plugin:sonarjs/recommended"], - - rules: { - "sonarjs/cognitive-complexity": "off", - "sonarjs/no-duplicate-string": "off", - "sonarjs/no-small-switch": "off", - "sonarjs/no-useless-cast": "off", - "sonarjs/max-switch-cases": "off", - }, -}; diff --git a/src/plugins/typescript.ts b/src/plugins/typescript.ts deleted file mode 100644 index 7aa552aea..000000000 --- a/src/plugins/typescript.ts +++ /dev/null @@ -1,326 +0,0 @@ -import { type Linter } from "eslint"; - -import { typescriptDeclarationFiles } from "~/files"; - -export const settings: Linter.Config = { - plugins: ["@typescript-eslint"], - - extends: [ - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-type-checked", - "plugin:@typescript-eslint/strict", - "plugin:@typescript-eslint/strict-type-checked", - "plugin:@typescript-eslint/stylistic", - "plugin:@typescript-eslint/stylistic-type-checked", - ], - - rules: { - "@typescript-eslint/array-type": [ - "error", - { - default: "array-simple", - readonly: "generic", - }, - ], - "@typescript-eslint/ban-types": [ - "error", - { - extendDefaults: true, - types: { - "{}": false, - "object": false, - "Object": { - fixWith: "object", - message: "Use object instead", - }, - }, - }, - ], - "@typescript-eslint/comma-dangle": [ - "error", - { - arrays: "only-multiline", - exports: "only-multiline", - functions: "ignore", - imports: "only-multiline", - objects: "only-multiline", - }, - ], - "@typescript-eslint/consistent-indexed-object-style": "error", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], - "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/dot-notation": [ - "error", - { - allowIndexSignaturePropertyAccess: true, - }, - ], - "@typescript-eslint/explicit-function-return-type": [ - "off", - { - allowConciseArrowFunctionExpressionsStartingWithVoid: true, - allowExpressions: true, - allowHigherOrderFunctions: true, - allowTypedFunctionExpressions: true, - }, - ], - "@typescript-eslint/explicit-member-accessibility": [ - "error", - { - accessibility: "explicit", - }, - ], - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/indent": ["error", 2], - "@typescript-eslint/naming-convention": [ - "error", - { - selector: "default", - format: ["camelCase", "PascalCase"], - leadingUnderscore: "allow", - trailingUnderscore: "forbid", - }, - { - selector: "variableLike", - filter: { - regex: "_[^_]+", - match: true, - }, - format: ["camelCase", "PascalCase"], - prefix: ["m_", "M_"], - leadingUnderscore: "forbid", - trailingUnderscore: "forbid", - }, - { - selector: "variableLike", - format: ["camelCase", "PascalCase"], - leadingUnderscore: "allow", - trailingUnderscore: "forbid", - }, - { - selector: "variable", - format: ["camelCase", "PascalCase", "UPPER_CASE"], - prefix: ["m_", "M_"], - leadingUnderscore: "forbid", - trailingUnderscore: "forbid", - }, - { - selector: "variable", - filter: { - regex: "_[^_]+", - match: true, - }, - format: ["camelCase", "PascalCase", "UPPER_CASE"], - modifiers: ["const"], - prefix: ["m_", "M_"], - leadingUnderscore: "forbid", - trailingUnderscore: "forbid", - }, - { - selector: "variable", - format: ["camelCase", "PascalCase", "UPPER_CASE"], - modifiers: ["const"], - leadingUnderscore: "allow", - trailingUnderscore: "forbid", - }, - { - selector: "variable", - format: null, - modifiers: ["destructured"], - }, - { - selector: "memberLike", - format: ["camelCase", "PascalCase", "UPPER_CASE"], - prefix: ["m_", "M_"], - leadingUnderscore: "forbid", - trailingUnderscore: "forbid", - }, - { - selector: "memberLike", - filter: { - regex: "_[^_]+", - match: true, - }, - format: ["camelCase", "PascalCase", "UPPER_CASE"], - modifiers: ["readonly"], - prefix: ["m_", "M_"], - leadingUnderscore: "forbid", - trailingUnderscore: "forbid", - }, - { - selector: "memberLike", - format: ["camelCase", "PascalCase", "UPPER_CASE"], - modifiers: ["readonly"], - leadingUnderscore: "allow", - trailingUnderscore: "forbid", - }, - { - selector: ["accessor", "classMethod", "typeMethod", "typeProperty"], - format: ["camelCase", "PascalCase", "UPPER_CASE"], - leadingUnderscore: "allow", - trailingUnderscore: "forbid", - }, - { - selector: "enumMember", - format: ["PascalCase", "UPPER_CASE"], - leadingUnderscore: "allow", - trailingUnderscore: "forbid", - }, - { - selector: "typeLike", - format: ["PascalCase"], - leadingUnderscore: "allow", - trailingUnderscore: "forbid", - }, - { - selector: ["objectLiteralProperty", "objectLiteralMethod"], - format: null, - }, - ], - "@typescript-eslint/no-meaningless-void-operator": "off", - "@typescript-eslint/no-confusing-void-expression": [ - "error", - { - ignoreArrowShorthand: false, - ignoreVoidOperator: true, - }, - ], - "@typescript-eslint/no-empty-interface": [ - "error", - { - allowSingleExtends: true, - }, - ], - "@typescript-eslint/no-extra-parens": [ - "error", - "all", - { - nestedBinaryExpressions: false, - }, - ], - "@typescript-eslint/no-invalid-void-type": "error", - "@typescript-eslint/no-loop-func": "error", - "@typescript-eslint/no-loss-of-precision": "error", - "@typescript-eslint/no-non-null-assertion": "off", - // "node" plugin will handle this. - "@typescript-eslint/no-require-imports": "off", - "@typescript-eslint/no-shadow": [ - "warn", - { - allow: ["resolve", "reject", "done", "cb"], - builtinGlobals: false, - hoist: "never", - }, - ], - "@typescript-eslint/no-throw-literal": "error", - "@typescript-eslint/no-unnecessary-condition": [ - "error", - { - allowConstantLoopConditions: true, - }, - ], - "@typescript-eslint/no-explicit-any": "warn", - "@typescript-eslint/no-unnecessary-type-constraint": "error", - "@typescript-eslint/no-unsafe-argument": "warn", - "@typescript-eslint/no-unsafe-assignment": "warn", - "@typescript-eslint/no-unsafe-call": "warn", - "@typescript-eslint/no-unsafe-member-access": "warn", - "@typescript-eslint/no-unsafe-return": "warn", - "@typescript-eslint/no-unused-expressions": [ - "error", - { - allowShortCircuit: true, - allowTaggedTemplates: true, - allowTernary: true, - }, - ], - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [ - "warn", - { - args: "none", - caughtErrors: "none", - ignoreRestSiblings: true, - vars: "all", - }, - ], - "@typescript-eslint/no-use-before-define": [ - "error", - { - classes: true, - functions: false, - typedefs: true, - variables: true, - }, - ], - "@typescript-eslint/no-var-requires": "error", - "@typescript-eslint/non-nullable-type-assertion-style": "error", - "@typescript-eslint/object-curly-spacing": ["error", "always"], - "@typescript-eslint/prefer-for-of": "warn", - "@typescript-eslint/prefer-includes": "warn", - "@typescript-eslint/prefer-interface": "off", - "@typescript-eslint/prefer-nullish-coalescing": "warn", - "@typescript-eslint/prefer-optional-chain": "warn", - "@typescript-eslint/prefer-readonly-parameter-types": "off", - "@typescript-eslint/prefer-regexp-exec": "error", - "@typescript-eslint/prefer-string-starts-ends-with": "warn", - "@typescript-eslint/prefer-ts-expect-error": "warn", - "@typescript-eslint/promise-function-async": "off", - "@typescript-eslint/restrict-plus-operands": [ - "error", - { - skipCompoundAssignments: true, - }, - ], - "@typescript-eslint/restrict-template-expressions": [ - "error", - { - allowAny: true, - allowBoolean: true, - allowNullish: true, - allowNumber: true, - }, - ], - "@typescript-eslint/space-infix-ops": "error", - "@typescript-eslint/sort-type-union-intersection-members": "off", - "@typescript-eslint/strict-boolean-expressions": [ - "error", - { - allowAny: false, - allowNullableBoolean: false, - allowNullableNumber: false, - allowNullableObject: false, - allowNullableString: false, - allowNumber: false, - allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: false, - allowString: false, - }, - ], - "@typescript-eslint/switch-exhaustiveness-check": "warn", - "@typescript-eslint/type-annotation-spacing": "error", - "@typescript-eslint/unbound-method": [ - "error", - { - ignoreStatic: true, - }, - ], - "@typescript-eslint/unified-signatures": [ - "error", - { - ignoreDifferentlyNamedParameters: true, - }, - ], - "@typescript-eslint/no-redeclare": "error", - }, - - overrides: [ - { - files: typescriptDeclarationFiles, - rules: { - "@typescript-eslint/consistent-type-definitions": "off", - "@typescript-eslint/triple-slash-reference": "off", - }, - }, - ], -}; diff --git a/src/plugins/unicorn.ts b/src/plugins/unicorn.ts deleted file mode 100644 index 1e2e99bc1..000000000 --- a/src/plugins/unicorn.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { type Linter } from "eslint"; - -import { commonJsFiles } from "~/files"; - -export const settings: Linter.Config = { - plugins: ["unicorn"], - - extends: ["plugin:unicorn/recommended"], - - rules: { - "unicorn/import-style": [ - "error", - { - extendDefaultStyles: false, - styles: { - typescript: { - default: true, - named: true, - }, - }, - }, - ], - "unicorn/filename-case": [ - "error", - { - cases: { - kebabCase: true, - pascalCase: true, - }, - ignore: ["^.*\\.md$"], - }, - ], - // "eslint-comments/no-unlimited-disable" covers this. - "unicorn/no-abusive-eslint-disable": "off", - "unicorn/no-array-callback-reference": "off", - "unicorn/no-array-reduce": "off", - "unicorn/no-empty-file": "off", - "unicorn/no-nested-ternary": "off", - "unicorn/no-null": "off", - // "n/no-process-exit" covers this. - "unicorn/no-process-exit": "off", - "unicorn/no-useless-undefined": "off", - "unicorn/prefer-at": [ - "error", - { - checkAllIndexAccess: false, - }, - ], - "unicorn/prefer-json-parse-buffer": "off", - "unicorn/prefer-string-replace-all": "error", - "unicorn/prefer-top-level-await": "error", - "unicorn/prevent-abbreviations": "off", - }, - - overrides: [ - { - files: commonJsFiles, - rules: { - "unicorn/prefer-module": "off", - "unicorn/prefer-top-level-await": "off", - }, - }, - ], -}; diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 000000000..17cbe556b --- /dev/null +++ b/src/types.ts @@ -0,0 +1,237 @@ +import { type StylisticCustomizeOptions } from "@stylistic/eslint-plugin"; +import { type ParserOptions } from "@typescript-eslint/parser"; +import { type TSESLint } from "@typescript-eslint/utils"; +import { type ESLint, type Linter } from "eslint"; +import { type Options as VueBlocksOptions } from "eslint-processor-vue-blocks"; +import { type Options as PrettierOptions } from "prettier"; + +import { type RuleOptions } from "./typegen"; + +export type Awaitable = T | Promise; + +export type Rules = RuleOptions; + +export type FlatConfigItem = Omit & { + /** + * Custom name of each config item + */ + name?: string; + + plugins?: Record< + string, + Readonly + >; + + /** + * An object containing a name-value mapping of rules to use. + */ + rules?: Record & Rules; +}; + +export type OptionsFiles = { + /** + * Override the `files` option to provide custom globs. + */ + files?: string[]; +}; + +export type OptionsVue = { + /** + * Create virtual files for Vue SFC blocks to enable linting. + * + * @see https://github.com/antfu/eslint-processor-vue-blocks + * @default true + */ + sfcBlocks?: boolean | VueBlocksOptions; + + /** + * Vue version. Apply different rules set from `eslint-plugin-vue`. + * + * @default 3 + */ + vueVersion?: 2 | 3; +} & OptionsOverrides; + +export type OptionsTypescript = + | (OptionsTypeScriptWithTypes & OptionsOverrides) + | (OptionsTypeScriptParserOptions & OptionsOverrides); + +export type OptionsFormatters = { + js?: boolean; + ts?: boolean; + json?: boolean; + yaml?: boolean; + dts?: boolean; + css?: boolean; + html?: boolean; + markdown?: boolean; + graphql?: boolean; + prettierOptions?: PrettierOptions; + slidev?: + | boolean + | { + files?: string[]; + }; +}; + +export type OptionsComponentExts = { + /** + * Additional extensions for components. + * + * @example ['vue'] + * + * @default [] + */ + componentExts?: string[]; +}; + +export type OptionsTypeScriptParserOptions = { + /** + * Additional parser options for TypeScript. + */ + parserOptions?: Partial; + + /** + * Glob patterns for files that should be type aware. + * + * @default ['**\/*.{ts,tsx}'] + */ + filesTypeAware?: string[]; +}; + +export type OptionsTypeScriptWithTypes = { + /** + * When this options is provided, type aware rules will be enabled. + * + * @see https://typescript-eslint.io/linting/typed-linting/ + */ + tsconfig?: true | string | string[]; +}; + +export type OptionsHasTypeScript = { + typescript?: boolean; +}; + +export type OptionsStylistic = { + stylistic?: boolean | StylisticConfig; +}; + +// eslint-disable-next-line functional/readonly-type +export type StylisticConfig = {} & Pick< + StylisticCustomizeOptions, + "indent" | "quotes" | "jsx" | "semi" +>; + +export type OptionsOverrides = { + overrides?: FlatConfigItem["rules"]; +}; + +export type OptionsIsInEditor = { + isInEditor?: boolean; +}; + +export type OptionsUnoCSS = { + /** + * Enable attributify support. + */ + attributify?: boolean; + + /** + * Enable strict mode by throwing errors about blocklisted classes. + */ + strict?: boolean; +} & OptionsOverrides; + +export type OptionsFunctional = { + functionalEnforcement?: "none" | "lite" | "default" | "strict"; +}; + +export type OptionsConfig = { + /** + * Core rules. Can't be disabled. + */ + javascript?: OptionsOverrides; + + /** + * Enable TypeScript support. + * + * Passing an object to enable TypeScript Language Server support. + * + * @default auto-detect based on the dependencies + */ + typescript?: boolean | OptionsTypescript; + + /** + * Enable JSX related rules. + */ + jsx?: boolean; + + /** + * Enable test support. + */ + test?: boolean | OptionsOverrides; + + /** + * Enforce functional programming. + */ + functional?: + | boolean + | OptionsFunctional["functionalEnforcement"] + | (OptionsOverrides & OptionsFunctional); + + /** + * Enable Vue support. + * + * @default auto-detect based on the dependencies + */ + vue?: boolean | OptionsVue; + + /** + * Enable JSONC support. + */ + jsonc?: boolean | OptionsOverrides; + + /** + * Enable YAML support. + */ + yaml?: boolean | OptionsOverrides; + + /** + * Enable TOML support. + */ + toml?: boolean | OptionsOverrides; + + /** + * Enable linting for **code snippets** in Markdown. + * + * For formatting Markdown content, enable also `formatters.markdown`. + */ + markdown?: boolean | OptionsOverrides; + + /** + * Enable stylistic rules. + */ + stylistic?: boolean | (StylisticConfig & OptionsOverrides); + + /** + * Enable unocss rules. + */ + unocss?: boolean | OptionsUnoCSS; + + /** + * Use external formatters to format files. + * + * When set to `true`, it will enable all formatters. + */ + formatters?: boolean | OptionsFormatters; + + /** + * Control to disable some rules in editors. + */ + isInEditor?: boolean; + + /** + * Automatically rename plugins in the config. + */ + autoRenamePlugins?: boolean; +} & OptionsComponentExts; diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 000000000..9fe52c0e3 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,79 @@ +import process from "node:process"; + +import { type Awaitable, type FlatConfigItem } from "eslint-flat-config-utils"; +import { isPackageExists } from "local-pkg"; + +/** + * Combine array and non-array configs into a single array. + */ +export async function combine( + ...configs: ReadonlyArray> +): Promise { + const resolved = await Promise.all(configs); + return resolved.flat(); +} + +export async function interopDefault( + value: Awaitable, +): Promise { + const resolved = await value; + // eslint-disable-next-line ts/no-unsafe-return, ts/no-explicit-any, ts/no-unsafe-member-access + return (resolved as any).default ?? resolved; +} + +export function toArray(value: T | T[]): T[] { + return Array.isArray(value) ? (value as T[]) : [value as T]; +} + +export const parserPlain = { + meta: { + name: "parser-plain", + }, + parseForESLint: (code: string) => ({ + ast: { + body: [], + comments: [], + loc: { end: code.length, start: 0 }, + range: [0, code.length], + tokens: [], + type: "Program", + }, + scopeManager: null, + services: { isPlain: true }, + visitorKeys: { + Program: [], + }, + }), +}; + +export async function loadPackages( + packageIds: T, +): Promise<{ + [K in keyof T]: unknown; +}> { + const missing = packageIds.filter((id) => !isPackageExists(id)); + + if (missing.length > 0) { + const missingString = missing.join(", "); + + if (Boolean(process.env["CI"]) || !process.stdout.isTTY) { + throw new Error(`Missing packages: ${missingString}`); + } + + const prompt = await import("@clack/prompts"); + const result = await prompt.confirm({ + message: + missing.length === 1 + ? `${missing[0]} is required for this config. Do you want to install it?` + : `Packages are required for this config: ${missingString}.\nDo you want to install them?`, + }); + + if (result !== false) + await import("@antfu/install-pkg").then(({ installPackage }) => + installPackage(missing, { dev: true }), + ); + } + + // eslint-disable-next-line ts/no-unsafe-return + return Promise.all(packageIds.map((id) => interopDefault(import(id)))) as any; +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 61982d0c1..6c1ed69b9 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -10,26 +10,25 @@ "importHelpers": false, "lib": ["ESNext"], "module": "ESNext", - "moduleResolution": "node", + "moduleResolution": "Bundler", "newLine": "LF", "noEmitOnError": true, + "noErrorTruncation": true, "noImplicitReturns": true, "noPropertyAccessFromIndexSignature": true, "noUncheckedIndexedAccess": true, "noUnusedLocals": false, "noUnusedParameters": false, + "preserveConstEnums": true, "pretty": true, "resolveJsonModule": true, + "skipLibCheck": true, "sourceMap": false, "strict": true, - "target": "ES2020", - "baseUrl": "./src", - "paths": { - "~": ["."], - "~/*": ["./common/*"], - "~/builtin": ["./builtin"], - "~/configs/*": ["./configs/*"], - "~/plugins/*": ["./plugins/*"] - } - } + "target": "ESNext", + "useUnknownInCatchVariables": true, + "baseUrl": ".", + "paths": {} + }, + "exclude": ["dist/"] } diff --git a/tsconfig.build.json b/tsconfig.build.json index f0e7ceb23..5b367589b 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,7 +1,8 @@ { "extends": "./tsconfig.base.json", "compilerOptions": { - "rootDir": "./src" + "rootDir": "src", + "declaration": true }, "include": ["src"] } diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 000000000..739c0ab17 --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.base.json", + "include": ["."] +} diff --git a/tsconfig.json b/tsconfig.json index 0034c9174..065ef11b1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "rootDir": "." }, - "include": [".", "src"] + "include": ["."] }