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"