diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index e083adec44..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,30 +0,0 @@ -packages/api/app/bundle.api.js -packages/api/dist -packages/api/@types -packages/api/migrations - -packages/crdt/dist - -packages/desktop-client/bundle.browser.js -packages/desktop-client/build/ -packages/desktop-client/build-electron/ -packages/desktop-client/build-stats/ -packages/desktop-client/public/kcab/ -packages/desktop-client/public/data/ -packages/desktop-client/**/node_modules/* -packages/desktop-client/node_modules/ -packages/desktop-client/src/icons/**/* -packages/desktop-client/test-results/ -packages/desktop-client/playwright-report/ - -packages/desktop-electron/build/ -packages/desktop-electron/client-build/ -packages/desktop-electron/dist/ - -packages/import-ynab4/**/node_modules/* - -packages/import-ynab5/**/node_modules/* - -packages/loot-core/**/node_modules/* -packages/loot-core/**/lib-dist/* -packages/loot-core/**/proto/* diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 71946ca6b8..0000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,608 +0,0 @@ -const path = require('path'); - -const rulesDirPlugin = require('eslint-plugin-rulesdir'); -rulesDirPlugin.RULES_DIR = path.join( - __dirname, - 'packages', - 'eslint-plugin-actual', - 'lib', - 'rules', -); - -const ruleFCMsg = - 'Type the props argument and let TS infer or use ComponentType for a component prop'; - -const restrictedImportPatterns = [ - { - group: ['*.api', '*.web', '*.electron'], - message: 'Don’t directly reference imports from other platforms', - }, - { - group: ['uuid'], - importNames: ['*'], - message: "Use `import { v4 as uuidv4 } from 'uuid'` instead", - }, -]; - -const restrictedImportColors = [ - { - group: ['**/style', '**/colors'], - importNames: ['colors'], - message: 'Please use themes instead of colors', - }, -]; - -module.exports = { - root: true, - env: { - browser: true, - commonjs: true, - es6: true, - jest: true, - node: true, - }, - plugins: [ - 'prettier', - 'import', - 'rulesdir', - '@typescript-eslint', - 'jsx-a11y', - 'react-hooks', - ], - extends: [ - 'plugin:react/recommended', - 'plugin:react/jsx-runtime', - 'plugin:prettier/recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:import/typescript', - ], - parser: '@typescript-eslint/parser', - parserOptions: { project: [path.join(__dirname, './tsconfig.json')] }, - reportUnusedDisableDirectives: true, - globals: { - globalThis: false, - vi: true, - }, - rules: { - // http://eslint.org/docs/rules/ - 'array-callback-return': 'warn', - 'default-case': ['warn', { commentPattern: '^no default$' }], - 'dot-location': ['warn', 'property'], - eqeqeq: ['warn', 'smart'], - 'new-parens': 'warn', - 'no-array-constructor': 'warn', - 'no-caller': 'warn', - 'no-cond-assign': ['warn', 'except-parens'], - 'no-const-assign': 'warn', - 'no-control-regex': 'warn', - 'no-delete-var': 'warn', - 'no-dupe-args': 'warn', - 'no-dupe-class-members': 'warn', - 'no-dupe-keys': 'warn', - 'no-duplicate-case': 'warn', - 'no-empty-character-class': 'warn', - 'no-empty-pattern': 'warn', - 'no-eval': 'warn', - 'no-ex-assign': 'warn', - 'no-extend-native': 'warn', - 'no-extra-bind': 'warn', - 'no-extra-label': 'warn', - 'no-fallthrough': 'warn', - 'no-func-assign': 'warn', - 'no-implied-eval': 'warn', - 'no-invalid-regexp': 'warn', - 'no-iterator': 'warn', - 'no-label-var': 'warn', - 'no-labels': ['warn', { allowLoop: true, allowSwitch: false }], - 'no-lone-blocks': 'warn', - 'no-mixed-operators': [ - 'warn', - { - groups: [ - ['&', '|', '^', '~', '<<', '>>', '>>>'], - ['==', '!=', '===', '!==', '>', '>=', '<', '<='], - ['&&', '||'], - ['in', 'instanceof'], - ], - allowSamePrecedence: false, - }, - ], - 'no-multi-str': 'warn', - 'no-global-assign': 'warn', - 'no-unsafe-negation': 'warn', - 'no-new-func': 'warn', - 'no-new-object': 'warn', - 'no-new-symbol': 'warn', - 'no-new-wrappers': 'warn', - 'no-obj-calls': 'warn', - 'no-octal': 'warn', - 'no-octal-escape': 'warn', - 'no-redeclare': 'warn', - 'no-regex-spaces': 'warn', - 'no-script-url': 'warn', - 'no-self-assign': 'warn', - 'no-self-compare': 'warn', - 'no-sequences': 'warn', - 'no-shadow-restricted-names': 'warn', - 'no-sparse-arrays': 'warn', - 'no-template-curly-in-string': 'warn', - 'no-this-before-super': 'warn', - 'no-throw-literal': 'warn', - 'no-undef': 'error', - 'no-unreachable': 'warn', - 'no-unused-expressions': [ - 'error', - { - allowShortCircuit: true, - allowTernary: true, - allowTaggedTemplates: true, - }, - ], - 'no-unused-labels': 'warn', - 'no-use-before-define': [ - 'warn', - { - functions: false, - classes: false, - variables: false, - }, - ], - 'no-useless-computed-key': 'warn', - 'no-useless-concat': 'warn', - 'no-useless-constructor': 'warn', - 'no-useless-escape': 'warn', - 'no-useless-rename': [ - 'warn', - { - ignoreDestructuring: false, - ignoreImport: false, - ignoreExport: false, - }, - ], - 'no-with': 'warn', - 'no-whitespace-before-property': 'warn', - 'react-hooks/exhaustive-deps': [ - 'warn', - { - additionalHooks: '(useQuery)', - }, - ], - 'require-yield': 'warn', - 'rest-spread-spacing': ['warn', 'never'], - strict: ['warn', 'never'], - 'unicode-bom': ['warn', 'never'], - 'use-isnan': 'warn', - 'valid-typeof': 'warn', - 'no-restricted-properties': [ - 'error', - { - object: 'require', - property: 'ensure', - message: - 'Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting', - }, - { - object: 'System', - property: 'import', - message: - 'Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting', - }, - ], - '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', - - // 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', - - // https://github.com/evcohen/eslint-plugin-jsx-a11y/tree/master/docs/rules - 'jsx-a11y/alt-text': 'warn', - 'jsx-a11y/anchor-has-content': 'warn', - 'jsx-a11y/anchor-is-valid': [ - 'warn', - { - aspects: ['noHref', 'invalidHref'], - }, - ], - 'jsx-a11y/aria-activedescendant-has-tabindex': 'warn', - 'jsx-a11y/aria-props': 'warn', - 'jsx-a11y/aria-proptypes': 'warn', - 'jsx-a11y/aria-role': ['warn', { ignoreNonDOM: true }], - 'jsx-a11y/aria-unsupported-elements': 'warn', - 'jsx-a11y/heading-has-content': 'warn', - 'jsx-a11y/iframe-has-title': 'warn', - 'jsx-a11y/img-redundant-alt': 'warn', - 'jsx-a11y/no-access-key': 'warn', - 'jsx-a11y/no-distracting-elements': 'warn', - 'jsx-a11y/no-redundant-roles': 'warn', - 'jsx-a11y/role-has-required-aria-props': 'warn', - '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', - - 'prettier/prettier': 'warn', - - // Note: base rule explicitly disabled in favor of the TS one - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': [ - 'warn', - { - varsIgnorePattern: '^(_|React)', - ignoreRestSiblings: true, - caughtErrors: 'none', - }, - ], - - curly: ['warn', 'multi-line', 'consistent'], - - 'no-restricted-globals': ['warn'].concat( - require('confusing-browser-globals').filter(g => g !== 'self'), - ), - - 'react/jsx-filename-extension': [ - 'warn', - { extensions: ['.jsx', '.tsx'], allow: 'as-needed' }, - ], - 'react/jsx-no-useless-fragment': 'warn', - 'react/self-closing-comp': 'warn', - 'react/no-unstable-nested-components': [ - 'warn', - { allowAsProps: true, customValidators: ['formatter'] }, - ], - - 'rulesdir/typography': 'warn', - 'rulesdir/prefer-if-statement': 'warn', - - // https://github.com/eslint/eslint/issues/16954 - // https://github.com/eslint/eslint/issues/16953 - 'no-loop-func': 'off', - - // Do don't need this as we're using TypeScript - 'react/prop-types': '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'], - - 'import/extensions': [ - 'warn', - 'never', - { - json: 'always', - }, - ], - 'import/no-useless-path-segments': 'warn', - 'import/no-duplicates': ['warn', { 'prefer-inline': true }], - 'import/no-unused-modules': ['warn', { unusedExports: true }], - 'import/order': [ - 'warn', - { - alphabetize: { - caseInsensitive: true, - order: 'asc', - }, - groups: [ - 'builtin', // Built-in types are first - 'external', - 'parent', - 'sibling', - 'index', // Then the index file - ], - 'newlines-between': 'always', - pathGroups: [ - // Enforce that React (and react-related packages) is the first import - { group: 'builtin', pattern: 'react?(-*)', position: 'before' }, - // Separate imports from Actual from "real" external imports - { - group: 'external', - pattern: 'loot-{core,design}/**/*', - position: 'after', - }, - ], - pathGroupsExcludedImportTypes: ['react'], - }, - ], - - 'no-restricted-syntax': [ - 'warn', - { - // forbid React.* as they are legacy https://twitter.com/dan_abramov/status/1308739731551858689 - selector: - ":matches(MemberExpression[object.name='React'], TSQualifiedName[left.name='React'])", - message: - 'Using default React import is discouraged, please use named exports directly instead.', - }, - { - // forbid in favor of - selector: 'JSXOpeningElement[name.name="a"]', - message: 'Using is discouraged, please use instead.', - }, - ], - 'no-restricted-imports': [ - 'warn', - { patterns: [...restrictedImportPatterns, ...restrictedImportColors] }, - ], - - '@typescript-eslint/ban-ts-comment': [ - 'error', - { 'ts-ignore': 'allow-with-description' }, - ], - - // Rules disable during TS migration - '@typescript-eslint/no-var-requires': 'off', - 'prefer-const': 'warn', - 'prefer-spread': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-require-imports': 'off', - 'import/no-default-export': 'warn', - }, - overrides: [ - { - files: ['**/*.ts?(x)'], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - ecmaFeatures: { - jsx: true, - }, - - // typescript-eslint specific options - warnOnUnsupportedTypeScriptVersion: true, - }, - plugins: ['@typescript-eslint'], - // If adding a typescript-eslint version of an existing ESLint rule, - // make sure to disable the ESLint rule here. - rules: { - // TypeScript's `noFallthroughCasesInSwitch` option is more robust (#6906) - 'default-case': 'off', - // 'tsc' already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/291) - 'no-dupe-class-members': 'off', - // 'tsc' already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/477) - 'no-undef': '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': [ - 'warn', - { - functions: false, - classes: false, - variables: false, - typedefs: false, - }, - ], - 'no-unused-expressions': 'off', - '@typescript-eslint/no-unused-expressions': [ - 'error', - { - allowShortCircuit: true, - allowTernary: true, - allowTaggedTemplates: true, - }, - ], - 'no-useless-constructor': 'off', - '@typescript-eslint/no-useless-constructor': 'warn', - }, - }, - { - files: ['.eslintrc.js', './**/.eslintrc.js'], - parserOptions: { project: null }, - rules: { - '@typescript-eslint/consistent-type-exports': 'off', - }, - }, - { - files: [ - './packages/desktop-client/**/*.{ts,tsx}', - './packages/loot-core/src/client/**/*.{ts,tsx}', - ], - rules: { - // enforce type over interface - '@typescript-eslint/consistent-type-definitions': ['warn', 'type'], - // enforce import type - '@typescript-eslint/consistent-type-imports': [ - 'warn', - { prefer: 'type-imports', fixStyle: 'inline-type-imports' }, - ], - '@typescript-eslint/no-restricted-types': [ - 'warn', - { - types: { - // forbid FC as superflous - FunctionComponent: { message: ruleFCMsg }, - FC: { message: ruleFCMsg }, - }, - }, - ], - }, - }, - { - files: ['./packages/desktop-client/**/*'], - excludedFiles: [ - './packages/desktop-client/src/hooks/useNavigate.{ts,tsx}', - ], - rules: { - 'no-restricted-imports': [ - 'warn', - { - patterns: [ - { - group: ['react-router-dom'], - importNames: ['useNavigate'], - message: 'Please use Actual’s useNavigate() hook instead.', - }, - ], - }, - ], - }, - }, - { - files: ['./packages/loot-core/src/**/*'], - rules: { - 'no-restricted-imports': [ - 'warn', - { - patterns: [ - ...restrictedImportPatterns, - { - group: ['loot-core/**'], - message: - 'Please use relative imports in loot-core instead of importing from `loot-core/*`', - }, - ], - }, - ], - }, - }, - { - 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/desktop-client/src/style/index.*', - './packages/desktop-client/src/style/palette.*', - ], - rules: { - 'no-restricted-imports': ['off', { patterns: restrictedImportColors }], - }, - }, - { - files: [ - './packages/api/migrations/*', - './packages/loot-core/migrations/*', - ], - rules: { - 'import/no-default-export': 'off', - }, - }, - { - // TODO: fix the issues in these files - files: [ - './packages/desktop-client/src/components/accounts/Account.jsx', - './packages/desktop-client/src/components/accounts/MobileAccount.jsx', - './packages/desktop-client/src/components/accounts/MobileAccounts.jsx', - './packages/desktop-client/src/components/App.tsx', - './packages/desktop-client/src/components/budget/BudgetCategories.jsx', - './packages/desktop-client/src/components/budget/BudgetSummaries.tsx', - './packages/desktop-client/src/components/budget/DynamicBudgetTable.tsx', - './packages/desktop-client/src/components/budget/index.tsx', - './packages/desktop-client/src/components/budget/MobileBudget.tsx', - './packages/desktop-client/src/components/budget/envelope/HoldMenu.tsx', - './packages/desktop-client/src/components/budget/envelope/TransferMenu.tsx', - './packages/desktop-client/src/components/common/Menu.tsx', - './packages/desktop-client/src/components/FinancesApp.tsx', - './packages/desktop-client/src/components/GlobalKeys.ts', - './packages/desktop-client/src/components/LoggedInUser.tsx', - './packages/desktop-client/src/components/manager/ManagementApp.jsx', - './packages/desktop-client/src/components/manager/subscribe/common.tsx', - './packages/desktop-client/src/components/ManageRules.tsx', - './packages/desktop-client/src/components/mobile/MobileAmountInput.jsx', - './packages/desktop-client/src/components/mobile/MobileNavTabs.tsx', - './packages/desktop-client/src/components/Modals.tsx', - './packages/desktop-client/src/components/modals/EditRule.jsx', - './packages/desktop-client/src/components/modals/ImportTransactions.jsx', - './packages/desktop-client/src/components/modals/MergeUnusedPayees.jsx', - './packages/desktop-client/src/components/Notifications.tsx', - './packages/desktop-client/src/components/payees/ManagePayees.jsx', - './packages/desktop-client/src/components/payees/ManagePayeesWithData.jsx', - './packages/desktop-client/src/components/payees/PayeeTable.tsx', - './packages/desktop-client/src/components/reports/graphs/tableGraph/ReportTable.tsx', - './packages/desktop-client/src/components/reports/graphs/tableGraph/ReportTableTotals.tsx', - './packages/desktop-client/src/components/reports/reports/CashFlowCard.jsx', - './packages/desktop-client/src/components/reports/reports/CustomReport.jsx', - './packages/desktop-client/src/components/reports/reports/NetWorthCard.jsx', - './packages/desktop-client/src/components/reports/SaveReportName.tsx', - './packages/desktop-client/src/components/reports/useReport.ts', - './packages/desktop-client/src/components/schedules/ScheduleDetails.jsx', - './packages/desktop-client/src/components/schedules/SchedulesTable.tsx', - './packages/desktop-client/src/components/select/DateSelect.tsx', - './packages/desktop-client/src/components/sidebar/Tools.tsx', - './packages/desktop-client/src/components/sort.tsx', - './packages/desktop-client/src/components/spreadsheet/useSheetValue.ts', - './packages/desktop-client/src/components/table.tsx', - './packages/desktop-client/src/components/Titlebar.tsx', - './packages/desktop-client/src/components/transactions/MobileTransaction.jsx', - './packages/desktop-client/src/components/transactions/SelectedTransactions.jsx', - './packages/desktop-client/src/components/transactions/SimpleTransactionsTable.jsx', - './packages/desktop-client/src/components/transactions/TransactionList.jsx', - './packages/desktop-client/src/components/transactions/TransactionsTable.jsx', - './packages/desktop-client/src/components/transactions/TransactionsTable.test.jsx', - './packages/desktop-client/src/hooks/useAccounts.ts', - './packages/desktop-client/src/hooks/useCategories.ts', - './packages/desktop-client/src/hooks/usePayees.ts', - './packages/desktop-client/src/hooks/useProperFocus.tsx', - './packages/desktop-client/src/hooks/useSelected.tsx', - './packages/loot-core/src/client/query-hooks.tsx', - ], - rules: { - 'react-hooks/exhaustive-deps': 'off', - }, - }, - { - files: [ - '.eslintrc.js', - '*.test.js', - '*.test.ts', - '*.test.jsx', - '*.test.tsx', - ], - rules: { - 'rulesdir/typography': 'off', - }, - }, - ], - settings: { - react: { - version: 'detect', - }, - 'import/resolver': { - typescript: { - alwaysTryTypes: true, - }, - }, - }, -}; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..ec4ccb3a36 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,789 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import globals from 'globals'; + +import pluginImport from 'eslint-plugin-import'; +import pluginJSXA11y from 'eslint-plugin-jsx-a11y'; +import pluginPrettier from 'eslint-plugin-prettier/recommended'; +import pluginReact from 'eslint-plugin-react'; +import pluginReactHooks from 'eslint-plugin-react-hooks'; +import pluginRulesDir from 'eslint-plugin-rulesdir'; +import pluginTypescript from 'typescript-eslint'; + +import tsParser from '@typescript-eslint/parser'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +pluginRulesDir.RULES_DIR = path.join( + __dirname, + 'packages', + 'eslint-plugin-actual', + 'lib', + 'rules', +); + +const confusingBrowserGlobals = [ + // https://github.com/facebook/create-react-app/tree/main/packages/confusing-browser-globals + 'addEventListener', + 'blur', + 'close', + 'closed', + 'confirm', + 'defaultStatus', + 'defaultstatus', + 'event', + 'external', + 'find', + 'focus', + 'frameElement', + 'frames', + 'history', + 'innerHeight', + 'innerWidth', + 'length', + 'location', + 'locationbar', + 'menubar', + 'moveBy', + 'moveTo', + 'name', + 'onblur', + 'onerror', + 'onfocus', + 'onload', + 'onresize', + 'onunload', + 'open', + 'opener', + 'opera', + 'outerHeight', + 'outerWidth', + 'pageXOffset', + 'pageYOffset', + 'parent', + 'print', + 'removeEventListener', + 'resizeBy', + 'resizeTo', + 'screen', + 'screenLeft', + 'screenTop', + 'screenX', + 'screenY', + 'scroll', + 'scrollbars', + 'scrollBy', + 'scrollTo', + 'scrollX', + 'scrollY', + 'status', + 'statusbar', + 'stop', + 'toolbar', + 'top', +]; + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + { + ignores: [ + 'packages/api/app/bundle.api.js', + 'packages/api/dist', + 'packages/api/@types', + 'packages/api/migrations', + 'packages/crdt/dist', + 'packages/desktop-client/bundle.browser.js', + 'packages/desktop-client/build/', + 'packages/desktop-client/build-electron/', + 'packages/desktop-client/build-stats/', + 'packages/desktop-client/public/kcab/', + 'packages/desktop-client/public/data/', + 'packages/desktop-client/**/node_modules/*', + 'packages/desktop-client/node_modules/', + 'packages/desktop-client/src/icons/**/*', + 'packages/desktop-client/test-results/', + 'packages/desktop-client/playwright-report/', + 'packages/desktop-electron/client-build/', + 'packages/desktop-electron/build/', + 'packages/desktop-electron/dist/', + 'packages/import-ynab4/**/node_modules/*', + 'packages/import-ynab5/**/node_modules/*', + 'packages/loot-core/**/node_modules/*', + 'packages/loot-core/**/lib-dist/*', + 'packages/loot-core/**/proto/*', + '.yarn/*', + '.github/*', + ], + }, + { + linterOptions: { + reportUnusedDisableDirectives: true, + }, + languageOptions: { + globals: { + ...globals.browser, + ...globals.commonjs, + ...globals.jest, + ...globals.node, + globalThis: false, + vi: true, + }, + }, + settings: { + react: { + version: 'detect', + }, + + 'import/resolver': { + typescript: { + alwaysTryTypes: true, + }, + }, + }, + }, + pluginReact.configs.flat.recommended, + pluginReact.configs.flat['jsx-runtime'], + pluginPrettier, + ...pluginTypescript.configs.recommended, + pluginImport.flatConfigs.recommended, + { + plugins: { + 'react-hooks': pluginReactHooks, + 'jsx-a11y': pluginJSXA11y, + rulesdir: pluginRulesDir, + }, + }, + { + files: ['**/*.{js,ts,jsx,tsx}'], + rules: { + // http://eslint.org/docs/rules/ + 'array-callback-return': 'warn', + + 'default-case': [ + 'warn', + { + commentPattern: '^no default$', + }, + ], + + curly: ['warn', 'multi-line', 'consistent'], + 'dot-location': ['warn', 'property'], + eqeqeq: ['warn', 'smart'], + 'new-parens': 'warn', + 'no-array-constructor': 'warn', + 'no-caller': 'warn', + 'no-cond-assign': ['warn', 'except-parens'], + 'no-const-assign': 'warn', + 'no-control-regex': 'warn', + 'no-delete-var': 'warn', + 'no-dupe-args': 'warn', + 'no-dupe-class-members': 'warn', + 'no-dupe-keys': 'warn', + 'no-duplicate-case': 'warn', + 'no-empty-character-class': 'warn', + 'no-empty-pattern': 'warn', + 'no-eval': 'warn', + 'no-ex-assign': 'warn', + 'no-extend-native': 'warn', + 'no-extra-bind': 'warn', + 'no-extra-label': 'warn', + 'no-fallthrough': 'warn', + 'no-func-assign': 'warn', + 'no-implied-eval': 'warn', + 'no-invalid-regexp': 'warn', + 'no-iterator': 'warn', + 'no-label-var': 'warn', + + 'no-labels': [ + 'warn', + { + allowLoop: true, + allowSwitch: false, + }, + ], + + 'no-lone-blocks': 'warn', + + 'no-mixed-operators': [ + 'warn', + { + groups: [ + ['&', '|', '^', '~', '<<', '>>', '>>>'], + ['==', '!=', '===', '!==', '>', '>=', '<', '<='], + ['&&', '||'], + ['in', 'instanceof'], + ], + + allowSamePrecedence: false, + }, + ], + + 'no-multi-str': 'warn', + 'no-global-assign': 'warn', + 'no-unsafe-negation': 'warn', + 'no-new-func': 'warn', + 'no-new-object': 'warn', + 'no-new-symbol': 'warn', + 'no-new-wrappers': 'warn', + 'no-obj-calls': 'warn', + 'no-octal': 'warn', + 'no-octal-escape': 'warn', + 'no-redeclare': 'warn', + 'no-regex-spaces': 'warn', + 'no-script-url': 'warn', + 'no-self-assign': 'warn', + 'no-self-compare': 'warn', + 'no-sequences': 'warn', + 'no-shadow-restricted-names': 'warn', + 'no-sparse-arrays': 'warn', + 'no-template-curly-in-string': 'warn', + 'no-this-before-super': 'warn', + 'no-throw-literal': 'warn', + 'no-undef': 'error', + 'no-unreachable': 'warn', + + 'no-unused-expressions': [ + 'error', + { + allowShortCircuit: true, + allowTernary: true, + allowTaggedTemplates: true, + }, + ], + + 'no-unused-labels': 'warn', + + 'no-use-before-define': [ + 'warn', + { + functions: false, + classes: false, + variables: false, + }, + ], + + 'no-useless-computed-key': 'warn', + 'no-useless-concat': 'warn', + 'no-useless-constructor': 'warn', + 'no-useless-escape': 'warn', + + 'no-useless-rename': [ + 'warn', + { + ignoreDestructuring: false, + ignoreImport: false, + ignoreExport: false, + }, + ], + + 'no-with': 'warn', + 'no-whitespace-before-property': 'warn', + + 'require-yield': 'warn', + 'rest-spread-spacing': ['warn', 'never'], + strict: ['warn', 'never'], + 'unicode-bom': ['warn', 'never'], + 'use-isnan': 'warn', + 'valid-typeof': 'warn', + + 'no-restricted-properties': [ + 'error', + { + object: 'require', + property: 'ensure', + message: + 'Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting', + }, + { + object: 'System', + property: 'import', + message: + 'Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting', + }, + ], + + '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/extensions': [ + 'warn', + 'never', + { + json: 'always', + }, + ], + 'import/no-useless-path-segments': 'warn', + 'import/no-duplicates': [ + 'warn', + { + 'prefer-inline': true, + }, + ], + 'import/order': [ + 'warn', + { + alphabetize: { + caseInsensitive: true, + order: 'asc', + }, + + groups: ['builtin', 'external', 'parent', 'sibling', 'index'], + 'newlines-between': 'always', + + pathGroups: [ + { + // Enforce that React (and react-related packages) is the first import + group: 'builtin', + pattern: 'react?(-*)', + position: 'before', + }, + { + // Separate imports from Actual from "real" external imports + group: 'external', + pattern: 'loot-{core,design}/**/*', + position: 'after', + }, + ], + + pathGroupsExcludedImportTypes: ['react'], + }, + ], + + // 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', + 'jsx-a11y/anchor-is-valid': [ + 'warn', + { + aspects: ['noHref', 'invalidHref'], + }, + ], + 'jsx-a11y/aria-activedescendant-has-tabindex': 'warn', + 'jsx-a11y/aria-props': 'warn', + 'jsx-a11y/aria-proptypes': 'warn', + 'jsx-a11y/aria-role': [ + 'warn', + { + ignoreNonDOM: true, + }, + ], + 'jsx-a11y/aria-unsupported-elements': 'warn', + 'jsx-a11y/heading-has-content': 'warn', + 'jsx-a11y/iframe-has-title': 'warn', + 'jsx-a11y/img-redundant-alt': 'warn', + 'jsx-a11y/no-access-key': 'warn', + 'jsx-a11y/no-distracting-elements': 'warn', + 'jsx-a11y/no-redundant-roles': 'warn', + 'jsx-a11y/role-has-required-aria-props': 'warn', + '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)', + }, + ], + + 'rulesdir/typography': 'warn', + 'rulesdir/prefer-if-statement': 'warn', + + // Note: base rule explicitly disabled in favor of the TS one + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + varsIgnorePattern: '^(_|React)', + ignoreRestSiblings: true, + caughtErrors: 'none', + }, + ], + + 'no-restricted-globals': ['warn', ...confusingBrowserGlobals], + + // https://github.com/eslint/eslint/issues/16954 + // 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': [ + 'warn', + { + // forbid React.* as they are legacy https://twitter.com/dan_abramov/status/1308739731551858689 + selector: + ":matches(MemberExpression[object.name='React'], TSQualifiedName[left.name='React'])", + message: + 'Using default React import is discouraged, please use named exports directly instead.', + }, + { + // forbid in favor of + selector: 'JSXOpeningElement[name.name="a"]', + message: 'Using is discouraged, please use instead.', + }, + ], + + 'no-restricted-imports': [ + 'warn', + { + patterns: [ + { + group: ['*.api', '*.web', '*.electron'], + message: "Don't directly reference imports from other platforms", + }, + { + group: ['uuid'], + importNames: ['*'], + message: "Use `import { v4 as uuidv4 } from 'uuid'` instead", + }, + { + group: ['**/style', '**/colors'], + importNames: ['colors'], + message: 'Please use themes instead of colors', + }, + ], + }, + ], + + '@typescript-eslint/ban-ts-comment': [ + 'error', + { + 'ts-ignore': 'allow-with-description', + }, + ], + + // Rules disabled during TS migration + '@typescript-eslint/no-var-requires': 'off', + 'prefer-const': 'warn', + 'prefer-spread': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-require-imports': 'off', + 'import/no-default-export': 'warn', + }, + }, + { + files: ['**/*.ts?(x)'], + + languageOptions: { + parser: tsParser, + ecmaVersion: 2018, + sourceType: 'module', + + parserOptions: { + project: [path.join(__dirname, './tsconfig.json')], + ecmaFeatures: { + jsx: true, + }, + + // typescript-eslint specific options + warnOnUnsupportedTypeScriptVersion: true, + }, + }, + + // If adding a typescript-eslint version of an existing ESLint rule, + // make sure to disable the ESLint rule here. + rules: { + // TypeScript's `noFallthroughCasesInSwitch` option is more robust (#6906) + 'default-case': 'off', + // 'tsc' already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/291) + 'no-dupe-class-members': 'off', + // 'tsc' already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/477) + 'no-undef': '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': [ + 'warn', + { + functions: false, + classes: false, + variables: false, + typedefs: false, + }, + ], + + 'no-unused-expressions': 'off', + + '@typescript-eslint/no-unused-expressions': [ + 'error', + { + allowShortCircuit: true, + allowTernary: true, + allowTaggedTemplates: true, + }, + ], + + 'no-useless-constructor': 'off', + '@typescript-eslint/no-useless-constructor': 'warn', + }, + }, + { + files: [ + 'packages/desktop-client/**/*.{ts,tsx}', + 'packages/loot-core/src/client/**/*.{ts,tsx}', + ], + + rules: { + // enforce type over interface + '@typescript-eslint/consistent-type-definitions': ['warn', 'type'], + + // enforce import type + '@typescript-eslint/consistent-type-imports': [ + 'warn', + { + prefer: 'type-imports', + fixStyle: 'inline-type-imports', + }, + ], + + '@typescript-eslint/no-restricted-types': [ + 'warn', + { + types: { + // forbid FC as superflous + FunctionComponent: { + message: + 'Type the props argument and let TS infer or use ComponentType for a component prop', + }, + + FC: { + message: + 'Type the props argument and let TS infer or use ComponentType for a component prop', + }, + }, + }, + ], + }, + }, + { + files: ['packages/desktop-client/**/*'], + ignores: ['packages/desktop-client/src/hooks/useNavigate.{ts,tsx}'], + + rules: { + 'no-restricted-imports': [ + 'warn', + { + patterns: [ + { + group: ['react-router-dom'], + importNames: ['useNavigate'], + message: "Please use Actual's useNavigate() hook instead.", + }, + ], + }, + ], + }, + }, + { + files: ['packages/loot-core/src/**/*'], + + rules: { + 'no-restricted-imports': [ + 'warn', + { + patterns: [ + { + group: ['*.api', '*.web', '*.electron'], + message: "Don't directly reference imports from other platforms", + }, + { + group: ['uuid'], + importNames: ['*'], + message: "Use `import { v4 as uuidv4 } from 'uuid'` instead", + }, + { + group: ['loot-core/**'], + message: + 'Please use relative imports in loot-core instead of importing from `loot-core/*`', + }, + ], + }, + ], + }, + }, + { + 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/desktop-client/src/style/index.*', + 'packages/desktop-client/src/style/palette.*', + ], + + rules: { + 'no-restricted-imports': [ + 'off', + { + patterns: [ + { + group: ['**/style', '**/colors'], + importNames: ['colors'], + message: 'Please use themes instead of colors', + }, + ], + }, + ], + }, + }, + { + files: ['packages/api/migrations/*', 'packages/loot-core/migrations/*'], + + rules: { + 'import/no-default-export': 'off', + }, + }, + {}, + { + // TODO: fix the issues in these files + files: [ + 'packages/desktop-client/src/components/accounts/Account.jsx', + 'packages/desktop-client/src/components/accounts/MobileAccount.jsx', + 'packages/desktop-client/src/components/accounts/MobileAccounts.jsx', + 'packages/desktop-client/src/components/App.tsx', + 'packages/desktop-client/src/components/budget/BudgetCategories.jsx', + 'packages/desktop-client/src/components/budget/BudgetSummaries.tsx', + 'packages/desktop-client/src/components/budget/DynamicBudgetTable.tsx', + 'packages/desktop-client/src/components/budget/index.tsx', + 'packages/desktop-client/src/components/budget/MobileBudget.tsx', + 'packages/desktop-client/src/components/budget/envelope/HoldMenu.tsx', + 'packages/desktop-client/src/components/budget/envelope/TransferMenu.tsx', + 'packages/desktop-client/src/components/common/Menu.tsx', + 'packages/desktop-client/src/components/FinancesApp.tsx', + 'packages/desktop-client/src/components/GlobalKeys.ts', + 'packages/desktop-client/src/components/LoggedInUser.tsx', + 'packages/desktop-client/src/components/manager/ManagementApp.jsx', + 'packages/desktop-client/src/components/manager/subscribe/common.tsx', + 'packages/desktop-client/src/components/ManageRules.tsx', + 'packages/desktop-client/src/components/mobile/MobileAmountInput.jsx', + 'packages/desktop-client/src/components/mobile/MobileNavTabs.tsx', + 'packages/desktop-client/src/components/Modals.tsx', + 'packages/desktop-client/src/components/modals/EditRule.jsx', + 'packages/desktop-client/src/components/modals/ImportTransactions.jsx', + 'packages/desktop-client/src/components/modals/MergeUnusedPayees.jsx', + 'packages/desktop-client/src/components/Notifications.tsx', + 'packages/desktop-client/src/components/payees/ManagePayees.jsx', + 'packages/desktop-client/src/components/payees/ManagePayeesWithData.jsx', + 'packages/desktop-client/src/components/payees/PayeeTable.tsx', + 'packages/desktop-client/src/components/reports/graphs/tableGraph/ReportTable.tsx', + 'packages/desktop-client/src/components/reports/graphs/tableGraph/ReportTableTotals.tsx', + 'packages/desktop-client/src/components/reports/reports/CashFlowCard.jsx', + 'packages/desktop-client/src/components/reports/reports/CustomReport.jsx', + 'packages/desktop-client/src/components/reports/reports/NetWorthCard.jsx', + 'packages/desktop-client/src/components/reports/SaveReportName.tsx', + 'packages/desktop-client/src/components/reports/useReport.ts', + 'packages/desktop-client/src/components/schedules/ScheduleDetails.jsx', + 'packages/desktop-client/src/components/schedules/SchedulesTable.tsx', + 'packages/desktop-client/src/components/select/DateSelect.tsx', + 'packages/desktop-client/src/components/sidebar/Tools.tsx', + 'packages/desktop-client/src/components/sort.tsx', + 'packages/desktop-client/src/components/spreadsheet/useSheetValue.ts', + 'packages/desktop-client/src/components/table.tsx', + 'packages/desktop-client/src/components/Titlebar.tsx', + 'packages/desktop-client/src/components/transactions/MobileTransaction.jsx', + 'packages/desktop-client/src/components/transactions/SelectedTransactions.jsx', + 'packages/desktop-client/src/components/transactions/SimpleTransactionsTable.jsx', + 'packages/desktop-client/src/components/transactions/TransactionList.jsx', + 'packages/desktop-client/src/components/transactions/TransactionsTable.jsx', + 'packages/desktop-client/src/components/transactions/TransactionsTable.test.jsx', + 'packages/desktop-client/src/hooks/useAccounts.ts', + 'packages/desktop-client/src/hooks/useCategories.ts', + 'packages/desktop-client/src/hooks/usePayees.ts', + 'packages/desktop-client/src/hooks/useProperFocus.tsx', + 'packages/desktop-client/src/hooks/useSelected.tsx', + 'packages/loot-core/src/client/query-hooks.tsx', + ], + + rules: { + 'react-hooks/exhaustive-deps': 'off', + }, + }, + { + files: [ + 'eslint.config.mjs', + '**/*.test.js', + '**/*.test.ts', + '**/*.test.jsx', + '**/*.test.tsx', + ], + + rules: { + 'rulesdir/typography': 'off', + }, + }, +]; diff --git a/package.json b/package.json index 7a673cd67c..a76e1e2903 100644 --- a/package.json +++ b/package.json @@ -38,33 +38,33 @@ "vrt:docker": "./bin/run-vrt", "rebuild-electron": "./node_modules/.bin/electron-rebuild -f -m ./packages/loot-core", "rebuild-node": "yarn workspace loot-core rebuild", - "lint": "eslint . --max-warnings 0 --ext .js,.jsx,.ts,.tsx", + "lint": "eslint . --max-warnings 0", "lint:verbose": "DEBUG=eslint:cli-engine eslint . --max-warnings 0", "typecheck": "yarn tsc && tsc-strict", "jq": "./node_modules/node-jq/bin/jq", "prepare": "husky" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^8.1.0", - "@typescript-eslint/parser": "^8.1.0", - "confusing-browser-globals": "^1.0.11", + "@typescript-eslint/parser": "^8.18.1", "cross-env": "^7.0.3", - "eslint": "^8.57.0", + "eslint": "^9.17.0", "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "3.6.1", - "eslint-plugin-import": "2.29.1", - "eslint-plugin-jsx-a11y": "^6.9.0", + "eslint-import-resolver-typescript": "^3.7.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-prettier": "5.2.1", - "eslint-plugin-react": "7.35.0", - "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-rulesdir": "^0.2.2", + "globals": "^15.13.0", "husky": "^9.0.11", "lint-staged": "^15.2.9", "node-jq": "^4.0.1", "npm-run-all": "^4.1.5", - "prettier": "3.3.3", + "prettier": "^3.4.2", "source-map-support": "^0.5.21", "typescript": "^5.5.4", + "typescript-eslint": "^8.18.1", "typescript-strict-plugin": "^2.4.4" }, "resolutions": { diff --git a/packages/api/index.ts b/packages/api/index.ts index be3f92d8bf..dfdadf2728 100644 --- a/packages/api/index.ts +++ b/packages/api/index.ts @@ -8,7 +8,7 @@ import type { import type { InitConfig } from 'loot-core/server/main'; // @ts-ignore: bundle not available until we build it -// eslint-disable-next-line import/extensions +// eslint-disable-next-line import/extensions, import/no-unresolved import * as bundle from './app/bundle.api.js'; import * as injected from './injected'; import { validateNodeVersion } from './validateNodeVersion'; diff --git a/packages/desktop-client/globals.d.ts b/packages/desktop-client/globals.d.ts index d05b3b3997..9f9ea2437e 100644 --- a/packages/desktop-client/globals.d.ts +++ b/packages/desktop-client/globals.d.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/no-unresolved import { type CSSObject } from '@emotion/css/dist/declarations/src/create-instance'; // Allow images to be imported diff --git a/packages/desktop-client/playwright.config.js b/packages/desktop-client/playwright.config.js index 1d3f481fb5..170172dc70 100644 --- a/packages/desktop-client/playwright.config.js +++ b/packages/desktop-client/playwright.config.js @@ -63,7 +63,7 @@ expect.extend({ }, }); -// eslint-disable-next-line import/no-unused-modules, import/no-default-export +// eslint-disable-next-line import/no-default-export export default defineConfig({ timeout: 30000, // 30 seconds retries: 1, diff --git a/packages/desktop-client/src/browser-preload.browser.js b/packages/desktop-client/src/browser-preload.browser.js index 3f12e47294..69834cca51 100644 --- a/packages/desktop-client/src/browser-preload.browser.js +++ b/packages/desktop-client/src/browser-preload.browser.js @@ -1,4 +1,5 @@ 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/src/client/platform'; diff --git a/packages/desktop-client/src/build-shims.js b/packages/desktop-client/src/build-shims.js index e9348c2dd8..a9b4bf6ee3 100644 --- a/packages/desktop-client/src/build-shims.js +++ b/packages/desktop-client/src/build-shims.js @@ -8,7 +8,6 @@ const process = { }, }; -// eslint-disable-next-line import/no-unused-modules export { process }; -// eslint-disable-next-line import/no-unused-modules + export { global }; diff --git a/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx b/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx index 1328b14ff3..b1f02818a4 100644 --- a/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx +++ b/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx @@ -479,7 +479,6 @@ type CreatePayeeButtonProps = { style?: CSSProperties; }; -// eslint-disable-next-line import/no-unused-modules export function CreatePayeeButton({ Icon, payeeName, diff --git a/packages/desktop-client/vite.config.mts b/packages/desktop-client/vite.config.mts index 917e93ee37..fd0b9acb1a 100644 --- a/packages/desktop-client/vite.config.mts +++ b/packages/desktop-client/vite.config.mts @@ -66,7 +66,7 @@ const injectShims = (): Plugin[] => { }; // https://vitejs.dev/config/ -// eslint-disable-next-line import/no-default-export + export default defineConfig(async ({ mode }) => { const env = loadEnv(mode, process.cwd(), ''); const devHeaders = { diff --git a/packages/desktop-electron/beforePackHook.ts b/packages/desktop-electron/beforePackHook.ts index fec75de369..37723cff84 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-unused-modules, import/no-default-export +// eslint-disable-next-line import/no-default-export export default beforePackHook; diff --git a/packages/eslint-plugin-actual/.eslintrc.js b/packages/eslint-plugin-actual/.eslintrc.js deleted file mode 100644 index f7f66395ed..0000000000 --- a/packages/eslint-plugin-actual/.eslintrc.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -module.exports = { - root: true, - extends: [ - 'eslint:recommended', - 'plugin:eslint-plugin/recommended', - 'plugin:node/recommended', - '../../.eslintrc.js', - ], - env: { - node: true, - }, - parserOptions: { - sourceType: 'script', - }, - rules: { - strict: ['error', 'global'], - }, - overrides: [ - { - files: ['tests/**/*.js'], - env: { jest: true }, - }, - ], -}; diff --git a/packages/eslint-plugin-actual/lib/rules/__tests__/prefer-if-statement.js b/packages/eslint-plugin-actual/lib/rules/__tests__/prefer-if-statement.js deleted file mode 100644 index e8f17249d7..0000000000 --- a/packages/eslint-plugin-actual/lib/rules/__tests__/prefer-if-statement.js +++ /dev/null @@ -1,139 +0,0 @@ -/* eslint-disable rulesdir/typography */ -'use strict'; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const RuleTester = require('eslint').RuleTester; - -const rule = require('../prefer-if-statement'); - -//------------------------------------------------------------------------------ -// Tests -//------------------------------------------------------------------------------ - -const ruleTester = new RuleTester({ - parserOptions: { - ecmaVersion: 2020, - ecmaFeatures: { jsx: true }, - }, -}); -ruleTester.run('prefer-if-statement', rule, { - valid: [ - `if (foo && bar) { console.log('Hello, world!'); }`, - `myFunc(foo && bar);`, - `if (foo || bar) { console.log('Hello, world!'); }`, - `myFunc(foo || bar);`, - `if (foo ? bar : baz) { console.log('Hello, world!'); }`, - `
{foo && bar}
`, - `
{foo || bar}
`, - `
{foo ? bar : baz}
`, - ], - - invalid: [ - { - code: 'foo && bar;', - output: null, - errors: [ - { - messageId: 'logical', - data: { op: '&&' }, - type: 'ExpressionStatement', - }, - ], - }, - { - code: 'foo || bar;', - output: null, - errors: [ - { - messageId: 'logical', - data: { op: '||' }, - type: 'ExpressionStatement', - }, - ], - }, - { - code: 'foo ? bar : baz;', - output: null, - errors: [{ messageId: 'ternary', type: 'ExpressionStatement' }], - }, - { - code: 'function foo() { bar && baz; }', - output: null, - errors: [ - { - messageId: 'logical', - data: { op: '&&' }, - type: 'ExpressionStatement', - }, - ], - }, - { - code: 'function foo() { bar || baz; }', - output: null, - errors: [ - { - messageId: 'logical', - data: { op: '||' }, - type: 'ExpressionStatement', - }, - ], - }, - { - code: 'function foo() { bar ? baz : qux; }', - output: null, - errors: [{ messageId: 'ternary', type: 'ExpressionStatement' }], - }, - { - code: 'foo && foo();', - output: 'foo?.();', - errors: [ - { - messageId: 'logical', - data: { op: '&&' }, - type: 'ExpressionStatement', - }, - ], - }, - { - code: 'foo || foo();', - output: null, - errors: [ - { - messageId: 'logical', - data: { op: '||' }, - type: 'ExpressionStatement', - }, - ], - }, - { - code: 'foo.bar && foo.bar();', - output: 'foo.bar?.();', - errors: [ - { - messageId: 'logical', - data: { op: '&&' }, - type: 'ExpressionStatement', - }, - ], - }, - { - code: 'foo.bar && foo.bar.baz();', - output: 'foo.bar?.baz();', - errors: [ - { - messageId: 'logical', - data: { op: '&&' }, - type: 'ExpressionStatement', - }, - ], - }, - { - code: 'foo ? bar() : baz();', - output: null, - errors: [{ messageId: 'ternary', type: 'ExpressionStatement' }], - }, - ], -}); diff --git a/packages/eslint-plugin-actual/lib/rules/__tests__/prefer-if-statement.test.js b/packages/eslint-plugin-actual/lib/rules/__tests__/prefer-if-statement.test.js new file mode 100644 index 0000000000..fee9949770 --- /dev/null +++ b/packages/eslint-plugin-actual/lib/rules/__tests__/prefer-if-statement.test.js @@ -0,0 +1,140 @@ +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +import { runClassic } from 'eslint-vitest-rule-tester'; + +import * as rule from '../prefer-if-statement'; + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +runClassic( + 'prefer-if-statement', + rule, + { + valid: [ + `if (foo && bar) { console.log('Hello, world!'); }`, + `myFunc(foo && bar);`, + `if (foo || bar) { console.log('Hello, world!'); }`, + `myFunc(foo || bar);`, + `if (foo ? bar : baz) { console.log('Hello, world!'); }`, + `
{foo && bar}
`, + `
{foo || bar}
`, + `
{foo ? bar : baz}
`, + ], + + invalid: [ + { + code: 'foo && bar;', + output: null, + errors: [ + { + messageId: 'logical', + data: { op: '&&' }, + type: 'ExpressionStatement', + }, + ], + }, + { + code: 'foo || bar;', + output: null, + errors: [ + { + messageId: 'logical', + data: { op: '||' }, + type: 'ExpressionStatement', + }, + ], + }, + { + code: 'foo ? bar : baz;', + output: null, + errors: [{ messageId: 'ternary', type: 'ExpressionStatement' }], + }, + { + code: 'function foo() { bar && baz; }', + output: null, + errors: [ + { + messageId: 'logical', + data: { op: '&&' }, + type: 'ExpressionStatement', + }, + ], + }, + { + code: 'function foo() { bar || baz; }', + output: null, + errors: [ + { + messageId: 'logical', + data: { op: '||' }, + type: 'ExpressionStatement', + }, + ], + }, + { + code: 'function foo() { bar ? baz : qux; }', + output: null, + errors: [{ messageId: 'ternary', type: 'ExpressionStatement' }], + }, + { + code: 'foo && foo();', + output: 'foo?.();', + errors: [ + { + messageId: 'logical', + data: { op: '&&' }, + type: 'ExpressionStatement', + }, + ], + }, + { + code: 'foo || foo();', + output: null, + errors: [ + { + messageId: 'logical', + data: { op: '||' }, + type: 'ExpressionStatement', + }, + ], + }, + { + code: 'foo.bar && foo.bar();', + output: 'foo.bar?.();', + errors: [ + { + messageId: 'logical', + data: { op: '&&' }, + type: 'ExpressionStatement', + }, + ], + }, + { + code: 'foo.bar && foo.bar.baz();', + output: 'foo.bar?.baz();', + errors: [ + { + messageId: 'logical', + data: { op: '&&' }, + type: 'ExpressionStatement', + }, + ], + }, + { + code: 'foo ? bar() : baz();', + output: null, + errors: [{ messageId: 'ternary', type: 'ExpressionStatement' }], + }, + ], + }, + { + parserOptions: { + ecmaVersion: 2020, + ecmaFeatures: { jsx: true }, + }, + }, +); diff --git a/packages/eslint-plugin-actual/lib/rules/__tests__/typography.js b/packages/eslint-plugin-actual/lib/rules/__tests__/typography.js deleted file mode 100644 index 17274b9bd0..0000000000 --- a/packages/eslint-plugin-actual/lib/rules/__tests__/typography.js +++ /dev/null @@ -1,70 +0,0 @@ -/* eslint-disable rulesdir/typography */ -'use strict'; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const RuleTester = require('eslint').RuleTester; - -const rule = require('../typography'); - -//------------------------------------------------------------------------------ -// Tests -//------------------------------------------------------------------------------ - -const ruleTester = new RuleTester({ - parserOptions: { - ecmaVersion: 2015, - ecmaFeatures: { jsx: true }, - }, -}); -ruleTester.run('typography', rule, { - valid: [ - `let test = 'I said “Hello, world!”';`, - `let test = "I said ‘Hello, world!’";`, - `let test = \`I said ‘Hello, world!’\`;`, - `let selected = document.querySelector('[data-test="foo"]');`, - `let selected = document.querySelectorAll('[data-test="foo"]');`, - `myNode.innerHTML = '
Hello, world!
';`, - `foo.bar.webContents.executeJavaScript('console.log("Hello, world!")');`, - ], - - invalid: [ - { - code: 'var test = `I said "Hello, world!"`;', - errors: [ - { messageId: 'quote', type: 'TemplateElement', column: 20 }, - { messageId: 'quote', type: 'TemplateElement', column: 34 }, - ], - }, - { - code: `test2("I said 'Hello, world!'");`, - errors: [ - { messageId: 'quote', type: 'Literal', column: 15 }, - { messageId: 'quote', type: 'Literal', column: 29 }, - ], - }, - { - code: `test3('I said "Hello, world!"');`, - errors: [ - { messageId: 'quote', type: 'Literal', column: 15 }, - { messageId: 'quote', type: 'Literal', column: 29 }, - ], - }, - { - code: `I said "Hello, world!"`, - errors: [ - { messageId: 'quote', type: 'JSXText', column: 15 }, - { messageId: 'quote', type: 'JSXText', column: 29 }, - ], - }, - { - code: `I said 'Hello, world!'`, - errors: [ - { messageId: 'quote', type: 'JSXText', column: 15 }, - { messageId: 'quote', type: 'JSXText', column: 29 }, - ], - }, - ], -}); diff --git a/packages/eslint-plugin-actual/lib/rules/__tests__/typography.test.js b/packages/eslint-plugin-actual/lib/rules/__tests__/typography.test.js new file mode 100644 index 0000000000..a40b32d5a7 --- /dev/null +++ b/packages/eslint-plugin-actual/lib/rules/__tests__/typography.test.js @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +import { runClassic } from 'eslint-vitest-rule-tester'; + +import * as rule from '../typography'; + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +runClassic( + 'typography', + rule, + { + valid: [ + `let test = 'I said “Hello, world!”';`, + `let test = "I said ‘Hello, world!’";`, + `let test = \`I said ‘Hello, world!’\`;`, + `let selected = document.querySelector('[data-test="foo"]');`, + `let selected = document.querySelectorAll('[data-test="foo"]');`, + `myNode.innerHTML = '
Hello, world!
';`, + `foo.bar.webContents.executeJavaScript('console.log("Hello, world!")');`, + ], + + invalid: [ + { + code: 'var test = `I said "Hello, world!"`;', + errors: [ + { messageId: 'quote', type: 'TemplateElement', column: 20 }, + { messageId: 'quote', type: 'TemplateElement', column: 34 }, + ], + }, + { + code: `test2("I said 'Hello, world!'");`, + errors: [ + { messageId: 'quote', type: 'Literal', column: 15 }, + { messageId: 'quote', type: 'Literal', column: 29 }, + ], + }, + { + code: `test3('I said "Hello, world!"');`, + errors: [ + { messageId: 'quote', type: 'Literal', column: 15 }, + { messageId: 'quote', type: 'Literal', column: 29 }, + ], + }, + { + code: `I said "Hello, world!"`, + errors: [ + { messageId: 'quote', type: 'JSXText', column: 15 }, + { messageId: 'quote', type: 'JSXText', column: 29 }, + ], + }, + { + code: `I said 'Hello, world!'`, + errors: [ + { messageId: 'quote', type: 'JSXText', column: 15 }, + { messageId: 'quote', type: 'JSXText', column: 29 }, + ], + }, + ], + }, + { + parserOptions: { + ecmaVersion: 2020, + ecmaFeatures: { jsx: true }, + }, + }, +); diff --git a/packages/eslint-plugin-actual/lib/rules/prefer-if-statement.js b/packages/eslint-plugin-actual/lib/rules/prefer-if-statement.js index f3584602d2..0afe764392 100644 --- a/packages/eslint-plugin-actual/lib/rules/prefer-if-statement.js +++ b/packages/eslint-plugin-actual/lib/rules/prefer-if-statement.js @@ -1,5 +1,3 @@ -'use strict'; - //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ diff --git a/packages/eslint-plugin-actual/lib/rules/typography.js b/packages/eslint-plugin-actual/lib/rules/typography.js index 6ee049327d..2eb4cf866d 100644 --- a/packages/eslint-plugin-actual/lib/rules/typography.js +++ b/packages/eslint-plugin-actual/lib/rules/typography.js @@ -1,5 +1,3 @@ -'use strict'; - //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ diff --git a/packages/eslint-plugin-actual/package.json b/packages/eslint-plugin-actual/package.json index a1f15c4dfc..44f374609e 100644 --- a/packages/eslint-plugin-actual/package.json +++ b/packages/eslint-plugin-actual/package.json @@ -5,7 +5,7 @@ "exports": "./lib/index.js", "type": "commonjs", "scripts": { - "test": "jest" + "test": "vitest" }, "dependencies": { "requireindex": "^1.2.0" @@ -13,8 +13,8 @@ "devDependencies": { "eslint-plugin-eslint-plugin": "^5.5.1", "eslint-plugin-node": "^11.1.0", - "jest": "^27.5.1", - "npm-run-all": "^4.1.5" + "eslint-vitest-rule-tester": "^0.7.1", + "vitest": "^1.6.0" }, "peerDependencies": { "eslint": ">=7" diff --git a/packages/loot-core/peg-transform.mjs b/packages/loot-core/peg-transform.mjs index b5f1f1e798..181aceff26 100644 --- a/packages/loot-core/peg-transform.mjs +++ b/packages/loot-core/peg-transform.mjs @@ -6,6 +6,7 @@ import * as crypto from 'crypto'; import peg from 'peggy'; const transform = { + // eslint-disable-next-line @typescript-eslint/no-unused-vars process(sourceText, sourcePath, _options) { return `module.exports = ${peg.generate(sourceText, { output: 'source-with-inline-map', diff --git a/packages/loot-core/src/platform/client/undo/index.d.ts b/packages/loot-core/src/platform/client/undo/index.d.ts index 86a8e542f9..18090c47d9 100644 --- a/packages/loot-core/src/platform/client/undo/index.d.ts +++ b/packages/loot-core/src/platform/client/undo/index.d.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/no-unresolved import { type ModalType } from '../../client/state-types/modals'; export type UndoState = { diff --git a/packages/loot-core/src/server/accounts/payees.ts b/packages/loot-core/src/server/accounts/payees.ts index c225591aac..30eba38b5e 100644 --- a/packages/loot-core/src/server/accounts/payees.ts +++ b/packages/loot-core/src/server/accounts/payees.ts @@ -1,7 +1,6 @@ // @ts-strict-ignore import * as db from '../db'; -/* eslint-disable import/no-unused-modules */ export async function createPayee(description) { // Check to make sure no payee already exists with exactly the same // name diff --git a/packages/loot-core/src/server/importers/ynab4-types.d.ts b/packages/loot-core/src/server/importers/ynab4-types.d.ts index 931f175540..69cf3284b8 100644 --- a/packages/loot-core/src/server/importers/ynab4-types.d.ts +++ b/packages/loot-core/src/server/importers/ynab4-types.d.ts @@ -1,5 +1,3 @@ -/* eslint-disable import/no-unused-modules */ - export namespace YNAB4 { export interface YFull { masterCategories: MasterCategory[]; diff --git a/packages/loot-core/src/server/importers/ynab5-types.d.ts b/packages/loot-core/src/server/importers/ynab5-types.d.ts index 524ede77c9..1001f8fa8b 100644 --- a/packages/loot-core/src/server/importers/ynab5-types.d.ts +++ b/packages/loot-core/src/server/importers/ynab5-types.d.ts @@ -1,5 +1,3 @@ -/* eslint-disable import/no-unused-modules */ - export namespace YNAB5 { export interface Budget { name?: string; diff --git a/packages/loot-core/src/server/main.ts b/packages/loot-core/src/server/main.ts index f4ee2c7b69..4deee12800 100644 --- a/packages/loot-core/src/server/main.ts +++ b/packages/loot-core/src/server/main.ts @@ -2470,7 +2470,6 @@ async function setupDocumentsDir() { fs._setDocumentDir(documentDir); } -// eslint-disable-next-line import/no-unused-modules export async function initApp(isDev, socketName) { await sqlite.init(); await Promise.all([asyncStorage.init(), fs.init()]); @@ -2519,7 +2518,6 @@ export type InitConfig = { password?: string; }; -// eslint-disable-next-line import/no-unused-modules export async function init(config: InitConfig) { // Get from build @@ -2558,7 +2556,7 @@ export async function init(config: InitConfig) { } // Export a few things required for the platform -// eslint-disable-next-line import/no-unused-modules + export const lib = { getDataDir: fs.getDataDir, sendMessage: (msg, args) => connection.send(msg, args), diff --git a/packages/loot-core/src/server/tools/types/handlers.d.ts b/packages/loot-core/src/server/tools/types/handlers.d.ts index 8a31465a36..29420353f3 100644 --- a/packages/loot-core/src/server/tools/types/handlers.d.ts +++ b/packages/loot-core/src/server/tools/types/handlers.d.ts @@ -1,4 +1,4 @@ -import { TransactionEntity } from './models'; +import { TransactionEntity } from '../../../types/models'; export interface ToolsHandlers { 'tools/fix-split-transactions': () => Promise<{ diff --git a/packages/loot-core/src/shared/environment.ts b/packages/loot-core/src/shared/environment.ts index 275ddb398e..8a6d021107 100644 --- a/packages/loot-core/src/shared/environment.ts +++ b/packages/loot-core/src/shared/environment.ts @@ -1,5 +1,3 @@ -/* eslint-disable import/no-unused-modules */ - export function isPreviewEnvironment() { return String(process.env.REACT_APP_NETLIFY) === 'true'; } diff --git a/packages/loot-core/src/types/server-handlers.d.ts b/packages/loot-core/src/types/server-handlers.d.ts index 24032b4b5d..030ffdb2c5 100644 --- a/packages/loot-core/src/types/server-handlers.d.ts +++ b/packages/loot-core/src/types/server-handlers.d.ts @@ -19,6 +19,7 @@ import { } from './models'; import { OpenIdConfig } from './models/openid'; import { GlobalPrefs, MetadataPrefs } from './prefs'; +// eslint-disable-next-line import/no-unresolved import { Query } from './query'; import { EmptyObject } from './util'; diff --git a/upcoming-release-notes/3993.md b/upcoming-release-notes/3993.md new file mode 100644 index 0000000000..c5c5404368 --- /dev/null +++ b/upcoming-release-notes/3993.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [matt-fidd] +--- + +Migrate to ESLint v9 diff --git a/yarn.lock b/yarn.lock index f6a4ad2ab0..5f72026d30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -149,6 +149,13 @@ __metadata: languageName: node linkType: hard +"@antfu/utils@npm:^0.7.10": + version: 0.7.10 + resolution: "@antfu/utils@npm:0.7.10" + checksum: 10/c8c2797aeab3e88f0095dea5736d2f16137a7213195e568246792b2cceecb184234f018346dc07c252c62e4d9085c09ce6bd180da833266cafa65133fb03e075 + languageName: node + linkType: hard + "@apideck/better-ajv-errors@npm:^0.3.1": version: 0.3.6 resolution: "@apideck/better-ajv-errors@npm:0.3.6" @@ -2077,34 +2084,77 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.10.0": version: 4.11.0 resolution: "@eslint-community/regexpp@npm:4.11.0" checksum: 10/f053f371c281ba173fe6ee16dbc4fe544c84870d58035ccca08dba7f6ce1830d895ce3237a0db89ba37616524775dca82f1c502066b58e2d5712d7f87f5ba17c languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/eslintrc@npm:2.1.4" +"@eslint-community/regexpp@npm:^4.12.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10/c08f1dd7dd18fbb60bdd0d85820656d1374dd898af9be7f82cb00451313402a22d5e30569c150315b4385907cdbca78c22389b2a72ab78883b3173be317620cc + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.19.0": + version: 0.19.1 + resolution: "@eslint/config-array@npm:0.19.1" + dependencies: + "@eslint/object-schema": "npm:^2.1.5" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.2" + checksum: 10/1243b01f463de85c970c18f0994f9d1850dafe8cc8c910edb64105d845edd3cacaa0bbf028bf35a6daaf5a179021140b6a8b1dc7a2f915b42c2d35f022a9c201 + languageName: node + linkType: hard + +"@eslint/core@npm:^0.9.0": + version: 0.9.1 + resolution: "@eslint/core@npm:0.9.1" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10/f2263f8f94fdf84fc34573e027de98f1fce6287120513ae672ddf0652c75b9fa77c314d565628fc58e0a6f959766acc34c8191f9b94f1757b910408ffa04adde + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^3.2.0": + version: 3.2.0 + resolution: "@eslint/eslintrc@npm:3.2.0" dependencies: ajv: "npm:^6.12.4" debug: "npm:^4.3.2" - espree: "npm:^9.6.0" - globals: "npm:^13.19.0" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" ignore: "npm:^5.2.0" import-fresh: "npm:^3.2.1" js-yaml: "npm:^4.1.0" minimatch: "npm:^3.1.2" strip-json-comments: "npm:^3.1.1" - checksum: 10/7a3b14f4b40fc1a22624c3f84d9f467a3d9ea1ca6e9a372116cb92507e485260359465b58e25bcb6c9981b155416b98c9973ad9b796053fd7b3f776a6946bce8 + checksum: 10/b32dd90ce7da68e89b88cd729db46b27aac79a2e6cb1fa75d25a6b766d586b443bfbf59622489efbd3c6f696f147b51111e81ec7cd23d70f215c5d474cad0261 languageName: node linkType: hard -"@eslint/js@npm:8.57.0": - version: 8.57.0 - resolution: "@eslint/js@npm:8.57.0" - checksum: 10/3c501ce8a997cf6cbbaf4ed358af5492875e3550c19b9621413b82caa9ae5382c584b0efa79835639e6e0ddaa568caf3499318e5bdab68643ef4199dce5eb0a0 +"@eslint/js@npm:9.17.0": + version: 9.17.0 + resolution: "@eslint/js@npm:9.17.0" + checksum: 10/1a89e62f5c50e75d44565b7f3b91701455a999132c991e10bac59c118fbb54bdd54be22b9bda1ac730f78a2e64604403d65ce5dd7726d80b2632982cfc3d84ac + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.5": + version: 2.1.5 + resolution: "@eslint/object-schema@npm:2.1.5" + checksum: 10/bb07ec53357047f20de923bcd61f0306d9eee83ef41daa32e633e154a44796b5bd94670169eccb8fd8cb4ff42228a43b86953a6321f789f98194baba8207b640 + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.2.3": + version: 0.2.4 + resolution: "@eslint/plugin-kit@npm:0.2.4" + dependencies: + levn: "npm:^0.4.1" + checksum: 10/e34d02ea1dccd716e51369620263a4b2167aff3c0510ed776e21336cc3ad7158087449a76931baf07cdc33810cb6919db375f2e9f409435d2c6e0dd5f4786b25 languageName: node linkType: hard @@ -2196,14 +2246,20 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" +"@humanfs/core@npm:^0.19.1": + version: 0.19.1 + resolution: "@humanfs/core@npm:0.19.1" + checksum: 10/270d936be483ab5921702623bc74ce394bf12abbf57d9145a69e8a0d1c87eb1c768bd2d93af16c5705041e257e6d9cc7529311f63a1349f3678abc776fc28523 + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.6 + resolution: "@humanfs/node@npm:0.16.6" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.2" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: 10/3ffb24ecdfab64014a230e127118d50a1a04d11080cbb748bc21629393d100850496456bbcb4e8c438957fe0934430d731042f1264d6a167b62d32fc2863580a + "@humanfs/core": "npm:^0.19.1" + "@humanwhocodes/retry": "npm:^0.3.0" + checksum: 10/6d43c6727463772d05610aa05c83dab2bfbe78291022ee7a92cb50999910b8c720c76cc312822e2dea2b497aa1b3fef5fe9f68803fc45c9d4ed105874a65e339 languageName: node linkType: hard @@ -2214,10 +2270,17 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: 10/05bb99ed06c16408a45a833f03a732f59bf6184795d4efadd33238ff8699190a8c871ad1121241bb6501589a9598dc83bf25b99dcbcf41e155cdf36e35e937a3 +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.1 + resolution: "@humanwhocodes/retry@npm:0.3.1" + checksum: 10/eb457f699529de7f07649679ec9e0353055eebe443c2efe71c6dd950258892475a038e13c6a8c5e13ed1fb538cdd0a8794faa96b24b6ffc4c87fb1fc9f70ad7f + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.4.1": + version: 0.4.1 + resolution: "@humanwhocodes/retry@npm:0.4.1" + checksum: 10/39fafc7319e88f61befebd5e1b4f0136534ea6a9bd10d74366698187bd63544210ec5d79a87ed4d91297f1cc64c4c53d45fb0077a2abfdce212cf0d3862d5f04 languageName: node linkType: hard @@ -2706,7 +2769,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": +"@nodelib/fs.walk@npm:^1.2.3": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -2716,6 +2779,13 @@ __metadata: languageName: node linkType: hard +"@nolyfill/is-core-module@npm:1.0.39": + version: 1.0.39 + resolution: "@nolyfill/is-core-module@npm:1.0.39" + checksum: 10/0d6e098b871eca71d875651288e1f0fa770a63478b0b50479c99dc760c64175a56b5b04f58d5581bbcc6b552b8191ab415eada093d8df9597ab3423c8cac1815 + languageName: node + linkType: hard + "@npmcli/fs@npm:^2.1.0": version: 2.1.2 resolution: "@npmcli/fs@npm:2.1.2" @@ -4752,6 +4822,13 @@ __metadata: languageName: node linkType: hard +"@rtsao/scc@npm:^1.1.0": + version: 1.1.0 + resolution: "@rtsao/scc@npm:1.1.0" + checksum: 10/17d04adf404e04c1e61391ed97bca5117d4c2767a76ae3e879390d6dec7b317fcae68afbf9e98badee075d0b64fa60f287729c4942021b4d19cd01db77385c01 + languageName: node + linkType: hard + "@sideway/address@npm:^4.1.3": version: 4.1.4 resolution: "@sideway/address@npm:4.1.4" @@ -5426,6 +5503,23 @@ __metadata: languageName: node linkType: hard +"@types/eslint@npm:^9.6.1": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10/719fcd255760168a43d0e306ef87548e1e15bffe361d5f4022b0f266575637acc0ecb85604ac97879ee8ae83c6a6d0613b0ed31d0209ddf22a0fe6d608fc56fe + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10/9d35d475095199c23e05b431bcdd1f6fec7380612aed068b14b2a08aa70494de8a9026765a5a91b1073f636fb0368f6d8973f518a31391d519e20c59388ed88d + languageName: node + linkType: hard + "@types/estree@npm:0.0.39": version: 0.0.39 resolution: "@types/estree@npm:0.0.39" @@ -5539,6 +5633,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.8": version: 7.0.12 resolution: "@types/json-schema@npm:7.0.12" @@ -5851,15 +5952,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.1.0" +"@typescript-eslint/eslint-plugin@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/eslint-plugin@npm:8.18.1" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.1.0" - "@typescript-eslint/type-utils": "npm:8.1.0" - "@typescript-eslint/utils": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" + "@typescript-eslint/scope-manager": "npm:8.18.1" + "@typescript-eslint/type-utils": "npm:8.18.1" + "@typescript-eslint/utils": "npm:8.18.1" + "@typescript-eslint/visitor-keys": "npm:8.18.1" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -5867,110 +5968,159 @@ __metadata: peerDependencies: "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/bac7be38db0c06de5101b55cf5ab8e7c00031a0b5911680af359ccb1464741d5a94f58204831c1340c90a4b9ed537160a27eb1ee7d0a95751962c4e470c8116c + typescript: ">=4.8.4 <5.8.0" + checksum: 10/ec061a9c64477260d1ef0fc6283d8754838181e17aa90b3b8b9a70936a2ca4bae11607070917a7701e13f5301ced2b6da4b4b6e5cf525c484f97481e540b5111 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/parser@npm:8.1.0" +"@typescript-eslint/parser@npm:8.18.1, @typescript-eslint/parser@npm:^8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/parser@npm:8.18.1" dependencies: - "@typescript-eslint/scope-manager": "npm:8.1.0" - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/typescript-estree": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" + "@typescript-eslint/scope-manager": "npm:8.18.1" + "@typescript-eslint/types": "npm:8.18.1" + "@typescript-eslint/typescript-estree": "npm:8.18.1" + "@typescript-eslint/visitor-keys": "npm:8.18.1" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/e56c9d98edc38e6fd25e0dcb5afbb26589a56df3ae3b0a9619d52b50434fd52f39e885e503f2aac71e63e889a2c9b030844c549da67a7e4c2608828120242310 + typescript: ">=4.8.4 <5.8.0" + checksum: 10/09a601ef8b837962e5bb2687358520f337f9d0bbac5c6d5e159654faa5caaffb24d990e8d6bc4dc51ff5008dd9e182315c35bc5e9e3789090ccef8b8040e7659 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/scope-manager@npm:8.1.0" +"@typescript-eslint/scope-manager@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/scope-manager@npm:8.18.1" dependencies: - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" - checksum: 10/ce45240807385718d0507eea85967da5bb2861f11944700844ddf08683196a2ac5a898a5518b6a16d551b064f80cf89a4564799314f36169ada36b23ce45eb94 + "@typescript-eslint/types": "npm:8.18.1" + "@typescript-eslint/visitor-keys": "npm:8.18.1" + checksum: 10/14f7c09924c3a006b20752e5204b33c2b6974fc00bea16c23f471e65f2fb089fcbd3fb5296bcfd6727ac95c32ba24ebb15ba84fbf1deadc17b4cc5ca7f41c72a languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/type-utils@npm:8.1.0" +"@typescript-eslint/scope-manager@npm:8.19.0": + version: 8.19.0 + resolution: "@typescript-eslint/scope-manager@npm:8.19.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.1.0" - "@typescript-eslint/utils": "npm:8.1.0" + "@typescript-eslint/types": "npm:8.19.0" + "@typescript-eslint/visitor-keys": "npm:8.19.0" + checksum: 10/ab7f72533c62b6e7c87e4c91c187098e1026a8d67044c2a8376affede949c7c2f3d1b4bec0047d4001cd16c3a30db0b01672f596ef284d12b143cd4a984cdfdc + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/type-utils@npm:8.18.1" + dependencies: + "@typescript-eslint/typescript-estree": "npm:8.18.1" + "@typescript-eslint/utils": "npm:8.18.1" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/7f6d7a6e7c13df0a6fc46121052913f7420d19ebf4722fc3483908b5344ef04329be279668e8940ca4de60854fd00e00c3beb69e730bc6ef8d11701f1145f0ca + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10/cde53d05f4ca6e172239918cba2b560b9f837aa1fc7d5220784b1a6af9c8c525db020a5160822087e320305492fe359b7fb191420789b5f1e47a01e0cda21ac9 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/types@npm:8.1.0" - checksum: 10/fca0aff60f3bd5361af4132f7ffd5162b50bef371ef4ca40cbeaa9f7e95ace2794a30bd2311a6d82af04bb618f958ce61eebedfe520b7348638aa4adc5430dc6 +"@typescript-eslint/types@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/types@npm:8.18.1" + checksum: 10/57a6141ba17be929291a644991f3a76f94fce330376f6a079decb20fb53378d636ad6878f8f9b6fcb8244cf1ca8b118f9e8901ae04cf3de2aa9f9ff57791d97a languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.1.0" +"@typescript-eslint/types@npm:8.19.0": + version: 8.19.0 + resolution: "@typescript-eslint/types@npm:8.19.0" + checksum: 10/1bf02b6fcae72ccd60bbd9858e8e13ff49332bb819e9479d48b081026b62512baa8f72f2123bb3abdf816cc667aae25b311db941bee737afad6118189f761a17 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/typescript-estree@npm:8.18.1" dependencies: - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" + "@typescript-eslint/types": "npm:8.18.1" + "@typescript-eslint/visitor-keys": "npm:8.18.1" debug: "npm:^4.3.4" - globby: "npm:^11.1.0" + fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" minimatch: "npm:^9.0.4" semver: "npm:^7.6.0" ts-api-utils: "npm:^1.3.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/3e5dbeb942891aeb13cf9634abc59e0bcef5841103d59047bc7cd3a393adbaa9dddfe07f693555f9f82062ba9bb4ff66bed7032d6d390334bd016efb6262e3a1 + peerDependencies: + typescript: ">=4.8.4 <5.8.0" + checksum: 10/8ecc1b50b9fc32116eee1b3b00f3fb29cf18026c0bbb50ab5f6e01db58ef62b8ac01824f2950f132479be6e1b82466a2bfd1e2cb4525aa8dbce4c27fc2494cfc languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/utils@npm:8.1.0" +"@typescript-eslint/typescript-estree@npm:8.19.0": + version: 8.19.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.19.0" + dependencies: + "@typescript-eslint/types": "npm:8.19.0" + "@typescript-eslint/visitor-keys": "npm:8.19.0" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + typescript: ">=4.8.4 <5.8.0" + checksum: 10/6d396f82079f67d32a5ef644767697e8bbd79d166cc5ea034dcc2b146a62744de91d87885495ecfe3d9a0de98413e4dbb618b76bd657377df174cd2d12bab863 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/utils@npm:8.18.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.1.0" - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/typescript-estree": "npm:8.1.0" + "@typescript-eslint/scope-manager": "npm:8.18.1" + "@typescript-eslint/types": "npm:8.18.1" + "@typescript-eslint/typescript-estree": "npm:8.18.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - checksum: 10/0154e25aab8f3f99e8b9c88fda4a60ad8ecdf580eac3e71b6f4e3c5af23ee682559c57b6482af2fbe05b9deb7bcda322667e7d85ab7f778089dcaa2ce8ea2926 + typescript: ">=4.8.4 <5.8.0" + checksum: 10/7b33d2ac273ad606a3dcb776bcf02c901812952550cdc93d4ece272b3b0e5d2a4e05fa92f9bd466f4a296ddd5992902d3b6623aa1c29d09e8e392897103e42a8 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.1.0" +"@typescript-eslint/utils@npm:^8.17.0": + version: 8.19.0 + resolution: "@typescript-eslint/utils@npm:8.19.0" dependencies: - "@typescript-eslint/types": "npm:8.1.0" - eslint-visitor-keys: "npm:^3.4.3" - checksum: 10/e4570a4f07896a007e9e739956448f3ed7a69debd59a5d16b05426fa41b879cac1dce4b8338e03ef452b279147fcb36c15b8abea0e829897b5b894e711a14bd2 + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:8.19.0" + "@typescript-eslint/types": "npm:8.19.0" + "@typescript-eslint/typescript-estree": "npm:8.19.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10/e57f5e5d6fc00be3596f58be77904b66079f67a61effa633372ebcc92a0b6090f71183b3be145c55b5a5ab8f0536f98f0034c4d9a8031c1422e4e2753b97fd21 languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.2.0": - version: 1.2.0 - resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: 10/c6fe89a505e513a7592e1438280db1c075764793a2397877ff1351721fe8792a966a5359769e30242b3cd023f2efb9e63ca2ca88019d73b564488cc20e3eab12 +"@typescript-eslint/visitor-keys@npm:8.18.1": + version: 8.18.1 + resolution: "@typescript-eslint/visitor-keys@npm:8.18.1" + dependencies: + "@typescript-eslint/types": "npm:8.18.1" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10/00e88b1640a68c3afea08731395eb09a8216892248fee819cb7526e99093256743239d6b9e880a499f1c0ddfe2ffa4d1ad895d9e778b5d42e702d5880db1a594 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:8.19.0": + version: 8.19.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.19.0" + dependencies: + "@typescript-eslint/types": "npm:8.19.0" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10/065b95253be57cf5e8f15ebb09dbcb70e97cd37d238a6cf3d4be3c7bc42e94d77a062e8f97a2333a2e03eb58c736c00ec0ab3b7a1bddfef30387eb167776116e languageName: node linkType: hard @@ -6345,7 +6495,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.10.0, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.0.4, acorn@npm:^8.10.0, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.2": version: 8.11.2 resolution: "acorn@npm:8.11.2" bin: @@ -6354,30 +6504,39 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.14.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 10/6df29c35556782ca9e632db461a7f97947772c6c1d5438a81f0c873a3da3a792487e83e404d1c6c25f70513e91aa18745f6eafb1fcc3a43ecd1920b21dd173d2 + languageName: node + linkType: hard + "actual@workspace:.": version: 0.0.0-use.local resolution: "actual@workspace:." dependencies: - "@typescript-eslint/eslint-plugin": "npm:^8.1.0" - "@typescript-eslint/parser": "npm:^8.1.0" - confusing-browser-globals: "npm:^1.0.11" + "@typescript-eslint/parser": "npm:^8.18.1" cross-env: "npm:^7.0.3" - eslint: "npm:^8.57.0" + eslint: "npm:^9.17.0" eslint-config-prettier: "npm:^9.1.0" - eslint-import-resolver-typescript: "npm:3.6.1" - eslint-plugin-import: "npm:2.29.1" - eslint-plugin-jsx-a11y: "npm:^6.9.0" + eslint-import-resolver-typescript: "npm:^3.7.0" + eslint-plugin-import: "npm:^2.31.0" + eslint-plugin-jsx-a11y: "npm:^6.10.2" eslint-plugin-prettier: "npm:5.2.1" - eslint-plugin-react: "npm:7.35.0" - eslint-plugin-react-hooks: "npm:^4.6.2" + eslint-plugin-react: "npm:^7.37.2" + eslint-plugin-react-hooks: "npm:^5.1.0" eslint-plugin-rulesdir: "npm:^0.2.2" + globals: "npm:^15.13.0" husky: "npm:^9.0.11" lint-staged: "npm:^15.2.9" node-jq: "npm:^4.0.1" npm-run-all: "npm:^4.1.5" - prettier: "npm:3.3.3" + prettier: "npm:^3.4.2" source-map-support: "npm:^0.5.21" typescript: "npm:^5.5.4" + typescript-eslint: "npm:^8.18.1" typescript-strict-plugin: "npm:^2.4.4" languageName: unknown linkType: soft @@ -6620,7 +6779,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0, aria-query@npm:~5.1.3": +"aria-query@npm:^5.0.0": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -6629,6 +6788,13 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:^5.3.2": + version: 5.3.2 + resolution: "aria-query@npm:5.3.2" + checksum: 10/b2fe9bc98bd401bc322ccb99717c1ae2aaf53ea0d468d6e7aebdc02fac736e4a99b46971ee05b783b08ade23c675b2d8b60e4a1222a95f6e27bc4d2a0bfdcc03 + languageName: node + linkType: hard + "array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "array-buffer-byte-length@npm:1.0.1" @@ -6639,7 +6805,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7, array-includes@npm:^3.1.8": +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": version: 3.1.8 resolution: "array-includes@npm:3.1.8" dependencies: @@ -6674,7 +6840,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.3": +"array.prototype.findlastindex@npm:^1.2.5": version: 1.2.5 resolution: "array.prototype.findlastindex@npm:1.2.5" dependencies: @@ -6828,19 +6994,17 @@ __metadata: languageName: node linkType: hard -"axe-core@npm:^4.9.1": - version: 4.10.0 - resolution: "axe-core@npm:4.10.0" - checksum: 10/6158489a7a704edc98bd30ed56243b8280c5203c60e095a2feb5bff95d9bf2ef10becfe359b1cbc8601338418999c26cf4eee704181dedbcb487f4d63a06d8d5 +"axe-core@npm:^4.10.0": + version: 4.10.2 + resolution: "axe-core@npm:4.10.2" + checksum: 10/a69423b2ff16c15922c4ea7cf9cc5112728a2817bbe0f2cc212248d648885ffd1ba554e3a341dfc289cd9e67fc0d06f333b5c6837c5c38ca6652507381216fc1 languageName: node linkType: hard -"axobject-query@npm:~3.1.1": - version: 3.1.1 - resolution: "axobject-query@npm:3.1.1" - dependencies: - deep-equal: "npm:^2.0.5" - checksum: 10/3a3931bc419219e78d6438bc457c191e4c972caddae2be7eaa94615269209f1d283aaaece706a69742e5bcf27df99cc75eee97a5e366a06a9f2bdab1a79748c7 +"axobject-query@npm:^4.1.0": + version: 4.1.0 + resolution: "axobject-query@npm:4.1.0" + checksum: 10/e275dea9b673f71170d914f2d2a18be5d57d8d29717b629e7fedd907dcc2ebdc7a37803ff975874810bd423f222f299c020d28fde40a146f537448bf6bfecb6e languageName: node linkType: hard @@ -7400,6 +7564,16 @@ __metadata: languageName: node linkType: hard +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "call-bind-apply-helpers@npm:1.0.1" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10/6e30c621170e45f1fd6735e84d02ee8e02a3ab95cb109499d5308cbe5d1e84d0cd0e10b48cc43c76aa61450ae1b03a7f89c37c10fc0de8d4998b42aab0f268cc + languageName: node + linkType: hard + "call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": version: 1.0.7 resolution: "call-bind@npm:1.0.7" @@ -7413,6 +7587,28 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.2" + checksum: 10/659b03c79bbfccf0cde3a79e7d52570724d7290209823e1ca5088f94b52192dc1836b82a324d0144612f816abb2f1734447438e38d9dafe0b3f82c2a1b9e3bce + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bound@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.8" + get-intrinsic: "npm:^1.2.5" + checksum: 10/6f0020b8848307446ed410d0dcf40470b3c16d96a26d8d8bba2ea5bc1582f9bdfc49945cf270698495d4c0f422ad56d243a336855cfb0260feabf72952238cf8 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -7958,13 +8154,6 @@ __metadata: languageName: node linkType: hard -"confusing-browser-globals@npm:^1.0.11": - version: 1.0.11 - resolution: "confusing-browser-globals@npm:1.0.11" - checksum: 10/3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef - languageName: node - linkType: hard - "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -8120,7 +8309,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -8131,6 +8320,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10/0d52657d7ae36eb130999dffff1168ec348687b48dd38e2ff59992ed916c88d328cf1d07ff4a4a10bc78de5e1c23f04b306d569e42f7a2293915c081e4dfee86 + languageName: node + linkType: hard + "crypt@npm:0.0.2": version: 0.0.2 resolution: "crypt@npm:0.0.2" @@ -8442,6 +8642,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.7": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10/1847944c2e3c2c732514b93d11886575625686056cd765336212dc15de2d2b29612b6cd80e1afba767bb8e1803b778caf9973e98169ef1a24a7a7009e1820367 + languageName: node + linkType: hard + "decimal.js-light@npm:^2.4.1": version: 2.5.1 resolution: "decimal.js-light@npm:2.5.1" @@ -8825,15 +9037,6 @@ __metadata: languageName: node linkType: hard -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10/b4b28f1df5c563f7d876e7461254a4597b8cabe915abe94d7c5d1633fed263fcf9a85e8d3836591fc2d040108e822b0d32758e5ec1fe31c590dc7e08086e3e48 - languageName: node - linkType: hard - "dom-accessibility-api@npm:^0.5.9": version: 0.5.16 resolution: "dom-accessibility-api@npm:0.5.16" @@ -8964,6 +9167,17 @@ __metadata: languageName: node linkType: hard +"dunder-proto@npm:^1.0.0": + version: 1.0.0 + resolution: "dunder-proto@npm:1.0.0" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10/08e0487edc6b5f5e7cc91cbbe2cd7a81919f296b2e8092277776a75280005b340ab22c12b16ad0371c531e76d11898dae617325573144f50839e8f310df2a6ef + languageName: node + linkType: hard + "duplexer3@npm:^0.1.4": version: 0.1.5 resolution: "duplexer3@npm:0.1.5" @@ -9106,7 +9320,7 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.12.0, enhanced-resolve@npm:^5.17.1": +"enhanced-resolve@npm:^5.15.0, enhanced-resolve@npm:^5.17.1": version: 5.17.1 resolution: "enhanced-resolve@npm:5.17.1" dependencies: @@ -9176,7 +9390,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.5, es-abstract@npm:^1.20.4, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.20.4, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" dependencies: @@ -9230,6 +9444,60 @@ __metadata: languageName: node linkType: hard +"es-abstract@npm:^1.23.5": + version: 1.23.5 + resolution: "es-abstract@npm:1.23.5" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + arraybuffer.prototype.slice: "npm:^1.0.3" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + data-view-buffer: "npm:^1.0.1" + data-view-byte-length: "npm:^1.0.1" + data-view-byte-offset: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.0.3" + es-to-primitive: "npm:^1.2.1" + function.prototype.name: "npm:^1.1.6" + get-intrinsic: "npm:^1.2.4" + get-symbol-description: "npm:^1.0.2" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.3" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.0.7" + is-array-buffer: "npm:^3.0.4" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.1" + is-negative-zero: "npm:^2.0.3" + is-regex: "npm:^1.1.4" + is-shared-array-buffer: "npm:^1.0.3" + is-string: "npm:^1.0.7" + is-typed-array: "npm:^1.1.13" + is-weakref: "npm:^1.0.2" + object-inspect: "npm:^1.13.3" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.5" + regexp.prototype.flags: "npm:^1.5.3" + safe-array-concat: "npm:^1.1.2" + safe-regex-test: "npm:^1.0.3" + string.prototype.trim: "npm:^1.2.9" + string.prototype.trimend: "npm:^1.0.8" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.6" + unbox-primitive: "npm:^1.0.2" + which-typed-array: "npm:^1.1.15" + checksum: 10/2170afde7e1d2497586ad74176c2e12196db947fb1b3287fc097781a871b75ebe3aef5247e951e3bb3972a830b8d0eaa82a509518836a6d9f9fb4934b9294467 + languageName: node + linkType: hard + "es-define-property@npm:^1.0.0": version: 1.0.0 resolution: "es-define-property@npm:1.0.0" @@ -9239,6 +9507,13 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10/f8dc9e660d90919f11084db0a893128f3592b781ce967e4fccfb8f3106cb83e400a4032c559184ec52ee1dbd4b01e7776c7cd0b3327b1961b1a4a7008920fe78 + languageName: node + linkType: hard + "es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" @@ -9263,9 +9538,9 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.19": - version: 1.0.19 - resolution: "es-iterator-helpers@npm:1.0.19" +"es-iterator-helpers@npm:^1.1.0": + version: 1.2.0 + resolution: "es-iterator-helpers@npm:1.2.0" dependencies: call-bind: "npm:^1.0.7" define-properties: "npm:^1.2.1" @@ -9274,14 +9549,15 @@ __metadata: es-set-tostringtag: "npm:^2.0.3" function-bind: "npm:^1.1.2" get-intrinsic: "npm:^1.2.4" - globalthis: "npm:^1.0.3" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.0.1" has-property-descriptors: "npm:^1.0.2" has-proto: "npm:^1.0.3" has-symbols: "npm:^1.0.3" internal-slot: "npm:^1.0.7" - iterator.prototype: "npm:^1.1.2" + iterator.prototype: "npm:^1.1.3" safe-array-concat: "npm:^1.1.2" - checksum: 10/980a8081cf6798fe17fcea193b0448d784d72d76aca7240b10813207c67e3dc0d8a23992263870c4fc291da5a946935b0c56dec4fa1a9de8fee0165e4fa1fc58 + checksum: 10/a4159e36c6bae03d4b636894fff2ff1acfcedc16c622939298b00adf4d2da6356ad92f682cc75c037a012a4b06adb903f67dfdfd05bac61847e9b763de2acbcb languageName: node linkType: hard @@ -9575,33 +9851,40 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-typescript@npm:3.6.1": - version: 3.6.1 - resolution: "eslint-import-resolver-typescript@npm:3.6.1" +"eslint-import-resolver-typescript@npm:^3.7.0": + version: 3.7.0 + resolution: "eslint-import-resolver-typescript@npm:3.7.0" dependencies: - debug: "npm:^4.3.4" - enhanced-resolve: "npm:^5.12.0" - eslint-module-utils: "npm:^2.7.4" - fast-glob: "npm:^3.3.1" - get-tsconfig: "npm:^4.5.0" - is-core-module: "npm:^2.11.0" + "@nolyfill/is-core-module": "npm:1.0.39" + debug: "npm:^4.3.7" + enhanced-resolve: "npm:^5.15.0" + fast-glob: "npm:^3.3.2" + get-tsconfig: "npm:^4.7.5" + is-bun-module: "npm:^1.0.2" is-glob: "npm:^4.0.3" + stable-hash: "npm:^0.0.4" peerDependencies: eslint: "*" eslint-plugin-import: "*" - checksum: 10/261df24721a7c5e37ee598b63e7e12c54e3d20c9ae5de6dbc132cecced023cb967c481007eef73252da108ac7eabb2e859853ff2e2d5776699a2954466ca716f + eslint-plugin-import-x: "*" + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + checksum: 10/8158730c11e562c56ed9bf7236dc75bce35b6992dc32c39ac2f4177ab77fca97b95999850204a6458054243607b54aee88c028a61fed4184f24f425fa1afff01 languageName: node linkType: hard -"eslint-module-utils@npm:^2.7.4, eslint-module-utils@npm:^2.8.0": - version: 2.8.1 - resolution: "eslint-module-utils@npm:2.8.1" +"eslint-module-utils@npm:^2.12.0": + version: 2.12.0 + resolution: "eslint-module-utils@npm:2.12.0" dependencies: debug: "npm:^3.2.7" peerDependenciesMeta: eslint: optional: true - checksum: 10/3e7892c0a984c963632da56b30ccf8254c29b535467138f91086c2ecdb2ebd10e2be61b54e553f30e5abf1d14d47a7baa0dac890e3a658fd3cd07dca63afbe6d + checksum: 10/dd27791147eca17366afcb83f47d6825b6ce164abb256681e5de4ec1d7e87d8605641eb869298a0dbc70665e2446dbcc2f40d3e1631a9475dd64dd23d4ca5dee languageName: node linkType: hard @@ -9611,9 +9894,9 @@ __metadata: dependencies: eslint-plugin-eslint-plugin: "npm:^5.5.1" eslint-plugin-node: "npm:^11.1.0" - jest: "npm:^27.5.1" - npm-run-all: "npm:^4.1.5" + eslint-vitest-rule-tester: "npm:^0.7.1" requireindex: "npm:^1.2.0" + vitest: "npm:^1.6.0" peerDependencies: eslint: ">=7" languageName: unknown @@ -9643,56 +9926,57 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:2.29.1": - version: 2.29.1 - resolution: "eslint-plugin-import@npm:2.29.1" +"eslint-plugin-import@npm:^2.31.0": + version: 2.31.0 + resolution: "eslint-plugin-import@npm:2.31.0" dependencies: - array-includes: "npm:^3.1.7" - array.prototype.findlastindex: "npm:^1.2.3" + "@rtsao/scc": "npm:^1.1.0" + array-includes: "npm:^3.1.8" + array.prototype.findlastindex: "npm:^1.2.5" array.prototype.flat: "npm:^1.3.2" array.prototype.flatmap: "npm:^1.3.2" debug: "npm:^3.2.7" doctrine: "npm:^2.1.0" eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.8.0" - hasown: "npm:^2.0.0" - is-core-module: "npm:^2.13.1" + eslint-module-utils: "npm:^2.12.0" + hasown: "npm:^2.0.2" + is-core-module: "npm:^2.15.1" is-glob: "npm:^4.0.3" minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.7" - object.groupby: "npm:^1.0.1" - object.values: "npm:^1.1.7" + object.fromentries: "npm:^2.0.8" + object.groupby: "npm:^1.0.3" + object.values: "npm:^1.2.0" semver: "npm:^6.3.1" + string.prototype.trimend: "npm:^1.0.8" tsconfig-paths: "npm:^3.15.0" peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 10/5865f05c38552145423c535326ec9a7113ab2305c7614c8b896ff905cfabc859c8805cac21e979c9f6f742afa333e6f62f812eabf891a7e8f5f0b853a32593c1 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + checksum: 10/6b76bd009ac2db0615d9019699d18e2a51a86cb8c1d0855a35fb1b418be23b40239e6debdc6e8c92c59f1468ed0ea8d7b85c817117a113d5cc225be8a02ad31c languageName: node linkType: hard -"eslint-plugin-jsx-a11y@npm:^6.9.0": - version: 6.9.0 - resolution: "eslint-plugin-jsx-a11y@npm:6.9.0" +"eslint-plugin-jsx-a11y@npm:^6.10.2": + version: 6.10.2 + resolution: "eslint-plugin-jsx-a11y@npm:6.10.2" dependencies: - aria-query: "npm:~5.1.3" + aria-query: "npm:^5.3.2" array-includes: "npm:^3.1.8" array.prototype.flatmap: "npm:^1.3.2" ast-types-flow: "npm:^0.0.8" - axe-core: "npm:^4.9.1" - axobject-query: "npm:~3.1.1" + axe-core: "npm:^4.10.0" + axobject-query: "npm:^4.1.0" damerau-levenshtein: "npm:^1.0.8" emoji-regex: "npm:^9.2.2" - es-iterator-helpers: "npm:^1.0.19" hasown: "npm:^2.0.2" jsx-ast-utils: "npm:^3.3.5" language-tags: "npm:^1.0.9" minimatch: "npm:^3.1.2" object.fromentries: "npm:^2.0.8" safe-regex-test: "npm:^1.0.3" - string.prototype.includes: "npm:^2.0.0" + string.prototype.includes: "npm:^2.0.1" peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10/00a854a1a1a7ca52c216e83a574d5a65fc150243afcababfbf1657c5ffff1f076b9bd3d87029bb6432bfaa36d23e16c1e8b59671d0580bbb72e14860ee1bec9a + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + checksum: 10/388550798548d911e2286d530a29153ca00434a06fcfc0e31e0dda46a5e7960005e532fb29ce1ccbf1e394a3af3e5cf70c47ca43778861eacc5e3ed799adb79c languageName: node linkType: hard @@ -9732,25 +10016,25 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.6.2": - version: 4.6.2 - resolution: "eslint-plugin-react-hooks@npm:4.6.2" +"eslint-plugin-react-hooks@npm:^5.1.0": + version: 5.1.0 + resolution: "eslint-plugin-react-hooks@npm:5.1.0" peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 10/5a0680941f34e70cf505bcb6082df31a3e445d193ee95a88ff3483041eb944f4cefdaf7e81b0eb1feb4eeceee8c7c6ddb8a2a6e8c4c0388514a42e16ac7b7a69 + 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/b6778fd9e1940b06868921309e8b269426e17eda555816d4b71def4dcf0572de1199fdb627ac09ce42160b9569a93cd9b0fd81b740ab4df98205461c53997a43 languageName: node linkType: hard -"eslint-plugin-react@npm:7.35.0": - version: 7.35.0 - resolution: "eslint-plugin-react@npm:7.35.0" +"eslint-plugin-react@npm:^7.37.2": + version: 7.37.2 + resolution: "eslint-plugin-react@npm:7.37.2" dependencies: array-includes: "npm:^3.1.8" array.prototype.findlast: "npm:^1.2.5" array.prototype.flatmap: "npm:^1.3.2" array.prototype.tosorted: "npm:^1.1.4" doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.0.19" + es-iterator-helpers: "npm:^1.1.0" estraverse: "npm:^5.3.0" hasown: "npm:^2.0.2" jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" @@ -9765,7 +10049,7 @@ __metadata: string.prototype.repeat: "npm:^1.0.0" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 10/fa0a54f9ea249cf89d92bb5983bf7df741da3709a0ebd6a885a67d05413ed302fd8b64c9dc819b33df8efa6d8b06f5e56b1f6965a9be7cc3e79054da4dbae5ed + checksum: 10/df2f7ab198018d3378f305a8a5ceceebc9bd31f019fc7567a2ef9c77789dc8a6a2c3c3957f8b0805f26c11c02f9f86c972e02cd0eda12f4d0370526c11f8a9a3 languageName: node linkType: hard @@ -9786,13 +10070,13 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" +"eslint-scope@npm:^8.2.0": + version: 8.2.0 + resolution: "eslint-scope@npm:8.2.0" dependencies: esrecurse: "npm:^4.3.0" estraverse: "npm:^5.2.0" - checksum: 10/5c660fb905d5883ad018a6fea2b49f3cb5b1cbf2cd4bd08e98646e9864f9bc2c74c0839bed2d292e90a4a328833accc197c8f0baed89cbe8d605d6f918465491 + checksum: 10/cd9ab60d5a68f3a0fcac04d1cff5a7383d0f331964d5f1c446259123caec5b3ccc542284d07846e4f4d1389da77750821cc9a6e1ce18558c674977351666f9a6 languageName: node linkType: hard @@ -9830,69 +10114,91 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": +"eslint-visitor-keys@npm:^3.3.0": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 10/3f357c554a9ea794b094a09bd4187e5eacd1bc0d0653c3adeb87962c548e6a1ab8f982b86963ae1337f5d976004146536dcee5d0e2806665b193fbfbf1a9231b languageName: node linkType: hard -"eslint@npm:^8.57.0": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" +"eslint-visitor-keys@npm:^4.2.0": + version: 4.2.0 + resolution: "eslint-visitor-keys@npm:4.2.0" + checksum: 10/9651b3356b01760e586b4c631c5268c0e1a85236e3292bf754f0472f465bf9a856c0ddc261fceace155334118c0151778effafbab981413dbf9288349343fa25 + languageName: node + linkType: hard + +"eslint-vitest-rule-tester@npm:^0.7.1": + version: 0.7.1 + resolution: "eslint-vitest-rule-tester@npm:0.7.1" + dependencies: + "@antfu/utils": "npm:^0.7.10" + "@types/eslint": "npm:^9.6.1" + "@typescript-eslint/utils": "npm:^8.17.0" + peerDependencies: + eslint: ^9.0.0 + vitest: ^1.0.0 || ^2.0.0 + checksum: 10/d3c45fc135d7aba189d2f1778476b797b3b4e729c7113a6b182284642553a892d29877df1badfcd33290fa4f04a52126a89437634d5b1d68176749ccc531bae6 + languageName: node + linkType: hard + +"eslint@npm:^9.17.0": + version: 9.17.0 + resolution: "eslint@npm:9.17.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.0" - "@humanwhocodes/config-array": "npm:^0.11.14" + "@eslint-community/regexpp": "npm:^4.12.1" + "@eslint/config-array": "npm:^0.19.0" + "@eslint/core": "npm:^0.9.0" + "@eslint/eslintrc": "npm:^3.2.0" + "@eslint/js": "npm:9.17.0" + "@eslint/plugin-kit": "npm:^0.2.3" + "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - "@ungap/structured-clone": "npm:^1.2.0" + "@humanwhocodes/retry": "npm:^0.4.1" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" ajv: "npm:^6.12.4" chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" + cross-spawn: "npm:^7.0.6" debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.2" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - esquery: "npm:^1.4.2" + eslint-scope: "npm:^8.2.0" + eslint-visitor-keys: "npm:^4.2.0" + espree: "npm:^10.3.0" + esquery: "npm:^1.5.0" esutils: "npm:^2.0.2" fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" + file-entry-cache: "npm:^8.0.0" find-up: "npm:^5.0.0" glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" ignore: "npm:^5.2.0" imurmurhash: "npm:^0.1.4" is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" lodash.merge: "npm:^4.6.2" minimatch: "npm:^3.1.2" natural-compare: "npm:^1.4.0" optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true bin: eslint: bin/eslint.js - checksum: 10/00496e218b23747a7a9817bf58b522276d0dc1f2e546dceb4eea49f9871574088f72f1f069a6b560ef537efa3a75261b8ef70e51ef19033da1cc4c86a755ef15 + checksum: 10/a48ee67dd4e737974bbb49ca5d12d0ce35bcd874507807599e3655bb398320ab27c9deed1aad508a963967815e626c21208f52158c2fc0796d0cc8186528efeb languageName: node linkType: hard -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" +"espree@npm:^10.0.1, espree@npm:^10.3.0": + version: 10.3.0 + resolution: "espree@npm:10.3.0" dependencies: - acorn: "npm:^8.9.0" + acorn: "npm:^8.14.0" acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10/255ab260f0d711a54096bdeda93adff0eadf02a6f9b92f02b323e83a2b7fc258797919437ad331efec3930475feb0142c5ecaaf3cdab4befebd336d47d3f3134 + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10/3412d44d4204c9e29d6b5dd0277400cfa0cd68495dc09eae1b9ce79d0c8985c1c5cc09cb9ba32a1cd963f48a49b0c46bdb7736afe395a300aa6bb1c0d86837e8 languageName: node linkType: hard @@ -9906,12 +10212,12 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" +"esquery@npm:^1.5.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: "npm:^5.1.0" - checksum: 10/e65fcdfc1e0ff5effbf50fb4f31ea20143ae5df92bb2e4953653d8d40aa4bc148e0d06117a592ce4ea53eeab1dafdfded7ea7e22a5be87e82d73757329a1b01d + checksum: 10/c587fb8ec9ed83f2b1bc97cf2f6854cc30bf784a79d62ba08c6e358bf22280d69aee12827521cf38e69ae9761d23fb7fde593ce315610f85655c139d99b05e5a languageName: node linkType: hard @@ -10211,7 +10517,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.1, fast-glob@npm:^3.3.2": +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: @@ -10282,12 +10588,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" dependencies: - flat-cache: "npm:^3.0.4" - checksum: 10/099bb9d4ab332cb93c48b14807a6918a1da87c45dce91d4b61fd40e6505d56d0697da060cb901c729c90487067d93c9243f5da3dc9c41f0358483bfdebca736b + flat-cache: "npm:^4.0.0" + checksum: 10/afe55c4de4e0d226a23c1eae62a7219aafb390859122608a89fa4df6addf55c7fd3f1a2da6f5b41e7cdff496e4cf28bbd215d53eab5c817afa96d2b40c81bfb0 languageName: node linkType: hard @@ -10382,20 +10688,20 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^3.0.4": - version: 3.0.4 - resolution: "flat-cache@npm:3.0.4" +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" dependencies: - flatted: "npm:^3.1.0" - rimraf: "npm:^3.0.2" - checksum: 10/9fe5d0cb97c988e3b25242e71346965fae22757674db3fca14206850af2efa3ca3b04a3ba0eba8d5e20fd8a3be80a2e14b1c2917e70ffe1acb98a8c3327e4c9f + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + checksum: 10/58ce851d9045fffc7871ce2bd718bc485ad7e777bf748c054904b87c351ff1080c2c11da00788d78738bfb51b71e4d5ea12d13b98eb36e3358851ffe495b62dc languageName: node linkType: hard -"flatted@npm:^3.1.0": - version: 3.2.7 - resolution: "flatted@npm:3.2.7" - checksum: 10/427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 +"flatted@npm:^3.2.9": + version: 3.3.2 + resolution: "flatted@npm:3.3.2" + checksum: 10/ac3c159742e01d0e860a861164bcfd35bb567ccbebb8a0dd041e61cf3c64a435b917dd1e7ed1c380c2ebca85735fb16644485ec33665bc6aafc3b316aa1eed44 languageName: node linkType: hard @@ -10697,6 +11003,24 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6": + version: 1.2.6 + resolution: "get-intrinsic@npm:1.2.6" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + dunder-proto: "npm:^1.0.0" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + function-bind: "npm:^1.1.2" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.0.0" + checksum: 10/a1ffae6d7893a6fa0f4d1472adbc85095edd6b3b0943ead97c3738539cecb19d422ff4d48009eed8c3c27ad678c2b1e38a83b1a1e96b691d13ed8ecefca1068d + languageName: node + linkType: hard + "get-own-enumerable-property-symbols@npm:^3.0.0": version: 3.0.2 resolution: "get-own-enumerable-property-symbols@npm:3.0.2" @@ -10771,12 +11095,12 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:^4.5.0": - version: 4.6.0 - resolution: "get-tsconfig@npm:4.6.0" +"get-tsconfig@npm:^4.7.5": + version: 4.8.1 + resolution: "get-tsconfig@npm:4.8.1" dependencies: resolve-pkg-maps: "npm:^1.0.0" - checksum: 10/a54e9f1e31e689d9cc9b66070d5448952eba718c7c2950678e169b966faa317ae3bfa0d497958d5cb7e4c86abd276501ca9b15405be27cf9b33c235b7bcece0e + checksum: 10/3fb5a8ad57b9633eaea085d81661e9e5c9f78b35d8f8689eaf8b8b45a2a3ebf3b3422266d4d7df765e308cc1e6231648d114803ab3d018332e29916f2c1de036 languageName: node linkType: hard @@ -10891,12 +11215,17 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.19.0": - version: 13.20.0 - resolution: "globals@npm:13.20.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10/9df85cde2f0dce6ac9b3a5e08bec109d2f3b38ddd055a83867e0672c55704866d53ce6a4265859fa630624baadd46f50ca38602a13607ad86be853a8c179d3e7 +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10/03939c8af95c6df5014b137cac83aa909090c3a3985caef06ee9a5a669790877af8698ab38007e4c0186873adc14c0b13764acc754b16a754c216cc56aa5f021 + languageName: node + linkType: hard + +"globals@npm:^15.13.0": + version: 15.13.0 + resolution: "globals@npm:15.13.0" + checksum: 10/ba84d0612d516bcc1dabdd9ce66667956e1a87401fb53be6c379f8f6a04f8e6ce415b584801ae2689a90e788e89bb38adfafc854a8a50ae8e322bb4dd35a2105 languageName: node linkType: hard @@ -10909,7 +11238,17 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.4, globby@npm:^11.1.0": +"globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10/1f1fd078fb2f7296306ef9dd51019491044ccf17a59ed49d375b576ca108ff37e47f3d29aead7add40763574a992f16a5367dd1e2173b8634ef18556ab719ac4 + languageName: node + linkType: hard + +"globby@npm:^11.0.4": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -10946,6 +11285,13 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10/94e296d69f92dc1c0768fcfeecfb3855582ab59a7c75e969d5f96ce50c3d201fd86d5a2857c22565764d5bb8a816c7b1e58f133ec318cd56274da36c5e3fb1a1 + languageName: node + linkType: hard + "got@npm:^11.7.0, got@npm:^11.8.5": version: 11.8.6 resolution: "got@npm:11.8.6" @@ -11088,6 +11434,13 @@ __metadata: languageName: node linkType: hard +"has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10/959385c98696ebbca51e7534e0dc723ada325efa3475350951363cce216d27373e0259b63edb599f72eb94d6cde8577b4b2375f080b303947e560f85692834fa + languageName: node + linkType: hard + "has-to-string-tag-x@npm:^1.2.0": version: 1.4.1 resolution: "has-to-string-tag-x@npm:1.4.1" @@ -11569,6 +11922,15 @@ __metadata: languageName: node linkType: hard +"is-bigint@npm:^1.1.0": + version: 1.1.0 + resolution: "is-bigint@npm:1.1.0" + dependencies: + has-bigints: "npm:^1.0.2" + checksum: 10/10cf327310d712fe227cfaa32d8b11814c214392b6ac18c827f157e1e85363cf9c8e2a22df526689bd5d25e53b58cc110894787afb54e138e7c504174dba15fd + languageName: node + linkType: hard + "is-binary-path@npm:~2.1.0": version: 2.1.0 resolution: "is-binary-path@npm:2.1.0" @@ -11588,6 +11950,16 @@ __metadata: languageName: node linkType: hard +"is-boolean-object@npm:^1.2.0": + version: 1.2.1 + resolution: "is-boolean-object@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10/5a15524635c9334ebbd668f20a6cbf023adceed5725ec96a50056d21ae65f52759d04a8fa7d7febf00ff3bc4e6d3837638eb84be572f287bcfd15f8b8facde43 + languageName: node + linkType: hard + "is-buffer@npm:^2.0.0": version: 2.0.5 resolution: "is-buffer@npm:2.0.5" @@ -11611,6 +11983,15 @@ __metadata: languageName: node linkType: hard +"is-bun-module@npm:^1.0.2": + version: 1.3.0 + resolution: "is-bun-module@npm:1.3.0" + dependencies: + semver: "npm:^7.6.3" + checksum: 10/b23d9ec7b4d4bfd89e4e72b5cd52e1bc153facad59fdd7394c656f8859a78740ef35996a2066240a32f39cc9a9da4b4eb69e68df3c71755a61ebbaf56d3daef0 + languageName: node + linkType: hard + "is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" @@ -11629,7 +12010,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": +"is-core-module@npm:^2.13.0": version: 2.15.0 resolution: "is-core-module@npm:2.15.0" dependencies: @@ -11638,6 +12019,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.15.1": + version: 2.16.0 + resolution: "is-core-module@npm:2.16.0" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10/064442b9eefb7162376a4a414aa98b1e0c6cbb471507e66966b7d6d607a3f60eb09c7da4ee401648640a389e4af0f5a770bd5b3cd9c1084853e4a57f472408f8 + languageName: node + linkType: hard + "is-data-view@npm:^1.0.1": version: 1.0.1 resolution: "is-data-view@npm:1.0.1" @@ -11656,6 +12046,16 @@ __metadata: languageName: node linkType: hard +"is-date-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-date-object@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10/3a811b2c3176fb31abee1d23d3dc78b6c65fd9c07d591fcb67553cab9e7f272728c3dd077d2d738b53f9a2103255b0a6e8dfc9568a7805c56a78b2563e8d1dec + languageName: node + linkType: hard + "is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" @@ -11679,12 +12079,12 @@ __metadata: languageName: node linkType: hard -"is-finalizationregistry@npm:^1.0.2": - version: 1.0.2 - resolution: "is-finalizationregistry@npm:1.0.2" +"is-finalizationregistry@npm:^1.1.0": + version: 1.1.0 + resolution: "is-finalizationregistry@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.2" - checksum: 10/1b8e9e1bf2075e862315ef9d38ce6d39c43ca9d81d46f73b34473506992f4b0fbaadb47ec9b420a5e76afe3f564d9f1f0d9b552ef272cc2395e0f21d743c9c29 + call-bind: "npm:^1.0.7" + checksum: 10/0a812f3ef86fa3e3caf6bb8c6d61b7fc65df88f9751f73617331a5a7e35bb0a192d0c320dbf2f8b97a6819491e52126615313ba9900529697f226235627c58b5 languageName: node linkType: hard @@ -11822,6 +12222,16 @@ __metadata: languageName: node linkType: hard +"is-number-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-number-object@npm:1.1.0" + dependencies: + call-bind: "npm:^1.0.7" + has-tostringtag: "npm:^1.0.2" + checksum: 10/d0907f2e5fc3002cbd934fbf2276a32f901a567fc888d851bc4acf837d22bce53529aabb63a260eae154b411ce078df17872afeed25dfe80f2cdbffd3babf54a + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -11843,13 +12253,6 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: 10/abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - "is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": version: 1.1.0 resolution: "is-plain-obj@npm:1.1.0" @@ -11897,6 +12300,18 @@ __metadata: languageName: node linkType: hard +"is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10/c42b7efc5868a5c9a4d8e6d3e9816e8815c611b09535c00fead18a1138455c5cb5e1887f0023a467ad3f9c419d62ba4dc3d9ba8bafe55053914d6d6454a945d2 + languageName: node + linkType: hard + "is-regexp@npm:^1.0.0": version: 1.0.0 resolution: "is-regexp@npm:1.0.0" @@ -11957,6 +12372,16 @@ __metadata: languageName: node linkType: hard +"is-string@npm:^1.1.0": + version: 1.1.0 + resolution: "is-string@npm:1.1.0" + dependencies: + call-bind: "npm:^1.0.7" + has-tostringtag: "npm:^1.0.2" + checksum: 10/77331f04c38b36e8438abc7111345335ba845a71fd2e05b1e2ae678128fa236b992f480dcbdbab10f99e115ff87cd5a01e61b3f2cbe02daae2c6177a05890d56 + languageName: node + linkType: hard + "is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": version: 1.0.4 resolution: "is-symbol@npm:1.0.4" @@ -11966,6 +12391,17 @@ __metadata: languageName: node linkType: hard +"is-symbol@npm:^1.1.0": + version: 1.1.1 + resolution: "is-symbol@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + safe-regex-test: "npm:^1.1.0" + checksum: 10/db495c0d8cd0a7a66b4f4ef7fccee3ab5bd954cb63396e8ac4d32efe0e9b12fdfceb851d6c501216a71f4f21e5ff20fc2ee845a3d52d455e021c466ac5eb2db2 + languageName: node + linkType: hard + "is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.3": version: 1.1.13 resolution: "is-typed-array@npm:1.1.13" @@ -12151,16 +12587,17 @@ __metadata: languageName: node linkType: hard -"iterator.prototype@npm:^1.1.2": - version: 1.1.2 - resolution: "iterator.prototype@npm:1.1.2" +"iterator.prototype@npm:^1.1.3": + version: 1.1.4 + resolution: "iterator.prototype@npm:1.1.4" dependencies: - define-properties: "npm:^1.2.1" - get-intrinsic: "npm:^1.2.1" - has-symbols: "npm:^1.0.3" - reflect.getprototypeof: "npm:^1.0.4" - set-function-name: "npm:^2.0.1" - checksum: 10/b5013967ad8f28c9ca1be8e159eb10f591b8e46deae87476fe39d668c04374fe9158c815e8b6d2f45885b0a3fd842a8ba13f497ec762b3a0eff49bec278670b1 + define-data-property: "npm:^1.1.4" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.6" + has-symbols: "npm:^1.1.0" + reflect.getprototypeof: "npm:^1.0.8" + set-function-name: "npm:^2.0.2" + checksum: 10/3a7a4568437a67d5b1d863128fabf6cd0875d3a5cb36029036a72fa5ae4c97bad6423529d23083a4f6ae6c72c5d1d70b661124c3d6d964520325fd4ce753ee1a languageName: node linkType: hard @@ -13104,6 +13541,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.4": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10/167eb6ef64cc84b6fa0780ee50c9de456b422a1e18802209234f7c2cf7eae648c7741f32e50d7e24ccb22b24c13154070b01563d642755b156c357431a191e75 + languageName: node + linkType: hard + "kind-of@npm:^6.0.2": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -13628,6 +14074,13 @@ __metadata: languageName: node linkType: hard +"math-intrinsics@npm:^1.0.0": + version: 1.0.0 + resolution: "math-intrinsics@npm:1.0.0" + checksum: 10/556c49f608c995eb639b65b4709ae4bdde953c5460ff7134458488fc41a9c7bf1dca1e3e75d7a1dd112b70369c4d5ade7ce8e919b8faadcf9880353f9a4fa14a + languageName: node + linkType: hard + "md5@npm:^2.3.0": version: 2.3.0 resolution: "md5@npm:2.3.0" @@ -14275,7 +14728,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.2, minimatch@npm:^3.0.3, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.2, minimatch@npm:^3.0.3, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -14485,7 +14938,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -14839,6 +15292,13 @@ __metadata: languageName: node linkType: hard +"object-inspect@npm:^1.13.3": + version: 1.13.3 + resolution: "object-inspect@npm:1.13.3" + checksum: 10/14cb973d8381c69e14d7f1c8c75044eb4caf04c6dabcf40ca5c2ce42dc2073ae0bb2a9939eeca142b0c05215afaa1cd5534adb7c8879c32cba2576e045ed8368 + languageName: node + linkType: hard + "object-is@npm:^1.1.5": version: 1.1.5 resolution: "object-is@npm:1.1.5" @@ -14879,7 +15339,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.7, object.fromentries@npm:^2.0.8": +"object.fromentries@npm:^2.0.8": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" dependencies: @@ -14891,7 +15351,7 @@ __metadata: languageName: node linkType: hard -"object.groupby@npm:^1.0.1": +"object.groupby@npm:^1.0.3": version: 1.0.3 resolution: "object.groupby@npm:1.0.3" dependencies: @@ -14902,7 +15362,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.6, object.values@npm:^1.1.7, object.values@npm:^1.2.0": +"object.values@npm:^1.1.6, object.values@npm:^1.2.0": version: 1.2.0 resolution: "object.values@npm:1.2.0" dependencies: @@ -15519,15 +15979,6 @@ __metadata: languageName: node linkType: hard -"prettier@npm:3.3.3": - version: 3.3.3 - resolution: "prettier@npm:3.3.3" - bin: - prettier: bin/prettier.cjs - checksum: 10/5beac1f30b5b40162532b8e2f7c3a4eb650910a2695e9c8512a62ffdc09dae93190c29db9107fa7f26d1b6c71aad3628ecb9b5de1ecb0911191099be109434d7 - languageName: node - linkType: hard - "prettier@npm:^2.8.7": version: 2.8.8 resolution: "prettier@npm:2.8.8" @@ -15537,6 +15988,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:^3.4.2": + version: 3.4.2 + resolution: "prettier@npm:3.4.2" + bin: + prettier: bin/prettier.cjs + checksum: 10/a3e806fb0b635818964d472d35d27e21a4e17150c679047f5501e1f23bd4aa806adf660f0c0d35214a210d5d440da6896c2e86156da55f221a57938278dc326e + languageName: node + linkType: hard + "pretty-bytes@npm:^5.3.0": version: 5.6.0 resolution: "pretty-bytes@npm:5.6.0" @@ -16370,18 +16830,19 @@ __metadata: languageName: node linkType: hard -"reflect.getprototypeof@npm:^1.0.4": - version: 1.0.6 - resolution: "reflect.getprototypeof@npm:1.0.6" +"reflect.getprototypeof@npm:^1.0.8": + version: 1.0.8 + resolution: "reflect.getprototypeof@npm:1.0.8" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.1" + dunder-proto: "npm:^1.0.0" + es-abstract: "npm:^1.23.5" es-errors: "npm:^1.3.0" get-intrinsic: "npm:^1.2.4" - globalthis: "npm:^1.0.3" - which-builtin-type: "npm:^1.1.3" - checksum: 10/518f6457e4bb470c9b317d239c62d4b4a05678b7eae4f1c3f4332fad379b3ea6d2d8999bfad448547fdba8fb77e4725cfe8c6440d0168ff387f16b4f19f759ad + gopd: "npm:^1.2.0" + which-builtin-type: "npm:^1.2.0" + checksum: 10/bd583a59261faf22504267caaecd548d4c9b5df1addc9f9fa2dcd716ef9dcb947198c3999cbd827dd5b396ab0ed76772479102c2f3d3f7bfc9adb9c1c37bbc72 languageName: node linkType: hard @@ -16429,6 +16890,18 @@ __metadata: languageName: node linkType: hard +"regexp.prototype.flags@npm:^1.5.3": + version: 1.5.3 + resolution: "regexp.prototype.flags@npm:1.5.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.2" + checksum: 10/fe17bc4eebbc72945aaf9dd059eb7784a5ca453a67cc4b5b3e399ab08452c9a05befd92063e2c52e7b24d9238c60031656af32dd57c555d1ba6330dbf8c23b43 + languageName: node + linkType: hard + "regexpp@npm:^3.0.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" @@ -16892,6 +17365,17 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.2.1" + checksum: 10/ebdb61f305bf4756a5b023ad86067df5a11b26898573afe9e52a548a63c3bd594825d9b0e2dde2eb3c94e57e0e04ac9929d4107c394f7b8e56a4613bed46c69a + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -16994,7 +17478,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.6.0": +"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.6.0, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -17028,7 +17512,7 @@ __metadata: languageName: node linkType: hard -"set-function-length@npm:^1.2.1": +"set-function-length@npm:^1.2.1, set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" dependencies: @@ -17444,6 +17928,13 @@ __metadata: languageName: node linkType: hard +"stable-hash@npm:^0.0.4": + version: 0.0.4 + resolution: "stable-hash@npm:0.0.4" + checksum: 10/21c039d21c1cb739cf8342561753a5e007cb95ea682ccd452e76310bbb9c6987a89de8eda023e320b019f3e4691aabda75079cdbb7dadf7ab9013e931f2f23cd + languageName: node + linkType: hard + "stack-utils@npm:^2.0.3": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" @@ -17577,13 +18068,14 @@ __metadata: languageName: node linkType: hard -"string.prototype.includes@npm:^2.0.0": - version: 2.0.0 - resolution: "string.prototype.includes@npm:2.0.0" +"string.prototype.includes@npm:^2.0.1": + version: 2.0.1 + resolution: "string.prototype.includes@npm:2.0.1" dependencies: - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.17.5" - checksum: 10/34c1e71ac5cab469bef52a4f3d983d141ca61c43b9fe8859574c8829822aad0a61fce1dddfaf8a48ad7ac5032a1730c19f1fb2d09715f57025cd138b1ad4b0e4 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.3" + checksum: 10/939a5447e4a99a86f29cc97fa24f358e5071f79e34746de4c7eb2cd736ed626ad24870a1e356f33915b3b352bb87f7e4d1cebc15d1e1aaae0923777e21b1b28b languageName: node linkType: hard @@ -18119,13 +18611,6 @@ __metadata: languageName: node linkType: hard -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: 10/4383b5baaeffa9bb4cda2ac33a4aa2e6d1f8aaf811848bf73513a9b88fd76372dc461f6fd6d2e9cb5100f48b473be32c6f95bd983509b7d92bb4d92c10747452 - languageName: node - linkType: hard - "throat@npm:^6.0.1": version: 6.0.2 resolution: "throat@npm:6.0.2" @@ -18480,13 +18965,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 10/8907e16284b2d6cfa4f4817e93520121941baba36b39219ea36acfe64c86b9dbc10c9941af450bd60832c8f43464974d51c0957f9858bc66b952b66b6914cbb9 - languageName: node - linkType: hard - "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -18564,6 +19042,20 @@ __metadata: languageName: node linkType: hard +"typescript-eslint@npm:^8.18.1": + version: 8.18.1 + resolution: "typescript-eslint@npm:8.18.1" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.18.1" + "@typescript-eslint/parser": "npm:8.18.1" + "@typescript-eslint/utils": "npm:8.18.1" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10/2be2a14c10fc0988f50e63899e21980c53f6686b60bdda61750577e1481f3e857cf1d5de360849288a220cc053da84e678ca304935d885fe6365afc27e0b9fd2 + languageName: node + linkType: hard + "typescript-strict-plugin@npm:^2.4.4": version: 2.4.4 resolution: "typescript-strict-plugin@npm:2.4.4" @@ -19583,23 +20075,37 @@ __metadata: languageName: node linkType: hard -"which-builtin-type@npm:^1.1.3": - version: 1.1.4 - resolution: "which-builtin-type@npm:1.1.4" +"which-boxed-primitive@npm:^1.1.0": + version: 1.1.0 + resolution: "which-boxed-primitive@npm:1.1.0" dependencies: + is-bigint: "npm:^1.1.0" + is-boolean-object: "npm:^1.2.0" + is-number-object: "npm:^1.1.0" + is-string: "npm:^1.1.0" + is-symbol: "npm:^1.1.0" + checksum: 10/7439e3a5ba3cbc23632b1e8f576acf6672ab5ba69cbe0c17386107eaba5a3a5d822c8f00ab76fa230b5ea842d57b7d4ad95e3fe7c16ebba16cf51d496a98526a + languageName: node + linkType: hard + +"which-builtin-type@npm:^1.2.0": + version: 1.2.1 + resolution: "which-builtin-type@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" function.prototype.name: "npm:^1.1.6" has-tostringtag: "npm:^1.0.2" is-async-function: "npm:^2.0.0" - is-date-object: "npm:^1.0.5" - is-finalizationregistry: "npm:^1.0.2" + is-date-object: "npm:^1.1.0" + is-finalizationregistry: "npm:^1.1.0" is-generator-function: "npm:^1.0.10" - is-regex: "npm:^1.1.4" + is-regex: "npm:^1.2.1" is-weakref: "npm:^1.0.2" isarray: "npm:^2.0.5" - which-boxed-primitive: "npm:^1.0.2" + which-boxed-primitive: "npm:^1.1.0" which-collection: "npm:^1.0.2" - which-typed-array: "npm:^1.1.15" - checksum: 10/c0cdb9b004e7a326f4ce54c75b19658a3bec73601a71dd7e2d9538accb3e781b546b589c3f306caf5e7429ac1c8019028d5e662e2860f03603354105b8247c83 + which-typed-array: "npm:^1.1.16" + checksum: 10/22c81c5cb7a896c5171742cd30c90d992ff13fb1ea7693e6cf80af077791613fb3f89aa9b4b7f890bd47b6ce09c6322c409932359580a2a2a54057f7b52d1cbe languageName: node linkType: hard @@ -19628,6 +20134,19 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.16": + version: 1.1.16 + resolution: "which-typed-array@npm:1.1.16" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + checksum: 10/7106e94729632cdcedc94080442872392806b3364225156952981777f46b75d2e3b13813b5d935bdb2ac8523f8758fcf3513f7e1ed44a8e10d6c4f1029c3fa7d + languageName: node + linkType: hard + "which@npm:^1.2.9": version: 1.3.1 resolution: "which@npm:1.3.1"