From 32bc254040c162e31dc344da36090f60e7266d94 Mon Sep 17 00:00:00 2001 From: Matiss Janis Aboltins Date: Fri, 12 Dec 2025 22:40:38 +0000 Subject: [PATCH] Lint: port react and import rules from eslint to oxc (#6312) * Enforce JSX file extensions for React components - Update eslint config to enforce .jsx/.tsx extensions for files containing JSX - Convert docs package JS files to JSX where they contain React code - Fix unstable nested components in CrossoverGraph and NetWorthGraph - Update oxlint configuration - Update e2e fixtures * Fix: Rename react-hooks/exhaustive-deps to react/exhaustive-deps Co-authored-by: matiss * Enhance ESLint configuration and update import rules * Refactor ESLint configuration to enhance import order rules and add eslint-plugin-import * Fix ESLint directive comments in API files to use correct syntax * Fix * Fix ESLint directive comments and update import/extensions rule in configuration * Refactor ESLint configuration to enforce JSX extension rules and improve code clarity * Update ESLint configuration: disable 'import/no-unresolved' rule and remove obsolete .oxlintrc.json file --------- Co-authored-by: Cursor Agent --- .oxlintrc.json | 74 ++++++- eslint.config.mjs | 136 +----------- package.json | 2 - packages/desktop-client/playwright.config.ts | 1 - .../src/browser-preload.browser.js | 1 - .../desktop-client/src/components/Modals.tsx | 2 +- .../reports/graphs/CrossoverGraph.tsx | 2 +- .../reports/graphs/NetWorthGraph.tsx | 2 +- packages/desktop-electron/beforePackHook.ts | 2 +- packages/desktop-electron/e2e/fixtures.ts | 2 +- .../desktop-electron/playwright.config.ts | 1 - .../docs/docs/api/{APIList.js => APIList.jsx} | 0 .../docs/docs/api/{types.js => types.jsx} | 0 .../HomepageFeatures/{index.js => index.jsx} | 0 .../docs/src/pages/{index.js => index.jsx} | 10 +- .../src/theme/Layout/{index.js => index.jsx} | 0 packages/loot-core/vite.api.config.ts | 1 - packages/loot-core/vite.desktop.config.ts | 1 - upcoming-release-notes/6312.md | 6 + yarn.lock | 195 ++---------------- 20 files changed, 107 insertions(+), 331 deletions(-) rename packages/docs/docs/api/{APIList.js => APIList.jsx} (100%) rename packages/docs/docs/api/{types.js => types.jsx} (100%) rename packages/docs/src/components/HomepageFeatures/{index.js => index.jsx} (100%) rename packages/docs/src/pages/{index.js => index.jsx} (99%) rename packages/docs/src/theme/Layout/{index.js => index.jsx} (100%) create mode 100644 upcoming-release-notes/6312.md diff --git a/.oxlintrc.json b/.oxlintrc.json index 0186281c46..c368a4a460 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -2,12 +2,67 @@ "$schema": "./node_modules/oxlint/configuration_schema.json", "plugins": ["react", "typescript", "import", "jsx-a11y"], "rules": { - "jsx-a11y/no-autofocus": ["warn", { "ignoreNonDOM": true }], - // TODO fix all these and re-enable "jsx-a11y/click-events-have-key-events": "off", "jsx-a11y/prefer-tag-over-role": "off", "jsx-a11y/tabindex-no-positive": "off", + + // Keep these rules + "no-var": "warn", + + // JSX A11y rules + "jsx-a11y/no-autofocus": ["warn", { "ignoreNonDOM": true }], + + // Import rules + "import/first": "error", + "import/no-amd": "error", + "import/no-default-export": "warn", + "import/no-webpack-loader-syntax": "error", + "import/no-useless-path-segments": "warn", + "import/no-unresolved": "warn", + "import/no-unused-modules": "warn", + "import/no-duplicates": [ + "warn", + { + "prefer-inline": true, + }, + ], + + // React rules + "react/exhaustive-deps": [ + "warn", + { + "additionalHooks": "(useQuery|useEffectAfterMount)", + }, + ], + "react/jsx-curly-brace-presence": "warn", + "react/jsx-filename-extension": [ + "warn", + { + "extensions": [".jsx", ".tsx"], + "allow": "as-needed", + }, + ], + "react/jsx-no-comment-textnodes": "warn", + "react/jsx-no-duplicate-props": "warn", + "react/jsx-no-target-blank": "warn", + "react/jsx-no-undef": "error", + "react/jsx-no-useless-fragment": "warn", + "react/jsx-pascal-case": [ + "warn", + { + "allowAllCaps": true, + "ignore": [], + }, + ], + "react/no-danger-with-children": "warn", + "react/no-direct-mutation-state": "warn", + "react/no-is-mounted": "warn", + "react/no-unstable-nested-components": "warn", + "react/require-render-return": "error", + "react/rules-of-hooks": "error", + "react/self-closing-comp": "warn", + "react/style-prop-object": "warn", }, "overrides": [ { @@ -59,8 +114,21 @@ "packages/desktop-client/src/hooks/useQuery.ts", ], "rules": { - "react-hooks/exhaustive-deps": "off", + "react/exhaustive-deps": "off", }, }, + + { + "files": [ + "packages/docs/**/*", // TODO: fix these issues + "packages/api/migrations/*", + "packages/loot-core/migrations/*", + "packages/sync-server/src/app-gocardless/banks/*.js", + "*.config.{ts,mts,mjs}", + ], + "rules": { + "import/no-default-export": "off", + } + } ] } diff --git a/eslint.config.mjs b/eslint.config.mjs index 3a3a207c25..aa30696714 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -3,8 +3,6 @@ import { defineConfig } from 'eslint/config'; import pluginImport from 'eslint-plugin-import'; import pluginJSXA11y from 'eslint-plugin-jsx-a11y'; import oxlint from 'eslint-plugin-oxlint'; -import pluginReact from 'eslint-plugin-react'; -import pluginReactHooks from 'eslint-plugin-react-hooks'; import pluginTypescriptPaths from 'eslint-plugin-typescript-paths'; import globals from 'globals'; import pluginTypescript from 'typescript-eslint'; @@ -150,8 +148,6 @@ export default defineConfig( }, }, }, - pluginReact.configs.flat.recommended, - pluginReact.configs.flat['jsx-runtime'], pluginTypescript.configs.recommended, pluginImport.flatConfigs.recommended, { @@ -167,7 +163,6 @@ export default defineConfig( files: ['**/*.{js,ts,jsx,tsx,mjs,mts}'], plugins: { 'jsx-a11y': pluginJSXA11y, - 'react-hooks': pluginReactHooks, }, rules: { // http://eslint.org/docs/rules/ @@ -318,11 +313,7 @@ export default defineConfig( 'getter-return': 'warn', - // https://github.com/benmosher/eslint-plugin-import/tree/master/docs/rules - 'import/first': 'error', - 'import/no-amd': 'error', - 'import/no-anonymous-default-export': 'warn', - 'import/no-webpack-loader-syntax': 'error', + 'import/no-unresolved': 'off', 'import/extensions': [ 'warn', 'never', @@ -330,13 +321,6 @@ export default defineConfig( json: 'always', }, ], - 'import/no-useless-path-segments': 'warn', - 'import/no-duplicates': [ - 'warn', - { - 'prefer-inline': true, - }, - ], 'import/order': [ 'warn', { @@ -367,53 +351,6 @@ export default defineConfig( }, ], - // https://github.com/yannickcr/eslint-plugin-react/tree/master/docs/rules - 'react/forbid-foreign-prop-types': [ - 'warn', - { - allowInPropTypes: true, - }, - ], - 'react/jsx-no-comment-textnodes': 'warn', - 'react/jsx-no-duplicate-props': 'warn', - 'react/jsx-no-target-blank': 'warn', - 'react/jsx-no-undef': 'error', - 'react/jsx-pascal-case': [ - 'warn', - { - allowAllCaps: true, - ignore: [], - }, - ], - 'react/no-danger-with-children': 'warn', - // Disabled because of undesirable warnings - // See https://github.com/facebook/create-react-app/issues/5204 for - // blockers until its re-enabled - // 'react/no-deprecated': 'warn', - 'react/no-direct-mutation-state': 'warn', - 'react/no-is-mounted': 'warn', - 'react/no-typos': 'error', - 'react/require-render-return': 'error', - 'react/style-prop-object': 'warn', - 'react/jsx-no-useless-fragment': 'warn', - 'react/self-closing-comp': 'warn', - 'react/jsx-filename-extension': [ - 'warn', - { - extensions: ['.jsx', '.tsx'], - allow: 'as-needed', - }, - ], - 'react/no-unstable-nested-components': [ - 'warn', - { - allowAsProps: true, - customValidators: ['formatter'], - }, - ], - // Don't need this as we're using TypeScript - 'react/prop-types': 'off', - // https://github.com/evcohen/eslint-plugin-jsx-a11y/tree/master/docs/rules 'jsx-a11y/alt-text': 'warn', 'jsx-a11y/anchor-has-content': 'warn', @@ -443,15 +380,6 @@ export default defineConfig( 'jsx-a11y/role-supports-aria-props': 'warn', 'jsx-a11y/scope': 'warn', - // https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks - 'react-hooks/rules-of-hooks': 'error', - 'react-hooks/exhaustive-deps': [ - 'warn', - { - additionalHooks: '(useQuery|useEffectAfterMount)', - }, - ], - 'actual/typography': 'warn', 'actual/prefer-if-statement': 'warn', 'actual/prefer-logger-over-console': 'error', @@ -474,10 +402,6 @@ export default defineConfig( // https://github.com/eslint/eslint/issues/16953 'no-loop-func': 'off', - // TODO: re-enable these rules - 'react/react-in-jsx-scope': 'off', - 'no-var': 'warn', - 'react/jsx-curly-brace-presence': 'warn', 'object-shorthand': ['warn', 'properties'], 'no-restricted-syntax': [ @@ -561,7 +485,6 @@ export default defineConfig( 'prefer-spread': 'off', '@typescript-eslint/no-empty-function': 'off', '@typescript-eslint/no-require-imports': 'off', - 'import/no-default-export': 'warn', }, }, { @@ -593,19 +516,11 @@ export default defineConfig( // 'tsc' already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/477) 'no-undef': 'off', - // TypeScript already handles these (https://typescript-eslint.io/troubleshooting/typed-linting/performance/#eslint-plugin-import) - 'import/named': 'off', - 'import/namespace': 'off', - 'import/default': 'off', - 'import/no-named-as-default-member': 'off', - 'import/no-unresolved': 'off', - // Add TypeScript specific rules (and turn off ESLint equivalents) '@typescript-eslint/consistent-type-assertions': 'warn', 'no-array-constructor': 'off', '@typescript-eslint/no-array-constructor': 'warn', 'no-redeclare': 'off', - '@typescript-eslint/no-redeclare': 'warn', 'no-use-before-define': 'off', '@typescript-eslint/no-use-before-define': [ @@ -680,48 +595,6 @@ export default defineConfig( ], }, }, - { - files: [ - 'packages/loot-core/src/types/**/*', - 'packages/loot-core/src/client/state-types/**/*', - '**/icons/**/*', - '**/{mocks,__mocks__}/**/*', - // can't correctly resolve usages - '**/*.{testing,electron,browser,web,api}.ts', - ], - - rules: { - 'import/no-unused-modules': 'off', - }, - }, - { - files: ['packages/api/migrations/*', 'packages/loot-core/migrations/*'], - - rules: { - 'import/no-default-export': 'off', - }, - }, - { - files: ['packages/api/index.ts'], - rules: { - 'import/no-unresolved': 'off', - }, - }, - - // Allow configuring vitest with default exports (recommended as per vitest docs) - { - files: [ - '**/vitest.config.{ts,mts}', - '**/vitest.web.config.ts', - '**/vite.config.{ts,mts}', - 'eslint.config.mjs', - ], - rules: { - 'import/no-anonymous-default-export': 'off', - 'import/no-default-export': 'off', - }, - }, - { files: [ 'eslint.config.mjs', @@ -756,13 +629,6 @@ export default defineConfig( 'actual/typography': 'off', }, }, - { - files: ['packages/sync-server/src/app-gocardless/banks/*.js'], - rules: { - 'import/no-anonymous-default-export': 'off', - 'import/no-default-export': 'off', - }, - }, // Disable ESLint rules that are already covered by oxlint // This must be at the end to override previous rule configurations ...oxlint.configs['flat/recommended'], diff --git a/package.json b/package.json index 0090bbc904..1e546ac079 100644 --- a/package.json +++ b/package.json @@ -69,8 +69,6 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-oxlint": "^1.30.0", - "eslint-plugin-react": "^7.37.5", - "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-typescript-paths": "^0.0.33", "globals": "^16.5.0", "html-to-image": "^1.11.13", diff --git a/packages/desktop-client/playwright.config.ts b/packages/desktop-client/playwright.config.ts index 40804157f1..80fb472591 100644 --- a/packages/desktop-client/playwright.config.ts +++ b/packages/desktop-client/playwright.config.ts @@ -1,6 +1,5 @@ import { defineConfig } from '@playwright/test'; -// eslint-disable-next-line import/no-default-export export default defineConfig({ timeout: 60000, // 60 seconds retries: 1, diff --git a/packages/desktop-client/src/browser-preload.browser.js b/packages/desktop-client/src/browser-preload.browser.js index 449253ccef..09219fe69f 100644 --- a/packages/desktop-client/src/browser-preload.browser.js +++ b/packages/desktop-client/src/browser-preload.browser.js @@ -1,5 +1,4 @@ import { initBackend as initSQLBackend } from 'absurd-sql/dist/indexeddb-main-thread'; -// eslint-disable-next-line import/no-unresolved import { registerSW } from 'virtual:pwa-register'; import * as Platform from 'loot-core/shared/platform'; diff --git a/packages/desktop-client/src/components/Modals.tsx b/packages/desktop-client/src/components/Modals.tsx index 379d68ac31..96533f9c64 100644 --- a/packages/desktop-client/src/components/Modals.tsx +++ b/packages/desktop-client/src/components/Modals.tsx @@ -411,6 +411,6 @@ export function Modals() { )); // fragment needed per TS types - // eslint-disable-next-line react/jsx-no-useless-fragment + // oxlint-disable-next-line react/jsx-no-useless-fragment return <>{modals}; } diff --git a/packages/desktop-client/src/components/reports/graphs/CrossoverGraph.tsx b/packages/desktop-client/src/components/reports/graphs/CrossoverGraph.tsx index a277debcf8..8bfc654902 100644 --- a/packages/desktop-client/src/components/reports/graphs/CrossoverGraph.tsx +++ b/packages/desktop-client/src/components/reports/graphs/CrossoverGraph.tsx @@ -69,7 +69,7 @@ export function CrossoverGraph({ payload?: PayloadItem[]; }; - // eslint-disable-next-line react/no-unstable-nested-components + // oxlint-disable-next-line react/no-unstable-nested-components const CustomTooltip = ({ active, payload }: CustomTooltipProps) => { if (active && payload && payload.length) { return ( diff --git a/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.tsx b/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.tsx index 46b5666875..1a4dae129b 100644 --- a/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.tsx +++ b/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.tsx @@ -115,7 +115,7 @@ export function NetWorthGraph({ payload?: PayloadItem[]; }; - // eslint-disable-next-line react/no-unstable-nested-components + // oxlint-disable-next-line react/no-unstable-nested-components const CustomTooltip = ({ active, payload }: CustomTooltipProps) => { if (active && payload && payload.length) { return ( diff --git a/packages/desktop-electron/beforePackHook.ts b/packages/desktop-electron/beforePackHook.ts index fa9bd755e4..3da026b997 100644 --- a/packages/desktop-electron/beforePackHook.ts +++ b/packages/desktop-electron/beforePackHook.ts @@ -43,5 +43,5 @@ const beforePackHook = async (context: AfterPackContext) => { } }; -// eslint-disable-next-line import/no-default-export +// oxlint-disable-next-line import/no-default-export export default beforePackHook; diff --git a/packages/desktop-electron/e2e/fixtures.ts b/packages/desktop-electron/e2e/fixtures.ts index ff4f8478ec..9ad72752dc 100644 --- a/packages/desktop-electron/e2e/fixtures.ts +++ b/packages/desktop-electron/e2e/fixtures.ts @@ -1,4 +1,4 @@ -/* eslint-disable react-hooks/rules-of-hooks */ +/* oxlint-disable react-hooks/rules-of-hooks */ import path from 'node:path'; import { diff --git a/packages/desktop-electron/playwright.config.ts b/packages/desktop-electron/playwright.config.ts index 66309cbeb2..fb47467858 100644 --- a/packages/desktop-electron/playwright.config.ts +++ b/packages/desktop-electron/playwright.config.ts @@ -1,6 +1,5 @@ import { defineConfig } from '@playwright/test'; -// eslint-disable-next-line import/no-default-export export default defineConfig({ timeout: 60000, // 60 seconds retries: 1, diff --git a/packages/docs/docs/api/APIList.js b/packages/docs/docs/api/APIList.jsx similarity index 100% rename from packages/docs/docs/api/APIList.js rename to packages/docs/docs/api/APIList.jsx diff --git a/packages/docs/docs/api/types.js b/packages/docs/docs/api/types.jsx similarity index 100% rename from packages/docs/docs/api/types.js rename to packages/docs/docs/api/types.jsx diff --git a/packages/docs/src/components/HomepageFeatures/index.js b/packages/docs/src/components/HomepageFeatures/index.jsx similarity index 100% rename from packages/docs/src/components/HomepageFeatures/index.js rename to packages/docs/src/components/HomepageFeatures/index.jsx diff --git a/packages/docs/src/pages/index.js b/packages/docs/src/pages/index.jsx similarity index 99% rename from packages/docs/src/pages/index.js rename to packages/docs/src/pages/index.jsx index 072fea0cd8..f709f390c6 100644 --- a/packages/docs/src/pages/index.js +++ b/packages/docs/src/pages/index.jsx @@ -382,9 +382,9 @@ const icons = { - + - + ), hierarchy1: ( @@ -394,9 +394,9 @@ const icons = { ), shieldLock: ( - - - + + + ), play: ( diff --git a/packages/docs/src/theme/Layout/index.js b/packages/docs/src/theme/Layout/index.jsx similarity index 100% rename from packages/docs/src/theme/Layout/index.js rename to packages/docs/src/theme/Layout/index.jsx diff --git a/packages/loot-core/vite.api.config.ts b/packages/loot-core/vite.api.config.ts index 36f960175e..e302ad2c05 100644 --- a/packages/loot-core/vite.api.config.ts +++ b/packages/loot-core/vite.api.config.ts @@ -4,7 +4,6 @@ import { visualizer } from 'rollup-plugin-visualizer'; import { defineConfig } from 'vite'; import peggyLoader from 'vite-plugin-peggy-loader'; -// eslint-disable-next-line import/no-default-export export default defineConfig(({ mode }) => { const outDir = path.resolve(__dirname, '../api/app'); const crdtDir = path.resolve(__dirname, '../crdt'); diff --git a/packages/loot-core/vite.desktop.config.ts b/packages/loot-core/vite.desktop.config.ts index dbd46f022e..3dc4a5f93f 100644 --- a/packages/loot-core/vite.desktop.config.ts +++ b/packages/loot-core/vite.desktop.config.ts @@ -4,7 +4,6 @@ import { visualizer } from 'rollup-plugin-visualizer'; import { defineConfig } from 'vite'; import peggyLoader from 'vite-plugin-peggy-loader'; -// eslint-disable-next-line import/no-default-export export default defineConfig(({ mode }) => { const outDir = path.resolve(__dirname, 'lib-dist/electron'); const crdtDir = path.resolve(__dirname, '../crdt'); diff --git a/upcoming-release-notes/6312.md b/upcoming-release-notes/6312.md new file mode 100644 index 0000000000..12dde6b995 --- /dev/null +++ b/upcoming-release-notes/6312.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [MatissJanis] +--- + +Port react rules from eslint to oxlint diff --git a/yarn.lock b/yarn.lock index 82d15966f6..b071563914 100644 --- a/yarn.lock +++ b/yarn.lock @@ -785,7 +785,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": version: 7.28.5 resolution: "@babel/parser@npm:7.28.5" dependencies: @@ -9989,8 +9989,6 @@ __metadata: eslint-plugin-import: "npm:^2.32.0" eslint-plugin-jsx-a11y: "npm:^6.10.2" eslint-plugin-oxlint: "npm:^1.30.0" - eslint-plugin-react: "npm:^7.37.5" - eslint-plugin-react-hooks: "npm:^7.0.1" eslint-plugin-typescript-paths: "npm:^0.0.33" globals: "npm:^16.5.0" html-to-image: "npm:^1.11.13" @@ -10418,20 +10416,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlast@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlast@npm:1.2.5" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10/7dffcc665aa965718ad6de7e17ac50df0c5e38798c0a5bf9340cf24feb8594df6ec6f3fcbe714c1577728a1b18b5704b15669474b27bceeca91ef06ce2a23c31 - languageName: node - linkType: hard - "array.prototype.findlastindex@npm:^1.2.6": version: 1.2.6 resolution: "array.prototype.findlastindex@npm:1.2.6" @@ -10471,19 +10455,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.4": - version: 1.1.4 - resolution: "array.prototype.tosorted@npm:1.1.4" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.3" - es-errors: "npm:^1.3.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10/874694e5d50e138894ff5b853e639c29b0aa42bbd355acda8e8e9cd337f1c80565f21edc15e8c727fa4c0877fd9d8783c575809e440cc4d2d19acaa048bf967d - languageName: node - linkType: hard - "arraybuffer.prototype.slice@npm:^1.0.4": version: 1.0.4 resolution: "arraybuffer.prototype.slice@npm:1.0.4" @@ -14363,7 +14334,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0": +"es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0": version: 1.24.0 resolution: "es-abstract@npm:1.24.0" dependencies: @@ -14456,30 +14427,6 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.2.1": - version: 1.2.1 - resolution: "es-iterator-helpers@npm:1.2.1" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.6" - es-errors: "npm:^1.3.0" - es-set-tostringtag: "npm:^2.0.3" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.6" - globalthis: "npm:^1.0.4" - gopd: "npm:^1.2.0" - has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - internal-slot: "npm:^1.1.0" - iterator.prototype: "npm:^1.1.4" - safe-array-concat: "npm:^1.1.3" - checksum: 10/802e0e8427a05ff4a5b0c70c7fdaaeff37cdb81a28694aeb7bfb831c6ab340d8f3deeb67b96732ff9e9699ea240524d5ea8a9a6a335fcd15aa3983b27b06113f - languageName: node - linkType: hard - "es-module-lexer@npm:^1.2.1, es-module-lexer@npm:^1.7.0": version: 1.7.0 resolution: "es-module-lexer@npm:1.7.0" @@ -14496,7 +14443,7 @@ __metadata: languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.3, es-set-tostringtag@npm:^2.1.0": +"es-set-tostringtag@npm:^2.1.0": version: 2.1.0 resolution: "es-set-tostringtag@npm:2.1.0" dependencies: @@ -14885,49 +14832,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^7.0.1": - version: 7.0.1 - resolution: "eslint-plugin-react-hooks@npm:7.0.1" - dependencies: - "@babel/core": "npm:^7.24.4" - "@babel/parser": "npm:^7.24.4" - hermes-parser: "npm:^0.25.1" - zod: "npm:^3.25.0 || ^4.0.0" - zod-validation-error: "npm:^3.5.0 || ^4.0.0" - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - checksum: 10/12e96c68d58c6588305fd17d660524a1ef1e872650ec591d5b138f059431290831c373d4b1c9ae8991fb25f96c43935497d2149678c027e65d0417d3d99ecc85 - languageName: node - linkType: hard - -"eslint-plugin-react@npm:^7.37.5": - version: 7.37.5 - resolution: "eslint-plugin-react@npm:7.37.5" - dependencies: - array-includes: "npm:^3.1.8" - array.prototype.findlast: "npm:^1.2.5" - array.prototype.flatmap: "npm:^1.3.3" - array.prototype.tosorted: "npm:^1.1.4" - doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.2.1" - estraverse: "npm:^5.3.0" - hasown: "npm:^2.0.2" - jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" - minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.9" - object.fromentries: "npm:^2.0.8" - object.values: "npm:^1.2.1" - prop-types: "npm:^15.8.1" - resolve: "npm:^2.0.0-next.5" - semver: "npm:^6.3.1" - string.prototype.matchall: "npm:^4.0.12" - string.prototype.repeat: "npm:^1.0.0" - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 10/ee1bd4e0ec64f29109d5a625bb703d179c82e0159c86c3f1b52fc1209d2994625a137dae303c333fb308a2e38315e44066d5204998177e31974382f9fda25d5c - languageName: node - linkType: hard - "eslint-plugin-typescript-paths@npm:^0.0.33": version: 0.0.33 resolution: "eslint-plugin-typescript-paths@npm:0.0.33" @@ -16139,7 +16043,7 @@ __metadata: languageName: node linkType: hard -"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": +"get-proto@npm:^1.0.1": version: 1.0.1 resolution: "get-proto@npm:1.0.1" dependencies: @@ -16844,22 +16748,6 @@ __metadata: languageName: node linkType: hard -"hermes-estree@npm:0.25.1": - version: 0.25.1 - resolution: "hermes-estree@npm:0.25.1" - checksum: 10/7b1eca98b264a25632064cffa5771360d30cf452e77db1e191f9913ee45cf78c292b2dbca707e92fb71b0870abb97e94b506a5ab80abd96ba237fee169b601fe - languageName: node - linkType: hard - -"hermes-parser@npm:^0.25.1": - version: 0.25.1 - resolution: "hermes-parser@npm:0.25.1" - dependencies: - hermes-estree: "npm:0.25.1" - checksum: 10/805efc05691420f236654349872c70731121791fa54de521c7ee51059eae34f84dd19f22ee846741dcb60372f8fb5335719b96b4ecb010d2aed7d872f2eff9cc - languageName: node - linkType: hard - "history@npm:^4.9.0": version: 4.10.1 resolution: "history@npm:4.10.1" @@ -18305,20 +18193,6 @@ __metadata: languageName: node linkType: hard -"iterator.prototype@npm:^1.1.4": - version: 1.1.5 - resolution: "iterator.prototype@npm:1.1.5" - dependencies: - define-data-property: "npm:^1.1.4" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.6" - get-proto: "npm:^1.0.0" - has-symbols: "npm:^1.1.0" - set-function-name: "npm:^2.0.2" - checksum: 10/352bcf333f42189e65cc8cb2dcb94a5c47cf0a9110ce12aba788d405a980b5f5f3a06c79bf915377e1d480647169babd842ded0d898bed181bf6686e8e6823f6 - languageName: node - linkType: hard - "jackspeak@npm:^3.1.2": version: 3.4.3 resolution: "jackspeak@npm:3.4.3" @@ -18647,7 +18521,7 @@ __metadata: languageName: node linkType: hard -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": +"jsx-ast-utils@npm:^3.3.5": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" dependencies: @@ -21276,18 +21150,6 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.9": - version: 1.1.9 - resolution: "object.entries@npm:1.1.9" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.4" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.1.1" - checksum: 10/24163ab1e1e013796693fc5f5d349e8b3ac0b6a34a7edb6c17d3dd45c6a8854145780c57d302a82512c1582f63720f4b4779d6c1cfba12cbb1420b978802d8a3 - languageName: node - linkType: hard - "object.fromentries@npm:^2.0.8": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" @@ -24606,7 +24468,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.22.1, resolve@npm:^1.22.10, resolve@npm:^1.22.4": +"resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.22.1, resolve@npm:^1.22.10": version: 1.22.10 resolution: "resolve@npm:1.22.10" dependencies: @@ -24619,20 +24481,20 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^2.0.0-next.5": - version: 2.0.0-next.5 - resolution: "resolve@npm:2.0.0-next.5" +"resolve@npm:^1.22.4": + version: 1.22.11 + resolution: "resolve@npm:1.22.11" dependencies: - is-core-module: "npm:^2.13.0" + is-core-module: "npm:^2.16.1" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10/2d6fd28699f901744368e6f2032b4268b4c7b9185fd8beb64f68c93ac6b22e52ae13560ceefc96241a665b985edf9ffd393ae26d2946a7d3a07b7007b7d51e79 + checksum: 10/e1b2e738884a08de03f97ee71494335eba8c2b0feb1de9ae065e82c48997f349f77a2b10e8817e147cf610bfabc4b1cb7891ee8eaf5bf80d4ad514a34c4fab0a languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" dependencies: @@ -24645,16 +24507,16 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": - version: 2.0.0-next.5 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" +"resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": + version: 1.22.11 + resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" dependencies: - is-core-module: "npm:^2.13.0" + is-core-module: "npm:^2.16.1" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10/05fa778de9d0347c8b889eb7a18f1f06bf0f801b0eb4610b4871a4b2f22e220900cf0ad525e94f990bb8d8921c07754ab2122c0c225ab4cdcea98f36e64fa4c2 + checksum: 10/fd342cad25e52cd6f4f3d1716e189717f2522bfd6641109fe7aa372f32b5714a296ed7c238ddbe7ebb0c1ddfe0b7f71c9984171024c97cf1b2073e3e40ff71a8 languageName: node linkType: hard @@ -26056,7 +25918,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.12, string.prototype.matchall@npm:^4.0.6": +"string.prototype.matchall@npm:^4.0.6": version: 4.0.12 resolution: "string.prototype.matchall@npm:4.0.12" dependencies: @@ -26089,16 +25951,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.repeat@npm:^1.0.0": - version: 1.0.0 - resolution: "string.prototype.repeat@npm:1.0.0" - dependencies: - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.17.5" - checksum: 10/4b1bd91b75fa8fdf0541625184ebe80e445a465ce4253c19c3bccd633898005dadae0f74b85ae72662a53aafb8035bf48f8f5c0755aec09bc106a7f13959d05e - languageName: node - linkType: hard - "string.prototype.trim@npm:^1.2.10": version: 1.2.10 resolution: "string.prototype.trim@npm:1.2.10" @@ -29156,15 +29008,6 @@ __metadata: languageName: node linkType: hard -"zod-validation-error@npm:^3.5.0 || ^4.0.0": - version: 4.0.2 - resolution: "zod-validation-error@npm:4.0.2" - peerDependencies: - zod: ^3.25.0 || ^4.0.0 - checksum: 10/5e35ca8ebb4602dcb526e122d7e9fca695c4a479bd97535f3400a732d49160f24f7213a9ed64986fc9dc3a2e8a6c4e1241ec0c4d8a4e3e69ea91a0328ded2192 - languageName: node - linkType: hard - "zod@npm:^3.23.8": version: 3.25.76 resolution: "zod@npm:3.25.76" @@ -29172,7 +29015,7 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.25.0 || ^4.0.0, zod@npm:^4.1.8": +"zod@npm:^4.1.8": version: 4.1.12 resolution: "zod@npm:4.1.12" checksum: 10/c5f04e6ac306515c4db6ef73cf7705f521c7a2107c8c8912416a0658d689f361db9bee829b0bf01ef4a22492f1065c5cbcdb523ce532606ac6792fd714f3c326