From ddab6c60a0854005215baf4aafc3983410eaefef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 13:42:43 +0000 Subject: [PATCH 1/4] chore(deps): update dependency eslint-plugin-react-hooks to v7 --- package.json | 2 +- pnpm-lock.yaml | 46 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index d5c308fec7..e2d4f101ea 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "eslint-config-prettier": "^10.1.8", "eslint-plugin-jest": "^29.0.1", "eslint-plugin-react": "^7.37.5", - "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-hooks": "^7.0.0", "jest": "^30.2.0", "prettier": "3.6.2", "typescript": "~5.9.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2084b01829..6543ad1b52 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,8 +44,8 @@ importers: specifier: ^7.37.5 version: 7.37.5(eslint@9.37.0) eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.37.0) + specifier: ^7.0.0 + version: 7.0.0(eslint@9.37.0) jest: specifier: ^30.2.0 version: 30.2.0(@types/node@22.18.10)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.10))(ts-node@10.9.2(@types/node@22.18.10)(typescript@5.9.3)) @@ -6792,9 +6792,9 @@ packages: jest: optional: true - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} + eslint-plugin-react-hooks@7.0.0: + resolution: {integrity: sha512-fNXaOwvKwq2+pXiRpXc825Vd63+KM4DLL40Rtlycb8m7fYpp6efrTp1sa6ZbP/Ap58K2bEKFXRmhURE+CJAQWw==} + engines: {node: '>=18'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 @@ -7284,6 +7284,12 @@ packages: headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + hex-rgba@1.0.2: resolution: {integrity: sha512-MKla68wFGv+i7zU3Q4giWN74f+zWdkuf2Tk21fISV7aw55r8dH/noBbH5JsVlM4Z2WRTYCEmSxsoZ1QR/o68jg==} @@ -10352,6 +10358,15 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@4.1.12: + resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} + snapshots: '@adobe/css-tools@4.4.4': {} @@ -15460,9 +15475,16 @@ snapshots: - supports-color - typescript - eslint-plugin-react-hooks@5.2.0(eslint@9.37.0): + eslint-plugin-react-hooks@7.0.0(eslint@9.37.0): dependencies: + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 eslint: 9.37.0 + hermes-parser: 0.25.1 + zod: 4.1.12 + zod-validation-error: 4.0.2(zod@4.1.12) + transitivePeerDependencies: + - supports-color eslint-plugin-react@7.37.5(eslint@9.37.0): dependencies: @@ -16092,6 +16114,12 @@ snapshots: headers-polyfill@4.0.3: {} + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + hex-rgba@1.0.2: {} hoist-non-react-statics@3.3.2: @@ -19726,3 +19754,9 @@ snapshots: yocto-queue@1.2.1: {} yoctocolors-cjs@2.1.3: {} + + zod-validation-error@4.0.2(zod@4.1.12): + dependencies: + zod: 4.1.12 + + zod@4.1.12: {} From 05527916ad9d46e80b9ddb8d085b65157ea4007a Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Tue, 14 Oct 2025 10:16:27 -0400 Subject: [PATCH 2/4] Update --- eslint.js.config.base.mjs | 3 +- eslint.js.react.jest.config.base.mjs | 11 +- eslint.ts.config.base.mjs | 98 +++++++++--------- eslint.ts.jest.config.base.mjs | 114 +++++++++++---------- eslint.ts.react.config.base.mjs | 148 ++++++++++++++------------- eslint.ts.react.jest.config.base.mjs | 148 ++++++++++++++------------- package.json | 1 - pnpm-lock.yaml | 18 ---- 8 files changed, 266 insertions(+), 275 deletions(-) diff --git a/eslint.js.config.base.mjs b/eslint.js.config.base.mjs index 31f147f9b5..66a155c8d5 100644 --- a/eslint.js.config.base.mjs +++ b/eslint.js.config.base.mjs @@ -1,4 +1,5 @@ +import { defineConfig } from 'eslint/config'; import eslint from '@eslint/js'; import eslintConfigPrettier from 'eslint-config-prettier'; -export default [eslint.configs.recommended, eslintConfigPrettier]; +export default defineConfig([eslint.configs.recommended, eslintConfigPrettier]); diff --git a/eslint.js.react.jest.config.base.mjs b/eslint.js.react.jest.config.base.mjs index 47997596d5..9b615fb4bb 100644 --- a/eslint.js.react.jest.config.base.mjs +++ b/eslint.js.react.jest.config.base.mjs @@ -1,11 +1,11 @@ +import { defineConfig } from 'eslint/config'; import eslint from '@eslint/js'; import react from 'eslint-plugin-react'; -import { fixupPluginRules } from '@eslint/compat'; -import eslintPluginReactHooks from 'eslint-plugin-react-hooks'; +import reactHooks from 'eslint-plugin-react-hooks'; import jest from 'eslint-plugin-jest'; import eslintConfigPrettier from 'eslint-config-prettier'; -export default [ +export default defineConfig([ { files: ['test/**/*.js', 'test/**/*.jsx'], ...eslint.configs.recommended, @@ -25,8 +25,9 @@ export default [ { files: ['test/**/*.js', 'test/**/*.jsx'], plugins: { - 'react-hooks': fixupPluginRules(eslintPluginReactHooks), + 'react-hooks': reactHooks, }, + extends: ['react-hooks/recommended'], }, { files: ['test/**/*.js', 'test/**/*.jsx'], @@ -40,4 +41,4 @@ export default [ files: ['test/**/*.js', 'test/**/*.jsx'], ...eslintConfigPrettier, }, -]; +]); diff --git a/eslint.ts.config.base.mjs b/eslint.ts.config.base.mjs index 2af98f40be..095a55337b 100644 --- a/eslint.ts.config.base.mjs +++ b/eslint.ts.config.base.mjs @@ -1,55 +1,57 @@ +import { defineConfig } from 'eslint/config'; import eslint from '@eslint/js'; import tseslint from 'typescript-eslint'; import eslintConfigPrettier from 'eslint-config-prettier'; -export default (tsconfigRootDir, files = ['**/*.ts'], project = true) => [ - { - files, - ...eslint.configs.recommended, - }, - ...tseslint.configs.recommendedTypeChecked.map((config) => ({ - files, - ...config, - })), - ...tseslint.configs.stylisticTypeChecked.map((config) => ({ - files, - ...config, - })), - { - files, - languageOptions: { - parserOptions: { - project, - tsconfigRootDir, +export default (tsconfigRootDir, files = ['**/*.ts'], project = true) => + defineConfig([ + { + files, + ...eslint.configs.recommended, + }, + ...tseslint.configs.recommendedTypeChecked.map((config) => ({ + files, + ...config, + })), + ...tseslint.configs.stylisticTypeChecked.map((config) => ({ + files, + ...config, + })), + { + files, + languageOptions: { + parserOptions: { + project, + tsconfigRootDir, + }, }, }, - }, - { - files, - ...eslintConfigPrettier, - }, - { - files, - rules: { - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/prefer-optional-chain': 'off', - '@typescript-eslint/no-base-to-string': 'off', - '@typescript-eslint/consistent-indexed-object-style': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/consistent-type-definitions': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/prefer-for-of': 'off', - '@typescript-eslint/non-nullable-type-assertion-style': 'off', - '@typescript-eslint/class-literal-property-style': 'off', - '@typescript-eslint/no-redundant-type-constituents': 'off', - '@typescript-eslint/prefer-string-starts-ends-with': 'off', - '@typescript-eslint/no-duplicate-type-constituents': 'off', - '@typescript-eslint/array-type': 'off', - '@typescript-eslint/prefer-function-type': 'off', + { + files, + ...eslintConfigPrettier, + }, + { + files, + rules: { + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/prefer-optional-chain': 'off', + '@typescript-eslint/no-base-to-string': 'off', + '@typescript-eslint/consistent-indexed-object-style': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/consistent-type-definitions': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/prefer-for-of': 'off', + '@typescript-eslint/non-nullable-type-assertion-style': 'off', + '@typescript-eslint/class-literal-property-style': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', + '@typescript-eslint/prefer-string-starts-ends-with': 'off', + '@typescript-eslint/no-duplicate-type-constituents': 'off', + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/prefer-function-type': 'off', + }, }, - }, -]; + ]); diff --git a/eslint.ts.jest.config.base.mjs b/eslint.ts.jest.config.base.mjs index fd916a03f2..d3ebd7be20 100644 --- a/eslint.ts.jest.config.base.mjs +++ b/eslint.ts.jest.config.base.mjs @@ -1,64 +1,66 @@ +import { defineConfig } from 'eslint/config'; import eslint from '@eslint/js'; import tseslint from 'typescript-eslint'; import jest from 'eslint-plugin-jest'; import eslintConfigPrettier from 'eslint-config-prettier'; -export default (tsconfigRootDir) => [ - { - files: ['test/**/*.ts'], - ...eslint.configs.recommended, - }, - ...tseslint.configs.recommendedTypeChecked.map((config) => ({ - files: ['test/**/*.ts'], - ...config, - })), - ...tseslint.configs.stylisticTypeChecked.map((config) => ({ - files: ['test/**/*.ts'], - ...config, - })), - { - files: ['test/**/*.ts'], - languageOptions: { - parserOptions: { - project: ['./tsconfig.test.json'], - tsconfigRootDir, +export default (tsconfigRootDir) => + defineConfig([ + { + files: ['test/**/*.ts'], + ...eslint.configs.recommended, + }, + ...tseslint.configs.recommendedTypeChecked.map((config) => ({ + files: ['test/**/*.ts'], + ...config, + })), + ...tseslint.configs.stylisticTypeChecked.map((config) => ({ + files: ['test/**/*.ts'], + ...config, + })), + { + files: ['test/**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.test.json'], + tsconfigRootDir, + }, }, }, - }, - { - files: ['test/**/*.ts'], - ...jest.configs['flat/recommended'], - }, - { - files: ['test/**/*.ts'], - ...jest.configs['jest/style'], - }, - { - files: ['test/**/*.ts'], - ...eslintConfigPrettier, - }, - { - files: ['test/**/*.ts'], - rules: { - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/prefer-optional-chain': 'off', - '@typescript-eslint/no-base-to-string': 'off', - '@typescript-eslint/consistent-indexed-object-style': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/consistent-type-definitions': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/prefer-for-of': 'off', - '@typescript-eslint/non-nullable-type-assertion-style': 'off', - '@typescript-eslint/class-literal-property-style': 'off', - '@typescript-eslint/no-redundant-type-constituents': 'off', - '@typescript-eslint/prefer-string-starts-ends-with': 'off', - '@typescript-eslint/no-duplicate-type-constituents': 'off', - '@typescript-eslint/array-type': 'off', - '@typescript-eslint/prefer-function-type': 'off', + { + files: ['test/**/*.ts'], + ...jest.configs['flat/recommended'], + }, + { + files: ['test/**/*.ts'], + ...jest.configs['jest/style'], + }, + { + files: ['test/**/*.ts'], + ...eslintConfigPrettier, + }, + { + files: ['test/**/*.ts'], + rules: { + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/prefer-optional-chain': 'off', + '@typescript-eslint/no-base-to-string': 'off', + '@typescript-eslint/consistent-indexed-object-style': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/consistent-type-definitions': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/prefer-for-of': 'off', + '@typescript-eslint/non-nullable-type-assertion-style': 'off', + '@typescript-eslint/class-literal-property-style': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', + '@typescript-eslint/prefer-string-starts-ends-with': 'off', + '@typescript-eslint/no-duplicate-type-constituents': 'off', + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/prefer-function-type': 'off', + }, }, - }, -]; + ]); diff --git a/eslint.ts.react.config.base.mjs b/eslint.ts.react.config.base.mjs index 110f1e8a21..bd7ae1b3b2 100644 --- a/eslint.ts.react.config.base.mjs +++ b/eslint.ts.react.config.base.mjs @@ -1,89 +1,91 @@ +import { defineConfig } from 'eslint/config'; import eslint from '@eslint/js'; import tseslint from 'typescript-eslint'; import react from 'eslint-plugin-react'; -import { fixupPluginRules } from '@eslint/compat'; -import eslintPluginReactHooks from 'eslint-plugin-react-hooks'; +import reactHooks from 'eslint-plugin-react-hooks'; import eslintConfigPrettier from 'eslint-config-prettier'; export default ( tsconfigRootDir, files = ['**/*.ts', '**/*.tsx'], project = true, -) => [ - { - files, - ...eslint.configs.recommended, - }, - ...tseslint.configs.recommendedTypeChecked.map((config) => ({ - files, - ...config, - })), - ...tseslint.configs.stylisticTypeChecked.map((config) => ({ - files, - ...config, - })), - { - files, - languageOptions: { - parserOptions: { - project, - tsconfigRootDir, +) => + defineConfig([ + { + files, + ...eslint.configs.recommended, + }, + ...tseslint.configs.recommendedTypeChecked.map((config) => ({ + files, + ...config, + })), + ...tseslint.configs.stylisticTypeChecked.map((config) => ({ + files, + ...config, + })), + { + files, + languageOptions: { + parserOptions: { + project, + tsconfigRootDir, + }, + }, + }, + { + files, + ...react.configs.flat.recommended, + }, + { + files, + settings: { + react: { + version: 'detect', + }, }, }, - }, - { - files, - ...react.configs.flat.recommended, - }, - { - files, - settings: { - react: { - version: 'detect', + { + files, + plugins: { + 'react-hooks': reactHooks, }, + extends: ['react-hooks/recommended-latest'], }, - }, - { - files, - plugins: { - 'react-hooks': fixupPluginRules(eslintPluginReactHooks), + { + files, + ...eslintConfigPrettier, }, - }, - { - files, - ...eslintConfigPrettier, - }, - { - files, - rules: { - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-misused-promises': [ - 'error', - { - checksVoidReturn: { - attributes: false, + { + files, + rules: { + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-misused-promises': [ + 'error', + { + checksVoidReturn: { + attributes: false, + }, }, - }, - ], - '@typescript-eslint/prefer-optional-chain': 'off', - '@typescript-eslint/no-base-to-string': 'off', - '@typescript-eslint/consistent-indexed-object-style': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/consistent-type-definitions': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/prefer-for-of': 'off', - '@typescript-eslint/non-nullable-type-assertion-style': 'off', - '@typescript-eslint/class-literal-property-style': 'off', - '@typescript-eslint/no-redundant-type-constituents': 'off', - '@typescript-eslint/prefer-string-starts-ends-with': 'off', - '@typescript-eslint/no-duplicate-type-constituents': 'off', - '@typescript-eslint/array-type': 'off', - '@typescript-eslint/prefer-function-type': 'off', - 'react/prop-types': 'off', + ], + '@typescript-eslint/prefer-optional-chain': 'off', + '@typescript-eslint/no-base-to-string': 'off', + '@typescript-eslint/consistent-indexed-object-style': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/consistent-type-definitions': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/prefer-for-of': 'off', + '@typescript-eslint/non-nullable-type-assertion-style': 'off', + '@typescript-eslint/class-literal-property-style': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', + '@typescript-eslint/prefer-string-starts-ends-with': 'off', + '@typescript-eslint/no-duplicate-type-constituents': 'off', + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/prefer-function-type': 'off', + 'react/prop-types': 'off', + }, }, - }, -]; + ]); diff --git a/eslint.ts.react.jest.config.base.mjs b/eslint.ts.react.jest.config.base.mjs index f0db2ab2fb..1c8d592426 100644 --- a/eslint.ts.react.jest.config.base.mjs +++ b/eslint.ts.react.jest.config.base.mjs @@ -1,85 +1,87 @@ +import { defineConfig } from 'eslint/config'; import eslint from '@eslint/js'; import tseslint from 'typescript-eslint'; import react from 'eslint-plugin-react'; -import { fixupPluginRules } from '@eslint/compat'; -import eslintPluginReactHooks from 'eslint-plugin-react-hooks'; +import reactHooks from 'eslint-plugin-react-hooks'; import jest from 'eslint-plugin-jest'; import eslintConfigPrettier from 'eslint-config-prettier'; -export default (tsconfigRootDir) => [ - { - files: ['test/**/*.ts', 'test/**/*.tsx'], - ...eslint.configs.recommended, - }, - ...tseslint.configs.recommendedTypeChecked.map((config) => ({ - files: ['test/**/*.ts', 'test/**/*.tsx'], - ...config, - })), - ...tseslint.configs.stylisticTypeChecked.map((config) => ({ - files: ['test/**/*.ts', 'test/**/*.tsx'], - ...config, - })), - { - files: ['test/**/*.ts', 'test/**/*.tsx'], - languageOptions: { - parserOptions: { - project: ['./tsconfig.test.json'], - tsconfigRootDir, +export default (tsconfigRootDir) => + defineConfig([ + { + files: ['test/**/*.ts', 'test/**/*.tsx'], + ...eslint.configs.recommended, + }, + ...tseslint.configs.recommendedTypeChecked.map((config) => ({ + files: ['test/**/*.ts', 'test/**/*.tsx'], + ...config, + })), + ...tseslint.configs.stylisticTypeChecked.map((config) => ({ + files: ['test/**/*.ts', 'test/**/*.tsx'], + ...config, + })), + { + files: ['test/**/*.ts', 'test/**/*.tsx'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.test.json'], + tsconfigRootDir, + }, + }, + }, + { + files: ['test/**/*.ts', 'test/**/*.tsx'], + ...react.configs.flat.recommended, + }, + { + files: ['test/**/*.ts', 'test/**/*.tsx'], + settings: { + react: { + version: 'detect', + }, }, }, - }, - { - files: ['test/**/*.ts', 'test/**/*.tsx'], - ...react.configs.flat.recommended, - }, - { - files: ['test/**/*.ts', 'test/**/*.tsx'], - settings: { - react: { - version: 'detect', + { + files: ['test/**/*.ts', 'test/**/*.tsx'], + plugins: { + 'react-hooks': reactHooks, }, + extends: ['react-hooks/recommended-latest'], }, - }, - { - files: ['test/**/*.ts', 'test/**/*.tsx'], - plugins: { - 'react-hooks': fixupPluginRules(eslintPluginReactHooks), + { + files: ['test/**/*.ts', 'test/**/*.tsx'], + ...jest.configs['flat/recommended'], }, - }, - { - files: ['test/**/*.ts', 'test/**/*.tsx'], - ...jest.configs['flat/recommended'], - }, - { - files: ['test/**/*.ts', 'test/**/*.tsx'], - ...jest.configs['jest/style'], - }, - { - files: ['test/**/*.ts', 'test/**/*.tsx'], - ...eslintConfigPrettier, - }, - { - files: ['test/**/*.ts', 'test/**/*.tsx'], - rules: { - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/prefer-optional-chain': 'off', - '@typescript-eslint/no-base-to-string': 'off', - '@typescript-eslint/consistent-indexed-object-style': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/consistent-type-definitions': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/prefer-for-of': 'off', - '@typescript-eslint/non-nullable-type-assertion-style': 'off', - '@typescript-eslint/class-literal-property-style': 'off', - '@typescript-eslint/no-redundant-type-constituents': 'off', - '@typescript-eslint/prefer-string-starts-ends-with': 'off', - '@typescript-eslint/no-duplicate-type-constituents': 'off', - '@typescript-eslint/array-type': 'off', - '@typescript-eslint/prefer-function-type': 'off', + { + files: ['test/**/*.ts', 'test/**/*.tsx'], + ...jest.configs['jest/style'], + }, + { + files: ['test/**/*.ts', 'test/**/*.tsx'], + ...eslintConfigPrettier, + }, + { + files: ['test/**/*.ts', 'test/**/*.tsx'], + rules: { + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/prefer-optional-chain': 'off', + '@typescript-eslint/no-base-to-string': 'off', + '@typescript-eslint/consistent-indexed-object-style': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/consistent-type-definitions': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/prefer-for-of': 'off', + '@typescript-eslint/non-nullable-type-assertion-style': 'off', + '@typescript-eslint/class-literal-property-style': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', + '@typescript-eslint/prefer-string-starts-ends-with': 'off', + '@typescript-eslint/no-duplicate-type-constituents': 'off', + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/prefer-function-type': 'off', + }, }, - }, -]; + ]); diff --git a/package.json b/package.json index e2d4f101ea..aec9b3dd21 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "devDependencies": { "@babel/core": "^7.28.4", "@changesets/cli": "^2.29.7", - "@eslint/compat": "^1.4.0", "@eslint/js": "^9.37.0", "eslint": "^9.37.0", "eslint-config-prettier": "^10.1.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 272d12fc0a..ce0245972b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,9 +25,6 @@ importers: '@changesets/cli': specifier: ^2.29.7 version: 2.29.7(@types/node@22.18.10) - '@eslint/compat': - specifier: ^1.4.0 - version: 1.4.0(eslint@9.37.0) '@eslint/js': specifier: ^9.37.0 version: 9.37.0 @@ -3862,15 +3859,6 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@1.4.0': - resolution: {integrity: sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.40 || 9 - peerDependenciesMeta: - eslint: - optional: true - '@eslint/config-array@0.21.0': resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -11846,12 +11834,6 @@ snapshots: '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.4.0(eslint@9.37.0)': - dependencies: - '@eslint/core': 0.16.0 - optionalDependencies: - eslint: 9.37.0 - '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 From eb544f4116f1d7dd42ba04ce86351f007dcc804f Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Tue, 14 Oct 2025 10:17:35 -0400 Subject: [PATCH 3/4] Update --- eslint.js.react.jest.config.base.mjs | 5 +---- eslint.ts.react.config.base.mjs | 5 +---- eslint.ts.react.jest.config.base.mjs | 5 +---- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/eslint.js.react.jest.config.base.mjs b/eslint.js.react.jest.config.base.mjs index 9b615fb4bb..a07ab5a7f2 100644 --- a/eslint.js.react.jest.config.base.mjs +++ b/eslint.js.react.jest.config.base.mjs @@ -24,10 +24,7 @@ export default defineConfig([ }, { files: ['test/**/*.js', 'test/**/*.jsx'], - plugins: { - 'react-hooks': reactHooks, - }, - extends: ['react-hooks/recommended'], + ...reactHooks.configs.flat.recommended, }, { files: ['test/**/*.js', 'test/**/*.jsx'], diff --git a/eslint.ts.react.config.base.mjs b/eslint.ts.react.config.base.mjs index bd7ae1b3b2..5778aaacc3 100644 --- a/eslint.ts.react.config.base.mjs +++ b/eslint.ts.react.config.base.mjs @@ -46,10 +46,7 @@ export default ( }, { files, - plugins: { - 'react-hooks': reactHooks, - }, - extends: ['react-hooks/recommended-latest'], + ...reactHooks.configs.flat.recommended, }, { files, diff --git a/eslint.ts.react.jest.config.base.mjs b/eslint.ts.react.jest.config.base.mjs index 1c8d592426..3c6a99b058 100644 --- a/eslint.ts.react.jest.config.base.mjs +++ b/eslint.ts.react.jest.config.base.mjs @@ -43,10 +43,7 @@ export default (tsconfigRootDir) => }, { files: ['test/**/*.ts', 'test/**/*.tsx'], - plugins: { - 'react-hooks': reactHooks, - }, - extends: ['react-hooks/recommended-latest'], + ...reactHooks.configs.flat.recommended, }, { files: ['test/**/*.ts', 'test/**/*.tsx'], From 6784dbb8c575b780e02d49cc2663cf052ede0371 Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Tue, 14 Oct 2025 10:50:32 -0400 Subject: [PATCH 4/4] Update --- .../demo/src/DevTools.tsx | 1 + packages/redux-devtools-inspector-monitor/demo/src/DevTools.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/redux-devtools-inspector-monitor-test-tab/demo/src/DevTools.tsx b/packages/redux-devtools-inspector-monitor-test-tab/demo/src/DevTools.tsx index 8b68a2b634..4dae506d00 100644 --- a/packages/redux-devtools-inspector-monitor-test-tab/demo/src/DevTools.tsx +++ b/packages/redux-devtools-inspector-monitor-test-tab/demo/src/DevTools.tsx @@ -36,5 +36,6 @@ export const getDevTools = (location: { search: string }) => export function ConnectedDevTools() { const location = useLocation(); const DevTools = getDevTools(location); + // eslint-disable-next-line react-hooks/static-components return ; } diff --git a/packages/redux-devtools-inspector-monitor/demo/src/DevTools.tsx b/packages/redux-devtools-inspector-monitor/demo/src/DevTools.tsx index 38d248e852..1690be2be9 100644 --- a/packages/redux-devtools-inspector-monitor/demo/src/DevTools.tsx +++ b/packages/redux-devtools-inspector-monitor/demo/src/DevTools.tsx @@ -47,5 +47,6 @@ export const getDevTools = (location: { search: string }) => export function ConnectedDevTools() { const location = useLocation(); const DevTools = getDevTools(location); + // eslint-disable-next-line react-hooks/static-components return ; }