From e8270e2807727e1cf6a47a40442b3038c5bca858 Mon Sep 17 00:00:00 2001 From: Echo Date: Tue, 1 Apr 2025 18:30:18 +0200 Subject: [PATCH] Upgrade to ESLint v9 flat config (#34324) Co-authored-by: Nick Schonning --- .eslintignore | 13 - .eslintrc.js | 367 ------- .github/renovate.json5 | 8 +- .github/workflows/lint-js.yml | 6 +- .prettierrc.js | 2 +- app/javascript/entrypoints/public.tsx | 2 +- .../mastodon/components/counters.tsx | 2 +- app/javascript/mastodon/components/router.tsx | 2 +- .../features/emoji/emoji_compressed.js | 2 - .../emoji/emoji_unicode_mapping_light.ts | 7 +- .../features/emoji/unicode_to_filename.js | 3 - .../features/emoji/unicode_to_unified_name.js | 3 - .../service_worker/web_push_locales.js | 3 - eslint.config.mjs | 395 ++++++++ package.json | 26 +- streaming/.eslintrc.cjs | 43 - streaming/eslint.config.mjs | 45 + streaming/lint-staged.config.mjs | 7 + streaming/package.json | 6 +- streaming/tsconfig.json | 2 +- yarn.lock | 941 ++++++++++-------- 21 files changed, 1011 insertions(+), 874 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js create mode 100644 eslint.config.mjs delete mode 100644 streaming/.eslintrc.cjs create mode 100644 streaming/eslint.config.mjs create mode 100644 streaming/lint-staged.config.mjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index d4930e1f52..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -/build/** -/coverage/** -/db/** -/lib/** -/log/** -/node_modules/** -/nonobox/** -/public/** -!/public/embed.js -/spec/** -/tmp/** -/vendor/** -!.eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 480b274fad..0000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,367 +0,0 @@ -// @ts-check -const { defineConfig } = require('eslint-define-config'); - -module.exports = defineConfig({ - root: true, - - extends: [ - 'eslint:recommended', - 'plugin:react/recommended', - 'plugin:react-hooks/recommended', - 'plugin:jsx-a11y/recommended', - 'plugin:import/recommended', - 'plugin:promise/recommended', - 'plugin:jsdoc/recommended', - ], - - env: { - browser: true, - node: true, - es6: true, - }, - - parser: '@typescript-eslint/parser', - - plugins: [ - 'react', - 'jsx-a11y', - 'import', - 'promise', - '@typescript-eslint', - 'formatjs', - ], - - parserOptions: { - sourceType: 'module', - ecmaFeatures: { - jsx: true, - }, - ecmaVersion: 2021, - requireConfigFile: false, - babelOptions: { - configFile: false, - presets: ['@babel/react', '@babel/env'], - }, - }, - - settings: { - react: { - version: 'detect', - }, - 'import/ignore': [ - 'node_modules', - '\\.(css|scss|json)$', - ], - 'import/resolver': { - typescript: {}, - }, - }, - - rules: { - 'consistent-return': 'error', - 'dot-notation': 'error', - eqeqeq: ['error', 'always', { 'null': 'ignore' }], - 'indent': ['error', 2], - 'jsx-quotes': ['error', 'prefer-single'], - 'semi': ['error', 'always'], - 'no-catch-shadow': 'error', - 'no-console': [ - 'warn', - { - allow: [ - 'error', - 'warn', - ], - }, - ], - 'no-empty': ['error', { "allowEmptyCatch": true }], - 'no-restricted-properties': [ - 'error', - { property: 'substring', message: 'Use .slice instead of .substring.' }, - { property: 'substr', message: 'Use .slice instead of .substr.' }, - ], - 'no-restricted-syntax': [ - 'error', - { - // eslint-disable-next-line no-restricted-syntax - selector: 'Literal[value=/•/], JSXText[value=/•/]', - // eslint-disable-next-line no-restricted-syntax - message: "Use '·' (middle dot) instead of '•' (bullet)", - }, - ], - 'no-unused-expressions': 'error', - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': [ - 'error', - { - vars: 'all', - args: 'after-used', - destructuredArrayIgnorePattern: '^_', - ignoreRestSiblings: true, - }, - ], - 'valid-typeof': 'error', - - 'react/jsx-filename-extension': ['error', { extensions: ['.jsx', 'tsx'] }], - 'react/jsx-boolean-value': 'error', - 'react/display-name': 'off', - 'react/jsx-fragments': ['error', 'syntax'], - 'react/jsx-equals-spacing': 'error', - 'react/jsx-no-bind': 'error', - 'react/jsx-no-useless-fragment': 'error', - 'react/jsx-no-target-blank': ['error', { allowReferrer: true }], - 'react/jsx-tag-spacing': 'error', - 'react/jsx-uses-react': 'off', // not needed with new JSX transform - 'react/jsx-wrap-multilines': 'error', - 'react/react-in-jsx-scope': 'off', // not needed with new JSX transform - 'react/self-closing-comp': 'error', - - // recommended values found in https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/v6.8.0/src/index.js#L46 - 'jsx-a11y/click-events-have-key-events': 'off', - 'jsx-a11y/label-has-associated-control': 'off', - 'jsx-a11y/media-has-caption': 'off', - 'jsx-a11y/no-autofocus': 'off', - // recommended rule is: - // 'jsx-a11y/no-interactive-element-to-noninteractive-role': [ - // 'error', - // { - // tr: ['none', 'presentation'], - // canvas: ['img'], - // }, - // ], - 'jsx-a11y/no-interactive-element-to-noninteractive-role': 'off', - // recommended rule is: - // 'jsx-a11y/no-noninteractive-tabindex': [ - // 'error', - // { - // tags: [], - // roles: ['tabpanel'], - // allowExpressionValues: true, - // }, - // ], - 'jsx-a11y/no-noninteractive-tabindex': 'off', - // recommended is full 'error' - 'jsx-a11y/no-static-element-interactions': [ - 'warn', - { - handlers: [ - 'onClick', - ], - }, - ], - - // See https://github.com/import-js/eslint-plugin-import/blob/v2.29.1/config/recommended.js - 'import/extensions': [ - 'error', - 'always', - { - js: 'never', - jsx: 'never', - mjs: 'never', - ts: 'never', - tsx: 'never', - }, - ], - 'import/first': 'error', - 'import/newline-after-import': 'error', - 'import/no-anonymous-default-export': 'error', - 'import/no-extraneous-dependencies': [ - 'error', - { - devDependencies: [ - '.eslintrc.js', - 'config/webpack/**', - 'app/javascript/mastodon/performance.js', - 'app/javascript/mastodon/test_setup.js', - 'app/javascript/**/__tests__/**', - ], - }, - ], - 'import/no-amd': 'error', - 'import/no-commonjs': 'error', - 'import/no-import-module-exports': 'error', - 'import/no-relative-packages': 'error', - 'import/no-self-import': 'error', - 'import/no-useless-path-segments': 'error', - 'import/no-webpack-loader-syntax': 'error', - - 'import/order': [ - 'error', - { - alphabetize: { order: 'asc' }, - 'newlines-between': 'always', - groups: [ - 'builtin', - 'external', - 'internal', - 'parent', - ['index', 'sibling'], - 'object', - ], - pathGroups: [ - // React core packages - { - pattern: '{react,react-dom,react-dom/client,prop-types}', - group: 'builtin', - position: 'after', - }, - // I18n - { - pattern: '{react-intl,intl-messageformat}', - group: 'builtin', - position: 'after', - }, - // Common React utilities - { - pattern: '{classnames,react-helmet,react-router,react-router-dom}', - group: 'external', - position: 'before', - }, - // Immutable / Redux / data store - { - pattern: '{immutable,@reduxjs/toolkit,react-redux,react-immutable-proptypes,react-immutable-pure-component}', - group: 'external', - position: 'before', - }, - // Internal packages - { - pattern: '{mastodon/**}', - group: 'internal', - position: 'after', - }, - ], - pathGroupsExcludedImportTypes: [], - }, - ], - - 'promise/always-return': 'off', - 'promise/catch-or-return': [ - 'error', - { - allowFinally: true, - }, - ], - 'promise/no-callback-in-promise': 'off', - 'promise/no-nesting': 'off', - 'promise/no-promise-in-callback': 'off', - - 'formatjs/blocklist-elements': 'error', - 'formatjs/enforce-default-message': ['error', 'literal'], - 'formatjs/enforce-description': 'off', // description values not currently used - 'formatjs/enforce-id': 'off', // Explicit IDs are used in the project - 'formatjs/enforce-placeholders': 'off', // Issues in short_number.jsx - 'formatjs/enforce-plural-rules': 'error', - 'formatjs/no-camel-case': 'off', // disabledAccount is only non-conforming - 'formatjs/no-complex-selectors': 'error', - 'formatjs/no-emoji': 'error', - 'formatjs/no-id': 'off', // IDs are used for translation keys - 'formatjs/no-invalid-icu': 'error', - 'formatjs/no-literal-string-in-jsx': 'off', // Should be looked at, but mainly flagging punctuation outside of strings - 'formatjs/no-multiple-whitespaces': 'error', - 'formatjs/no-offset': 'error', - 'formatjs/no-useless-message': 'error', - 'formatjs/prefer-formatted-message': 'error', - 'formatjs/prefer-pound-in-plural': 'error', - - 'jsdoc/check-types': 'off', - 'jsdoc/no-undefined-types': 'off', - 'jsdoc/require-jsdoc': 'off', - 'jsdoc/require-param-description': 'off', - 'jsdoc/require-property-description': 'off', - 'jsdoc/require-returns-description': 'off', - 'jsdoc/require-returns': 'off', - }, - - overrides: [ - { - files: [ - '.eslintrc.js', - '*.config.js', - '.*rc.js', - 'ide-helper.js', - 'config/webpack/**/*', - 'config/formatjs-formatter.js', - ], - - env: { - commonjs: true, - }, - - parserOptions: { - sourceType: 'script', - }, - - rules: { - 'import/no-commonjs': 'off', - }, - }, - { - files: [ - '**/*.ts', - '**/*.tsx', - ], - - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/strict-type-checked', - 'plugin:@typescript-eslint/stylistic-type-checked', - 'plugin:react/recommended', - 'plugin:react-hooks/recommended', - 'plugin:jsx-a11y/recommended', - 'plugin:import/recommended', - 'plugin:import/typescript', - 'plugin:promise/recommended', - 'plugin:jsdoc/recommended-typescript', - ], - - parserOptions: { - projectService: true, - tsconfigRootDir: __dirname, - }, - - rules: { - // Disable formatting rules that have been enabled in the base config - 'indent': 'off', - - // This is not needed as we use noImplicitReturns, which handles this in addition to understanding types - 'consistent-return': 'off', - - 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], - - '@typescript-eslint/consistent-type-definitions': ['warn', 'interface'], - '@typescript-eslint/consistent-type-exports': 'error', - '@typescript-eslint/consistent-type-imports': 'error', - "@typescript-eslint/prefer-nullish-coalescing": ['error', { ignorePrimitives: { boolean: true } }], - "@typescript-eslint/no-restricted-imports": [ - "warn", - { - "name": "react-redux", - "importNames": ["useSelector", "useDispatch"], - "message": "Use typed hooks `useAppDispatch` and `useAppSelector` instead." - } - ], - "@typescript-eslint/restrict-template-expressions": ['warn', { allowNumber: true }], - 'jsdoc/require-jsdoc': 'off', - - // Those rules set stricter rules for TS files - // to enforce better practices when converting from JS - 'import/no-default-export': 'warn', - 'react/prefer-stateless-function': 'warn', - 'react/function-component-definition': ['error', { namedComponents: 'arrow-function' }], - 'react/jsx-uses-react': 'off', // not needed with new JSX transform - 'react/react-in-jsx-scope': 'off', // not needed with new JSX transform - 'react/prop-types': 'off', - }, - }, - { - files: [ - '**/__tests__/*.js', - '**/__tests__/*.jsx', - ], - - env: { - jest: true, - }, - } - ], -}); diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 8a10676283..849789fe2c 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -97,7 +97,13 @@ { // Group all eslint-related packages with `eslint` in the same PR matchManagers: ['npm'], - matchPackageNames: ['eslint', 'eslint-*', '@typescript-eslint/*'], + matchPackageNames: [ + 'eslint', + 'eslint-*', + 'typescript-eslint', + '@eslint/*', + 'globals', + ], matchUpdateTypes: ['patch', 'minor'], groupName: 'eslint (non-major)', }, diff --git a/.github/workflows/lint-js.yml b/.github/workflows/lint-js.yml index 7d31a5e20e..86e9af23e7 100644 --- a/.github/workflows/lint-js.yml +++ b/.github/workflows/lint-js.yml @@ -11,7 +11,7 @@ on: - 'tsconfig.json' - '.nvmrc' - '.prettier*' - - '.eslint*' + - 'eslint.config.mjs' - '**/*.js' - '**/*.jsx' - '**/*.ts' @@ -25,7 +25,7 @@ on: - 'tsconfig.json' - '.nvmrc' - '.prettier*' - - '.eslint*' + - 'eslint.config.mjs' - '**/*.js' - '**/*.jsx' - '**/*.ts' @@ -44,7 +44,7 @@ jobs: uses: ./.github/actions/setup-javascript - name: ESLint - run: yarn lint:js --max-warnings 0 + run: yarn workspaces foreach --all --parallel run lint:js --max-warnings 0 - name: Typecheck run: yarn typecheck diff --git a/.prettierrc.js b/.prettierrc.js index af39b253f6..65ec869c33 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,4 +1,4 @@ module.exports = { singleQuote: true, jsxSingleQuote: true -} +}; diff --git a/app/javascript/entrypoints/public.tsx b/app/javascript/entrypoints/public.tsx index 0560e76628..9374d6b2d1 100644 --- a/app/javascript/entrypoints/public.tsx +++ b/app/javascript/entrypoints/public.tsx @@ -68,7 +68,7 @@ function loaded() { if (id) message = localeData[id]; - if (!message) message = defaultMessage as string; + message ??= defaultMessage as string; const messageFormat = new IntlMessageFormat(message, locale); return messageFormat.format(values) as string; diff --git a/app/javascript/mastodon/components/counters.tsx b/app/javascript/mastodon/components/counters.tsx index 35b0ad8d60..151b25a3f7 100644 --- a/app/javascript/mastodon/components/counters.tsx +++ b/app/javascript/mastodon/components/counters.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import type React from 'react'; import { FormattedMessage } from 'react-intl'; diff --git a/app/javascript/mastodon/components/router.tsx b/app/javascript/mastodon/components/router.tsx index 558d0307e7..815b4b59ab 100644 --- a/app/javascript/mastodon/components/router.tsx +++ b/app/javascript/mastodon/components/router.tsx @@ -1,5 +1,5 @@ import type { PropsWithChildren } from 'react'; -import React from 'react'; +import type React from 'react'; import { Router as OriginalRouter, useHistory } from 'react-router'; diff --git a/app/javascript/mastodon/features/emoji/emoji_compressed.js b/app/javascript/mastodon/features/emoji/emoji_compressed.js index 3b6a918104..5cd3a1317d 100644 --- a/app/javascript/mastodon/features/emoji/emoji_compressed.js +++ b/app/javascript/mastodon/features/emoji/emoji_compressed.js @@ -1,5 +1,3 @@ -/* eslint-disable import/no-commonjs -- - We need to use CommonJS here due to preval */ // @preval // http://www.unicode.org/Public/emoji/5.0/emoji-test.txt // This file contains the compressed version of the emoji data from diff --git a/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts b/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts index adf4e2bb7b..0a5a4c1d76 100644 --- a/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts +++ b/app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.ts @@ -33,11 +33,8 @@ function processEmojiMapData( shortCode?: ShortCodesToEmojiDataKey, ) { const [native, _filename] = emojiMapData; - let filename = emojiMapData[1]; - if (!filename) { - // filename name can be derived from unicodeToFilename - filename = unicodeToFilename(native); - } + // filename name can be derived from unicodeToFilename + const filename = emojiMapData[1] ?? unicodeToFilename(native); unicodeMapping[native] = { shortCode, filename, diff --git a/app/javascript/mastodon/features/emoji/unicode_to_filename.js b/app/javascript/mastodon/features/emoji/unicode_to_filename.js index 3395c77174..c75c4cd7d0 100644 --- a/app/javascript/mastodon/features/emoji/unicode_to_filename.js +++ b/app/javascript/mastodon/features/emoji/unicode_to_filename.js @@ -1,6 +1,3 @@ -/* eslint-disable import/no-commonjs -- - We need to use CommonJS here as its imported into a preval file (`emoji_compressed.js`) */ - // taken from: // https://github.com/twitter/twemoji/blob/47732c7/twemoji-generator.js#L848-L866 exports.unicodeToFilename = (str) => { diff --git a/app/javascript/mastodon/features/emoji/unicode_to_unified_name.js b/app/javascript/mastodon/features/emoji/unicode_to_unified_name.js index 108b911222..d29550f122 100644 --- a/app/javascript/mastodon/features/emoji/unicode_to_unified_name.js +++ b/app/javascript/mastodon/features/emoji/unicode_to_unified_name.js @@ -1,6 +1,3 @@ -/* eslint-disable import/no-commonjs -- - We need to use CommonJS here as its imported into a preval file (`emoji_compressed.js`) */ - function padLeft(str, num) { while (str.length < num) { str = '0' + str; diff --git a/app/javascript/mastodon/service_worker/web_push_locales.js b/app/javascript/mastodon/service_worker/web_push_locales.js index 3e39c9a4ed..f3d61e0195 100644 --- a/app/javascript/mastodon/service_worker/web_push_locales.js +++ b/app/javascript/mastodon/service_worker/web_push_locales.js @@ -1,6 +1,3 @@ -/* eslint-disable import/no-commonjs -- - We need to use CommonJS here as its imported into a preval file (`emoji_compressed.js`) */ - /* @preval */ const fs = require('fs'); diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..99279b56d7 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,395 @@ +// @ts-check + +import js from '@eslint/js'; +import { globalIgnores } from 'eslint/config'; +import formatjs from 'eslint-plugin-formatjs'; +// @ts-expect-error -- No typings +import importPlugin from 'eslint-plugin-import'; +import jsdoc from 'eslint-plugin-jsdoc'; +import jsxA11Y from 'eslint-plugin-jsx-a11y'; +import promisePlugin from 'eslint-plugin-promise'; +import react from 'eslint-plugin-react'; +import reactHooks from 'eslint-plugin-react-hooks'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +/** @type {import('typescript-eslint').ConfigArray} */ +export const baseConfig = [ + js.configs.recommended, + importPlugin.flatConfigs.recommended, + jsdoc.configs['flat/recommended'], + promisePlugin.configs['flat/recommended'], + { + linterOptions: { + reportUnusedDisableDirectives: 'error', + reportUnusedInlineConfigs: 'error', + }, + rules: { + 'consistent-return': 'error', + 'dot-notation': 'error', + + eqeqeq: [ + 'error', + 'always', + { + null: 'ignore', + }, + ], + + 'no-console': [ + 'warn', + { + allow: ['error', 'warn'], + }, + ], + + 'no-empty': [ + 'error', + { + allowEmptyCatch: true, + }, + ], + + 'no-restricted-properties': [ + 'error', + { + property: 'substring', + message: 'Use .slice instead of .substring.', + }, + { + property: 'substr', + message: 'Use .slice instead of .substr.', + }, + ], + + 'no-unused-expressions': 'error', + 'no-unused-vars': 'off', + + 'valid-typeof': 'error', + + 'import/extensions': [ + 'error', + 'always', + { + js: 'never', + jsx: 'never', + mjs: 'never', + ts: 'never', + mts: 'never', + tsx: 'never', + }, + ], + 'import/first': 'error', + 'import/newline-after-import': 'error', + 'import/no-anonymous-default-export': 'error', + 'import/no-amd': 'error', + 'import/no-commonjs': 'error', + 'import/no-import-module-exports': 'error', + 'import/no-relative-packages': 'error', + 'import/no-self-import': 'error', + 'import/no-useless-path-segments': 'error', + 'import/order': [ + 'error', + { + alphabetize: { + order: 'asc', + }, + + 'newlines-between': 'always', + + groups: [ + 'builtin', + 'external', + 'internal', + 'parent', + ['index', 'sibling'], + 'object', + ], + + pathGroups: [ + { + pattern: '{react,react-dom,react-dom/client,prop-types}', + group: 'builtin', + position: 'after', + }, + { + pattern: '{react-intl,intl-messageformat}', + group: 'builtin', + position: 'after', + }, + { + pattern: + '{classnames,react-helmet,react-router,react-router-dom}', + group: 'external', + position: 'before', + }, + { + pattern: + '{immutable,@reduxjs/toolkit,react-redux,react-immutable-proptypes,react-immutable-pure-component}', + group: 'external', + position: 'before', + }, + { + pattern: '{mastodon/**}', + group: 'internal', + position: 'after', + }, + ], + + pathGroupsExcludedImportTypes: [], + }, + ], + + 'jsdoc/check-types': 'off', + 'jsdoc/no-undefined-types': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-param-description': 'off', + 'jsdoc/require-property-description': 'off', + 'jsdoc/require-returns-description': 'off', + 'jsdoc/require-returns': 'off', + + 'promise/always-return': 'off', + 'promise/catch-or-return': [ + 'error', + { + allowFinally: true, + }, + ], + 'promise/no-callback-in-promise': 'off', + 'promise/no-nesting': 'off', + 'promise/no-promise-in-callback': 'off', + }, + }, +]; + +export default tseslint.config([ + baseConfig, + globalIgnores([ + 'build/**/*', + 'coverage/**/*', + 'db/**/*', + 'lib/**/*', + 'log/**/*', + 'node_modules/**/*', + 'public/**/*', + '!public/embed.js', + 'spec/**/*', + 'tmp/**/*', + 'vendor/**/*', + 'streaming/**/*', + ]), + react.configs.flat.recommended, + react.configs.flat['jsx-runtime'], + reactHooks.configs['recommended-latest'], + jsxA11Y.flatConfigs.recommended, + importPlugin.flatConfigs.react, + // @ts-expect-error -- For some reason the formatjs package exports an empty object? + formatjs.configs.strict, + { + languageOptions: { + globals: { + ...globals.browser, + }, + + parser: tseslint.parser, + ecmaVersion: 2021, + sourceType: 'module', + }, + + settings: { + react: { + version: 'detect', + }, + + 'import/ignore': ['node_modules', '\\.(css|scss|json)$'], + + 'import/resolver': { + typescript: {}, + }, + }, + + rules: { + 'no-restricted-syntax': [ + 'error', + { + // eslint-disable-next-line no-restricted-syntax + selector: 'Literal[value=/•/], JSXText[value=/•/]', + // eslint-disable-next-line no-restricted-syntax + message: "Use '·' (middle dot) instead of '•' (bullet)", + }, + ], + + 'formatjs/enforce-description': 'off', // description values not currently used + 'formatjs/enforce-id': 'off', // Explicit IDs are used in the project + 'formatjs/enforce-placeholders': 'off', // Issues in short_number.jsx + 'formatjs/no-invalid-icu': 'error', + 'formatjs/no-literal-string-in-jsx': 'off', // Should be looked at, but mainly flagging punctuation outside of strings + 'formatjs/no-multiple-plurals': 'off', // Should be looked at + + 'jsx-a11y/click-events-have-key-events': 'off', + 'jsx-a11y/label-has-associated-control': 'off', + 'jsx-a11y/media-has-caption': 'off', + 'jsx-a11y/no-autofocus': 'off', + 'jsx-a11y/no-interactive-element-to-noninteractive-role': 'off', + 'jsx-a11y/no-noninteractive-tabindex': 'off', + 'jsx-a11y/no-static-element-interactions': [ + 'warn', + { + handlers: ['onClick'], + }, + ], + + 'import/no-extraneous-dependencies': [ + 'error', + { + devDependencies: [ + 'eslint.config.mjs', + 'config/webpack/**', + 'app/javascript/mastodon/performance.js', + 'app/javascript/mastodon/test_setup.js', + 'app/javascript/**/__tests__/**', + ], + }, + ], + 'import/no-webpack-loader-syntax': 'error', + + 'react/jsx-filename-extension': [ + 'error', + { + extensions: ['.jsx', 'tsx'], + }, + ], + + 'react/jsx-boolean-value': 'error', + 'react/display-name': 'off', + 'react/jsx-fragments': ['error', 'syntax'], + 'react/jsx-equals-spacing': 'error', + 'react/jsx-no-bind': 'error', + 'react/jsx-no-useless-fragment': 'error', + 'react/jsx-no-target-blank': [ + 'error', + { + allowReferrer: true, + }, + ], + 'react/jsx-tag-spacing': 'error', + 'react/jsx-wrap-multilines': 'error', + 'react/self-closing-comp': 'error', + }, + }, + { + files: [ + 'app/javascript/mastodon/common.js', + 'app/javascript/mastodon/features/emoji/unicode_to_unified_name.js', + 'app/javascript/mastodon/features/emoji/emoji_compressed.js', + 'app/javascript/mastodon/features/emoji/unicode_to_filename.js', + 'app/javascript/mastodon/service_worker/web_push_locales.js', + '**/*.config.js', + '**/.*rc.js', + '**/ide-helper.js', + 'config/webpack/**/*', + 'config/formatjs-formatter.js', + ], + + languageOptions: { + globals: { + ...globals.commonjs, + ...globals.node, + }, + + ecmaVersion: 5, + sourceType: 'commonjs', + }, + + rules: { + 'import/no-commonjs': 'off', + }, + }, + { + files: ['**/*.ts', '**/*.tsx'], + + extends: [ + tseslint.configs.strictTypeChecked, + tseslint.configs.stylisticTypeChecked, + react.configs.flat.recommended, + react.configs.flat['jsx-runtime'], + reactHooks.configs['recommended-latest'], + jsxA11Y.flatConfigs.recommended, + importPlugin.flatConfigs.react, + importPlugin.flatConfigs.typescript, + jsdoc.configs['flat/recommended-typescript'], + ], + + languageOptions: { + parserOptions: { + projectService: true, + }, + }, + + rules: { + // This is not needed as we use noImplicitReturns, which handles this in addition to understanding types + 'consistent-return': 'off', + + 'formatjs/enforce-plural-rules': 'off', + + 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], + 'import/no-default-export': 'warn', + + 'jsdoc/require-jsdoc': 'off', + + 'react/prefer-stateless-function': 'warn', + 'react/function-component-definition': [ + 'error', + { + namedComponents: 'arrow-function', + }, + ], + 'react/prop-types': 'off', + + '@typescript-eslint/consistent-type-definitions': ['warn', 'interface'], + '@typescript-eslint/consistent-type-exports': 'error', + '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/prefer-nullish-coalescing': [ + 'error', + { + ignorePrimitives: { + boolean: true, + }, + }, + ], + '@typescript-eslint/no-restricted-imports': [ + 'warn', + { + name: 'react-redux', + importNames: ['useSelector', 'useDispatch'], + message: + 'Use typed hooks `useAppDispatch` and `useAppSelector` instead.', + }, + ], + '@typescript-eslint/no-unused-vars': [ + 'error', + { + vars: 'all', + args: 'after-used', + destructuredArrayIgnorePattern: '^_', + ignoreRestSiblings: true, + }, + ], + '@typescript-eslint/restrict-template-expressions': [ + 'warn', + { + allowNumber: true, + }, + ], + }, + }, + { + files: ['**/__tests__/*.js', '**/__tests__/*.jsx'], + + languageOptions: { + globals: { + ...globals.jest, + }, + }, + }, +]); diff --git a/package.json b/package.json index da3770fe0b..0f0ab2354b 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,14 @@ "scripts": { "build:development": "cross-env RAILS_ENV=development NODE_ENV=development ./bin/webpack", "build:production": "cross-env RAILS_ENV=production NODE_ENV=production ./bin/webpack", - "fix:js": "eslint . --ext=.js,.jsx,.ts,.tsx --cache --report-unused-disable-directives --fix", + "fix:js": "eslint . --cache --fix", "fix:css": "stylelint --fix \"**/*.{css,scss}\"", "fix": "yarn fix:js && yarn fix:css", "format": "prettier --write --log-level warn .", "format:check": "prettier --check --ignore-unknown .", "i18n:extract": "formatjs extract 'app/javascript/**/*.{js,jsx,ts,tsx}' --ignore '**/*.d.ts' --out-file app/javascript/mastodon/locales/en.json --format config/formatjs-formatter.js", "jest": "cross-env NODE_ENV=test jest", - "lint:js": "eslint . --ext=.js,.jsx,.ts,.tsx --cache --report-unused-disable-directives", + "lint:js": "cd $INIT_CWD && eslint --cache --report-unused-disable-directives", "lint:css": "stylelint \"**/*.{css,scss}\"", "lint": "yarn lint:js && yarn lint:css", "postversion": "git push --tags", @@ -142,6 +142,7 @@ "workbox-window": "^7.0.0" }, "devDependencies": { + "@eslint/js": "^9.23.0", "@formatjs/cli": "^6.1.1", "@testing-library/dom": "^10.2.0", "@testing-library/jest-dom": "^6.0.0", @@ -173,19 +174,17 @@ "@types/requestidlecallback": "^0.3.5", "@types/webpack": "^4.41.33", "@types/webpack-env": "^1.18.4", - "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", "babel-jest": "^29.5.0", - "eslint": "^8.41.0", - "eslint-define-config": "^2.0.0", - "eslint-import-resolver-typescript": "^3.5.5", - "eslint-plugin-formatjs": "^5.0.0", + "eslint": "^9.23.0", + "eslint-import-resolver-typescript": "^4.2.5", + "eslint-plugin-formatjs": "^5.3.1", "eslint-plugin-import": "~2.31.0", - "eslint-plugin-jsdoc": "^50.0.0", - "eslint-plugin-jsx-a11y": "~6.10.0", - "eslint-plugin-promise": "~7.2.0", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-jsdoc": "^50.6.9", + "eslint-plugin-jsx-a11y": "~6.10.2", + "eslint-plugin-promise": "~7.2.1", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-hooks": "^5.2.0", + "globals": "^16.0.0", "husky": "^9.0.11", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", @@ -196,6 +195,7 @@ "stylelint-config-prettier-scss": "^1.0.0", "stylelint-config-standard-scss": "^14.0.0", "typescript": "^5.0.4", + "typescript-eslint": "^8.28.0", "webpack-dev-server": "^3.11.3" }, "resolutions": { diff --git a/streaming/.eslintrc.cjs b/streaming/.eslintrc.cjs deleted file mode 100644 index e25cff7df0..0000000000 --- a/streaming/.eslintrc.cjs +++ /dev/null @@ -1,43 +0,0 @@ -/* eslint-disable import/no-commonjs */ - -// @ts-check - -// @ts-ignore - This needs to be a CJS file (eslint does not yet support ESM configs), and TS is complaining we use require -const { defineConfig } = require('eslint-define-config'); - -module.exports = defineConfig({ - extends: ['../.eslintrc.js'], - env: { - browser: false, - }, - parserOptions: { - project: true, - tsconfigRootDir: __dirname, - ecmaFeatures: { - jsx: false, - }, - ecmaVersion: 2021, - }, - rules: { - // In the streaming server we need to delete some variables to ensure - // garbage collection takes place on the values referenced by those objects; - // The alternative is to declare the variable as nullable, but then we need - // to assert it's in existence before every use, which becomes much harder - // to maintain. - 'no-delete-var': 'off', - - // This overrides the base configuration for this rule to pick up - // dependencies for the streaming server from the correct package.json file. - 'import/no-extraneous-dependencies': [ - 'error', - { - devDependencies: ['streaming/.eslintrc.cjs'], - optionalDependencies: false, - peerDependencies: false, - includeTypes: true, - packageDir: __dirname, - }, - ], - 'import/extensions': ['error', 'always'], - }, -}); diff --git a/streaming/eslint.config.mjs b/streaming/eslint.config.mjs new file mode 100644 index 0000000000..51a6551514 --- /dev/null +++ b/streaming/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +// eslint-disable-next-line import/no-relative-packages -- Must import from the root +import { baseConfig } from '../eslint.config.mjs'; + +export default tseslint.config([ + baseConfig, + { + languageOptions: { + globals: globals.node, + + parser: tseslint.parser, + ecmaVersion: 2021, + sourceType: 'module', + }, + + settings: { + 'import/ignore': ['node_modules', '\\.(json)$'], + 'import/resolver': { + typescript: {}, + }, + }, + + rules: { + // In the streaming server we need to delete some variables to ensure + // garbage collection takes place on the values referenced by those objects; + // The alternative is to declare the variable as nullable, but then we need + // to assert it's in existence before every use, which becomes much harder + // to maintain. + 'no-delete-var': 'off', + + 'import/no-extraneous-dependencies': [ + 'error', + { + devDependencies: ['**/*.config.mjs'], + }, + ], + + 'import/extensions': ['error', 'always'], + }, + }, +]); diff --git a/streaming/lint-staged.config.mjs b/streaming/lint-staged.config.mjs new file mode 100644 index 0000000000..430a999b9a --- /dev/null +++ b/streaming/lint-staged.config.mjs @@ -0,0 +1,7 @@ +const config = { + '*': 'prettier --ignore-unknown --write', + '*.{js,ts}': 'eslint --fix', + '**/*.ts': () => 'tsc -p tsconfig.json --noEmit', +}; + +export default config; diff --git a/streaming/package.json b/streaming/package.json index 9ecc7bb2fa..a96a3f8c52 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -31,14 +31,16 @@ "ws": "^8.12.1" }, "devDependencies": { + "@eslint/js": "^9.23.0", "@types/cors": "^2.8.16", "@types/express": "^4.17.17", "@types/pg": "^8.6.6", "@types/uuid": "^10.0.0", "@types/ws": "^8.5.9", - "eslint-define-config": "^2.0.0", + "globals": "^16.0.0", "pino-pretty": "^13.0.0", - "typescript": "^5.0.4" + "typescript": "^5.0.4", + "typescript-eslint": "^8.28.0" }, "optionalDependencies": { "bufferutil": "^4.0.7", diff --git a/streaming/tsconfig.json b/streaming/tsconfig.json index 37e9a7fee0..2f892dc3b6 100644 --- a/streaming/tsconfig.json +++ b/streaming/tsconfig.json @@ -8,5 +8,5 @@ "tsBuildInfoFile": "../tmp/cache/streaming/tsconfig.tsbuildinfo", "paths": {} }, - "include": ["./*.js", "./.eslintrc.cjs"] + "include": ["./*.js"] } diff --git a/yarn.lock b/yarn.lock index 04f2786088..b9c100e4ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2016,6 +2016,34 @@ __metadata: languageName: node linkType: hard +"@emnapi/core@npm:^1.3.1": + version: 1.3.1 + resolution: "@emnapi/core@npm:1.3.1" + dependencies: + "@emnapi/wasi-threads": "npm:1.0.1" + tslib: "npm:^2.4.0" + checksum: 10c0/d3be1044ad704e2c486641bc18908523490f28c7d38bd12d9c1d4ce37d39dae6c4aecd2f2eaf44c6e3bd90eaf04e0591acc440b1b038cdf43cce078a355a0ea0 + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.3.1": + version: 1.3.1 + resolution: "@emnapi/runtime@npm:1.3.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/060ffede50f1b619c15083312b80a9e62a5b0c87aa8c1b54854c49766c9d69f8d1d3d87bd963a647071263a320db41b25eaa50b74d6a80dcc763c23dbeaafd6c + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.0.1": + version: 1.0.1 + resolution: "@emnapi/wasi-threads@npm:1.0.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/1e0c8036b8d53e9b07cc9acf021705ef6c86ab6b13e1acda7fffaf541a2d3565072afb92597419173ced9ea14f6bf32fce149106e669b5902b825e8b499e5c6c + languageName: node + linkType: hard + "@emoji-mart/data@npm:1.2.1": version: 1.2.1 resolution: "@emoji-mart/data@npm:1.2.1" @@ -2162,34 +2190,85 @@ __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.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" checksum: 10c0/c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 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: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.19.2": + version: 0.19.2 + resolution: "@eslint/config-array@npm:0.19.2" + dependencies: + "@eslint/object-schema": "npm:^2.1.6" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.2" + checksum: 10c0/dd68da9abb32d336233ac4fe0db1e15a0a8d794b6e69abb9e57545d746a97f6f542496ff9db0d7e27fab1438546250d810d90b1904ac67677215b8d8e7573f3d + languageName: node + linkType: hard + +"@eslint/config-helpers@npm:^0.2.0": + version: 0.2.0 + resolution: "@eslint/config-helpers@npm:0.2.0" + checksum: 10c0/743a64653e13177029108f57ab47460ded08e3412c86216a14b7e8ab2dc79c2b64be45bf55c5ef29f83692a707dc34cf1e9217e4b8b4b272a0d9b691fdaf6a2a + languageName: node + linkType: hard + +"@eslint/core@npm:^0.12.0": + version: 0.12.0 + resolution: "@eslint/core@npm:0.12.0" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/d032af81195bb28dd800c2b9617548c6c2a09b9490da3c5537fd2a1201501666d06492278bb92cfccac1f7ac249e58601dd87f813ec0d6a423ef0880434fa0c3 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^3.3.1": + version: 3.3.1 + resolution: "@eslint/eslintrc@npm:3.3.1" 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: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + checksum: 10c0/b0e63f3bc5cce4555f791a4e487bf999173fcf27c65e1ab6e7d63634d8a43b33c3693e79f192cbff486d7df1be8ebb2bd2edc6e70ddd486cbfa84a359a3e3b41 languageName: node linkType: hard -"@eslint/js@npm:8.57.1": - version: 8.57.1 - resolution: "@eslint/js@npm:8.57.1" - checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 +"@eslint/js@npm:9.23.0, @eslint/js@npm:^9.23.0": + version: 9.23.0 + resolution: "@eslint/js@npm:9.23.0" + checksum: 10c0/4e70869372b6325389e0ab51cac6d3062689807d1cef2c3434857571422ce11dde3c62777af85c382b9f94d937127598d605d2086787f08611351bf99faded81 + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.6": + version: 2.1.6 + resolution: "@eslint/object-schema@npm:2.1.6" + checksum: 10c0/b8cdb7edea5bc5f6a96173f8d768d3554a628327af536da2fc6967a93b040f2557114d98dbcdbf389d5a7b290985ad6a9ce5babc547f36fc1fde42e674d11a56 + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.2.7": + version: 0.2.7 + resolution: "@eslint/plugin-kit@npm:0.2.7" + dependencies: + "@eslint/core": "npm:^0.12.0" + levn: "npm:^0.4.1" + checksum: 10c0/0a1aff1ad63e72aca923217e556c6dfd67d7cd121870eb7686355d7d1475d569773528a8b2111b9176f3d91d2ea81f7413c34600e8e5b73d59e005d70780b633 languageName: node linkType: hard @@ -2254,18 +2333,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.3.3": - version: 2.3.3 - resolution: "@formatjs/ecma402-abstract@npm:2.3.3" - dependencies: - "@formatjs/fast-memoize": "npm:2.2.6" - "@formatjs/intl-localematcher": "npm:0.6.0" - decimal.js: "npm:10" - tslib: "npm:2" - checksum: 10c0/63de990c380a1800bc54d97c4aa13a88a92e73b1680f0f561d03f9bf3e23289b7aafd1a92037527c285bd587a44e20504258ac2cbd4564a4138ce2b4612c1495 - languageName: node - linkType: hard - "@formatjs/ecma402-abstract@npm:2.3.4": version: 2.3.4 resolution: "@formatjs/ecma402-abstract@npm:2.3.4" @@ -2278,15 +2345,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/fast-memoize@npm:2.2.6": - version: 2.2.6 - resolution: "@formatjs/fast-memoize@npm:2.2.6" - dependencies: - tslib: "npm:2" - checksum: 10c0/dccdc21105af673e58ec7b04eb17cd6fde1fb1a7e7a446273ca43f7ab97c26d5c0fcc2b9e80d5b54bf9b80354f9e1e681273c0ed26633ec72f0adc2d116dfd7f - languageName: node - linkType: hard - "@formatjs/fast-memoize@npm:2.2.7": version: 2.2.7 resolution: "@formatjs/fast-memoize@npm:2.2.7" @@ -2296,17 +2354,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.11.1": - version: 2.11.1 - resolution: "@formatjs/icu-messageformat-parser@npm:2.11.1" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.3" - "@formatjs/icu-skeleton-parser": "npm:1.8.13" - tslib: "npm:2" - checksum: 10c0/2e4106d564ede73cc52c97fc4270002f2460c3ded10715a095ec6765c48f951b1e9744cc55679abe046e24e4e22c345e738f7477c43d440d1d10a0235b12df37 - languageName: node - linkType: hard - "@formatjs/icu-messageformat-parser@npm:2.11.2": version: 2.11.2 resolution: "@formatjs/icu-messageformat-parser@npm:2.11.2" @@ -2318,16 +2365,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.8.13": - version: 1.8.13 - resolution: "@formatjs/icu-skeleton-parser@npm:1.8.13" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.3" - tslib: "npm:2" - checksum: 10c0/eddea5b7c43745d05178211b25641319e054747e40b42ffaa93ae9940fd42e6f5654d12d42e6998b91b4de4b67a24e3ed779a37394262ec1dd46e693c166729a - languageName: node - linkType: hard - "@formatjs/icu-skeleton-parser@npm:1.8.14": version: 1.8.14 resolution: "@formatjs/icu-skeleton-parser@npm:1.8.14" @@ -2338,15 +2375,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.6.0": - version: 0.6.0 - resolution: "@formatjs/intl-localematcher@npm:0.6.0" - dependencies: - tslib: "npm:2" - checksum: 10c0/90238e633426ff7237ab2bbe017be044fb2fb185a8d59a0652096ddab9cb1ddf64106d58fafd711ea19c4d3455bd966516ab93574ac3b169d9af2325875fae59 - languageName: node - linkType: hard - "@formatjs/intl-localematcher@npm:0.6.1": version: 0.6.1 resolution: "@formatjs/intl-localematcher@npm:0.6.1" @@ -2386,26 +2414,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/ts-transformer@npm:3.13.32": - version: 3.13.32 - resolution: "@formatjs/ts-transformer@npm:3.13.32" - dependencies: - "@formatjs/icu-messageformat-parser": "npm:2.11.1" - "@types/json-stable-stringify": "npm:1" - "@types/node": "npm:14 || 16 || 17 || 18 || 20 || 22" - chalk: "npm:4" - json-stable-stringify: "npm:1" - tslib: "npm:2" - typescript: "npm:5" - peerDependencies: - ts-jest: 27 || 28 || 29 - peerDependenciesMeta: - ts-jest: - optional: true - checksum: 10c0/f51102e5427f9e22ed8dd4094e0347fa7bf96b99a97c5b48eb23bb11cd319f653c829073040884d0c6381136e227a1d0d2b7b2ac3ec0dba6ed9e26f454b61254 - languageName: node - linkType: hard - "@formatjs/ts-transformer@npm:3.13.34": version: 3.13.34 resolution: "@formatjs/ts-transformer@npm:3.13.34" @@ -2449,14 +2457,20 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.13.0": - version: 0.13.0 - resolution: "@humanwhocodes/config-array@npm:0.13.0" +"@humanfs/core@npm:^0.19.1": + version: 0.19.1 + resolution: "@humanfs/core@npm:0.19.1" + checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67 + 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.3" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e + "@humanfs/core": "npm:^0.19.1" + "@humanwhocodes/retry": "npm:^0.3.0" + checksum: 10c0/8356359c9f60108ec204cbd249ecd0356667359b2524886b357617c4a7c3b6aace0fd5a369f63747b926a762a88f8a25bc066fa1778508d110195ce7686243e1 languageName: node linkType: hard @@ -2467,10 +2481,17 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.1 + resolution: "@humanwhocodes/retry@npm:0.3.1" + checksum: 10c0/f0da1282dfb45e8120480b9e2e275e2ac9bbe1cf016d046fdad8e27cc1285c45bb9e711681237944445157b430093412b4446c1ab3fc4bb037861b5904101d3b + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.4.2": + version: 0.4.2 + resolution: "@humanwhocodes/retry@npm:0.4.2" + checksum: 10c0/0235525d38f243bee3bf8b25ed395fbf957fb51c08adae52787e1325673071abe856c7e18e530922ed2dd3ce12ed82ba01b8cee0279ac52a3315fcdc3a69ef0c languageName: node linkType: hard @@ -2814,6 +2835,7 @@ __metadata: "@dnd-kit/sortable": "npm:^10.0.0" "@dnd-kit/utilities": "npm:^3.2.2" "@emoji-mart/data": "npm:1.2.1" + "@eslint/js": "npm:^9.23.0" "@formatjs/cli": "npm:^6.1.1" "@formatjs/intl-pluralrules": "npm:^5.4.4" "@gamestdio/websocket": "npm:^0.3.2" @@ -2852,8 +2874,6 @@ __metadata: "@types/requestidlecallback": "npm:^0.3.5" "@types/webpack": "npm:^4.41.33" "@types/webpack-env": "npm:^1.18.4" - "@typescript-eslint/eslint-plugin": "npm:^8.0.0" - "@typescript-eslint/parser": "npm:^8.0.0" "@use-gesture/react": "npm:^10.3.1" arrow-key-navigation: "npm:^1.2.0" async-mutex: "npm:^0.5.0" @@ -2877,19 +2897,19 @@ __metadata: detect-passive-events: "npm:^2.0.3" emoji-mart: "npm:emoji-mart-lazyload@latest" escape-html: "npm:^1.0.3" - eslint: "npm:^8.41.0" - eslint-define-config: "npm:^2.0.0" - eslint-import-resolver-typescript: "npm:^3.5.5" - eslint-plugin-formatjs: "npm:^5.0.0" + eslint: "npm:^9.23.0" + eslint-import-resolver-typescript: "npm:^4.2.5" + eslint-plugin-formatjs: "npm:^5.3.1" eslint-plugin-import: "npm:~2.31.0" - eslint-plugin-jsdoc: "npm:^50.0.0" - eslint-plugin-jsx-a11y: "npm:~6.10.0" - eslint-plugin-promise: "npm:~7.2.0" - eslint-plugin-react: "npm:^7.33.2" - eslint-plugin-react-hooks: "npm:^5.0.0" + eslint-plugin-jsdoc: "npm:^50.6.9" + eslint-plugin-jsx-a11y: "npm:~6.10.2" + eslint-plugin-promise: "npm:~7.2.1" + eslint-plugin-react: "npm:^7.37.4" + eslint-plugin-react-hooks: "npm:^5.2.0" file-loader: "npm:^6.2.0" fuzzysort: "npm:^3.0.0" glob: "npm:^10.2.6" + globals: "npm:^16.0.0" history: "npm:^4.10.1" hoist-non-react-statics: "npm:^3.3.2" http-link-header: "npm:^1.1.1" @@ -2948,6 +2968,7 @@ __metadata: tiny-queue: "npm:^0.2.1" twitter-text: "npm:3.1.0" typescript: "npm:^5.0.4" + typescript-eslint: "npm:^8.28.0" use-debounce: "npm:^10.0.0" webpack: "npm:^4.47.0" webpack-assets-manifest: "npm:^4.0.6" @@ -2976,6 +2997,7 @@ __metadata: version: 0.0.0-use.local resolution: "@mastodon/streaming@workspace:streaming" dependencies: + "@eslint/js": "npm:^9.23.0" "@types/cors": "npm:^2.8.16" "@types/express": "npm:^4.17.17" "@types/pg": "npm:^8.6.6" @@ -2984,8 +3006,8 @@ __metadata: bufferutil: "npm:^4.0.7" cors: "npm:^2.8.5" dotenv: "npm:^16.0.3" - eslint-define-config: "npm:^2.0.0" express: "npm:^4.18.2" + globals: "npm:^16.0.0" ioredis: "npm:^5.3.2" jsdom: "npm:^26.0.0" pg: "npm:^8.5.0" @@ -2995,6 +3017,7 @@ __metadata: pino-pretty: "npm:^13.0.0" prom-client: "npm:^15.0.0" typescript: "npm:^5.0.4" + typescript-eslint: "npm:^8.28.0" utf-8-validate: "npm:^6.0.3" uuid: "npm:^11.0.0" ws: "npm:^8.12.1" @@ -3006,6 +3029,17 @@ __metadata: languageName: unknown linkType: soft +"@napi-rs/wasm-runtime@npm:^0.2.7": + version: 0.2.7 + resolution: "@napi-rs/wasm-runtime@npm:0.2.7" + dependencies: + "@emnapi/core": "npm:^1.3.1" + "@emnapi/runtime": "npm:^1.3.1" + "@tybys/wasm-util": "npm:^0.9.0" + checksum: 10c0/04a5edd79144bfa4e821a373fb6d4939f10c578c5f3633b5e67a57d0f5e36a593f595834d26654ea757bba7cd80b6c42d0d1405d6a8460c5d774e8cd5c9548a4 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -3023,7 +3057,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: @@ -3033,13 +3067,6 @@ __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: 10c0/34ab85fdc2e0250879518841f74a30c276bca4f6c3e13526d2d1fe515e1adf6d46c25fcd5989d22ea056d76f7c39210945180b4859fc83b050e2da411aa86289 - languageName: node - linkType: hard - "@npmcli/agent@npm:^2.0.0": version: 2.2.0 resolution: "@npmcli/agent@npm:2.2.0" @@ -3698,6 +3725,15 @@ __metadata: languageName: node linkType: hard +"@tybys/wasm-util@npm:^0.9.0": + version: 0.9.0 + resolution: "@tybys/wasm-util@npm:0.9.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d + languageName: node + linkType: hard + "@types/aria-query@npm:^5.0.1": version: 5.0.4 resolution: "@types/aria-query@npm:5.0.4" @@ -3799,7 +3835,7 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:9": +"@types/eslint@npm:^9.6.1": version: 9.6.1 resolution: "@types/eslint@npm:9.6.1" dependencies: @@ -3823,6 +3859,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:^1.0.6": + version: 1.0.7 + resolution: "@types/estree@npm:1.0.7" + checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c + languageName: node + linkType: hard + "@types/express-serve-static-core@npm:^4.17.33": version: 4.17.41 resolution: "@types/express-serve-static-core@npm:4.17.41" @@ -3959,14 +4002,14 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db languageName: node linkType: hard -"@types/json-stable-stringify@npm:1, @types/json-stable-stringify@npm:^1.1.0": +"@types/json-stable-stringify@npm:^1.1.0": version: 1.1.0 resolution: "@types/json-stable-stringify@npm:1.1.0" checksum: 10c0/8f69944701510243cd3a83aa44363a8a4d366f11a659b258f69fb3ad0f94ab1e2533206a2c929ac7fd18784d201b663b3f02a45934f545c926f051d8cb4df095 @@ -4008,7 +4051,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:14 || 16 || 17 || 18 || 20 || 22": +"@types/node@npm:*": version: 22.8.6 resolution: "@types/node@npm:22.8.6" dependencies: @@ -4051,7 +4094,7 @@ __metadata: languageName: node linkType: hard -"@types/picomatch@npm:3": +"@types/picomatch@npm:^3": version: 3.0.2 resolution: "@types/picomatch@npm:3.0.2" checksum: 10c0/f35d16fe10a6e13ead6499dd7d7d317e4fd78e48260398104e837e5ca83d393024bdc6f432cb644c0a69b0726a071fcc6eb09befbbcfafb3c3c5f71dbbfde487 @@ -4371,15 +4414,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^8.0.0": - version: 8.26.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.26.0" +"@typescript-eslint/eslint-plugin@npm:8.28.0": + version: 8.28.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.28.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.26.0" - "@typescript-eslint/type-utils": "npm:8.26.0" - "@typescript-eslint/utils": "npm:8.26.0" - "@typescript-eslint/visitor-keys": "npm:8.26.0" + "@typescript-eslint/scope-manager": "npm:8.28.0" + "@typescript-eslint/type-utils": "npm:8.28.0" + "@typescript-eslint/utils": "npm:8.28.0" + "@typescript-eslint/visitor-keys": "npm:8.28.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -4388,99 +4431,64 @@ __metadata: "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/b270467672c5cb7fb9085ae063364252af2910a424899f2a9f54cfbe84aba6ce80dbbf5027f1f33f17cc587da9883de212a4b3dc969f22ded30076889b499dd8 + checksum: 10c0/f01b7d231b01ec2c1cc7c40599ddceb329532f2876664a39dec9d25c0aed4cfdbef3ec07f26bac357df000d798f652af6fdb6a2481b6120e43bfa38f7c7a7c48 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^8.0.0": - version: 8.26.0 - resolution: "@typescript-eslint/parser@npm:8.26.0" +"@typescript-eslint/parser@npm:8.28.0": + version: 8.28.0 + resolution: "@typescript-eslint/parser@npm:8.28.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.26.0" - "@typescript-eslint/types": "npm:8.26.0" - "@typescript-eslint/typescript-estree": "npm:8.26.0" - "@typescript-eslint/visitor-keys": "npm:8.26.0" + "@typescript-eslint/scope-manager": "npm:8.28.0" + "@typescript-eslint/types": "npm:8.28.0" + "@typescript-eslint/typescript-estree": "npm:8.28.0" + "@typescript-eslint/visitor-keys": "npm:8.28.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/b937a80aeca4e508a67cbf2e42dfd268316336de265aaf836d04e49008a6ff4d754e73ad30075c183d98756677d1f54061c34e618c97d5fb61a04903c65d4851 + checksum: 10c0/4bde6887bbf3fe031c01e46db90f9f384a8cac2e67c2972b113a62d607db75e01db943601279aac847b9187960a038981814042cb02fd5aa27ea4613028f9313 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.20.0": - version: 8.20.0 - resolution: "@typescript-eslint/scope-manager@npm:8.20.0" +"@typescript-eslint/scope-manager@npm:8.28.0": + version: 8.28.0 + resolution: "@typescript-eslint/scope-manager@npm:8.28.0" dependencies: - "@typescript-eslint/types": "npm:8.20.0" - "@typescript-eslint/visitor-keys": "npm:8.20.0" - checksum: 10c0/a8074768d06c863169294116624a45c19377ff0b8635ad5fa4ae673b43cf704d1b9b79384ceef0ff0abb78b107d345cd90fe5572354daf6ad773fe462ee71e6a + "@typescript-eslint/types": "npm:8.28.0" + "@typescript-eslint/visitor-keys": "npm:8.28.0" + checksum: 10c0/f3bd76b3f54e60f1efe108b233b2d818e44ecf0dc6422cc296542f784826caf3c66d51b8acc83d8c354980bd201e1d9aa1ea01011de96e0613d320c00e40ccfd languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.26.0": - version: 8.26.0 - resolution: "@typescript-eslint/scope-manager@npm:8.26.0" +"@typescript-eslint/type-utils@npm:8.28.0": + version: 8.28.0 + resolution: "@typescript-eslint/type-utils@npm:8.28.0" dependencies: - "@typescript-eslint/types": "npm:8.26.0" - "@typescript-eslint/visitor-keys": "npm:8.26.0" - checksum: 10c0/f93b12daf6a4df3050ca3fc6db1f534b5c521861509ee09a45a8a17d97f2fbb20c2d34975f07291481d69998aac9f2975f8facad0d47f533db56ec8f70f533a0 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:8.26.0": - version: 8.26.0 - resolution: "@typescript-eslint/type-utils@npm:8.26.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:8.26.0" - "@typescript-eslint/utils": "npm:8.26.0" + "@typescript-eslint/typescript-estree": "npm:8.28.0" + "@typescript-eslint/utils": "npm:8.28.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^2.0.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/840b7551dcea7304632564612a2460f869c5330c50661cf21ac5992359aba7539f1466ac7dbde6f2d0bd56f6f769c9f3fed8564045c82d4914a88745da846870 + checksum: 10c0/b8936edc2153bf794efba39bfb06393a228217830051767360f4b691fed7c82f3831c4fc6deac6d78b90a58596e61f866c17eaee9dd793c3efda3ebdcf5a71d8 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.20.0": - version: 8.20.0 - resolution: "@typescript-eslint/types@npm:8.20.0" - checksum: 10c0/21292d4ca089897015d2bf5ab99909a7b362902f63f4ba10696676823b50d00c7b4cd093b4b43fba01d12bc3feca3852d2c28528c06d8e45446b7477887dbee7 +"@typescript-eslint/types@npm:8.28.0": + version: 8.28.0 + resolution: "@typescript-eslint/types@npm:8.28.0" + checksum: 10c0/1f95895e20dac1cf063dc93c99142fd1871e53be816bcbbee93f22a05e6b2a82ca83c20ce3a551f65555910aa0956443a23268edbb004369d0d5cb282d13c377 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.26.0": - version: 8.26.0 - resolution: "@typescript-eslint/types@npm:8.26.0" - checksum: 10c0/b16c0f67d12092c204a5935b430854b3a41c80934b386a5a4526acc9c8a829d8ee4f78732e71587e605de7845fa9a801b59fff015471dab7bf33676ee68c0100 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:8.20.0": - version: 8.20.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.20.0" +"@typescript-eslint/typescript-estree@npm:8.28.0": + version: 8.28.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.28.0" dependencies: - "@typescript-eslint/types": "npm:8.20.0" - "@typescript-eslint/visitor-keys": "npm:8.20.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:^2.0.0" - peerDependencies: - typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/54a2c1da7d1c5f7e865b941e8a3c98eb4b5f56ed8741664a84065173bde9602cdb8866b0984b26816d6af885c1528311c11e7286e869ed424483b74366514cbd - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:8.26.0": - version: 8.26.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.26.0" - dependencies: - "@typescript-eslint/types": "npm:8.26.0" - "@typescript-eslint/visitor-keys": "npm:8.26.0" + "@typescript-eslint/types": "npm:8.28.0" + "@typescript-eslint/visitor-keys": "npm:8.28.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -4489,64 +4497,139 @@ __metadata: ts-api-utils: "npm:^2.0.1" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/898bf7ec8ee1f3454d0e38a0bb3d7bd3cbd39f530857c9b1851650ec1647bcb6997622e86d24332d81848afd9b65ce4c080437ab1c3c023b23915a745dd0b363 + checksum: 10c0/97a91c95b1295926098c12e2d2c2abaa68994dc879da132dcce1e75ec9d7dee8187695eaa5241d09cbc42b5e633917b6d35c624e78e3d3ee9bda42d1318080b6 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.20.0": - version: 8.20.0 - resolution: "@typescript-eslint/utils@npm:8.20.0" +"@typescript-eslint/utils@npm:8.28.0, @typescript-eslint/utils@npm:^8.27.0": + version: 8.28.0 + resolution: "@typescript-eslint/utils@npm:8.28.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.20.0" - "@typescript-eslint/types": "npm:8.20.0" - "@typescript-eslint/typescript-estree": "npm:8.20.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/dd36c3b22a2adde1e1462aed0c8b4720f61859b4ebb0c3ef935a786a6b1cb0ec21eb0689f5a8debe8db26d97ebb979bab68d6f8fe7b0098e6200a485cfe2991b - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:8.26.0": - version: 8.26.0 - resolution: "@typescript-eslint/utils@npm:8.26.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.26.0" - "@typescript-eslint/types": "npm:8.26.0" - "@typescript-eslint/typescript-estree": "npm:8.26.0" + "@typescript-eslint/scope-manager": "npm:8.28.0" + "@typescript-eslint/types": "npm:8.28.0" + "@typescript-eslint/typescript-estree": "npm:8.28.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/594838a865d385ad5206c8b948678d4cb4010d0c9b826913968ce9e8af4d1c58b1f044de49f91d8dc36cda2ddb121ee7d2c5b53822a05f3e55002b10a42b3bfb + checksum: 10c0/d3425be7f86c1245a11f0ea39136af681027797417348d8e666d38c76646945eaed7b35eb8db66372b067dee8b02a855caf2c24c040ec9c31e59681ab223b59d languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.20.0": - version: 8.20.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.20.0" +"@typescript-eslint/visitor-keys@npm:8.28.0": + version: 8.28.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.28.0" dependencies: - "@typescript-eslint/types": "npm:8.20.0" + "@typescript-eslint/types": "npm:8.28.0" eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/e95d8b2685e8beb6637bf2e9d06e4177a400d3a2b142ba749944690f969ee3186b750082fd9bf34ada82acf1c5dd5970201dfd97619029c8ecca85fb4b50dbd8 + checksum: 10c0/245a78ed983fe95fbd1b0f2d4cb9e9d1d964bddc0aa3e3d6ab10c19c4273855bfb27d840bb1fd55deb7ae3078b52f26592472baf6fd2c7019a5aa3b1da974f35 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.26.0": - version: 8.26.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.26.0" +"@unrs/resolver-binding-darwin-arm64@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.3.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-x64@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.3.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-freebsd-x64@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.3.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.3.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.3.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.3.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm64-musl@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.3.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.3.2" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.3.2" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-x64-gnu@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.3.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-x64-musl@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.3.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-wasm32-wasi@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.3.2" dependencies: - "@typescript-eslint/types": "npm:8.26.0" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/6428c1ba199d962060d43f06ba8a98b874ba6fe875a23b10e8f01550838d8be8ee689ae4da3e8b045d4c7bb01e38385e6a8ae17a9d566cf7cd21f7090b573f61 + "@napi-rs/wasm-runtime": "npm:^0.2.7" + conditions: cpu=wasm32 languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.2.0": - version: 1.2.0 - resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.3.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.3.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-x64-msvc@npm:1.3.2": + version: 1.3.2 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.3.2" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4822,7 +4905,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.12.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.12.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -4831,6 +4914,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.14.0": + version: 8.14.1 + resolution: "acorn@npm:8.14.1" + bin: + acorn: bin/acorn + checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123 + languageName: node + linkType: hard + "agent-base@npm:6": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -6048,7 +6140,7 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": version: 1.0.8 resolution: "call-bind@npm:1.0.8" dependencies: @@ -6110,16 +6202,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:4, chalk@npm:^4.0, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - "chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -6141,6 +6223,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^4.0, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + "chalk@npm:~5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" @@ -6758,7 +6850,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: @@ -6769,6 +6861,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: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + "crypto-browserify@npm:^3.11.0": version: 3.12.0 resolution: "crypto-browserify@npm:3.12.0" @@ -7186,7 +7289,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:~4.4.0": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:^4.4.0, debug@npm:~4.4.0": version: 4.4.0 resolution: "debug@npm:4.4.0" dependencies: @@ -7214,7 +7317,7 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:10, decimal.js@npm:^10.4.2, decimal.js@npm:^10.4.3": +"decimal.js@npm:^10.4.2, decimal.js@npm:^10.4.3": version: 10.4.3 resolution: "decimal.js@npm:10.4.3" checksum: 10c0/6d60206689ff0911f0ce968d40f163304a6c1bc739927758e6efc7921cfa630130388966f16bf6ef6b838cb33679fbe8e7a78a2f3c478afce841fd55ac8fb8ee @@ -7503,15 +7606,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: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 - languageName: node - linkType: hard - "dom-accessibility-api@npm:^0.5.9": version: 0.5.16 resolution: "dom-accessibility-api@npm:0.5.16" @@ -7796,16 +7890,6 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.15.0": - version: 5.17.1 - resolution: "enhanced-resolve@npm:5.17.1" - dependencies: - graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.2.0" - checksum: 10c0/81a0515675eca17efdba2cf5bad87abc91a528fc1191aad50e275e74f045b41506167d420099022da7181c8d787170ea41e4a11a0b10b7a16f6237daecb15370 - languageName: node - linkType: hard - "entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" @@ -8075,13 +8159,6 @@ __metadata: languageName: node linkType: hard -"eslint-define-config@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-define-config@npm:2.1.0" - checksum: 10c0/034bd6bfbfec2db6c720a51815de6b072efeef7afbf99d90c23a1871f9cd741bb77f9d34e0bc2465262298c6110c5c45b704714d8575c6567fd2df963fb792ea - languageName: node - linkType: hard - "eslint-import-resolver-node@npm:^0.3.9": version: 0.3.9 resolution: "eslint-import-resolver-node@npm:0.3.9" @@ -8093,17 +8170,16 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-typescript@npm:^3.5.5": - version: 3.8.3 - resolution: "eslint-import-resolver-typescript@npm:3.8.3" +"eslint-import-resolver-typescript@npm:^4.2.5": + version: 4.2.5 + resolution: "eslint-import-resolver-typescript@npm:4.2.5" dependencies: - "@nolyfill/is-core-module": "npm:1.0.39" - debug: "npm:^4.3.7" - enhanced-resolve: "npm:^5.15.0" + debug: "npm:^4.4.0" get-tsconfig: "npm:^4.10.0" - is-bun-module: "npm:^1.0.2" - stable-hash: "npm:^0.0.4" + is-bun-module: "npm:^2.0.0" + stable-hash: "npm:^0.0.5" tinyglobby: "npm:^0.2.12" + unrs-resolver: "npm:^1.3.2" peerDependencies: eslint: "*" eslint-plugin-import: "*" @@ -8113,7 +8189,7 @@ __metadata: optional: true eslint-plugin-import-x: optional: true - checksum: 10c0/886ceeab4cad14958d7c7d3432ead2486374616c8ada7925ab96e55f919f2dbbbdbe7c3081d7d238231e84699849e82930417a66e05638bcc8202e1263edddeb + checksum: 10c0/9134c4dd6e8b3cf1356d6bff68939153c81255c0ac7f694e829c3c7f5e785936591cfe43209d866c8a3b379d3a8dcd203651ec49bd99361fcb54dc0c2b9ce8fc languageName: node linkType: hard @@ -8129,22 +8205,22 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-formatjs@npm:^5.0.0": - version: 5.2.14 - resolution: "eslint-plugin-formatjs@npm:5.2.14" +"eslint-plugin-formatjs@npm:^5.3.1": + version: 5.3.1 + resolution: "eslint-plugin-formatjs@npm:5.3.1" dependencies: - "@formatjs/icu-messageformat-parser": "npm:2.11.1" - "@formatjs/ts-transformer": "npm:3.13.32" - "@types/eslint": "npm:9" - "@types/picomatch": "npm:3" - "@typescript-eslint/utils": "npm:8.20.0" + "@formatjs/icu-messageformat-parser": "npm:2.11.2" + "@formatjs/ts-transformer": "npm:3.13.34" + "@types/eslint": "npm:^9.6.1" + "@types/picomatch": "npm:^3" + "@typescript-eslint/utils": "npm:^8.27.0" magic-string: "npm:^0.30.0" picomatch: "npm:2 || 3 || 4" - tslib: "npm:2" + tslib: "npm:^2.8.0" unicode-emoji-utils: "npm:^1.2.0" peerDependencies: - eslint: 9 - checksum: 10c0/6d0b40cebb5e3e7ca426831b610963f02d36ec37aab784756e701a454f43193106cae4919138a77d3ba0229549214eef4e06f008b466c706bf475a40e575db9e + eslint: ^9.23.0 + checksum: 10c0/fb8ba06e0718cd098f2393aea04eb4a6037ca3ead1c9450bd38926d0adecba4cefdebfb661c56c36685e0f003331520c3330544c45803f397b827713ab5e1d7d languageName: node linkType: hard @@ -8177,9 +8253,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jsdoc@npm:^50.0.0": - version: 50.6.3 - resolution: "eslint-plugin-jsdoc@npm:50.6.3" +"eslint-plugin-jsdoc@npm:^50.6.9": + version: 50.6.9 + resolution: "eslint-plugin-jsdoc@npm:50.6.9" dependencies: "@es-joy/jsdoccomment": "npm:~0.49.0" are-docs-informative: "npm:^0.0.2" @@ -8194,11 +8270,11 @@ __metadata: synckit: "npm:^0.9.1" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/7e0c46675b7cd2133b83969254597bbd3a15694ee2e646a4b7bc8d10babaebe52444d372195649869bcd4d82bcc1fb6b9e21f9a1d187dabd0ac3295d2d3faaff + checksum: 10c0/cad199d262c2e889a3af4e402f6adc624e4273b3d5ca1940e7227b37d87af8090ca3444f7fff57f58dab9a827faed8722fc2f5d4daf31ec085eb00e9f5a338a7 languageName: node linkType: hard -"eslint-plugin-jsx-a11y@npm:~6.10.0": +"eslint-plugin-jsx-a11y@npm:~6.10.2": version: 6.10.2 resolution: "eslint-plugin-jsx-a11y@npm:6.10.2" dependencies: @@ -8223,7 +8299,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-promise@npm:~7.2.0": +"eslint-plugin-promise@npm:~7.2.1": version: 7.2.1 resolution: "eslint-plugin-promise@npm:7.2.1" dependencies: @@ -8234,7 +8310,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^5.0.0": +"eslint-plugin-react-hooks@npm:^5.2.0": version: 5.2.0 resolution: "eslint-plugin-react-hooks@npm:5.2.0" peerDependencies: @@ -8243,7 +8319,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.33.2": +"eslint-plugin-react@npm:^7.37.4": version: 7.37.4 resolution: "eslint-plugin-react@npm:7.37.4" dependencies: @@ -8281,17 +8357,17 @@ __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.3.0": + version: 8.3.0 + resolution: "eslint-scope@npm:8.3.0" dependencies: esrecurse: "npm:^4.3.0" estraverse: "npm:^5.2.0" - checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + checksum: 10c0/23bf54345573201fdf06d29efa345ab508b355492f6c6cc9e2b9f6d02b896f369b6dd5315205be94b8853809776c4d13353b85c6b531997b164ff6c3328ecf5b 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: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 @@ -8305,51 +8381,64 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.41.0": - version: 8.57.1 - resolution: "eslint@npm:8.57.1" +"eslint@npm:^9.23.0": + version: 9.23.0 + resolution: "eslint@npm:9.23.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.1" - "@humanwhocodes/config-array": "npm:^0.13.0" + "@eslint-community/regexpp": "npm:^4.12.1" + "@eslint/config-array": "npm:^0.19.2" + "@eslint/config-helpers": "npm:^0.2.0" + "@eslint/core": "npm:^0.12.0" + "@eslint/eslintrc": "npm:^3.3.1" + "@eslint/js": "npm:9.23.0" + "@eslint/plugin-kit": "npm:^0.2.7" + "@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.2" + "@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.3.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: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 + checksum: 10c0/9616c308dfa8d09db8ae51019c87d5d05933742214531b077bd6ab618baab3bec7938256c14dcad4dc47f5ba93feb0bc5e089f68799f076374ddea21b6a9be45 + languageName: node + linkType: hard + +"espree@npm:^10.0.1, espree@npm:^10.3.0": + version: 10.3.0 + resolution: "espree@npm:10.3.0" + dependencies: + acorn: "npm:^8.14.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 languageName: node linkType: hard @@ -8364,17 +8453,6 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: "npm:^8.9.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 - languageName: node - linkType: hard - "esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -8385,7 +8463,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.2, esquery@npm:^1.6.0": +"esquery@npm:^1.5.0, esquery@npm:^1.6.0": version: 1.6.0 resolution: "esquery@npm:1.6.0" dependencies: @@ -8759,12 +8837,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: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 languageName: node linkType: hard @@ -8900,14 +8978,13 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" dependencies: flatted: "npm:^3.2.9" - keyv: "npm:^4.5.3" - rimraf: "npm:^3.0.2" - checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + keyv: "npm:^4.5.4" + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc languageName: node linkType: hard @@ -9348,12 +9425,17 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.19.0": - version: 13.23.0 - resolution: "globals@npm:13.23.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/fc05e184b3be59bffa2580f28551a12a758c3a18df4be91444202982c76f13f52821ad54ffaf7d3f2a4d2498fdf54aeaca8d4540fd9e860a9edb09d34ef4c507 +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d + languageName: node + linkType: hard + +"globals@npm:^16.0.0": + version: 16.0.0 + resolution: "globals@npm:16.0.0" + checksum: 10c0/8906d5f01838df64a81d6c2a7b7214312e2216cf65c5ed1546dc9a7d0febddf55ffa906cf04efd5b01eec2534d6f14859a89535d1a68241832810e41ef3fd5bb languageName: node linkType: hard @@ -9408,7 +9490,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -10216,12 +10298,12 @@ __metadata: languageName: node linkType: hard -"is-bun-module@npm:^1.0.2": - version: 1.1.0 - resolution: "is-bun-module@npm:1.1.0" +"is-bun-module@npm:^2.0.0": + version: 2.0.0 + resolution: "is-bun-module@npm:2.0.0" dependencies: - semver: "npm:^7.6.3" - checksum: 10c0/17cae968c3fe08e2bd66f8477e4d5a166d6299b5e7ce5c7558355551c50267f77dd386297fada6b68e4a32f01ce8920b0423e4d258242ea463b45901ec474beb + semver: "npm:^7.7.1" + checksum: 10c0/7d27a0679cfa5be1f5052650391f9b11040cd70c48d45112e312c56bc6b6ca9c9aea70dcce6cc40b1e8947bfff8567a5c5715d3b066fb478522dab46ea379240 languageName: node linkType: hard @@ -10477,13 +10559,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: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 - languageName: node - linkType: hard - "is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" @@ -11443,18 +11518,6 @@ __metadata: languageName: node linkType: hard -"json-stable-stringify@npm:1": - version: 1.1.1 - resolution: "json-stable-stringify@npm:1.1.1" - dependencies: - call-bind: "npm:^1.0.5" - isarray: "npm:^2.0.5" - jsonify: "npm:^0.0.1" - object-keys: "npm:^1.1.1" - checksum: 10c0/3801e3eeccbd030afb970f54bea690a079cfea7d9ed206a1b17ca9367f4b7772c764bf77a48f03e56b50e5f7ee7d11c52339fe20d8d7ccead003e4ca69e4cfde - languageName: node - linkType: hard - "json-stable-stringify@npm:^1.1.1": version: 1.2.1 resolution: "json-stable-stringify@npm:1.2.1" @@ -11534,7 +11597,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.3, keyv@npm:^4.5.4": +"keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -12266,7 +12329,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"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: @@ -15863,6 +15926,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.7.1": + version: 7.7.1 + resolution: "semver@npm:7.7.1" + bin: + semver: bin/semver.js + checksum: 10c0/fd603a6fb9c399c6054015433051bdbe7b99a940a8fb44b85c2b524c4004b023d7928d47cb22154f8d054ea7ee8597f586605e05b52047f048278e4ac56ae958 + languageName: node + linkType: hard + "send@npm:0.19.0": version: 0.19.0 resolution: "send@npm:0.19.0" @@ -16485,10 +16557,10 @@ __metadata: languageName: node linkType: hard -"stable-hash@npm:^0.0.4": - version: 0.0.4 - resolution: "stable-hash@npm:0.0.4" - checksum: 10c0/53d010d2a1b014fb60d398c095f43912c353b7b44774e55222bb26fd428bc75b73d7bdfcae509ce927c23ca9c5aff2dc1bc82f191d30e57a879550bc2952bdb0 +"stable-hash@npm:^0.0.5": + version: 0.0.5 + resolution: "stable-hash@npm:0.0.5" + checksum: 10c0/ca670cb6d172f1c834950e4ec661e2055885df32fee3ebf3647c5df94993b7c2666a5dbc1c9a62ee11fc5c24928579ec5e81bb5ad31971d355d5a341aab493b3 languageName: node linkType: hard @@ -17173,13 +17245,6 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 - languageName: node - linkType: hard - "tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.2.0 resolution: "tar@npm:6.2.0" @@ -17290,13 +17355,6 @@ __metadata: languageName: node linkType: hard -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c - languageName: node - linkType: hard - "thread-stream@npm:^3.0.0": version: 3.0.0 resolution: "thread-stream@npm:3.0.0" @@ -17501,7 +17559,7 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^2.0.0, ts-api-utils@npm:^2.0.1": +"ts-api-utils@npm:^2.0.1": version: 2.0.1 resolution: "ts-api-utils@npm:2.0.1" peerDependencies: @@ -17522,7 +17580,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2, tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": +"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": version: 2.8.0 resolution: "tslib@npm:2.8.0" checksum: 10c0/31e4d14dc1355e9b89e4d3c893a18abb7f90b6886b089c2da91224d0a7752c79f3ddc41bc1aa0a588ac895bd97bb99c5bc2bfdb2f86de849f31caeb3ba79bbe5 @@ -17585,13 +17643,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 - languageName: node - linkType: hard - "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -17662,7 +17713,21 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5, typescript@npm:^5.0.4": +"typescript-eslint@npm:^8.28.0": + version: 8.28.0 + resolution: "typescript-eslint@npm:8.28.0" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.28.0" + "@typescript-eslint/parser": "npm:8.28.0" + "@typescript-eslint/utils": "npm:8.28.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/bf1c1e4b2f21a95930758d5b285c39a394a50e3b6983f373413b93b80a6cb5aabc1d741780e60c63cb42ad5d645ea9c1e6d441d98174c5a2884ab88f4ac46df6 + languageName: node + linkType: hard + +"typescript@npm:^5.0.4": version: 5.7.3 resolution: "typescript@npm:5.7.3" bin: @@ -17682,7 +17747,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin": +"typescript@patch:typescript@npm%3A^5.0.4#optional!builtin": version: 5.7.3 resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" bin: @@ -17867,6 +17932,60 @@ __metadata: languageName: node linkType: hard +"unrs-resolver@npm:^1.3.2": + version: 1.3.2 + resolution: "unrs-resolver@npm:1.3.2" + dependencies: + "@unrs/resolver-binding-darwin-arm64": "npm:1.3.2" + "@unrs/resolver-binding-darwin-x64": "npm:1.3.2" + "@unrs/resolver-binding-freebsd-x64": "npm:1.3.2" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.3.2" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.3.2" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.3.2" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.3.2" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.3.2" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.3.2" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.3.2" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.3.2" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.3.2" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.3.2" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.3.2" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.3.2" + dependenciesMeta: + "@unrs/resolver-binding-darwin-arm64": + optional: true + "@unrs/resolver-binding-darwin-x64": + optional: true + "@unrs/resolver-binding-freebsd-x64": + optional: true + "@unrs/resolver-binding-linux-arm-gnueabihf": + optional: true + "@unrs/resolver-binding-linux-arm-musleabihf": + optional: true + "@unrs/resolver-binding-linux-arm64-gnu": + optional: true + "@unrs/resolver-binding-linux-arm64-musl": + optional: true + "@unrs/resolver-binding-linux-ppc64-gnu": + optional: true + "@unrs/resolver-binding-linux-s390x-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-musl": + optional: true + "@unrs/resolver-binding-wasm32-wasi": + optional: true + "@unrs/resolver-binding-win32-arm64-msvc": + optional: true + "@unrs/resolver-binding-win32-ia32-msvc": + optional: true + "@unrs/resolver-binding-win32-x64-msvc": + optional: true + checksum: 10c0/f9b6d18193bcaae7ef9e284a74c85d4cb3d8c833851f1b23254a947297e672826223d82798dbff818455fefeda02084340aca904300fd5060468c2f243767cc1 + languageName: node + linkType: hard + "unset-value@npm:^1.0.0": version: 1.0.0 resolution: "unset-value@npm:1.0.0"