From 8349e73db189a782f059cc142e8b6cea677de9f2 Mon Sep 17 00:00:00 2001 From: oxc-bot Date: Sun, 3 Nov 2024 11:46:17 +0800 Subject: [PATCH 01/19] release: v0.11.0 (#222) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Co-authored-by: Boshen --- package.json | 4 +- pnpm-lock.yaml | 74 +++++++++---------- .../build-from-oxlint-config.spec.ts.snap | 1 - src/__snapshots__/rules-by-scope.spec.ts.snap | 12 +++ src/rules-by-category.ts | 6 +- src/rules-by-scope.ts | 4 + 6 files changed, 60 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index 975fa95..5d10cde 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-oxlint", - "version": "0.10.1", + "version": "0.11.0", "description": "Turn off all rules already supported by oxlint", "type": "module", "packageManager": "pnpm@9.12.2", @@ -63,7 +63,7 @@ "husky": "^9.1.6", "lint-staged": "^15.2.10", "memfs": "^4.14.0", - "oxlint": "^0.10.1", + "oxlint": "^0.11.0", "prettier": "^3.3.3", "scule": "^1.3.0", "shelljs": "^0.8.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5d8929f..529d75c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,8 +49,8 @@ importers: specifier: ^4.14.0 version: 4.14.0 oxlint: - specifier: ^0.10.1 - version: 0.10.1 + specifier: ^0.11.0 + version: 0.11.0 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -462,43 +462,43 @@ packages: '@oxc-node/core@0.0.15': resolution: {integrity: sha512-g8ip2dUKtxfZ5IqROmZbHz7OY/+GOG4dnhqgQezlYXCufUcWA+0GM+FqI0ZzA50njUFKCTAHXRiN+BqJPy4trA==} - '@oxlint/darwin-arm64@0.10.1': - resolution: {integrity: sha512-C2g5Hq2Ev6BU7zpGmfSNsl7r6UH7vUi2pYm56VMtq1/6N/dnuaU8+sKJfKWq66EG+rz3Q2pW0+YUhTsepnLwjw==} + '@oxlint/darwin-arm64@0.11.0': + resolution: {integrity: sha512-qQ1C5yvRYECp+FP8DCOSqNX4+e72xXyApJ2O8QyIeYFuGGF2MoDVQz3NYJEOjOfArZ9YXGsELwM3UFtjTGIZVg==} cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@0.10.1': - resolution: {integrity: sha512-mN/1WnajvV2TOaVPB91ohzLURceDsjB0oR+4JcgDKfsdrru90JRvcBpFbvwKCPzneGc/V7foYBkaBXr6/j2VSQ==} + '@oxlint/darwin-x64@0.11.0': + resolution: {integrity: sha512-pAqp6/6+mAIPr8WBndzmEuRbcXW8WNdn80hd8fLeR9teJI8eMpTkYL6kQIU7VjJ3NxpmzBLO7nh979/bwmmuBQ==} cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@0.10.1': - resolution: {integrity: sha512-uIjJf9i3cPOSAa3jcjzl7ZqWTGitEhGiFp84nFG/O123HPv/E+gP1dlXqf7512CQDciVzrVoBZTf15Ynpy3S9g==} + '@oxlint/linux-arm64-gnu@0.11.0': + resolution: {integrity: sha512-RmpjCWjX0RJ1MdIcqGQsOlXh9WgXnVgVolZLCs8MHqNuYtaIA+0VOxOhJOr7CQ0HmwV+ysPTAiQ2SVSI2tVJQQ==} cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@0.10.1': - resolution: {integrity: sha512-OV9iMyXIwrH3Kp+AQhCgW02rwvzFlo1CNZ0IDNz9vEbGy7mwI8Tnyg2lWot3pD7Pv59JV9P6b7Czal8N8TszGQ==} + '@oxlint/linux-arm64-musl@0.11.0': + resolution: {integrity: sha512-totBeaOeZlblKRpSZi3svVWpJjFlhxR7Xzrh3nhPTgHMM3696qjzyb80Yg0K8gAlOrIDlBblLG0JnaxvdM2yjg==} cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@0.10.1': - resolution: {integrity: sha512-kOvWuA9iiN6QaSncxIRRxSNNJaOOtSsVkvJJL5GMhFczl4Uv6HHqLw8x1R89YTUwkQa96ycQ/TNSdN8K8ARIEw==} + '@oxlint/linux-x64-gnu@0.11.0': + resolution: {integrity: sha512-tXiJ97WH4vwTIkGMnXYPx5NqwQiYLW9MbmnGkKkm5Xv/wpAaN761PkHRJT0zsYoAgoU3nZVp3qhit9MpHq1SQg==} cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@0.10.1': - resolution: {integrity: sha512-p2MEr8ipWlmnVuvjc8xRBs/PHR3uMzHLp70J/PInHD+ULPf40MW/D7yBtjXQVlCcSOlFLCmvJdHjiGaaWKfcEA==} + '@oxlint/linux-x64-musl@0.11.0': + resolution: {integrity: sha512-LgjgD80fiz37g31t/jMm9kyDM31WPjcTkXXXU702WQsdhujXVUZDWid9/QeVvi51EVufyyekaTYgNR8REVVZZg==} cpu: [x64] os: [linux] - '@oxlint/win32-arm64@0.10.1': - resolution: {integrity: sha512-f6grRxe0zeMwpM45+in9DEdzH4Xu9magB3YFsXhGGZ7ki511ULlWhCXsSPfuv1EIbVc0GDzacFUK7CCdhIXQpg==} + '@oxlint/win32-arm64@0.11.0': + resolution: {integrity: sha512-lfANFSWt0vU6x9JQYeMEy6uy8wniZGYQt0nT45P3BwXIMhAJbEC3yEX+bP5x8eTQrgkDu4dwIDURGCeeUL/NdA==} cpu: [arm64] os: [win32] - '@oxlint/win32-x64@0.10.1': - resolution: {integrity: sha512-ocytlmlmDjkHi1BXGdnCGH0/jS3m+1RWFjWQz0bvVDmA60DEN8PyfvShQ3H5ks3k3CVpy1nVcM/E7T6i9xDHFg==} + '@oxlint/win32-x64@0.11.0': + resolution: {integrity: sha512-5CHtAp82xbv0jnh/HGi3QE0ANBr3+R338MA0wgZXc7477Vuri0aSK0T9oRU+K/pVloPVJaWKSDCCZoiZIYckzg==} cpu: [x64] os: [win32] @@ -1511,8 +1511,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxlint@0.10.1: - resolution: {integrity: sha512-b7/cFNeY6A28fKMGokcunbZ/9EN6msunYeuPDWZIvxm2jRwitxX4+Zpw4kx1wt8vFxihf72v15kNNDWG5KZ09A==} + oxlint@0.11.0: + resolution: {integrity: sha512-uY6/R4k5bECwJBR+y8CqGRcUb5hxNReziBjt5+pk6DKxj46DqMd6HwEk090KnaH1czVf23r8mcEsJYGowMWeIA==} engines: {node: '>=14.*'} hasBin: true @@ -2354,28 +2354,28 @@ snapshots: '@oxc-node/core-win32-ia32-msvc': 0.0.15 '@oxc-node/core-win32-x64-msvc': 0.0.15 - '@oxlint/darwin-arm64@0.10.1': + '@oxlint/darwin-arm64@0.11.0': optional: true - '@oxlint/darwin-x64@0.10.1': + '@oxlint/darwin-x64@0.11.0': optional: true - '@oxlint/linux-arm64-gnu@0.10.1': + '@oxlint/linux-arm64-gnu@0.11.0': optional: true - '@oxlint/linux-arm64-musl@0.10.1': + '@oxlint/linux-arm64-musl@0.11.0': optional: true - '@oxlint/linux-x64-gnu@0.10.1': + '@oxlint/linux-x64-gnu@0.11.0': optional: true - '@oxlint/linux-x64-musl@0.10.1': + '@oxlint/linux-x64-musl@0.11.0': optional: true - '@oxlint/win32-arm64@0.10.1': + '@oxlint/win32-arm64@0.11.0': optional: true - '@oxlint/win32-x64@0.10.1': + '@oxlint/win32-x64@0.11.0': optional: true '@pkgjs/parseargs@0.11.0': @@ -3428,16 +3428,16 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxlint@0.10.1: + oxlint@0.11.0: optionalDependencies: - '@oxlint/darwin-arm64': 0.10.1 - '@oxlint/darwin-x64': 0.10.1 - '@oxlint/linux-arm64-gnu': 0.10.1 - '@oxlint/linux-arm64-musl': 0.10.1 - '@oxlint/linux-x64-gnu': 0.10.1 - '@oxlint/linux-x64-musl': 0.10.1 - '@oxlint/win32-arm64': 0.10.1 - '@oxlint/win32-x64': 0.10.1 + '@oxlint/darwin-arm64': 0.11.0 + '@oxlint/darwin-x64': 0.11.0 + '@oxlint/linux-arm64-gnu': 0.11.0 + '@oxlint/linux-arm64-musl': 0.11.0 + '@oxlint/linux-x64-gnu': 0.11.0 + '@oxlint/linux-x64-musl': 0.11.0 + '@oxlint/win32-arm64': 0.11.0 + '@oxlint/win32-x64': 0.11.0 p-limit@2.3.0: dependencies: diff --git a/src/__snapshots__/build-from-oxlint-config.spec.ts.snap b/src/__snapshots__/build-from-oxlint-config.spec.ts.snap index d4e0c97..8d79c9c 100644 --- a/src/__snapshots__/build-from-oxlint-config.spec.ts.snap +++ b/src/__snapshots__/build-from-oxlint-config.spec.ts.snap @@ -151,7 +151,6 @@ exports[`buildFromOxlintConfig > default plugins (react, unicorn, typescript), d "no-useless-escape": "off", "no-useless-rename": "off", "no-with": "off", - "react/iframe-missing-sandbox": "off", "react/jsx-key": "off", "react/jsx-no-duplicate-props": "off", "react/jsx-no-target-blank": "off", diff --git a/src/__snapshots__/rules-by-scope.spec.ts.snap b/src/__snapshots__/rules-by-scope.spec.ts.snap index 3385615..dfa1778 100644 --- a/src/__snapshots__/rules-by-scope.spec.ts.snap +++ b/src/__snapshots__/rules-by-scope.spec.ts.snap @@ -188,6 +188,9 @@ exports[`contains all the oxlint rules 1`] = ` "import/no-amd": [ 0, ], + "import/no-commonjs": [ + 0, + ], "import/no-cycle": [ 0, ], @@ -833,12 +836,18 @@ exports[`contains all the oxlint rules 1`] = ` "node/no-exports-assign": [ 0, ], + "node/no-new-require": [ + 0, + ], "prefer-exponentiation-operator": [ 0, ], "prefer-numeric-literals": [ 0, ], + "prefer-object-has-own": [ + 0, + ], "promise/avoid-new": [ 0, ], @@ -968,6 +977,9 @@ exports[`contains all the oxlint rules 1`] = ` "react/self-closing-comp": [ 0, ], + "react/style-prop-object": [ + 0, + ], "react/void-dom-elements-no-children": [ 0, ], diff --git a/src/rules-by-category.ts b/src/rules-by-category.ts index 319c8b7..48e67b2 100644 --- a/src/rules-by-category.ts +++ b/src/rules-by-category.ts @@ -113,12 +113,14 @@ const restrictionRules = { 'no-void': 'off', 'unicode-bom': 'off', 'import/no-amd': 'off', + 'import/no-commonjs': 'off', 'import/no-cycle': 'off', 'import/no-default-export': 'off', 'import/no-dynamic-require': 'off', 'import/no-webpack-loader-syntax': 'off', 'jsdoc/check-access': 'off', 'jsdoc/empty-tags': 'off', + 'node/no-new-require': 'off', 'promise/catch-or-return': 'off', 'promise/spec-only': 'off', 'react/button-has-type': 'off', @@ -166,6 +168,7 @@ const styleRules = { 'no-ternary': 'off', 'prefer-exponentiation-operator': 'off', 'prefer-numeric-literals': 'off', + 'prefer-object-has-own': 'off', 'sort-imports': 'off', 'sort-keys': 'off', 'jest/consistent-test-it': 'off', @@ -379,7 +382,6 @@ const correctnessRules = { 'promise/no-callback-in-promise': 'off', 'promise/no-new-statics': 'off', 'promise/valid-params': 'off', - 'react/iframe-missing-sandbox': 'off', 'react/jsx-key': 'off', 'react/jsx-no-duplicate-props': 'off', 'react/jsx-no-target-blank': 'off', @@ -440,8 +442,10 @@ const suspiciousRules = { 'import/no-named-as-default-member': 'off', 'import/no-self-import': 'off', 'jest/no-commented-out-tests': 'off', + 'react/iframe-missing-sandbox': 'off', 'react/jsx-no-comment-textnodes': 'off', 'react/react-in-jsx-scope': 'off', + 'react/style-prop-object': 'off', '@typescript-eslint/no-confusing-non-null-assertion': 'off', '@typescript-eslint/no-extraneous-class': 'off', '@typescript-eslint/no-unnecessary-type-constraint': 'off', diff --git a/src/rules-by-scope.ts b/src/rules-by-scope.ts index 83617ad..9ea72f1 100644 --- a/src/rules-by-scope.ts +++ b/src/rules-by-scope.ts @@ -104,6 +104,7 @@ const eslintRules = { 'no-with': 'off', 'prefer-exponentiation-operator': 'off', 'prefer-numeric-literals': 'off', + 'prefer-object-has-own': 'off', radix: 'off', 'require-await': 'off', 'require-yield': 'off', @@ -172,6 +173,7 @@ const importRules = { 'import/named': 'off', 'import/namespace': 'off', 'import/no-amd': 'off', + 'import/no-commonjs': 'off', 'import/no-cycle': 'off', 'import/no-default-export': 'off', 'import/no-deprecated': 'off', @@ -311,6 +313,7 @@ const nextjsRules = { const nodeRules = { 'node/no-exports-assign': 'off', + 'node/no-new-require': 'off', } as const; const promiseRules = { @@ -355,6 +358,7 @@ const reactRules = { 'react/require-render-return': 'off', 'react/rules-of-hooks': 'off', 'react/self-closing-comp': 'off', + 'react/style-prop-object': 'off', 'react/void-dom-elements-no-children': 'off', } as const; From a22f012fbf9d6781f7a2b84cd24f8575b1d199f1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 3 Nov 2024 19:49:07 +0000 Subject: [PATCH 02/19] chore(deps): update dependency pnpm to v9.12.3 (#223) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [pnpm](https://pnpm.io) ([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm)) | `9.12.2` -> `9.12.3` | [![age](https://developer.mend.io/api/mc/badges/age/npm/pnpm/9.12.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/pnpm/9.12.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/pnpm/9.12.2/9.12.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/pnpm/9.12.2/9.12.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
pnpm/pnpm (pnpm) ### [`v9.12.3`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9123) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.12.2...v9.12.3) ##### Patch Changes - Don't purge `node_modules`, when typing "n" in the prompt that asks whether to remove `node_modules` before installation [#​8655](https://redirect.github.com/pnpm/pnpm/pull/8655). - Fix a bug causing pnpm to infinitely spawn itself when `manage-package-manager-versions=true` is set and the `.tools` directory is corrupt. - Use `crypto.hash`, when available, for improved performance [#​8629](https://redirect.github.com/pnpm/pnpm/pull/8629). - Fixed a race condition in temporary file creation in the store by including worker thread ID in filename. Previously, multiple worker threads could attempt to use the same temporary file. Temporary files now include both process ID and thread ID for uniqueness [#​8703](https://redirect.github.com/pnpm/pnpm/pull/8703). - All commands should read settings from the `package.json` at the root of the workspace [#​8667](https://redirect.github.com/pnpm/pnpm/issues/8667). - When `manage-package-manager-versions` is set to `true`, errors spawning a self-managed version of `pnpm` will now be shown (instead of being silent). - Pass the find command to npm, it is an alias for npm search
--- ### Configuration 📅 **Schedule**: Branch creation - "before 10am on monday" in timezone Asia/Shanghai, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/eslint-plugin-oxlint). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mise.toml b/.mise.toml index 2347fc7..f8f5739 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,2 +1,2 @@ [tools] -pnpm = "9.12.2" +pnpm = "9.12.3" From 83c5b04dcf66c447c9c320035115e89f3dd2c7a4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 3 Nov 2024 22:14:48 +0000 Subject: [PATCH 03/19] chore(deps): update npm packages (#224) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@eslint/js](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint/tree/HEAD/packages/js)) | [`9.13.0` -> `9.14.0`](https://renovatebot.com/diffs/npm/@eslint%2fjs/9.13.0/9.14.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fjs/9.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@eslint%2fjs/9.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@eslint%2fjs/9.13.0/9.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@eslint%2fjs/9.13.0/9.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.8.1` -> `22.8.7`](https://renovatebot.com/diffs/npm/@types%2fnode/22.8.1/22.8.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.8.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.8.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.8.1/22.8.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.8.1/22.8.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [@vitest/coverage-v8](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/coverage-v8#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8)) | [`2.1.3` -> `2.1.4`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-v8/2.1.3/2.1.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fcoverage-v8/2.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fcoverage-v8/2.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fcoverage-v8/2.1.3/2.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fcoverage-v8/2.1.3/2.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [eslint](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint)) | [`9.13.0` -> `9.14.0`](https://renovatebot.com/diffs/npm/eslint/9.13.0/9.14.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/9.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint/9.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint/9.13.0/9.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/9.13.0/9.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [pnpm](https://pnpm.io) ([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm)) | [`9.12.2` -> `9.12.3`](https://renovatebot.com/diffs/npm/pnpm/9.12.2/9.12.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/pnpm/9.12.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/pnpm/9.12.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/pnpm/9.12.2/9.12.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/pnpm/9.12.2/9.12.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)) | [`8.11.0` -> `8.12.2`](https://renovatebot.com/diffs/npm/typescript-eslint/8.11.0/8.12.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript-eslint/8.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript-eslint/8.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript-eslint/8.11.0/8.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript-eslint/8.11.0/8.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [vitest](https://redirect.github.com/vitest-dev/vitest) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`2.1.3` -> `2.1.4`](https://renovatebot.com/diffs/npm/vitest/2.1.3/2.1.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/2.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/2.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/2.1.3/2.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/2.1.3/2.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
eslint/eslint (@​eslint/js) ### [`v9.14.0`](https://redirect.github.com/eslint/eslint/compare/v9.13.0...28be4471f6eb61b4304ae3d17ea7eeacc6364bbe) [Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.13.0...v9.14.0)
vitest-dev/vitest (@​vitest/coverage-v8) ### [`v2.1.4`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v2.1.4) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v2.1.3...v2.1.4) #####    🚀 Features - **browser**: Allow custom HTML path, respect plugins `transformIndexHtml`  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6725](https://redirect.github.com/vitest-dev/vitest/issues/6725) [(16902)](https://redirect.github.com/vitest-dev/vitest/commit/169028f0) #####    🐞 Bug Fixes - Don't normalize drive case letter in root  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6792](https://redirect.github.com/vitest-dev/vitest/issues/6792) [(b28cd)](https://redirect.github.com/vitest-dev/vitest/commit/b28cd2e3) - **browser**: - Fix default browser port  -  by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6700](https://redirect.github.com/vitest-dev/vitest/issues/6700) [(9c518)](https://redirect.github.com/vitest-dev/vitest/commit/9c518c14) - Optimize expect-type  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6713](https://redirect.github.com/vitest-dev/vitest/issues/6713) [(07918)](https://redirect.github.com/vitest-dev/vitest/commit/07918538) - Don't polyfill process.env  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6718](https://redirect.github.com/vitest-dev/vitest/issues/6718) [(da6d2)](https://redirect.github.com/vitest-dev/vitest/commit/da6d2ea7) - Increment browser port automatically if there are several projects with browser.enabled  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6717](https://redirect.github.com/vitest-dev/vitest/issues/6717) [(a9397)](https://redirect.github.com/vitest-dev/vitest/commit/a939779f) - Cleanup keyboard state  -  by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6731](https://redirect.github.com/vitest-dev/vitest/issues/6731) [(19278)](https://redirect.github.com/vitest-dev/vitest/commit/19278f4c) - Don't add `v=` queries to setup files imports  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6759](https://redirect.github.com/vitest-dev/vitest/issues/6759) [(b8258)](https://redirect.github.com/vitest-dev/vitest/commit/b82584c9) - User event cleanup on retry  -  by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6764](https://redirect.github.com/vitest-dev/vitest/issues/6764) [(bdd15)](https://redirect.github.com/vitest-dev/vitest/commit/bdd15dd1) - Ignore non mocked msw requests  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6770](https://redirect.github.com/vitest-dev/vitest/issues/6770) [(9d9ba)](https://redirect.github.com/vitest-dev/vitest/commit/9d9bad5b) - Initiate MSW in the same frame as tests  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6772](https://redirect.github.com/vitest-dev/vitest/issues/6772) [(2444f)](https://redirect.github.com/vitest-dev/vitest/commit/2444ff22) - **deps**: - Update dependency sirv to v3  -  in [https://github.com/vitest-dev/vitest/issues/6701](https://redirect.github.com/vitest-dev/vitest/issues/6701) [(fde5d)](https://redirect.github.com/vitest-dev/vitest/commit/fde5d509) - **expect**: - Correct behavior of `toThrowError` with empty string parameter  -  by [@​shulaoda](https://redirect.github.com/shulaoda) in [https://github.com/vitest-dev/vitest/issues/6710](https://redirect.github.com/vitest-dev/vitest/issues/6710) [(a6129)](https://redirect.github.com/vitest-dev/vitest/commit/a61293e9) - **mocker**: - Remove spy from peer dependencies  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6777](https://redirect.github.com/vitest-dev/vitest/issues/6777) [(3a8b5)](https://redirect.github.com/vitest-dev/vitest/commit/3a8b56bf) - **vitest**: - Clarify slowTestThreshold, print slow tests in non-TTY mode  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6715](https://redirect.github.com/vitest-dev/vitest/issues/6715) [(2e6aa)](https://redirect.github.com/vitest-dev/vitest/commit/2e6aa647) - Print warnings form Vite plugins  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6724](https://redirect.github.com/vitest-dev/vitest/issues/6724) [(121b1)](https://redirect.github.com/vitest-dev/vitest/commit/121b161f) - Don't fail if the working directory starts with a lowercase drive letter  -  by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6779](https://redirect.github.com/vitest-dev/vitest/issues/6779) [(df6d7)](https://redirect.github.com/vitest-dev/vitest/commit/df6d750b) - Silence import analysis warning  -  by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6785](https://redirect.github.com/vitest-dev/vitest/issues/6785) [(39041)](https://redirect.github.com/vitest-dev/vitest/commit/39041ee5) - **vitest,runner**: - Simplify `test.extend` type exports  -  by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6707](https://redirect.github.com/vitest-dev/vitest/issues/6707) [(e5c38)](https://redirect.github.com/vitest-dev/vitest/commit/e5c388f0) #####    🏎 Performance - Use `hash` to replace `createHash`  -  by [@​btea](https://redirect.github.com/btea) in [https://github.com/vitest-dev/vitest/issues/6703](https://redirect.github.com/vitest-dev/vitest/issues/6703) [(5d07b)](https://redirect.github.com/vitest-dev/vitest/commit/5d07bba6) #####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v2.1.3...v2.1.4)
eslint/eslint (eslint) ### [`v9.14.0`](https://redirect.github.com/eslint/eslint/compare/v9.13.0...db0b844a66ee25483f9619d04346de1a2a0d79fa) [Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.13.0...v9.14.0)
pnpm/pnpm (pnpm) ### [`v9.12.3`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9123) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.12.2...v9.12.3) ##### Patch Changes - Don't purge `node_modules`, when typing "n" in the prompt that asks whether to remove `node_modules` before installation [#​8655](https://redirect.github.com/pnpm/pnpm/pull/8655). - Fix a bug causing pnpm to infinitely spawn itself when `manage-package-manager-versions=true` is set and the `.tools` directory is corrupt. - Use `crypto.hash`, when available, for improved performance [#​8629](https://redirect.github.com/pnpm/pnpm/pull/8629). - Fixed a race condition in temporary file creation in the store by including worker thread ID in filename. Previously, multiple worker threads could attempt to use the same temporary file. Temporary files now include both process ID and thread ID for uniqueness [#​8703](https://redirect.github.com/pnpm/pnpm/pull/8703). - All commands should read settings from the `package.json` at the root of the workspace [#​8667](https://redirect.github.com/pnpm/pnpm/issues/8667). - When `manage-package-manager-versions` is set to `true`, errors spawning a self-managed version of `pnpm` will now be shown (instead of being silent). - Pass the find command to npm, it is an alias for npm search
typescript-eslint/typescript-eslint (typescript-eslint) ### [`v8.12.2`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8122-2024-10-29) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.12.1...v8.12.2) This was a version bump only for typescript-eslint to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. ### [`v8.12.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8121-2024-10-28) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.12.0...v8.12.1) This was a version bump only for typescript-eslint to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. ### [`v8.12.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8120-2024-10-28) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.11.0...v8.12.0) ##### 🚀 Features - **typescript-eslint:** improve undefined extension handling ([#​10177](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/10177)) ##### ❤️ Thank You - Maxim Stykow [@​mstykow](https://redirect.github.com/mstykow) You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.
--- ### Configuration 📅 **Schedule**: Branch creation - "before 10am on monday" in timezone Asia/Shanghai, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/eslint-plugin-oxlint). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 422 +++++++++++++++++++++++++------------------------ 2 files changed, 218 insertions(+), 206 deletions(-) diff --git a/package.json b/package.json index 5d10cde..e7df527 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.11.0", "description": "Turn off all rules already supported by oxlint", "type": "module", - "packageManager": "pnpm@9.12.2", + "packageManager": "pnpm@9.12.3", "exports": { ".": { "types": "./dist/index.d.ts", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 529d75c..b1740c0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,31 +14,31 @@ importers: devDependencies: '@eslint/js': specifier: ^9.13.0 - version: 9.13.0 + version: 9.14.0 '@oxc-node/core': specifier: ^0.0.15 version: 0.0.15 '@types/node': specifier: ^22.7.7 - version: 22.8.1 + version: 22.8.7 '@types/shelljs': specifier: ^0.8.15 version: 0.8.15 '@vitest/coverage-v8': specifier: ^2.1.3 - version: 2.1.3(vitest@2.1.3(@types/node@22.8.1)) + version: 2.1.4(vitest@2.1.4(@types/node@22.8.7)) dedent: specifier: ^1.5.3 version: 1.5.3 eslint: specifier: ^9.13.0 - version: 9.13.0(jiti@2.3.3) + version: 9.14.0(jiti@2.3.3) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.13.0(jiti@2.3.3)) + version: 9.1.0(eslint@9.14.0(jiti@2.3.3)) eslint-plugin-unicorn: specifier: ^56.0.0 - version: 56.0.0(eslint@9.13.0(jiti@2.3.3)) + version: 56.0.0(eslint@9.14.0(jiti@2.3.3)) husky: specifier: ^9.1.6 version: 9.1.6 @@ -65,16 +65,16 @@ importers: version: 5.6.3 typescript-eslint: specifier: ^8.10.0 - version: 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) + version: 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) vite: specifier: ^5.4.9 - version: 5.4.10(@types/node@22.8.1) + version: 5.4.10(@types/node@22.8.7) vite-plugin-dts: specifier: ^4.2.4 - version: 4.3.0(@types/node@22.8.1)(rollup@4.24.2)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + version: 4.3.0(@types/node@22.8.7)(rollup@4.24.2)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.7)) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.8.1) + version: 2.1.4(@types/node@22.8.7) packages: @@ -98,8 +98,8 @@ packages: resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.1': - resolution: {integrity: sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==} + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -263,8 +263,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.0': - resolution: {integrity: sha512-gh7PdNombP8ftL8TinYC8Xd7WEypB8EKV4PI2h0eMzndKjPCXuo2zUiZtD2Hu+MSPt02Ty2MdS788ADl9ai1rA==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/config-array@0.18.0': @@ -279,24 +279,24 @@ packages: resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.13.0': - resolution: {integrity: sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==} + '@eslint/js@9.14.0': + resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.1': - resolution: {integrity: sha512-HFZ4Mp26nbWk9d/BpvP0YNL6W4UoZF0VFcTw/aPPA8RpOxeFQgK+ClABGgAUXs9Y/RGX/l1vOmrqz1MQt9MNuw==} + '@eslint/plugin-kit@0.2.2': + resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@humanfs/core@0.19.0': - resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.5': - resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -307,6 +307,10 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} + '@humanwhocodes/retry@0.4.0': + resolution: {integrity: sha512-xnRgu9DxZbkWak/te3fcytNyp8MTbuiZIaueg2rgEvBuN55n04nwLYLU9TX/VVlusc9L2ZNXi99nUFNkHXtr5g==} + engines: {node: '>=18.18'} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -645,8 +649,8 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@22.8.1': - resolution: {integrity: sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==} + '@types/node@22.8.7': + resolution: {integrity: sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -654,8 +658,8 @@ packages: '@types/shelljs@0.8.15': resolution: {integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==} - '@typescript-eslint/eslint-plugin@8.11.0': - resolution: {integrity: sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==} + '@typescript-eslint/eslint-plugin@8.12.2': + resolution: {integrity: sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -665,8 +669,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.11.0': - resolution: {integrity: sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==} + '@typescript-eslint/parser@8.12.2': + resolution: {integrity: sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -675,12 +679,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@8.11.0': - resolution: {integrity: sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==} + '@typescript-eslint/scope-manager@8.12.2': + resolution: {integrity: sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.11.0': - resolution: {integrity: sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==} + '@typescript-eslint/type-utils@8.12.2': + resolution: {integrity: sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -688,12 +692,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@8.11.0': - resolution: {integrity: sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==} + '@typescript-eslint/types@8.12.2': + resolution: {integrity: sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.11.0': - resolution: {integrity: sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==} + '@typescript-eslint/typescript-estree@8.12.2': + resolution: {integrity: sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -701,33 +705,32 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.11.0': - resolution: {integrity: sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==} + '@typescript-eslint/utils@8.12.2': + resolution: {integrity: sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@8.11.0': - resolution: {integrity: sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==} + '@typescript-eslint/visitor-keys@8.12.2': + resolution: {integrity: sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/coverage-v8@2.1.3': - resolution: {integrity: sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==} + '@vitest/coverage-v8@2.1.4': + resolution: {integrity: sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==} peerDependencies: - '@vitest/browser': 2.1.3 - vitest: 2.1.3 + '@vitest/browser': 2.1.4 + vitest: 2.1.4 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@2.1.3': - resolution: {integrity: sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==} + '@vitest/expect@2.1.4': + resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} - '@vitest/mocker@2.1.3': - resolution: {integrity: sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==} + '@vitest/mocker@2.1.4': + resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} peerDependencies: - '@vitest/spy': 2.1.3 - msw: ^2.3.5 + msw: ^2.4.9 vite: ^5.0.0 peerDependenciesMeta: msw: @@ -735,20 +738,20 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.3': - resolution: {integrity: sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==} + '@vitest/pretty-format@2.1.4': + resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} - '@vitest/runner@2.1.3': - resolution: {integrity: sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==} + '@vitest/runner@2.1.4': + resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} - '@vitest/snapshot@2.1.3': - resolution: {integrity: sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==} + '@vitest/snapshot@2.1.4': + resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} - '@vitest/spy@2.1.3': - resolution: {integrity: sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==} + '@vitest/spy@2.1.4': + resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} - '@vitest/utils@2.1.3': - resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==} + '@vitest/utils@2.1.4': + resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} '@volar/language-core@2.4.8': resolution: {integrity: sha512-K/GxMOXGq997bO00cdFhTNuR85xPxj0BEEAy+BaqqayTmy9Tmhfgmq2wpJcVspRhcwfgPoE2/mEJa26emUhG/g==} @@ -881,8 +884,8 @@ packages: caniuse-lite@1.0.30001669: resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} - chai@5.1.1: - resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} chalk@2.4.2: @@ -1038,20 +1041,20 @@ packages: peerDependencies: eslint: '>=8.56.0' - eslint-scope@8.1.0: - resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 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} - eslint-visitor-keys@4.1.0: - resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.13.0: - resolution: {integrity: sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==} + eslint@9.14.0: + resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1060,8 +1063,8 @@ packages: jiti: optional: true - espree@10.2.0: - resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esquery@1.6.0: @@ -1093,6 +1096,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1841,8 +1848,8 @@ packages: peerDependencies: tslib: '2' - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + ts-api-utils@1.4.0: + resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' @@ -1862,8 +1869,8 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - typescript-eslint@8.11.0: - resolution: {integrity: sha512-cBRGnW3FSlxaYwU8KfAewxFK5uzeOAp0l2KebIlPDOT5olVi65KDG/yjBooPBG0kGW/HLkoz1c/iuBFehcS3IA==} + typescript-eslint@8.12.2: + resolution: {integrity: sha512-UbuVUWSrHVR03q9CWx+JDHeO6B/Hr9p4U5lRH++5tq/EbFq1faYZe50ZSBePptgfIKLEti0aPQ3hFgnPVcd8ZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1903,8 +1910,8 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - vite-node@2.1.3: - resolution: {integrity: sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==} + vite-node@2.1.4: + resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -1949,15 +1956,15 @@ packages: terser: optional: true - vitest@2.1.3: - resolution: {integrity: sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==} + vitest@2.1.4: + resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.3 - '@vitest/ui': 2.1.3 + '@vitest/browser': 2.1.4 + '@vitest/ui': 2.1.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -2041,7 +2048,7 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/parser@7.26.1': + '@babel/parser@7.26.2': dependencies: '@babel/types': 7.26.0 @@ -2137,12 +2144,12 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.13.0(jiti@2.3.3))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.14.0(jiti@2.3.3))': dependencies: - eslint: 9.13.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.3.3) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.0': {} + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.18.0': dependencies: @@ -2158,7 +2165,7 @@ snapshots: dependencies: ajv: 6.12.6 debug: 4.3.7 - espree: 10.2.0 + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 @@ -2168,25 +2175,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.13.0': {} + '@eslint/js@9.14.0': {} '@eslint/object-schema@2.1.4': {} - '@eslint/plugin-kit@0.2.1': + '@eslint/plugin-kit@0.2.2': dependencies: levn: 0.4.1 - '@humanfs/core@0.19.0': {} + '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.5': + '@humanfs/node@0.16.6': dependencies: - '@humanfs/core': 0.19.0 + '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.3.1': {} + '@humanwhocodes/retry@0.4.0': {} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -2231,23 +2240,23 @@ snapshots: dependencies: tslib: 2.8.0 - '@microsoft/api-extractor-model@7.29.8(@types/node@22.8.1)': + '@microsoft/api-extractor-model@7.29.8(@types/node@22.8.7)': dependencies: '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.9.0(@types/node@22.8.1) + '@rushstack/node-core-library': 5.9.0(@types/node@22.8.7) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.47.11(@types/node@22.8.1)': + '@microsoft/api-extractor@7.47.11(@types/node@22.8.7)': dependencies: - '@microsoft/api-extractor-model': 7.29.8(@types/node@22.8.1) + '@microsoft/api-extractor-model': 7.29.8(@types/node@22.8.7) '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.9.0(@types/node@22.8.1) + '@rushstack/node-core-library': 5.9.0(@types/node@22.8.7) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.2(@types/node@22.8.1) - '@rushstack/ts-command-line': 4.23.0(@types/node@22.8.1) + '@rushstack/terminal': 0.14.2(@types/node@22.8.7) + '@rushstack/ts-command-line': 4.23.0(@types/node@22.8.7) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.8 @@ -2443,7 +2452,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.24.2': optional: true - '@rushstack/node-core-library@5.9.0(@types/node@22.8.1)': + '@rushstack/node-core-library@5.9.0(@types/node@22.8.7)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -2454,23 +2463,23 @@ snapshots: resolve: 1.22.8 semver: 7.5.4 optionalDependencies: - '@types/node': 22.8.1 + '@types/node': 22.8.7 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.14.2(@types/node@22.8.1)': + '@rushstack/terminal@0.14.2(@types/node@22.8.7)': dependencies: - '@rushstack/node-core-library': 5.9.0(@types/node@22.8.1) + '@rushstack/node-core-library': 5.9.0(@types/node@22.8.7) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.8.1 + '@types/node': 22.8.7 - '@rushstack/ts-command-line@4.23.0(@types/node@22.8.1)': + '@rushstack/ts-command-line@4.23.0(@types/node@22.8.7)': dependencies: - '@rushstack/terminal': 0.14.2(@types/node@22.8.1) + '@rushstack/terminal': 0.14.2(@types/node@22.8.7) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -2489,13 +2498,13 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.8.1 + '@types/node': 22.8.7 '@types/json-schema@7.0.15': {} '@types/minimatch@5.1.2': {} - '@types/node@22.8.1': + '@types/node@22.8.7': dependencies: undici-types: 6.19.8 @@ -2504,90 +2513,90 @@ snapshots: '@types/shelljs@0.8.15': dependencies: '@types/glob': 7.2.0 - '@types/node': 22.8.1 + '@types/node': 22.8.7 - '@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@eslint-community/regexpp': 4.12.0 - '@typescript-eslint/parser': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.11.0 - '@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.11.0 - eslint: 9.13.0(jiti@2.3.3) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.12.2 + '@typescript-eslint/type-utils': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.12.2 + eslint: 9.14.0(jiti@2.3.3) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/parser@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 8.11.0 - '@typescript-eslint/types': 8.11.0 - '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.11.0 + '@typescript-eslint/scope-manager': 8.12.2 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.12.2 debug: 4.3.7 - eslint: 9.13.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.3.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.11.0': + '@typescript-eslint/scope-manager@8.12.2': dependencies: - '@typescript-eslint/types': 8.11.0 - '@typescript-eslint/visitor-keys': 8.11.0 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/visitor-keys': 8.12.2 - '@typescript-eslint/type-utils@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) + '@typescript-eslint/utils': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) debug: 4.3.7 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - eslint - supports-color - '@typescript-eslint/types@8.11.0': {} + '@typescript-eslint/types@8.12.2': {} - '@typescript-eslint/typescript-estree@8.11.0(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.12.2(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.11.0 - '@typescript-eslint/visitor-keys': 8.11.0 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/visitor-keys': 8.12.2 debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/utils@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@2.3.3)) - '@typescript-eslint/scope-manager': 8.11.0 - '@typescript-eslint/types': 8.11.0 - '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) - eslint: 9.13.0(jiti@2.3.3) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@2.3.3)) + '@typescript-eslint/scope-manager': 8.12.2 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) + eslint: 9.14.0(jiti@2.3.3) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@8.11.0': + '@typescript-eslint/visitor-keys@8.12.2': dependencies: - '@typescript-eslint/types': 8.11.0 + '@typescript-eslint/types': 8.12.2 eslint-visitor-keys: 3.4.3 - '@vitest/coverage-v8@2.1.3(vitest@2.1.3(@types/node@22.8.1))': + '@vitest/coverage-v8@2.1.4(vitest@2.1.4(@types/node@22.8.7))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -2601,47 +2610,47 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.3(@types/node@22.8.1) + vitest: 2.1.4(@types/node@22.8.7) transitivePeerDependencies: - supports-color - '@vitest/expect@2.1.3': + '@vitest/expect@2.1.4': dependencies: - '@vitest/spy': 2.1.3 - '@vitest/utils': 2.1.3 - chai: 5.1.1 + '@vitest/spy': 2.1.4 + '@vitest/utils': 2.1.4 + chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.10(@types/node@22.8.1))': + '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.8.7))': dependencies: - '@vitest/spy': 2.1.3 + '@vitest/spy': 2.1.4 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - vite: 5.4.10(@types/node@22.8.1) + vite: 5.4.10(@types/node@22.8.7) - '@vitest/pretty-format@2.1.3': + '@vitest/pretty-format@2.1.4': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.3': + '@vitest/runner@2.1.4': dependencies: - '@vitest/utils': 2.1.3 + '@vitest/utils': 2.1.4 pathe: 1.1.2 - '@vitest/snapshot@2.1.3': + '@vitest/snapshot@2.1.4': dependencies: - '@vitest/pretty-format': 2.1.3 + '@vitest/pretty-format': 2.1.4 magic-string: 0.30.12 pathe: 1.1.2 - '@vitest/spy@2.1.3': + '@vitest/spy@2.1.4': dependencies: tinyspy: 3.0.2 - '@vitest/utils@2.1.3': + '@vitest/utils@2.1.4': dependencies: - '@vitest/pretty-format': 2.1.3 + '@vitest/pretty-format': 2.1.4 loupe: 3.1.2 tinyrainbow: 1.2.0 @@ -2659,7 +2668,7 @@ snapshots: '@vue/compiler-core@3.5.12': dependencies: - '@babel/parser': 7.26.1 + '@babel/parser': 7.26.2 '@vue/shared': 3.5.12 entities: 4.5.0 estree-walker: 2.0.2 @@ -2781,7 +2790,7 @@ snapshots: caniuse-lite@1.0.30001669: {} - chai@5.1.1: + chai@5.1.2: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 @@ -2915,18 +2924,18 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.0(eslint@9.13.0(jiti@2.3.3)): + eslint-config-prettier@9.1.0(eslint@9.14.0(jiti@2.3.3)): dependencies: - eslint: 9.13.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.3.3) - eslint-plugin-unicorn@56.0.0(eslint@9.13.0(jiti@2.3.3)): + eslint-plugin-unicorn@56.0.0(eslint@9.14.0(jiti@2.3.3)): dependencies: '@babel/helper-validator-identifier': 7.25.9 - '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@2.3.3)) ci-info: 4.0.0 clean-regexp: 1.0.0 core-js-compat: 3.38.1 - eslint: 9.13.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.3.3) esquery: 1.6.0 globals: 15.11.0 indent-string: 4.0.0 @@ -2939,27 +2948,27 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-scope@8.1.0: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.1.0: {} + eslint-visitor-keys@4.2.0: {} - eslint@9.13.0(jiti@2.3.3): + eslint@9.14.0(jiti@2.3.3): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@2.3.3)) - '@eslint-community/regexpp': 4.12.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@2.3.3)) + '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.18.0 '@eslint/core': 0.7.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.13.0 - '@eslint/plugin-kit': 0.2.1 - '@humanfs/node': 0.16.5 + '@eslint/js': 9.14.0 + '@eslint/plugin-kit': 0.2.2 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.0 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 @@ -2967,9 +2976,9 @@ snapshots: cross-spawn: 7.0.3 debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint-scope: 8.1.0 - eslint-visitor-keys: 4.1.0 - espree: 10.2.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -2990,11 +2999,11 @@ snapshots: transitivePeerDependencies: - supports-color - espree@10.2.0: + espree@10.3.0: dependencies: acorn: 8.14.0 acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 4.1.0 + eslint-visitor-keys: 4.2.0 esquery@1.6.0: dependencies: @@ -3028,6 +3037,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + expect-type@1.1.0: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.2: @@ -3335,7 +3346,7 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.26.1 + '@babel/parser': 7.26.2 '@babel/types': 7.26.0 source-map-js: 1.2.1 @@ -3731,7 +3742,7 @@ snapshots: dependencies: tslib: 2.8.0 - ts-api-utils@1.3.0(typescript@5.6.3): + ts-api-utils@1.4.0(typescript@5.6.3): dependencies: typescript: 5.6.3 @@ -3745,11 +3756,11 @@ snapshots: type-fest@0.8.1: {} - typescript-eslint@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3): + typescript-eslint@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/parser': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/parser': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -3781,12 +3792,12 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite-node@2.1.3(@types/node@22.8.1): + vite-node@2.1.4(@types/node@22.8.7): dependencies: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 - vite: 5.4.10(@types/node@22.8.1) + vite: 5.4.10(@types/node@22.8.7) transitivePeerDependencies: - '@types/node' - less @@ -3798,9 +3809,9 @@ snapshots: - supports-color - terser - vite-plugin-dts@4.3.0(@types/node@22.8.1)(rollup@4.24.2)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)): + vite-plugin-dts@4.3.0(@types/node@22.8.7)(rollup@4.24.2)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.7)): dependencies: - '@microsoft/api-extractor': 7.47.11(@types/node@22.8.1) + '@microsoft/api-extractor': 7.47.11(@types/node@22.8.7) '@rollup/pluginutils': 5.1.3(rollup@4.24.2) '@volar/typescript': 2.4.8 '@vue/language-core': 2.1.6(typescript@5.6.3) @@ -3811,32 +3822,33 @@ snapshots: magic-string: 0.30.12 typescript: 5.6.3 optionalDependencies: - vite: 5.4.10(@types/node@22.8.1) + vite: 5.4.10(@types/node@22.8.7) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite@5.4.10(@types/node@22.8.1): + vite@5.4.10(@types/node@22.8.7): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.24.2 optionalDependencies: - '@types/node': 22.8.1 + '@types/node': 22.8.7 fsevents: 2.3.3 - vitest@2.1.3(@types/node@22.8.1): + vitest@2.1.4(@types/node@22.8.7): dependencies: - '@vitest/expect': 2.1.3 - '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.10(@types/node@22.8.1)) - '@vitest/pretty-format': 2.1.3 - '@vitest/runner': 2.1.3 - '@vitest/snapshot': 2.1.3 - '@vitest/spy': 2.1.3 - '@vitest/utils': 2.1.3 - chai: 5.1.1 + '@vitest/expect': 2.1.4 + '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.8.7)) + '@vitest/pretty-format': 2.1.4 + '@vitest/runner': 2.1.4 + '@vitest/snapshot': 2.1.4 + '@vitest/spy': 2.1.4 + '@vitest/utils': 2.1.4 + chai: 5.1.2 debug: 4.3.7 + expect-type: 1.1.0 magic-string: 0.30.12 pathe: 1.1.2 std-env: 3.7.0 @@ -3844,11 +3856,11 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.10(@types/node@22.8.1) - vite-node: 2.1.3(@types/node@22.8.1) + vite: 5.4.10(@types/node@22.8.7) + vite-node: 2.1.4(@types/node@22.8.7) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.8.1 + '@types/node': 22.8.7 transitivePeerDependencies: - less - lightningcss From e7d1ff52b76d15a2a9595cdd05fb6ea4e394014d Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Tue, 5 Nov 2024 03:18:22 +0100 Subject: [PATCH 04/19] fix!: cjs build (for eslint 8) (#225) `index.cjs` output in `0.10.1`: `module.exports = index;` `index.cjs` output in `0.11.0`: `exports.default = index;` Tested with `npm link` in another project closes https://github.com/oxc-project/oxc/issues/7124 --- README.md | 8 ++++---- eslint.config.ts | 4 ++-- src/index.ts | 4 +++- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a9b784f..e649c70 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,10 @@ If you are using flat configuration (eslint >= 9.0), you can use the following c ```js // eslint.config.js -import { buildFromOxlintConfigFile } from 'eslint-plugin-oxlint'; +import oxlint from 'eslint-plugin-oxlint'; export default [ ..., // other plugins - ...buildFromOxlintConfigFile('./oxlint.json'), + ...oxlint.buildFromOxlintConfigFile('./oxlint.json'), ]; ``` @@ -64,10 +64,10 @@ Or build it by an `oxlint.json`-like object: ```js // eslint.config.js -import { buildFromOxlintConfig } from 'eslint-plugin-oxlint'; +import oxlint from 'eslint-plugin-oxlint'; export default [ ..., // other plugins - ...buildFromOxlintConfig({ + ...oxlint.buildFromOxlintConfig({ categories: { correctness: 'warn' }, diff --git a/eslint.config.ts b/eslint.config.ts index d0c71e8..18679a1 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,4 +1,4 @@ -import { buildFromOxlintConfigFile } from './src/index.js'; +import oxlint from './src/index.js'; import unicorn from 'eslint-plugin-unicorn'; import eslint from '@eslint/js'; import eslintConfigPrettier from 'eslint-config-prettier'; @@ -12,5 +12,5 @@ export default [ unicorn.configs['flat/recommended'], ...tseslint.configs.recommended, eslintConfigPrettier, - ...buildFromOxlintConfigFile('oxlint.json'), + ...oxlint.buildFromOxlintConfigFile('oxlint.json'), ]; diff --git a/src/index.ts b/src/index.ts index 5c0ba5a..5bd1879 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,7 +3,7 @@ import * as ruleMapsByCategory from './rules-by-category.js'; import configByScope from './configs-by-scope.js'; import configByCategory from './configs-by-category.js'; -export { +import { buildFromOxlintConfig, buildFromOxlintConfigFile, } from './build-from-oxlint-config.js'; @@ -43,4 +43,6 @@ export default { ...configByScope, ...configByCategory, }, + buildFromOxlintConfig, + buildFromOxlintConfigFile, }; From 03ce78976f0604b1ca4f75b24aeeffdaeb28504c Mon Sep 17 00:00:00 2001 From: cheezone <41314020+cheezone@users.noreply.github.com> Date: Tue, 5 Nov 2024 15:54:28 +0800 Subject: [PATCH 05/19] fix: add missing types entry in package.json (#227) This change addresses an issue where VSCode (1.9X) could not locate the TypeScript declaration file, resulting in a "Cannot find module "eslint-plugin-oxlint" ts(2307)" error. Adding `"types": "./dist/index.d.ts"` to `package.json` ensures that TypeScript definitions are correctly referenced, enhancing editor support and avoiding import errors in TypeScript projects. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index e7df527..6e4a208 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.11.0", "description": "Turn off all rules already supported by oxlint", "type": "module", + "types": "./dist/index.d.ts", "packageManager": "pnpm@9.12.3", "exports": { ".": { From 635965437a45fc2a91c5734d9466717d1a2415cd Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Tue, 5 Nov 2024 22:13:24 +0100 Subject: [PATCH 06/19] refactor: move configs to own file (#230) --- src/configs.ts | 39 +++++++++++++++++++++++++++++++++++++++ src/index.ts | 41 ++--------------------------------------- 2 files changed, 41 insertions(+), 39 deletions(-) create mode 100644 src/configs.ts diff --git a/src/configs.ts b/src/configs.ts new file mode 100644 index 0000000..a1cdd12 --- /dev/null +++ b/src/configs.ts @@ -0,0 +1,39 @@ +import * as ruleMapsByScope from './rules-by-scope.js'; +import * as ruleMapsByCategory from './rules-by-category.js'; +import configByScope from './configs-by-scope.js'; +import configByCategory from './configs-by-category.js'; + +type UnionToIntersection = ( + U extends unknown ? (x: U) => void : never +) extends (x: infer I) => void + ? I + : never; + +type RulesGroups = keyof typeof ruleMapsByScope; +type AllRules = (typeof ruleMapsByScope)[RulesGroups]; + +const allRules: UnionToIntersection = Object.assign( + {}, + ...Object.values(ruleMapsByScope) +); + +export default { + recommended: { + plugins: ['oxlint'], + rules: ruleMapsByCategory.correctnessRules, + }, + all: { + plugins: ['oxlint'], + rules: allRules, + }, + 'flat/all': { + name: 'oxlint/all', + rules: allRules, + }, + 'flat/recommended': { + name: 'oxlint/recommended', + rules: ruleMapsByCategory.correctnessRules, + }, + ...configByScope, + ...configByCategory, +}; diff --git a/src/index.ts b/src/index.ts index 5bd1879..a3a437c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,48 +1,11 @@ -import * as ruleMapsByScope from './rules-by-scope.js'; -import * as ruleMapsByCategory from './rules-by-category.js'; -import configByScope from './configs-by-scope.js'; -import configByCategory from './configs-by-category.js'; - +import configs from './configs.js'; import { buildFromOxlintConfig, buildFromOxlintConfigFile, } from './build-from-oxlint-config.js'; -type UnionToIntersection = ( - U extends unknown ? (x: U) => void : never -) extends (x: infer I) => void - ? I - : never; - -type RulesGroups = keyof typeof ruleMapsByScope; -type AllRules = (typeof ruleMapsByScope)[RulesGroups]; - -const allRules: UnionToIntersection = Object.assign( - {}, - ...Object.values(ruleMapsByScope) -); - export default { - configs: { - recommended: { - plugins: ['oxlint'], - rules: ruleMapsByCategory.correctnessRules, - }, - all: { - plugins: ['oxlint'], - rules: allRules, - }, - 'flat/all': { - name: 'oxlint/all', - rules: allRules, - }, - 'flat/recommended': { - name: 'oxlint/recommended', - rules: ruleMapsByCategory.correctnessRules, - }, - ...configByScope, - ...configByCategory, - }, + configs, buildFromOxlintConfig, buildFromOxlintConfigFile, }; From 796106793b76ab5cdd07dc5783100c8a97abf346 Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Wed, 6 Nov 2024 04:30:20 +0100 Subject: [PATCH 07/19] refactor: move generated code into own folder (#229) --- package.json | 16 ++++++++-------- scripts/config-generator.ts | 6 ++---- scripts/generate.ts | 14 ++++++++++++-- scripts/rules-generator.ts | 6 ++---- ...y-scope.spec.ts.snap => configs.spec.ts.snap} | 0 src/build-from-oxlint-config.ts | 2 +- src/{rules-by-scope.spec.ts => configs.spec.ts} | 0 src/configs.ts | 8 ++++---- src/{ => generated}/configs-by-category.ts | 0 src/{ => generated}/configs-by-scope.ts | 0 src/{ => generated}/rules-by-category.ts | 0 src/{ => generated}/rules-by-scope.ts | 0 12 files changed, 29 insertions(+), 23 deletions(-) rename src/__snapshots__/{rules-by-scope.spec.ts.snap => configs.spec.ts.snap} (100%) rename src/{rules-by-scope.spec.ts => configs.spec.ts} (100%) rename src/{ => generated}/configs-by-category.ts (100%) rename src/{ => generated}/configs-by-scope.ts (100%) rename src/{ => generated}/rules-by-category.ts (100%) rename src/{ => generated}/rules-by-scope.ts (100%) diff --git a/package.json b/package.json index 6e4a208..a053cd3 100644 --- a/package.json +++ b/package.json @@ -13,16 +13,16 @@ "default": "./dist/index.mjs" }, "./rules-by-category": { - "types": "./dist/rules-by-category.d.ts", - "import": "./dist/rules-by-category.mjs", - "require": "./dist/rules-by-category.cjs", - "default": "./dist/rules-by-category.mjs" + "types": "./dist/generated/rules-by-category.d.ts", + "import": "./dist/generated/rules-by-category.mjs", + "require": "./dist/generated/rules-by-category.cjs", + "default": "./dist/generated/rules-by-category.mjs" }, "./rules-by-scope": { - "types": "./dist/rules-by-scope.d.ts", - "import": "./dist/rules-by-scope.mjs", - "require": "./dist/rules-by-scope.cjs", - "default": "./dist/rules-by-scope.mjs" + "types": "./dist/generated/rules-by-scope.d.ts", + "import": "./dist/generated/rules-by-scope.mjs", + "require": "./dist/generated/rules-by-scope.cjs", + "default": "./dist/generated/rules-by-scope.mjs" } }, "files": [ diff --git a/scripts/config-generator.ts b/scripts/config-generator.ts index 9722b00..1fdad0a 100644 --- a/scripts/config-generator.ts +++ b/scripts/config-generator.ts @@ -3,8 +3,6 @@ import path from 'node:path'; import type { Rule } from './traverse-rules.js'; import { camelCase, kebabCase, pascalCase } from 'scule'; -const __dirname = new URL('.', import.meta.url).pathname; - export enum RulesGrouping { CATEGORY = 'category', SCOPE = 'scope', @@ -80,10 +78,10 @@ export class ConfigGenerator { return code; } - public async generateRules() { + public async generateRules(folderPath: string) { const output = await this.generateRulesCode(); writeFileSync( - path.resolve(__dirname, '..', `src/configs-by-${this.rulesGrouping}.ts`), + path.resolve(folderPath, `configs-by-${this.rulesGrouping}.ts`), output ); } diff --git a/scripts/generate.ts b/scripts/generate.ts index 3c9ce35..0b3e7b7 100644 --- a/scripts/generate.ts +++ b/scripts/generate.ts @@ -1,7 +1,11 @@ +import fs from 'node:fs'; +import path from 'node:path'; import { RulesGenerator, RulesGrouping } from './rules-generator.js'; import { ConfigGenerator } from './config-generator.js'; import { traverseRules } from './traverse-rules.js'; +const __dirname = new URL('.', import.meta.url).pathname; + const { successResultArray, failureResultArray } = await traverseRules(); if (failureResultArray.length > 0) { @@ -13,9 +17,15 @@ if (failureResultArray.length > 0) { const rulesGenerator = new RulesGenerator(successResultArray); const configGenerator = new ConfigGenerator(successResultArray); +const generateFolder = path.resolve(__dirname, '..', `src/generated`); + +if (!fs.existsSync(generateFolder)) { + fs.mkdirSync(generateFolder); +} + for (const generator of [rulesGenerator, configGenerator]) { generator.setRulesGrouping(RulesGrouping.SCOPE); - await generator.generateRules(); + await generator.generateRules(generateFolder); generator.setRulesGrouping(RulesGrouping.CATEGORY); - await generator.generateRules(); + await generator.generateRules(generateFolder); } diff --git a/scripts/rules-generator.ts b/scripts/rules-generator.ts index 9c5af30..d05ee23 100644 --- a/scripts/rules-generator.ts +++ b/scripts/rules-generator.ts @@ -3,8 +3,6 @@ import path from 'node:path'; import type { Rule } from './traverse-rules.js'; import { camelCase } from 'scule'; -const __dirname = new URL('.', import.meta.url).pathname; - export enum RulesGrouping { CATEGORY = 'category', SCOPE = 'scope', @@ -79,10 +77,10 @@ export class RulesGenerator { return code; } - public async generateRules() { + public async generateRules(folderPath: string) { const output = await this.generateRulesCode(); writeFileSync( - path.resolve(__dirname, '..', `src/rules-by-${this.rulesGrouping}.ts`), + path.resolve(folderPath, `rules-by-${this.rulesGrouping}.ts`), output ); } diff --git a/src/__snapshots__/rules-by-scope.spec.ts.snap b/src/__snapshots__/configs.spec.ts.snap similarity index 100% rename from src/__snapshots__/rules-by-scope.spec.ts.snap rename to src/__snapshots__/configs.spec.ts.snap diff --git a/src/build-from-oxlint-config.ts b/src/build-from-oxlint-config.ts index 95f82ad..afcc547 100644 --- a/src/build-from-oxlint-config.ts +++ b/src/build-from-oxlint-config.ts @@ -1,5 +1,5 @@ import fs from 'node:fs'; -import configByCategory from './configs-by-category.js'; +import configByCategory from './generated/configs-by-category.js'; import type { Linter } from 'eslint'; import JSONCParser from 'jsonc-parser'; diff --git a/src/rules-by-scope.spec.ts b/src/configs.spec.ts similarity index 100% rename from src/rules-by-scope.spec.ts rename to src/configs.spec.ts diff --git a/src/configs.ts b/src/configs.ts index a1cdd12..04bcc77 100644 --- a/src/configs.ts +++ b/src/configs.ts @@ -1,7 +1,7 @@ -import * as ruleMapsByScope from './rules-by-scope.js'; -import * as ruleMapsByCategory from './rules-by-category.js'; -import configByScope from './configs-by-scope.js'; -import configByCategory from './configs-by-category.js'; +import * as ruleMapsByScope from './generated/rules-by-scope.js'; +import * as ruleMapsByCategory from './generated/rules-by-category.js'; +import configByScope from './generated/configs-by-scope.js'; +import configByCategory from './generated/configs-by-category.js'; type UnionToIntersection = ( U extends unknown ? (x: U) => void : never diff --git a/src/configs-by-category.ts b/src/generated/configs-by-category.ts similarity index 100% rename from src/configs-by-category.ts rename to src/generated/configs-by-category.ts diff --git a/src/configs-by-scope.ts b/src/generated/configs-by-scope.ts similarity index 100% rename from src/configs-by-scope.ts rename to src/generated/configs-by-scope.ts diff --git a/src/rules-by-category.ts b/src/generated/rules-by-category.ts similarity index 100% rename from src/rules-by-category.ts rename to src/generated/rules-by-category.ts diff --git a/src/rules-by-scope.ts b/src/generated/rules-by-scope.ts similarity index 100% rename from src/rules-by-scope.ts rename to src/generated/rules-by-scope.ts From 8fba0b7fdd190d1d05d4434b08607891acf52475 Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Wed, 6 Nov 2024 20:25:34 +0100 Subject: [PATCH 08/19] fix: output rules-plugin-name `@next/next` instead of `nextjs` (#232) https://nextjs.org/docs/app/building-your-application/configuring/eslint#eslint-plugin --- scripts/constants.ts | 1 + src/__snapshots__/configs.spec.ts.snap | 120 ++++++++++++------------- src/build-from-oxlint-config.ts | 1 + src/generated/rules-by-category.ts | 40 ++++----- src/generated/rules-by-scope.ts | 40 ++++----- 5 files changed, 102 insertions(+), 100 deletions(-) diff --git a/scripts/constants.ts b/scripts/constants.ts index cf6e93e..926c5dd 100644 --- a/scripts/constants.ts +++ b/scripts/constants.ts @@ -18,6 +18,7 @@ export const ignoreScope = new Set(['oxc', 'deepscan', 'security']); export const scopeMaps = { eslint: '', typescript: '@typescript-eslint', + nextjs: '@next/next', }; // Some typescript-eslint rules are re-implemented version of eslint rules. diff --git a/src/__snapshots__/configs.spec.ts.snap b/src/__snapshots__/configs.spec.ts.snap index dfa1778..58b0daf 100644 --- a/src/__snapshots__/configs.spec.ts.snap +++ b/src/__snapshots__/configs.spec.ts.snap @@ -2,6 +2,66 @@ exports[`contains all the oxlint rules 1`] = ` { + "@next/next/google-font-display": [ + 0, + ], + "@next/next/google-font-preconnect": [ + 0, + ], + "@next/next/inline-script-id": [ + 0, + ], + "@next/next/next-script-for-ga": [ + 0, + ], + "@next/next/no-assign-module-variable": [ + 0, + ], + "@next/next/no-async-client-component": [ + 0, + ], + "@next/next/no-before-interactive-script-outside-document": [ + 0, + ], + "@next/next/no-css-tags": [ + 0, + ], + "@next/next/no-document-import-in-page": [ + 0, + ], + "@next/next/no-duplicate-head": [ + 0, + ], + "@next/next/no-head-element": [ + 0, + ], + "@next/next/no-head-import-in-document": [ + 0, + ], + "@next/next/no-img-element": [ + 0, + ], + "@next/next/no-page-custom-font": [ + 0, + ], + "@next/next/no-script-component-in-head": [ + 0, + ], + "@next/next/no-styled-jsx-in-document": [ + 0, + ], + "@next/next/no-sync-scripts": [ + 0, + ], + "@next/next/no-title-in-document-head": [ + 0, + ], + "@next/next/no-typos": [ + 0, + ], + "@next/next/no-unwanted-polyfillio": [ + 0, + ], "@typescript-eslint/adjacent-overload-signatures": [ 0, ], @@ -509,66 +569,6 @@ exports[`contains all the oxlint rules 1`] = ` "max-params": [ 0, ], - "nextjs/google-font-display": [ - 0, - ], - "nextjs/google-font-preconnect": [ - 0, - ], - "nextjs/inline-script-id": [ - 0, - ], - "nextjs/next-script-for-ga": [ - 0, - ], - "nextjs/no-assign-module-variable": [ - 0, - ], - "nextjs/no-async-client-component": [ - 0, - ], - "nextjs/no-before-interactive-script-outside-document": [ - 0, - ], - "nextjs/no-css-tags": [ - 0, - ], - "nextjs/no-document-import-in-page": [ - 0, - ], - "nextjs/no-duplicate-head": [ - 0, - ], - "nextjs/no-head-element": [ - 0, - ], - "nextjs/no-head-import-in-document": [ - 0, - ], - "nextjs/no-img-element": [ - 0, - ], - "nextjs/no-page-custom-font": [ - 0, - ], - "nextjs/no-script-component-in-head": [ - 0, - ], - "nextjs/no-styled-jsx-in-document": [ - 0, - ], - "nextjs/no-sync-scripts": [ - 0, - ], - "nextjs/no-title-in-document-head": [ - 0, - ], - "nextjs/no-typos": [ - 0, - ], - "nextjs/no-unwanted-polyfillio": [ - 0, - ], "no-alert": [ 0, ], diff --git a/src/build-from-oxlint-config.ts b/src/build-from-oxlint-config.ts index afcc547..5df0012 100644 --- a/src/build-from-oxlint-config.ts +++ b/src/build-from-oxlint-config.ts @@ -12,6 +12,7 @@ import JSONCParser from 'jsonc-parser'; const scopeMaps = { eslint: '', typescript: '@typescript-eslint', + nextjs: '@next/next', }; type OxlintConfigPlugins = string[]; diff --git a/src/generated/rules-by-category.ts b/src/generated/rules-by-category.ts index 48e67b2..58774da 100644 --- a/src/generated/rules-by-category.ts +++ b/src/generated/rules-by-category.ts @@ -359,26 +359,26 @@ const correctnessRules = { 'jsx-a11y/role-supports-aria-props': 'off', 'jsx-a11y/scope': 'off', 'jsx-a11y/tabindex-no-positive': 'off', - 'nextjs/google-font-display': 'off', - 'nextjs/google-font-preconnect': 'off', - 'nextjs/inline-script-id': 'off', - 'nextjs/next-script-for-ga': 'off', - 'nextjs/no-assign-module-variable': 'off', - 'nextjs/no-async-client-component': 'off', - 'nextjs/no-before-interactive-script-outside-document': 'off', - 'nextjs/no-css-tags': 'off', - 'nextjs/no-document-import-in-page': 'off', - 'nextjs/no-duplicate-head': 'off', - 'nextjs/no-head-element': 'off', - 'nextjs/no-head-import-in-document': 'off', - 'nextjs/no-img-element': 'off', - 'nextjs/no-page-custom-font': 'off', - 'nextjs/no-script-component-in-head': 'off', - 'nextjs/no-styled-jsx-in-document': 'off', - 'nextjs/no-sync-scripts': 'off', - 'nextjs/no-title-in-document-head': 'off', - 'nextjs/no-typos': 'off', - 'nextjs/no-unwanted-polyfillio': 'off', + '@next/next/google-font-display': 'off', + '@next/next/google-font-preconnect': 'off', + '@next/next/inline-script-id': 'off', + '@next/next/next-script-for-ga': 'off', + '@next/next/no-assign-module-variable': 'off', + '@next/next/no-async-client-component': 'off', + '@next/next/no-before-interactive-script-outside-document': 'off', + '@next/next/no-css-tags': 'off', + '@next/next/no-document-import-in-page': 'off', + '@next/next/no-duplicate-head': 'off', + '@next/next/no-head-element': 'off', + '@next/next/no-head-import-in-document': 'off', + '@next/next/no-img-element': 'off', + '@next/next/no-page-custom-font': 'off', + '@next/next/no-script-component-in-head': 'off', + '@next/next/no-styled-jsx-in-document': 'off', + '@next/next/no-sync-scripts': 'off', + '@next/next/no-title-in-document-head': 'off', + '@next/next/no-typos': 'off', + '@next/next/no-unwanted-polyfillio': 'off', 'promise/no-callback-in-promise': 'off', 'promise/no-new-statics': 'off', 'promise/valid-params': 'off', diff --git a/src/generated/rules-by-scope.ts b/src/generated/rules-by-scope.ts index 9ea72f1..e8a9579 100644 --- a/src/generated/rules-by-scope.ts +++ b/src/generated/rules-by-scope.ts @@ -289,26 +289,26 @@ const jsxA11yRules = { } as const; const nextjsRules = { - 'nextjs/google-font-display': 'off', - 'nextjs/google-font-preconnect': 'off', - 'nextjs/inline-script-id': 'off', - 'nextjs/next-script-for-ga': 'off', - 'nextjs/no-assign-module-variable': 'off', - 'nextjs/no-async-client-component': 'off', - 'nextjs/no-before-interactive-script-outside-document': 'off', - 'nextjs/no-css-tags': 'off', - 'nextjs/no-document-import-in-page': 'off', - 'nextjs/no-duplicate-head': 'off', - 'nextjs/no-head-element': 'off', - 'nextjs/no-head-import-in-document': 'off', - 'nextjs/no-img-element': 'off', - 'nextjs/no-page-custom-font': 'off', - 'nextjs/no-script-component-in-head': 'off', - 'nextjs/no-styled-jsx-in-document': 'off', - 'nextjs/no-sync-scripts': 'off', - 'nextjs/no-title-in-document-head': 'off', - 'nextjs/no-typos': 'off', - 'nextjs/no-unwanted-polyfillio': 'off', + '@next/next/google-font-display': 'off', + '@next/next/google-font-preconnect': 'off', + '@next/next/inline-script-id': 'off', + '@next/next/next-script-for-ga': 'off', + '@next/next/no-assign-module-variable': 'off', + '@next/next/no-async-client-component': 'off', + '@next/next/no-before-interactive-script-outside-document': 'off', + '@next/next/no-css-tags': 'off', + '@next/next/no-document-import-in-page': 'off', + '@next/next/no-duplicate-head': 'off', + '@next/next/no-head-element': 'off', + '@next/next/no-head-import-in-document': 'off', + '@next/next/no-img-element': 'off', + '@next/next/no-page-custom-font': 'off', + '@next/next/no-script-component-in-head': 'off', + '@next/next/no-styled-jsx-in-document': 'off', + '@next/next/no-sync-scripts': 'off', + '@next/next/no-title-in-document-head': 'off', + '@next/next/no-typos': 'off', + '@next/next/no-unwanted-polyfillio': 'off', } as const; const nodeRules = { From 1d670563d3d7d0cca89a90ea4fb3a340dc0d855f Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Thu, 7 Nov 2024 21:18:29 +0100 Subject: [PATCH 09/19] test: fix "skip deactivate rules, for custom enable category" test (#234) --- src/build-from-oxlint-config.spec.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/build-from-oxlint-config.spec.ts b/src/build-from-oxlint-config.spec.ts index ae7243f..3a81479 100644 --- a/src/build-from-oxlint-config.spec.ts +++ b/src/build-from-oxlint-config.spec.ts @@ -119,7 +119,10 @@ describe('buildFromOxlintConfig', () => { 'import/no-unused-modules': 'off', }, }); - expect('import/no-unused-modules' in rules).toBe(false); + + expect(rules.length).toBe(1); + expect(rules[0].rules).not.toBeUndefined(); + expect('import/no-unused-modules' in rules[0].rules!).toBe(false); }); }); From 497cc5afcf7c859c58023f8cb90409a5d568aaf7 Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Thu, 7 Nov 2024 21:25:02 +0100 Subject: [PATCH 10/19] refactor: simplify `buildFromOxlint` with `isObject` and `isValueInSet` (#235) --- src/build-from-oxlint-config.ts | 35 +++++++++++++++++---------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/build-from-oxlint-config.ts b/src/build-from-oxlint-config.ts index 5df0012..780adc8 100644 --- a/src/build-from-oxlint-config.ts +++ b/src/build-from-oxlint-config.ts @@ -34,6 +34,12 @@ const defaultPlugins: OxlintConfigPlugins = ['react', 'unicorn', 'typescript']; // default categories, see const defaultCategories: OxlintConfigCategories = { correctness: 'warn' }; +/** + * Detects it the value is an object + */ +const isObject = (value: unknown): boolean => + typeof value === 'object' && value !== null && !Array.isArray(value); + /** * tries to read the oxlint config file and returning its JSON content. * if the file is not found or could not be parsed, undefined is returned. @@ -48,7 +54,7 @@ const getConfigContent = ( try { const configContent = JSONCParser.parse(content); - if (typeof configContent !== 'object' || Array.isArray(configContent)) { + if (!isObject(configContent)) { throw new TypeError('not an valid config file'); } @@ -122,24 +128,23 @@ const handleRulesScope = ( } }; -const isOffValue = (value: unknown) => value === 'off' || value === 0; +/** + * checks if value is validSet, or if validSet is an array, check if value is first value of it + */ +const isValueInSet = (value: unknown, validSet: unknown[]) => + validSet.includes(value) || + (Array.isArray(value) && validSet.includes(value[0])); /** * check if the value is "off", 0, ["off", ...], or [0, ...] */ -const isDeactivateValue = (value: unknown): boolean => { - return isOffValue(value) || (Array.isArray(value) && isOffValue(value[0])); -}; - -const isOnValue = (value: unknown) => - value === 'error' || value === 'warn' || value === 1 || value === 2; +const isDeactivateValue = (value: unknown) => isValueInSet(value, ['off', 0]); /** * check if the value is "error", "warn", 1, 2, ["error", ...], ["warn", ...], [1, ...], or [2, ...] */ -const isActiveValue = (value: unknown): boolean => { - return isOnValue(value) || (Array.isArray(value) && isOnValue(value[0])); -}; +const isActiveValue = (value: unknown) => + isValueInSet(value, ['error', 'warn', 1, 2]); /** * tries to return the "plugins" section from the config. @@ -160,9 +165,7 @@ const readPluginsFromConfig = ( const readCategoriesFromConfig = ( config: OxlintConfig ): OxlintConfigCategories | undefined => { - return 'categories' in config && - typeof config.categories === 'object' && - config.categories !== null + return 'categories' in config && isObject(config.categories) ? (config.categories as OxlintConfigCategories) : undefined; }; @@ -174,9 +177,7 @@ const readCategoriesFromConfig = ( const readRulesFromConfig = ( config: OxlintConfig ): OxlintConfigRules | undefined => { - return 'rules' in config && - typeof config.rules === 'object' && - config.rules !== null + return 'rules' in config && isObject(config.rules) ? (config.rules as OxlintConfigRules) : undefined; }; From 883be80aac7becd5ba4103e5eb4b258ebb1e62dd Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Fri, 8 Nov 2024 15:08:56 +0100 Subject: [PATCH 11/19] fix: detect rules with plugin alias name or no plugin name (#231) closes #226 --- src/build-from-oxlint-config.spec.ts | 64 +++++++++++++++++++++++++++- src/build-from-oxlint-config.ts | 62 ++++++++++++++++++++++++--- 2 files changed, 117 insertions(+), 9 deletions(-) diff --git a/src/build-from-oxlint-config.spec.ts b/src/build-from-oxlint-config.spec.ts index 3a81479..4742d8d 100644 --- a/src/build-from-oxlint-config.spec.ts +++ b/src/build-from-oxlint-config.spec.ts @@ -124,6 +124,66 @@ describe('buildFromOxlintConfig', () => { expect(rules[0].rules).not.toBeUndefined(); expect('import/no-unused-modules' in rules[0].rules!).toBe(false); }); + + // look here: + it('detects oxlint rules with plugin alias inside rules block', () => { + const configs = buildFromOxlintConfig({ + rules: { + 'eslint/eqeqeq': 'warn', + 'typescript/no-unused-vars': 'warn', + 'react_perf/jsx-no-new-array-as-prop': 'warn', + 'nextjs/no-img-element': 'warn', + 'jsx_a11y/alt-text': 'warn', + // 'react/rules-of-hooks': 'warn', -- ToDo oxc-project/eslint-plugin-oxlint#233 + // 'deepscan/xxx': 'warn', + }, + }); + + expect(configs.length).toBe(1); + expect(configs[0].rules).not.toBeUndefined(); + expect('eqeqeq' in configs[0].rules!).toBe(true); + expect('@typescript-eslint/no-unused-vars' in configs[0].rules!).toBe(true); + expect('react-perf/jsx-no-new-array-as-prop' in configs[0].rules!).toBe( + true + ); + expect('@next/next/no-img-element' in configs[0].rules!).toBe(true); + expect('jsx-a11y/alt-text' in configs[0].rules!).toBe(true); + // expect('react-hooks/rules-of-hooks' in rules[0].rules!).toBe(true); + }); + + it('detects rules without plugin name', () => { + const configs = buildFromOxlintConfig({ + rules: { + 'no-unused-vars': 'warn', + 'jsx-no-new-array-as-prop': 'warn', + 'no-img-element': 'warn', + 'no-array-reduce': 'warn', + }, + }); + + expect(configs.length).toBe(1); + expect(configs[0].rules).not.toBeUndefined(); + expect('@typescript-eslint/no-unused-vars' in configs[0].rules!).toBe(true); + expect('react-perf/jsx-no-new-array-as-prop' in configs[0].rules!).toBe( + true + ); + expect('@next/next/no-img-element' in configs[0].rules!).toBe(true); + expect('unicorn/no-array-reduce' in configs[0].rules!).toBe(true); + }); + + it('skips unknown oxlint rules', () => { + const rules = buildFromOxlintConfig({ + rules: { + unknown: 'warn', + 'typescript/no-img-element': 'warn', // valid rule, but wrong plugin-name + }, + }); + + expect(rules.length).toBe(1); + expect(rules[0].rules).not.toBeUndefined(); + expect('unknown' in rules[0].rules!).toBe(false); + expect('@next/next/no-img-element' in rules[0].rules!).toBe(false); + }); }); const createConfigFileAndBuildFromIt = ( @@ -146,14 +206,14 @@ describe('buildFromOxlintConfigFile', () => { `{ "rules": { // hello world - "no-await-loop": "error", + "no-await-in-loop": "error", }, }` ); expect(rules.length).toBe(1); expect(rules[0].rules).not.toBeUndefined(); - expect('no-await-loop' in rules[0].rules!).toBe(true); + expect('no-await-in-loop' in rules[0].rules!).toBe(true); }); it('fails to find oxlint config', () => { diff --git a/src/build-from-oxlint-config.ts b/src/build-from-oxlint-config.ts index 780adc8..58ae5d9 100644 --- a/src/build-from-oxlint-config.ts +++ b/src/build-from-oxlint-config.ts @@ -7,14 +7,24 @@ import JSONCParser from 'jsonc-parser'; // only used for the scopes where the directory structure doesn't reflect the eslint scope // such as `typescript` vs `@typescript-eslint` or others. Eslint as a scope is an exception, // as eslint doesn't have a scope. -// There is a duplicate in scripts/constants.js, for clean builds we manage it in 2 files. -// In the future we can generate maybe this constant into src folder -const scopeMaps = { +// look here: +const aliasPluginNames: Record = { eslint: '', typescript: '@typescript-eslint', nextjs: '@next/next', + + // only in build-config + react_perf: 'react-perf', + jsx_a11y: 'jsx-a11y', }; +const allRulesObjects = Object.values(configByCategory).map( + (config) => config.rules +); +const allRules: string[] = allRulesObjects.flatMap((rulesObject) => + Object.keys(rulesObject) +); + type OxlintConfigPlugins = string[]; type OxlintConfigCategories = Record; @@ -95,8 +105,8 @@ const handleCategoriesScope = ( // iterate to each rule to check if the rule can be appended, because the plugin is activated for (const rule of Object.keys(possibleRules)) { for (const plugin of plugins) { - // @ts-expect-error -- come on TS, we are checking if the plugin exists in the configByscopeMapsCategory - const pluginPrefix = plugin in scopeMaps ? scopeMaps[plugin] : plugin; + const pluginPrefix = + plugin in aliasPluginNames ? aliasPluginNames[plugin] : plugin; // the rule has no prefix, so it is a eslint one if (pluginPrefix === '' && !rule.includes('/')) { @@ -110,6 +120,35 @@ const handleCategoriesScope = ( } }; +const getEsLintRuleName = (rule: string): string | undefined => { + // there is no plugin prefix, it can be all plugin + if (!rule.includes('/')) { + return allRules.find( + (search) => search.endsWith(`/${rule}`) || search === rule + ); + } + + // greedy works with `@next/next/no-img-element` as an example + const match = rule.match(/(^.*)\/(.*)/); + + if (match === null) { + return undefined; + } + + const pluginName = match[1]; + const ruleName = match[2]; + + // map to the right eslint plugin + const esPluginName = + pluginName in aliasPluginNames ? aliasPluginNames[pluginName] : pluginName; + + // extra check for eslint + const expectedRule = + esPluginName === '' ? ruleName : `${esPluginName}/${ruleName}`; + + return allRules.find((rule) => rule == expectedRule); +}; + /** * checks if the oxlint rule is activated/deactivated and append/remove it. */ @@ -118,12 +157,21 @@ const handleRulesScope = ( rules: Record ): void => { for (const rule in oxlintRules) { + const eslintName = getEsLintRuleName(rule); + + if (eslintName === undefined) { + console.warn( + `eslint-plugin-oxlint: could not find matching eslint rule for "${rule}"` + ); + continue; + } + // is this rules not turned off if (isActiveValue(oxlintRules[rule])) { - rules[rule] = 'off'; + rules[eslintName] = 'off'; } else if (rule in rules && isDeactivateValue(oxlintRules[rule])) { // rules extended by categories or plugins can be disabled manually - delete rules[rule]; + delete rules[eslintName]; } } }; From 27960a3a9ba40aff067d9c732c26ddbba479e933 Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Fri, 8 Nov 2024 17:39:50 +0100 Subject: [PATCH 12/19] fix: put `react-hooks` plugin rules into own scope and not under `react` (#236) closes #233 --- scripts/constants.ts | 7 +++++++ scripts/traverse-rules.ts | 21 ++++++++++++++++++--- src/__snapshots__/configs.spec.ts.snap | 6 +++--- src/build-from-oxlint-config.spec.ts | 4 ++-- src/build-from-oxlint-config.ts | 17 ++++++++++++++++- src/generated/configs-by-scope.ts | 6 ++++++ src/generated/rules-by-category.ts | 2 +- src/generated/rules-by-scope.ts | 6 +++++- 8 files changed, 58 insertions(+), 11 deletions(-) diff --git a/scripts/constants.ts b/scripts/constants.ts index 926c5dd..ad40951 100644 --- a/scripts/constants.ts +++ b/scripts/constants.ts @@ -65,6 +65,13 @@ export const typescriptRulesExtendEslintRules = [ 'space-infix-ops', ]; +// All rules from `eslint-plugin-react-hooks` +// Since oxlint supports these rules under react/*, we need to remap them. +export const reactHookRulesInsideReactScope = [ + 'rules-of-hooks', + 'exhaustive-deps', +]; + export function convertScope(scope: string) { return Reflect.has(scopeMaps, scope) ? scopeMaps[scope as 'eslint'] diff --git a/scripts/traverse-rules.ts b/scripts/traverse-rules.ts index a5132b1..1ada495 100644 --- a/scripts/traverse-rules.ts +++ b/scripts/traverse-rules.ts @@ -3,6 +3,7 @@ import path from 'node:path'; import { ignoreScope, prefixScope, + reactHookRulesInsideReactScope, SPARSE_CLONE_DIRECTORY, TARGET_DIRECTORY, typescriptRulesExtendEslintRules, @@ -70,13 +71,27 @@ async function processFile( let match = blockRegex.exec(content); // 'ok' way to get the scope, depends on the directory structure - const scope = getFolderNameUnderRules(filePath); + let scope = getFolderNameUnderRules(filePath); const shouldIgnoreRule = ignoreScope.has(scope); // when the file is called `mod.rs` we want to use the parent directory name as the rule name // Note that this is fairly brittle, as relying on the directory structure can be risky - let effectiveRuleName = `${prefixScope(scope)}${getFileNameWithoutExtension(filePath, currentDirectory)}`; - effectiveRuleName = effectiveRuleName.replaceAll('_', '-'); + const ruleNameWithoutScope = getFileNameWithoutExtension( + filePath, + currentDirectory + ).replaceAll('_', '-'); + + // All rules from `eslint-plugin-react-hooks` + // Since oxlint supports these rules under react/*, we need to remap them. + if ( + scope === 'react' && + reactHookRulesInsideReactScope.includes(ruleNameWithoutScope) + ) { + scope = 'react_hooks'; + } + + const effectiveRuleName = + `${prefixScope(scope)}${ruleNameWithoutScope}`.replaceAll('_', '-'); // add the rule to the skipped array and continue to see if there's a match regardless if (shouldIgnoreRule) { diff --git a/src/__snapshots__/configs.spec.ts.snap b/src/__snapshots__/configs.spec.ts.snap index 58b0daf..9d97956 100644 --- a/src/__snapshots__/configs.spec.ts.snap +++ b/src/__snapshots__/configs.spec.ts.snap @@ -881,6 +881,9 @@ exports[`contains all the oxlint rules 1`] = ` "radix": [ 0, ], + "react-hooks/rules-of-hooks": [ + 0, + ], "react-perf/jsx-no-jsx-as-prop": [ 0, ], @@ -971,9 +974,6 @@ exports[`contains all the oxlint rules 1`] = ` "react/require-render-return": [ 0, ], - "react/rules-of-hooks": [ - 0, - ], "react/self-closing-comp": [ 0, ], diff --git a/src/build-from-oxlint-config.spec.ts b/src/build-from-oxlint-config.spec.ts index 4742d8d..f7918d6 100644 --- a/src/build-from-oxlint-config.spec.ts +++ b/src/build-from-oxlint-config.spec.ts @@ -134,7 +134,7 @@ describe('buildFromOxlintConfig', () => { 'react_perf/jsx-no-new-array-as-prop': 'warn', 'nextjs/no-img-element': 'warn', 'jsx_a11y/alt-text': 'warn', - // 'react/rules-of-hooks': 'warn', -- ToDo oxc-project/eslint-plugin-oxlint#233 + 'react/rules-of-hooks': 'warn', // 'deepscan/xxx': 'warn', }, }); @@ -148,7 +148,7 @@ describe('buildFromOxlintConfig', () => { ); expect('@next/next/no-img-element' in configs[0].rules!).toBe(true); expect('jsx-a11y/alt-text' in configs[0].rules!).toBe(true); - // expect('react-hooks/rules-of-hooks' in rules[0].rules!).toBe(true); + expect('react-hooks/rules-of-hooks' in configs[0].rules!).toBe(true); }); it('detects rules without plugin name', () => { diff --git a/src/build-from-oxlint-config.ts b/src/build-from-oxlint-config.ts index 58ae5d9..7c45ea1 100644 --- a/src/build-from-oxlint-config.ts +++ b/src/build-from-oxlint-config.ts @@ -18,6 +18,13 @@ const aliasPluginNames: Record = { jsx_a11y: 'jsx-a11y', }; +// All rules from `eslint-plugin-react-hooks` +// Since oxlint supports these rules under react/*, we need to remap them. +export const reactHookRulesInsideReactScope = [ + 'rules-of-hooks', + 'exhaustive-deps', +]; + const allRulesObjects = Object.values(configByCategory).map( (config) => config.rules ); @@ -139,9 +146,17 @@ const getEsLintRuleName = (rule: string): string | undefined => { const ruleName = match[2]; // map to the right eslint plugin - const esPluginName = + let esPluginName = pluginName in aliasPluginNames ? aliasPluginNames[pluginName] : pluginName; + // special case for eslint-plugin-react-hooks + if ( + esPluginName === 'react' && + reactHookRulesInsideReactScope.includes(ruleName) + ) { + esPluginName = 'react-hooks'; + } + // extra check for eslint const expectedRule = esPluginName === '' ? ruleName : `${esPluginName}/${ruleName}`; diff --git a/src/generated/configs-by-scope.ts b/src/generated/configs-by-scope.ts index 821d288..6d172b0 100644 --- a/src/generated/configs-by-scope.ts +++ b/src/generated/configs-by-scope.ts @@ -52,6 +52,11 @@ const reactConfig = { rules: rules.reactRules, }; +const reactHooksConfig = { + name: 'oxlint/react-hooks', + rules: rules.reactHooksRules, +}; + const reactPerfConfig = { name: 'oxlint/react-perf', rules: rules.reactPerfRules, @@ -83,6 +88,7 @@ const configByScope = { 'flat/node': nodeConfig, 'flat/promise': promiseConfig, 'flat/react': reactConfig, + 'flat/react-hooks': reactHooksConfig, 'flat/react-perf': reactPerfConfig, 'flat/tree-shaking': treeShakingConfig, 'flat/unicorn': unicornConfig, diff --git a/src/generated/rules-by-category.ts b/src/generated/rules-by-category.ts index 58774da..4d1f3b2 100644 --- a/src/generated/rules-by-category.ts +++ b/src/generated/rules-by-category.ts @@ -87,7 +87,7 @@ const nurseryRules = { 'import/no-unused-modules': 'off', 'promise/no-return-in-finally': 'off', 'react/require-render-return': 'off', - 'react/rules-of-hooks': 'off', + 'react-hooks/rules-of-hooks': 'off', 'tree-shaking/no-side-effects-in-initialization': 'off', '@typescript-eslint/consistent-type-imports': 'off', } as const; diff --git a/src/generated/rules-by-scope.ts b/src/generated/rules-by-scope.ts index e8a9579..b9dc977 100644 --- a/src/generated/rules-by-scope.ts +++ b/src/generated/rules-by-scope.ts @@ -356,12 +356,15 @@ const reactRules = { 'react/prefer-es6-class': 'off', 'react/react-in-jsx-scope': 'off', 'react/require-render-return': 'off', - 'react/rules-of-hooks': 'off', 'react/self-closing-comp': 'off', 'react/style-prop-object': 'off', 'react/void-dom-elements-no-children': 'off', } as const; +const reactHooksRules = { + 'react-hooks/rules-of-hooks': 'off', +} as const; + const reactPerfRules = { 'react-perf/jsx-no-jsx-as-prop': 'off', 'react-perf/jsx-no-new-array-as-prop': 'off', @@ -485,6 +488,7 @@ export { nodeRules, promiseRules, reactRules, + reactHooksRules, reactPerfRules, treeShakingRules, unicornRules, From 0e2458a066d281294a7e534cbba9e02e98d88379 Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Fri, 8 Nov 2024 18:01:01 +0100 Subject: [PATCH 13/19] refactor: move duplicate constants between `scripts` and `src` to `src` (#237) --- scripts/constants.ts | 68 ++-------------------------- scripts/traverse-rules.ts | 6 ++- src/build-from-oxlint-config.spec.ts | 2 +- src/build-from-oxlint-config.ts | 26 ++--------- src/constants.ts | 66 +++++++++++++++++++++++++++ 5 files changed, 78 insertions(+), 90 deletions(-) create mode 100644 src/constants.ts diff --git a/scripts/constants.ts b/scripts/constants.ts index ad40951..edd3ea8 100644 --- a/scripts/constants.ts +++ b/scripts/constants.ts @@ -1,4 +1,5 @@ import path from 'node:path'; +import { aliasPluginNames } from '../src/constants.js'; const __dirname = new URL('.', import.meta.url).pathname; @@ -9,72 +10,9 @@ export const SPARSE_CLONE_DIRECTORY = 'crates/oxc_linter/src'; // these are the rules that don't have a direct equivalent in the eslint rules export const ignoreScope = new Set(['oxc', 'deepscan', 'security']); -// these are the mappings from the scope in the rules.rs to the eslint scope -// only used for the scopes where the directory structure doesn't reflect the eslint scope -// such as `typescript` vs `@typescript-eslint` or others. Eslint as a scope is an exception, -// as eslint doesn't have a scope. -// There is a duplicate in src/build-from-oxlint-config.ts, for clean builds we manage it in 2 files. -// In the future we can generate maybe this constant into src folder -export const scopeMaps = { - eslint: '', - typescript: '@typescript-eslint', - nextjs: '@next/next', -}; - -// Some typescript-eslint rules are re-implemented version of eslint rules. -// e.g. no-array-constructor, max-params, etc... -// Since oxlint supports these rules under eslint/* and it also supports TS, -// we should override these to make implementation status up-to-date. -export const typescriptRulesExtendEslintRules = [ - 'block-spacing', - 'brace-style', - 'class-methods-use-this', - 'comma-dangle', - 'comma-spacing', - 'default-param-last', - 'func-call-spacing', - 'indent', - 'init-declarations', - 'key-spacing', - 'keyword-spacing', - 'lines-around-comment', - 'lines-between-class-members', - 'max-params', - 'no-array-constructor', - 'no-dupe-class-members', - 'no-empty-function', - 'no-extra-parens', - 'no-extra-semi', - 'no-invalid-this', - 'no-loop-func', - 'no-loss-of-precision', - 'no-magic-numbers', - 'no-redeclare', - 'no-restricted-imports', - 'no-shadow', - 'no-unused-expressions', - 'no-unused-vars', - 'no-use-before-define', - 'no-useless-constructor', - 'object-curly-spacing', - 'padding-line-between-statements', - 'quotes', - 'semi', - 'space-before-blocks', - 'space-before-function-paren', - 'space-infix-ops', -]; - -// All rules from `eslint-plugin-react-hooks` -// Since oxlint supports these rules under react/*, we need to remap them. -export const reactHookRulesInsideReactScope = [ - 'rules-of-hooks', - 'exhaustive-deps', -]; - export function convertScope(scope: string) { - return Reflect.has(scopeMaps, scope) - ? scopeMaps[scope as 'eslint'] + return Reflect.has(aliasPluginNames, scope) + ? aliasPluginNames[scope as 'eslint'] : scope.replace('_', '-'); } diff --git a/scripts/traverse-rules.ts b/scripts/traverse-rules.ts index 1ada495..9e2f633 100644 --- a/scripts/traverse-rules.ts +++ b/scripts/traverse-rules.ts @@ -3,11 +3,13 @@ import path from 'node:path'; import { ignoreScope, prefixScope, - reactHookRulesInsideReactScope, SPARSE_CLONE_DIRECTORY, TARGET_DIRECTORY, - typescriptRulesExtendEslintRules, } from './constants.js'; +import { + reactHookRulesInsideReactScope, + typescriptRulesExtendEslintRules, +} from '../src/constants.js'; // Recursive function to read files in a directory, this currently assumes that the directory // structure is semi-consistent within the oxc_linter crate diff --git a/src/build-from-oxlint-config.spec.ts b/src/build-from-oxlint-config.spec.ts index f7918d6..3c97cb3 100644 --- a/src/build-from-oxlint-config.spec.ts +++ b/src/build-from-oxlint-config.spec.ts @@ -6,7 +6,7 @@ import { import fs from 'node:fs'; import { execSync } from 'node:child_process'; import type { Linter } from 'eslint'; -import { typescriptRulesExtendEslintRules } from '../scripts/constants.js'; +import { typescriptRulesExtendEslintRules } from './constants.js'; describe('buildFromOxlintConfig', () => { describe('rule values', () => { diff --git a/src/build-from-oxlint-config.ts b/src/build-from-oxlint-config.ts index 7c45ea1..5d00f85 100644 --- a/src/build-from-oxlint-config.ts +++ b/src/build-from-oxlint-config.ts @@ -2,28 +2,10 @@ import fs from 'node:fs'; import configByCategory from './generated/configs-by-category.js'; import type { Linter } from 'eslint'; import JSONCParser from 'jsonc-parser'; - -// these are the mappings from the scope in the rules.rs to the eslint scope -// only used for the scopes where the directory structure doesn't reflect the eslint scope -// such as `typescript` vs `@typescript-eslint` or others. Eslint as a scope is an exception, -// as eslint doesn't have a scope. -// look here: -const aliasPluginNames: Record = { - eslint: '', - typescript: '@typescript-eslint', - nextjs: '@next/next', - - // only in build-config - react_perf: 'react-perf', - jsx_a11y: 'jsx-a11y', -}; - -// All rules from `eslint-plugin-react-hooks` -// Since oxlint supports these rules under react/*, we need to remap them. -export const reactHookRulesInsideReactScope = [ - 'rules-of-hooks', - 'exhaustive-deps', -]; +import { + aliasPluginNames, + reactHookRulesInsideReactScope, +} from './constants.js'; const allRulesObjects = Object.values(configByCategory).map( (config) => config.rules diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000..d96d059 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,66 @@ +// these are the mappings from the scope in the rules.rs to the eslint scope +// only used for the scopes where the directory structure doesn't reflect the eslint scope +// such as `typescript` vs `@typescript-eslint` or others. Eslint as a scope is an exception, +// as eslint doesn't have a scope. +// look here: +export const aliasPluginNames: Record = { + // for scripts/generate and src/build-from-oxlint-config + eslint: '', + typescript: '@typescript-eslint', + nextjs: '@next/next', + + // only for src/build-from-oxlint-config + react_perf: 'react-perf', + jsx_a11y: 'jsx-a11y', +}; + +// Some typescript-eslint rules are re-implemented version of eslint rules. +// e.g. no-array-constructor, max-params, etc... +// Since oxlint supports these rules under eslint/* and it also supports TS, +// we should override these to make implementation status up-to-date. +export const typescriptRulesExtendEslintRules = [ + 'block-spacing', + 'brace-style', + 'class-methods-use-this', + 'comma-dangle', + 'comma-spacing', + 'default-param-last', + 'func-call-spacing', + 'indent', + 'init-declarations', + 'key-spacing', + 'keyword-spacing', + 'lines-around-comment', + 'lines-between-class-members', + 'max-params', + 'no-array-constructor', + 'no-dupe-class-members', + 'no-empty-function', + 'no-extra-parens', + 'no-extra-semi', + 'no-invalid-this', + 'no-loop-func', + 'no-loss-of-precision', + 'no-magic-numbers', + 'no-redeclare', + 'no-restricted-imports', + 'no-shadow', + 'no-unused-expressions', + 'no-unused-vars', + 'no-use-before-define', + 'no-useless-constructor', + 'object-curly-spacing', + 'padding-line-between-statements', + 'quotes', + 'semi', + 'space-before-blocks', + 'space-before-function-paren', + 'space-infix-ops', +]; + +// All rules from `eslint-plugin-react-hooks` +// Since oxlint supports these rules under react/*, we need to remap them. +export const reactHookRulesInsideReactScope = [ + 'rules-of-hooks', + 'exhaustive-deps', +]; From a61dd3bd8371b344c2a72a2e9c8e9635d3d04720 Mon Sep 17 00:00:00 2001 From: oxc-bot Date: Sat, 9 Nov 2024 20:29:10 +0800 Subject: [PATCH 14/19] release: v0.11.1 (#239) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Co-authored-by: Boshen --- package.json | 4 +- pnpm-lock.yaml | 74 +++++++++++++------------- src/__snapshots__/configs.spec.ts.snap | 9 ++++ src/generated/rules-by-category.ts | 3 ++ src/generated/rules-by-scope.ts | 3 ++ 5 files changed, 54 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index a053cd3..90638f1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-oxlint", - "version": "0.11.0", + "version": "0.11.1", "description": "Turn off all rules already supported by oxlint", "type": "module", "types": "./dist/index.d.ts", @@ -64,7 +64,7 @@ "husky": "^9.1.6", "lint-staged": "^15.2.10", "memfs": "^4.14.0", - "oxlint": "^0.11.0", + "oxlint": "^0.11.1", "prettier": "^3.3.3", "scule": "^1.3.0", "shelljs": "^0.8.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b1740c0..411897e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,8 +49,8 @@ importers: specifier: ^4.14.0 version: 4.14.0 oxlint: - specifier: ^0.11.0 - version: 0.11.0 + specifier: ^0.11.1 + version: 0.11.1 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -466,43 +466,43 @@ packages: '@oxc-node/core@0.0.15': resolution: {integrity: sha512-g8ip2dUKtxfZ5IqROmZbHz7OY/+GOG4dnhqgQezlYXCufUcWA+0GM+FqI0ZzA50njUFKCTAHXRiN+BqJPy4trA==} - '@oxlint/darwin-arm64@0.11.0': - resolution: {integrity: sha512-qQ1C5yvRYECp+FP8DCOSqNX4+e72xXyApJ2O8QyIeYFuGGF2MoDVQz3NYJEOjOfArZ9YXGsELwM3UFtjTGIZVg==} + '@oxlint/darwin-arm64@0.11.1': + resolution: {integrity: sha512-S+cHn49fT+qSJXhQ3Z4EG/5ENp2dAUbS2sMNkhgkLqlO8aYl0TR9R7omU3vpU/beu8ePnV+mdVlJYGjsPIMGtg==} cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@0.11.0': - resolution: {integrity: sha512-pAqp6/6+mAIPr8WBndzmEuRbcXW8WNdn80hd8fLeR9teJI8eMpTkYL6kQIU7VjJ3NxpmzBLO7nh979/bwmmuBQ==} + '@oxlint/darwin-x64@0.11.1': + resolution: {integrity: sha512-LPuF0D8uu30KIVEeVuGwIPwHwJRQ1i1otwFFH7tRsNXPgMgZJ4VgriyH22i6RWwBtclJoCSBLtGK6gLZ0oZBvw==} cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@0.11.0': - resolution: {integrity: sha512-RmpjCWjX0RJ1MdIcqGQsOlXh9WgXnVgVolZLCs8MHqNuYtaIA+0VOxOhJOr7CQ0HmwV+ysPTAiQ2SVSI2tVJQQ==} + '@oxlint/linux-arm64-gnu@0.11.1': + resolution: {integrity: sha512-CYBE+GRIPs5e+raD2pdicuBn6Y6E1xAnyWQ/kHE4GEWDAQZY0Um2VYEUTGH2ObwJ3uXr6jeJ16HOKJvr0S8a8w==} cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@0.11.0': - resolution: {integrity: sha512-totBeaOeZlblKRpSZi3svVWpJjFlhxR7Xzrh3nhPTgHMM3696qjzyb80Yg0K8gAlOrIDlBblLG0JnaxvdM2yjg==} + '@oxlint/linux-arm64-musl@0.11.1': + resolution: {integrity: sha512-iYXF5N5Gv+lc2wt90kxXy/W0cn7IEWu3UPzewIjPGDH8ajDckvGzZx6pTGYJnTyMh7U6hUKwOBFPVLMWI7UwKQ==} cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@0.11.0': - resolution: {integrity: sha512-tXiJ97WH4vwTIkGMnXYPx5NqwQiYLW9MbmnGkKkm5Xv/wpAaN761PkHRJT0zsYoAgoU3nZVp3qhit9MpHq1SQg==} + '@oxlint/linux-x64-gnu@0.11.1': + resolution: {integrity: sha512-D0tT8X0CsK/bpdkGdLSmsGftG3VndjyAUJuNGt56JYn0UfuPDkhQcLgUlkANHzNRXJ84tLQKhpf/MUDUHPB5cg==} cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@0.11.0': - resolution: {integrity: sha512-LgjgD80fiz37g31t/jMm9kyDM31WPjcTkXXXU702WQsdhujXVUZDWid9/QeVvi51EVufyyekaTYgNR8REVVZZg==} + '@oxlint/linux-x64-musl@0.11.1': + resolution: {integrity: sha512-WekaLYk8WLT7Di8+nyPvtqs9OlMoO6KjFDMlqqLDWQTk9ffjn8e76PCRigF3w39jQ70qP3c8k8cNKNw5ROuFcg==} cpu: [x64] os: [linux] - '@oxlint/win32-arm64@0.11.0': - resolution: {integrity: sha512-lfANFSWt0vU6x9JQYeMEy6uy8wniZGYQt0nT45P3BwXIMhAJbEC3yEX+bP5x8eTQrgkDu4dwIDURGCeeUL/NdA==} + '@oxlint/win32-arm64@0.11.1': + resolution: {integrity: sha512-/CN/bFtI33vB8uemOkZxlNRf6Q7CftP2pSO7a6Q2niG4NC99YRPj7ctXcPF0jGR0NQUhGZk7ajM4G/0MKcRdag==} cpu: [arm64] os: [win32] - '@oxlint/win32-x64@0.11.0': - resolution: {integrity: sha512-5CHtAp82xbv0jnh/HGi3QE0ANBr3+R338MA0wgZXc7477Vuri0aSK0T9oRU+K/pVloPVJaWKSDCCZoiZIYckzg==} + '@oxlint/win32-x64@0.11.1': + resolution: {integrity: sha512-0hLl0z6adYTvLIOPC5uyo+EAwNITkzi4AY4xImykQW8H89GhiV9Xl8MPJeZQMWSz7ajI1I2+hRsvA0QAzeBsxA==} cpu: [x64] os: [win32] @@ -1518,8 +1518,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxlint@0.11.0: - resolution: {integrity: sha512-uY6/R4k5bECwJBR+y8CqGRcUb5hxNReziBjt5+pk6DKxj46DqMd6HwEk090KnaH1czVf23r8mcEsJYGowMWeIA==} + oxlint@0.11.1: + resolution: {integrity: sha512-yVTkBmSvn1mo69vxBdNASOGFd1oqWzpaIWPFPIXNAHxgrW7FjotKuJ71j/pqtZH/sVSRWTpQFdmBa3CIuBEILg==} engines: {node: '>=14.*'} hasBin: true @@ -2363,28 +2363,28 @@ snapshots: '@oxc-node/core-win32-ia32-msvc': 0.0.15 '@oxc-node/core-win32-x64-msvc': 0.0.15 - '@oxlint/darwin-arm64@0.11.0': + '@oxlint/darwin-arm64@0.11.1': optional: true - '@oxlint/darwin-x64@0.11.0': + '@oxlint/darwin-x64@0.11.1': optional: true - '@oxlint/linux-arm64-gnu@0.11.0': + '@oxlint/linux-arm64-gnu@0.11.1': optional: true - '@oxlint/linux-arm64-musl@0.11.0': + '@oxlint/linux-arm64-musl@0.11.1': optional: true - '@oxlint/linux-x64-gnu@0.11.0': + '@oxlint/linux-x64-gnu@0.11.1': optional: true - '@oxlint/linux-x64-musl@0.11.0': + '@oxlint/linux-x64-musl@0.11.1': optional: true - '@oxlint/win32-arm64@0.11.0': + '@oxlint/win32-arm64@0.11.1': optional: true - '@oxlint/win32-x64@0.11.0': + '@oxlint/win32-x64@0.11.1': optional: true '@pkgjs/parseargs@0.11.0': @@ -3439,16 +3439,16 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxlint@0.11.0: + oxlint@0.11.1: optionalDependencies: - '@oxlint/darwin-arm64': 0.11.0 - '@oxlint/darwin-x64': 0.11.0 - '@oxlint/linux-arm64-gnu': 0.11.0 - '@oxlint/linux-arm64-musl': 0.11.0 - '@oxlint/linux-x64-gnu': 0.11.0 - '@oxlint/linux-x64-musl': 0.11.0 - '@oxlint/win32-arm64': 0.11.0 - '@oxlint/win32-x64': 0.11.0 + '@oxlint/darwin-arm64': 0.11.1 + '@oxlint/darwin-x64': 0.11.1 + '@oxlint/linux-arm64-gnu': 0.11.1 + '@oxlint/linux-arm64-musl': 0.11.1 + '@oxlint/linux-x64-gnu': 0.11.1 + '@oxlint/linux-x64-musl': 0.11.1 + '@oxlint/win32-arm64': 0.11.1 + '@oxlint/win32-x64': 0.11.1 p-limit@2.3.0: dependencies: diff --git a/src/__snapshots__/configs.spec.ts.snap b/src/__snapshots__/configs.spec.ts.snap index 9d97956..a8ab545 100644 --- a/src/__snapshots__/configs.spec.ts.snap +++ b/src/__snapshots__/configs.spec.ts.snap @@ -161,6 +161,9 @@ exports[`contains all the oxlint rules 1`] = ` "@typescript-eslint/no-unsafe-declaration-merging": [ 0, ], + "@typescript-eslint/no-unsafe-function-type": [ + 0, + ], "@typescript-eslint/no-unused-vars": [ 0, ], @@ -236,6 +239,9 @@ exports[`contains all the oxlint rules 1`] = ` "import/export": [ 0, ], + "import/first": [ + 0, + ], "import/max-dependencies": [ 0, ], @@ -281,6 +287,9 @@ exports[`contains all the oxlint rules 1`] = ` "import/no-webpack-loader-syntax": [ 0, ], + "import/unambiguous": [ + 0, + ], "jest/consistent-test-it": [ 0, ], diff --git a/src/generated/rules-by-category.ts b/src/generated/rules-by-category.ts index 4d1f3b2..4fcd29b 100644 --- a/src/generated/rules-by-category.ts +++ b/src/generated/rules-by-category.ts @@ -36,6 +36,7 @@ const pedanticRules = { 'react/no-unescaped-entities': 'off', '@typescript-eslint/ban-ts-comment': 'off', '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', '@typescript-eslint/prefer-enum-initializers': 'off', '@typescript-eslint/prefer-ts-expect-error': 'off', 'unicorn/consistent-empty-array-spread': 'off', @@ -118,6 +119,7 @@ const restrictionRules = { 'import/no-default-export': 'off', 'import/no-dynamic-require': 'off', 'import/no-webpack-loader-syntax': 'off', + 'import/unambiguous': 'off', 'jsdoc/check-access': 'off', 'jsdoc/empty-tags': 'off', 'node/no-new-require': 'off', @@ -171,6 +173,7 @@ const styleRules = { 'prefer-object-has-own': 'off', 'sort-imports': 'off', 'sort-keys': 'off', + 'import/first': 'off', 'jest/consistent-test-it': 'off', 'jest/max-expects': 'off', 'jest/max-nested-describe': 'off', diff --git a/src/generated/rules-by-scope.ts b/src/generated/rules-by-scope.ts index b9dc977..c586325 100644 --- a/src/generated/rules-by-scope.ts +++ b/src/generated/rules-by-scope.ts @@ -153,6 +153,7 @@ const typescriptRules = { '@typescript-eslint/no-this-alias': 'off', '@typescript-eslint/no-unnecessary-type-constraint': 'off', '@typescript-eslint/no-unsafe-declaration-merging': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', '@typescript-eslint/no-useless-empty-export': 'off', '@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/no-wrapper-object-types': 'off', @@ -169,6 +170,7 @@ const typescriptRules = { const importRules = { 'import/default': 'off', 'import/export': 'off', + 'import/first': 'off', 'import/max-dependencies': 'off', 'import/named': 'off', 'import/namespace': 'off', @@ -184,6 +186,7 @@ const importRules = { 'import/no-self-import': 'off', 'import/no-unused-modules': 'off', 'import/no-webpack-loader-syntax': 'off', + 'import/unambiguous': 'off', } as const; const jestRules = { From 64ab321ed1b49b174ccfab3fbb3a9ddd876c97c4 Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Sat, 9 Nov 2024 14:42:25 +0100 Subject: [PATCH 15/19] test: improve test descriptions (#240) --- src/build-from-oxlint-config.spec.ts | 116 +++++++++++++-------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/src/build-from-oxlint-config.spec.ts b/src/build-from-oxlint-config.spec.ts index 3c97cb3..4f25855 100644 --- a/src/build-from-oxlint-config.spec.ts +++ b/src/build-from-oxlint-config.spec.ts @@ -10,57 +10,57 @@ import { typescriptRulesExtendEslintRules } from './constants.js'; describe('buildFromOxlintConfig', () => { describe('rule values', () => { - it('detect active rules inside "rules" scope', () => { - for (const ruleSetting of [ - 'error', - ['error'], - 'warn', - ['warn'], - 1, - [1], - 2, - [2], - ]) { - const rules = buildFromOxlintConfig({ + for (const ruleSetting of [ + 'error', + ['error'], + 'warn', + ['warn'], + 1, + [1], + 2, + [2], + ]) { + it(`detect active rule ${JSON.stringify(ruleSetting)} inside "rules" scope`, () => { + const configs = buildFromOxlintConfig({ rules: { eqeqeq: ruleSetting, }, }); - expect(rules.length).toBe(1); - expect(rules[0].rules).not.toBeUndefined(); - expect('eqeqeq' in rules[0].rules!).toBe(true); - expect(rules[0].rules!.eqeqeq).toBe('off'); - } - }); + expect(configs.length).toBe(1); + expect(configs[0].rules).not.toBeUndefined(); + expect('eqeqeq' in configs[0].rules!).toBe(true); + expect(configs[0].rules!.eqeqeq).toBe('off'); + }); + } - it('skip deactive rules inside "rules" scope', () => { - for (const ruleSetting of ['off', ['off'], 0, [0]]) { - const rules = buildFromOxlintConfig({ + for (const ruleSetting of ['off', ['off'], 0, [0]]) { + it(`skip deactive rule ${JSON.stringify(ruleSetting)} inside "rules" scope`, () => { + const configs = buildFromOxlintConfig({ rules: { eqeqeq: ruleSetting, }, }); - expect(rules.length).toBe(1); - expect(rules[0].rules).not.toBeUndefined(); - expect('eqeqeq' in rules[0].rules!).toBe(false); - } - }); + expect(configs.length).toBe(1); + expect(configs[0].rules).not.toBeUndefined(); + expect('eqeqeq' in configs[0].rules!).toBe(false); + }); + } - it('skip invalid rules inside "rules" scope', () => { - for (const ruleSetting of ['on', ['on'], 3, [3]]) { - const rules = buildFromOxlintConfig({ + for (const ruleSetting of ['on', ['on'], 3, [3]]) { + it(`skip invalid ${JSON.stringify(ruleSetting)} inside "rules" scope`, () => { + const configs = buildFromOxlintConfig({ rules: { eqeqeq: ruleSetting, }, }); - expect(rules.length).toBe(1); - expect(rules[0].rules).not.toBeUndefined(); - expect('eqeqeq' in rules[0].rules!).toBe(false); - } - }); + expect(configs.length).toBe(1); + expect(configs[0].rules).not.toBeUndefined(); + expect('eqeqeq' in configs[0].rules!).toBe(false); + }); + } }); it('skip deactivate categories', () => { @@ -109,7 +109,7 @@ describe('buildFromOxlintConfig', () => { }); it('skip deactivate rules, for custom enable category', () => { - const rules = buildFromOxlintConfig({ + const configs = buildFromOxlintConfig({ plugins: ['import'], categories: { nursery: 'warn', @@ -120,9 +120,9 @@ describe('buildFromOxlintConfig', () => { }, }); - expect(rules.length).toBe(1); - expect(rules[0].rules).not.toBeUndefined(); - expect('import/no-unused-modules' in rules[0].rules!).toBe(false); + expect(configs.length).toBe(1); + expect(configs[0].rules).not.toBeUndefined(); + expect('import/no-unused-modules' in configs[0].rules!).toBe(false); }); // look here: @@ -172,17 +172,17 @@ describe('buildFromOxlintConfig', () => { }); it('skips unknown oxlint rules', () => { - const rules = buildFromOxlintConfig({ + const configs = buildFromOxlintConfig({ rules: { unknown: 'warn', 'typescript/no-img-element': 'warn', // valid rule, but wrong plugin-name }, }); - expect(rules.length).toBe(1); - expect(rules[0].rules).not.toBeUndefined(); - expect('unknown' in rules[0].rules!).toBe(false); - expect('@next/next/no-img-element' in rules[0].rules!).toBe(false); + expect(configs.length).toBe(1); + expect(configs[0].rules).not.toBeUndefined(); + expect('unknown' in configs[0].rules!).toBe(false); + expect('@next/next/no-img-element' in configs[0].rules!).toBe(false); }); }); @@ -201,7 +201,7 @@ const createConfigFileAndBuildFromIt = ( describe('buildFromOxlintConfigFile', () => { it('successfully parse oxlint json config', () => { - const rules = createConfigFileAndBuildFromIt( + const configs = createConfigFileAndBuildFromIt( 'success-config.json', `{ "rules": { @@ -211,15 +211,15 @@ describe('buildFromOxlintConfigFile', () => { }` ); - expect(rules.length).toBe(1); - expect(rules[0].rules).not.toBeUndefined(); - expect('no-await-in-loop' in rules[0].rules!).toBe(true); + expect(configs.length).toBe(1); + expect(configs[0].rules).not.toBeUndefined(); + expect('no-await-in-loop' in configs[0].rules!).toBe(true); }); it('fails to find oxlint config', () => { - const rules = buildFromOxlintConfigFile('not-found.json'); + const configs = buildFromOxlintConfigFile('not-found.json'); - expect(rules).toStrictEqual([ + expect(configs).toStrictEqual([ { name: 'oxlint/from-oxlint-config', }, @@ -227,12 +227,12 @@ describe('buildFromOxlintConfigFile', () => { }); it('fails to parse invalid json', () => { - const rules = createConfigFileAndBuildFromIt( + const configs = createConfigFileAndBuildFromIt( 'invalid-json.json', '["this", is an invalid json format]' ); - expect(rules).toStrictEqual([ + expect(configs).toStrictEqual([ { name: 'oxlint/from-oxlint-config', }, @@ -240,12 +240,12 @@ describe('buildFromOxlintConfigFile', () => { }); it('fails to parse invalid oxlint config', () => { - const rules = createConfigFileAndBuildFromIt( + const configs = createConfigFileAndBuildFromIt( 'invalid-config.json', JSON.stringify(['this is valid json but not an object']) ); - expect(rules).toStrictEqual([ + expect(configs).toStrictEqual([ { name: 'oxlint/from-oxlint-config', }, @@ -389,10 +389,10 @@ describe('integration test with oxlint', () => { config ); - const eslintRules = buildFromOxlintConfig(config); + const configs = buildFromOxlintConfig(config); - expect(eslintRules.length).toBe(1); - expect(eslintRules[0].rules).not.toBeUndefined(); + expect(configs.length).toBe(1); + expect(configs[0].rules).not.toBeUndefined(); let expectedCount = oxlintRulesCount ?? 0; @@ -402,11 +402,11 @@ describe('integration test with oxlint', () => { config.plugins.includes('typescript') ) { expectedCount += typescriptRulesExtendEslintRules.filter( - (aliasRule) => aliasRule in eslintRules[0].rules! + (aliasRule) => aliasRule in configs[0].rules! ).length; } - expect(Object.keys(eslintRules[0].rules!).length).toBe(expectedCount); + expect(Object.keys(configs[0].rules!).length).toBe(expectedCount); }); } }); From 66f9fa1b9302cd5a47bfa98a2465b96d7806ea78 Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Sat, 9 Nov 2024 16:38:11 +0100 Subject: [PATCH 16/19] build: improve `pnpm run generate` performance (#242) --- scripts/config-generator.ts | 11 ++++++----- scripts/generate.ts | 16 ++++++++++------ scripts/rules-generator.ts | 11 ++++++----- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/scripts/config-generator.ts b/scripts/config-generator.ts index 1fdad0a..0b431fd 100644 --- a/scripts/config-generator.ts +++ b/scripts/config-generator.ts @@ -1,4 +1,4 @@ -import { writeFileSync } from 'node:fs'; +import { writeFile } from 'node:fs/promises'; import path from 'node:path'; import type { Rule } from './traverse-rules.js'; import { camelCase, kebabCase, pascalCase } from 'scule'; @@ -40,7 +40,7 @@ export class ConfigGenerator { return map; } - public async generateRulesCode() { + public generateRulesCode() { console.log(`Generating config, grouped by ${this.rulesGrouping}`); const rulesGrouping = this.rulesGrouping; @@ -78,9 +78,10 @@ export class ConfigGenerator { return code; } - public async generateRules(folderPath: string) { - const output = await this.generateRulesCode(); - writeFileSync( + public async generateRules(folderPath: string): Promise { + const output = this.generateRulesCode(); + + return writeFile( path.resolve(folderPath, `configs-by-${this.rulesGrouping}.ts`), output ); diff --git a/scripts/generate.ts b/scripts/generate.ts index 0b3e7b7..a2b129c 100644 --- a/scripts/generate.ts +++ b/scripts/generate.ts @@ -23,9 +23,13 @@ if (!fs.existsSync(generateFolder)) { fs.mkdirSync(generateFolder); } -for (const generator of [rulesGenerator, configGenerator]) { - generator.setRulesGrouping(RulesGrouping.SCOPE); - await generator.generateRules(generateFolder); - generator.setRulesGrouping(RulesGrouping.CATEGORY); - await generator.generateRules(generateFolder); -} +const promises = [rulesGenerator, configGenerator].map( + (generator) => async () => { + generator.setRulesGrouping(RulesGrouping.SCOPE); + await generator.generateRules(generateFolder); + generator.setRulesGrouping(RulesGrouping.CATEGORY); + await generator.generateRules(generateFolder); + } +); + +await Promise.all(promises); diff --git a/scripts/rules-generator.ts b/scripts/rules-generator.ts index d05ee23..4c4c0a5 100644 --- a/scripts/rules-generator.ts +++ b/scripts/rules-generator.ts @@ -1,4 +1,4 @@ -import { writeFileSync } from 'node:fs'; +import { writeFile } from 'node:fs/promises'; import path from 'node:path'; import type { Rule } from './traverse-rules.js'; import { camelCase } from 'scule'; @@ -40,7 +40,7 @@ export class RulesGenerator { return map; } - public async generateRulesCode() { + public generateRulesCode() { console.log(`Generating rules, grouped by ${this.rulesGrouping}`); const rulesGrouping = this.rulesGrouping; @@ -77,9 +77,10 @@ export class RulesGenerator { return code; } - public async generateRules(folderPath: string) { - const output = await this.generateRulesCode(); - writeFileSync( + public generateRules(folderPath: string): Promise { + const output = this.generateRulesCode(); + + return writeFile( path.resolve(folderPath, `rules-by-${this.rulesGrouping}.ts`), output ); From f187cbcddaceb48b7eb2d296b6edf640ee073783 Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Sat, 9 Nov 2024 16:49:01 +0100 Subject: [PATCH 17/19] build: improve `pnpm run generate` performance part 2 (#243) --- scripts/generate.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/scripts/generate.ts b/scripts/generate.ts index a2b129c..25914cd 100644 --- a/scripts/generate.ts +++ b/scripts/generate.ts @@ -23,13 +23,11 @@ if (!fs.existsSync(generateFolder)) { fs.mkdirSync(generateFolder); } -const promises = [rulesGenerator, configGenerator].map( - (generator) => async () => { - generator.setRulesGrouping(RulesGrouping.SCOPE); - await generator.generateRules(generateFolder); - generator.setRulesGrouping(RulesGrouping.CATEGORY); - await generator.generateRules(generateFolder); - } -); +const promises = [rulesGenerator, configGenerator].map(async (generator) => { + generator.setRulesGrouping(RulesGrouping.SCOPE); + await generator.generateRules(generateFolder); + generator.setRulesGrouping(RulesGrouping.CATEGORY); + await generator.generateRules(generateFolder); +}); await Promise.all(promises); From 39dd438a6e580ea08340e31ca85af91607c7aeae Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Sat, 9 Nov 2024 18:40:52 +0100 Subject: [PATCH 18/19] build: improve config-generator performance (#244) --- scripts/config-generator.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/scripts/config-generator.ts b/scripts/config-generator.ts index 0b431fd..ab6acff 100644 --- a/scripts/config-generator.ts +++ b/scripts/config-generator.ts @@ -28,16 +28,13 @@ export class ConfigGenerator { private groupItemsBy( rules: Rule[], rulesGrouping: RulesGrouping - ): Map { - const map = new Map(); + ): Set { + const set = new Set(); for (const item of rules) { - const key = item[rulesGrouping]; - const group = map.get(key) || []; - group.push(item.value); - map.set(key, group); + set.add(item[rulesGrouping]); } - return map; + return set; } public generateRulesCode() { @@ -55,7 +52,7 @@ export class ConfigGenerator { code += `import * as rules from "./rules-by-${this.rulesGrouping}.js";\n\n`; - for (const grouping of rulesMap.keys()) { + for (const grouping of rulesMap) { exportGrouping.push(grouping); code += `const ${camelCase(grouping)}Config = {\n`; From 4769da9cc30ed2bb60bfb69e89821456584aea8a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:17:01 +0000 Subject: [PATCH 19/19] chore(deps): update npm packages (#245) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.8.7` -> `22.9.0`](https://renovatebot.com/diffs/npm/@types%2fnode/22.8.7/22.9.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.8.7/22.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.8.7/22.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)) | [`8.12.2` -> `8.13.0`](https://renovatebot.com/diffs/npm/typescript-eslint/8.12.2/8.13.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript-eslint/8.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript-eslint/8.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript-eslint/8.12.2/8.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript-eslint/8.12.2/8.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
typescript-eslint/typescript-eslint (typescript-eslint) ### [`v8.13.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8130-2024-11-04) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.12.2...v8.13.0) This was a version bump only for typescript-eslint to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.
--- ### Configuration 📅 **Schedule**: Branch creation - "before 10am on monday" in timezone Asia/Shanghai, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/eslint-plugin-oxlint). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 180 ++++++++++++++++++++++++------------------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 411897e..c229a67 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,13 +20,13 @@ importers: version: 0.0.15 '@types/node': specifier: ^22.7.7 - version: 22.8.7 + version: 22.9.0 '@types/shelljs': specifier: ^0.8.15 version: 0.8.15 '@vitest/coverage-v8': specifier: ^2.1.3 - version: 2.1.4(vitest@2.1.4(@types/node@22.8.7)) + version: 2.1.4(vitest@2.1.4(@types/node@22.9.0)) dedent: specifier: ^1.5.3 version: 1.5.3 @@ -65,16 +65,16 @@ importers: version: 5.6.3 typescript-eslint: specifier: ^8.10.0 - version: 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + version: 8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) vite: specifier: ^5.4.9 - version: 5.4.10(@types/node@22.8.7) + version: 5.4.10(@types/node@22.9.0) vite-plugin-dts: specifier: ^4.2.4 - version: 4.3.0(@types/node@22.8.7)(rollup@4.24.2)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.7)) + version: 4.3.0(@types/node@22.9.0)(rollup@4.24.2)(typescript@5.6.3)(vite@5.4.10(@types/node@22.9.0)) vitest: specifier: ^2.1.3 - version: 2.1.4(@types/node@22.8.7) + version: 2.1.4(@types/node@22.9.0) packages: @@ -649,8 +649,8 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@22.8.7': - resolution: {integrity: sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==} + '@types/node@22.9.0': + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -658,8 +658,8 @@ packages: '@types/shelljs@0.8.15': resolution: {integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==} - '@typescript-eslint/eslint-plugin@8.12.2': - resolution: {integrity: sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==} + '@typescript-eslint/eslint-plugin@8.13.0': + resolution: {integrity: sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -669,8 +669,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.12.2': - resolution: {integrity: sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==} + '@typescript-eslint/parser@8.13.0': + resolution: {integrity: sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -679,12 +679,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@8.12.2': - resolution: {integrity: sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==} + '@typescript-eslint/scope-manager@8.13.0': + resolution: {integrity: sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.12.2': - resolution: {integrity: sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==} + '@typescript-eslint/type-utils@8.13.0': + resolution: {integrity: sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -692,12 +692,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@8.12.2': - resolution: {integrity: sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==} + '@typescript-eslint/types@8.13.0': + resolution: {integrity: sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.12.2': - resolution: {integrity: sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==} + '@typescript-eslint/typescript-estree@8.13.0': + resolution: {integrity: sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -705,14 +705,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.12.2': - resolution: {integrity: sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==} + '@typescript-eslint/utils@8.13.0': + resolution: {integrity: sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@8.12.2': - resolution: {integrity: sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==} + '@typescript-eslint/visitor-keys@8.13.0': + resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitest/coverage-v8@2.1.4': @@ -1869,8 +1869,8 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - typescript-eslint@8.12.2: - resolution: {integrity: sha512-UbuVUWSrHVR03q9CWx+JDHeO6B/Hr9p4U5lRH++5tq/EbFq1faYZe50ZSBePptgfIKLEti0aPQ3hFgnPVcd8ZQ==} + typescript-eslint@8.13.0: + resolution: {integrity: sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -2240,23 +2240,23 @@ snapshots: dependencies: tslib: 2.8.0 - '@microsoft/api-extractor-model@7.29.8(@types/node@22.8.7)': + '@microsoft/api-extractor-model@7.29.8(@types/node@22.9.0)': dependencies: '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.9.0(@types/node@22.8.7) + '@rushstack/node-core-library': 5.9.0(@types/node@22.9.0) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.47.11(@types/node@22.8.7)': + '@microsoft/api-extractor@7.47.11(@types/node@22.9.0)': dependencies: - '@microsoft/api-extractor-model': 7.29.8(@types/node@22.8.7) + '@microsoft/api-extractor-model': 7.29.8(@types/node@22.9.0) '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.9.0(@types/node@22.8.7) + '@rushstack/node-core-library': 5.9.0(@types/node@22.9.0) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.2(@types/node@22.8.7) - '@rushstack/ts-command-line': 4.23.0(@types/node@22.8.7) + '@rushstack/terminal': 0.14.2(@types/node@22.9.0) + '@rushstack/ts-command-line': 4.23.0(@types/node@22.9.0) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.8 @@ -2452,7 +2452,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.24.2': optional: true - '@rushstack/node-core-library@5.9.0(@types/node@22.8.7)': + '@rushstack/node-core-library@5.9.0(@types/node@22.9.0)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -2463,23 +2463,23 @@ snapshots: resolve: 1.22.8 semver: 7.5.4 optionalDependencies: - '@types/node': 22.8.7 + '@types/node': 22.9.0 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.14.2(@types/node@22.8.7)': + '@rushstack/terminal@0.14.2(@types/node@22.9.0)': dependencies: - '@rushstack/node-core-library': 5.9.0(@types/node@22.8.7) + '@rushstack/node-core-library': 5.9.0(@types/node@22.9.0) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.8.7 + '@types/node': 22.9.0 - '@rushstack/ts-command-line@4.23.0(@types/node@22.8.7)': + '@rushstack/ts-command-line@4.23.0(@types/node@22.9.0)': dependencies: - '@rushstack/terminal': 0.14.2(@types/node@22.8.7) + '@rushstack/terminal': 0.14.2(@types/node@22.9.0) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -2498,13 +2498,13 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.8.7 + '@types/node': 22.9.0 '@types/json-schema@7.0.15': {} '@types/minimatch@5.1.2': {} - '@types/node@22.8.7': + '@types/node@22.9.0': dependencies: undici-types: 6.19.8 @@ -2513,16 +2513,16 @@ snapshots: '@types/shelljs@0.8.15': dependencies: '@types/glob': 7.2.0 - '@types/node': 22.8.7 + '@types/node': 22.9.0 - '@typescript-eslint/eslint-plugin@8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.12.2 - '@typescript-eslint/type-utils': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/utils': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/type-utils': 8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.13.0 eslint: 9.14.0(jiti@2.3.3) graphemer: 1.4.0 ignore: 5.3.2 @@ -2533,12 +2533,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 8.12.2 - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.13.0 debug: 4.3.7 eslint: 9.14.0(jiti@2.3.3) optionalDependencies: @@ -2546,15 +2546,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.12.2': + '@typescript-eslint/scope-manager@8.13.0': dependencies: - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/visitor-keys': 8.13.0 - '@typescript-eslint/type-utils@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) - '@typescript-eslint/utils': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) debug: 4.3.7 ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: @@ -2563,12 +2563,12 @@ snapshots: - eslint - supports-color - '@typescript-eslint/types@8.12.2': {} + '@typescript-eslint/types@8.13.0': {} - '@typescript-eslint/typescript-estree@8.12.2(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.13.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/visitor-keys': 8.13.0 debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 @@ -2580,23 +2580,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/utils@8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@2.3.3)) - '@typescript-eslint/scope-manager': 8.12.2 - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) eslint: 9.14.0(jiti@2.3.3) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@8.12.2': + '@typescript-eslint/visitor-keys@8.13.0': dependencies: - '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/types': 8.13.0 eslint-visitor-keys: 3.4.3 - '@vitest/coverage-v8@2.1.4(vitest@2.1.4(@types/node@22.8.7))': + '@vitest/coverage-v8@2.1.4(vitest@2.1.4(@types/node@22.9.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -2610,7 +2610,7 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.4(@types/node@22.8.7) + vitest: 2.1.4(@types/node@22.9.0) transitivePeerDependencies: - supports-color @@ -2621,13 +2621,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.8.7))': + '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.9.0))': dependencies: '@vitest/spy': 2.1.4 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - vite: 5.4.10(@types/node@22.8.7) + vite: 5.4.10(@types/node@22.9.0) '@vitest/pretty-format@2.1.4': dependencies: @@ -3756,11 +3756,11 @@ snapshots: type-fest@0.8.1: {} - typescript-eslint@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3): + typescript-eslint@8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/parser': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/utils': 8.12.2(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -3792,12 +3792,12 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite-node@2.1.4(@types/node@22.8.7): + vite-node@2.1.4(@types/node@22.9.0): dependencies: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 - vite: 5.4.10(@types/node@22.8.7) + vite: 5.4.10(@types/node@22.9.0) transitivePeerDependencies: - '@types/node' - less @@ -3809,9 +3809,9 @@ snapshots: - supports-color - terser - vite-plugin-dts@4.3.0(@types/node@22.8.7)(rollup@4.24.2)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.7)): + vite-plugin-dts@4.3.0(@types/node@22.9.0)(rollup@4.24.2)(typescript@5.6.3)(vite@5.4.10(@types/node@22.9.0)): dependencies: - '@microsoft/api-extractor': 7.47.11(@types/node@22.8.7) + '@microsoft/api-extractor': 7.47.11(@types/node@22.9.0) '@rollup/pluginutils': 5.1.3(rollup@4.24.2) '@volar/typescript': 2.4.8 '@vue/language-core': 2.1.6(typescript@5.6.3) @@ -3822,25 +3822,25 @@ snapshots: magic-string: 0.30.12 typescript: 5.6.3 optionalDependencies: - vite: 5.4.10(@types/node@22.8.7) + vite: 5.4.10(@types/node@22.9.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite@5.4.10(@types/node@22.8.7): + vite@5.4.10(@types/node@22.9.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.24.2 optionalDependencies: - '@types/node': 22.8.7 + '@types/node': 22.9.0 fsevents: 2.3.3 - vitest@2.1.4(@types/node@22.8.7): + vitest@2.1.4(@types/node@22.9.0): dependencies: '@vitest/expect': 2.1.4 - '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.8.7)) + '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.9.0)) '@vitest/pretty-format': 2.1.4 '@vitest/runner': 2.1.4 '@vitest/snapshot': 2.1.4 @@ -3856,11 +3856,11 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.10(@types/node@22.8.7) - vite-node: 2.1.4(@types/node@22.8.7) + vite: 5.4.10(@types/node@22.9.0) + vite-node: 2.1.4(@types/node@22.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.8.7 + '@types/node': 22.9.0 transitivePeerDependencies: - less - lightningcss