diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3d09db3f80db..730ffc5af693 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -134,25 +134,6 @@ jobs: run: yarn stylelint working-directory: packages/website - eslint_v9_tests: - name: Run tests on ESLint v9 - needs: [build] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Install - uses: ./.github/actions/prepare-install - with: - node-version: ${{ env.PRIMARY_NODE_VERSION }} - - name: Build - uses: ./.github/actions/prepare-build - - run: yarn add eslint@9 - - name: Run tests - run: yarn test - env: - CI: true - integration_tests: name: Run integration tests on primary Node.js version needs: [build] diff --git a/eslint.config.mjs b/eslint.config.mjs index aa0565d5e459..d171204d9d93 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -2,6 +2,7 @@ import url from 'node:url'; +import { fixupConfigRules, fixupPluginRules } from '@eslint/compat'; import { FlatCompat } from '@eslint/eslintrc'; import eslint from '@eslint/js'; import tseslintInternalPlugin from '@typescript-eslint/eslint-plugin-internal'; @@ -29,15 +30,20 @@ export default tseslint.config( plugins: { ['@typescript-eslint']: tseslint.plugin, ['@typescript-eslint/internal']: tseslintInternalPlugin, - ['deprecation']: deprecationPlugin, + // https://github.com/gund/eslint-plugin-deprecation/issues/78 + // https://github.com/typescript-eslint/typescript-eslint/issues/8988 + ['deprecation']: fixupPluginRules(deprecationPlugin), ['eslint-comments']: eslintCommentsPlugin, ['eslint-plugin']: eslintPluginPlugin, - ['import']: importPlugin, + // https://github.com/import-js/eslint-plugin-import/issues/2948 + ['import']: fixupPluginRules(importPlugin), ['jest']: jestPlugin, ['jsdoc']: jsdocPlugin, ['jsx-a11y']: jsxA11yPlugin, - ['react-hooks']: reactHooksPlugin, - ['react']: reactPlugin, + // https://github.com/facebook/react/issues/28313 + ['react-hooks']: fixupPluginRules(reactHooksPlugin), + // https://github.com/jsx-eslint/eslint-plugin-react/issues/3699 + ['react']: fixupPluginRules(reactPlugin), ['simple-import-sort']: simpleImportSortPlugin, ['unicorn']: unicornPlugin, }, @@ -512,8 +518,8 @@ export default tseslint.config( files: ['packages/website/**/*.{ts,tsx,mts,cts,js,jsx}'], extends: [ ...compat.config(jsxA11yPlugin.configs.recommended), - ...compat.config(reactPlugin.configs.recommended), - ...compat.config(reactHooksPlugin.configs.recommended), + ...fixupConfigRules(compat.config(reactPlugin.configs.recommended)), + ...fixupConfigRules(compat.config(reactHooksPlugin.configs.recommended)), ], rules: { '@typescript-eslint/internal/prefer-ast-types-enum': 'off', diff --git a/package.json b/package.json index 64ba4daf8a4d..d3e2c8ec2925 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "@babel/eslint-parser": "^7.24.1", "@babel/parser": "^7.24.4", "@babel/types": "^7.24.0", + "@eslint/compat": "^1.0.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "^8.57.0", "@jest/types": "29.6.3", @@ -85,7 +86,7 @@ "cross-fetch": "^4.0.0", "cspell": "^8.6.1", "downlevel-dts": ">=0.11.0", - "eslint": "8.57.0", + "eslint": "^9.3.0", "eslint-plugin-deprecation": "^2.0.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-eslint-plugin": "^5.5.0", @@ -129,7 +130,7 @@ "@types/estree": "link:./tools/dummypkg", "@types/node": "^20.0.0", "@types/react": "^18.2.14", - "eslint": "8.57.0", + "eslint": "^9", "eslint-visitor-keys": "^3.4.1", "jest-config": "^29", "jest-resolve": "^29", diff --git a/packages/eslint-plugin/rules.d.ts b/packages/eslint-plugin/rules.d.ts index 84b09acb7193..d6625d09950e 100644 --- a/packages/eslint-plugin/rules.d.ts +++ b/packages/eslint-plugin/rules.d.ts @@ -74,5 +74,4 @@ export type TypeScriptESLintRules = Record< >; declare const rules: TypeScriptESLintRules; -// eslint-disable-next-line import/no-default-export export default rules; diff --git a/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts b/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts index 5e8e1774eda4..b19e0305c7bb 100644 --- a/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts +++ b/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/prefer-literal-enum-member */ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as tsutils from 'ts-api-utils'; diff --git a/packages/eslint-plugin/tests/rules/prefer-optional-chain/base-cases.ts b/packages/eslint-plugin/tests/rules/prefer-optional-chain/base-cases.ts index 28b75a91697d..4ea5f6cc087b 100644 --- a/packages/eslint-plugin/tests/rules/prefer-optional-chain/base-cases.ts +++ b/packages/eslint-plugin/tests/rules/prefer-optional-chain/base-cases.ts @@ -229,10 +229,6 @@ const RawBaseCases = (operator: '&&' | '||') => ] as const; export const identity: MutateFn = c => c; -/* -eslint-disable-next-line eslint-plugin/prefer-message-ids, eslint-plugin/prefer-object-rule, eslint-plugin/require-meta-type, eslint-plugin/require-meta-schema -- -TODO - bug in hte rules - https://github.com/eslint-community/eslint-plugin-eslint-plugin/issues/455 -*/ export const BaseCases: BaseCaseCreator = ({ operator, mutateCode = identity, diff --git a/packages/eslint-plugin/tests/schema-snapshots/no-restricted-imports.shot b/packages/eslint-plugin/tests/schema-snapshots/no-restricted-imports.shot index 1fbe61748f34..55bec533996f 100644 --- a/packages/eslint-plugin/tests/schema-snapshots/no-restricted-imports.shot +++ b/packages/eslint-plugin/tests/schema-snapshots/no-restricted-imports.shot @@ -15,6 +15,12 @@ exports[`Rule schemas should be convertible to TS types for documentation purpos { "additionalProperties": false, "properties": { + "allowImportNames": { + "items": { + "type": "string" + }, + "type": "array" + }, "allowTypeImports": { "description": "Disallow value imports, but allow type-only imports.", "type": "boolean" @@ -56,6 +62,12 @@ exports[`Rule schemas should be convertible to TS types for documentation purpos { "additionalProperties": false, "properties": { + "allowImportNames": { + "items": { + "type": "string" + }, + "type": "array" + }, "allowTypeImports": { "description": "Disallow value imports, but allow type-only imports.", "type": "boolean" @@ -95,6 +107,17 @@ exports[`Rule schemas should be convertible to TS types for documentation purpos "items": { "additionalProperties": false, "properties": { + "allowImportNamePattern": { + "type": "string" + }, + "allowImportNames": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, "allowTypeImports": { "description": "Disallow value imports, but allow type-only imports.", "type": "boolean" @@ -149,6 +172,7 @@ exports[`Rule schemas should be convertible to TS types for documentation purpos type Options = | ( | { + allowImportNames?: string[]; /** Disallow value imports, but allow type-only imports. */ allowTypeImports?: boolean; importNames?: string[]; @@ -162,6 +186,7 @@ type Options = { paths?: ( | { + allowImportNames?: string[]; /** Disallow value imports, but allow type-only imports. */ allowTypeImports?: boolean; importNames?: string[]; @@ -172,6 +197,8 @@ type Options = )[]; patterns?: | { + allowImportNamePattern?: string; + allowImportNames?: [string, ...string[]]; /** Disallow value imports, but allow type-only imports. */ allowTypeImports?: boolean; caseSensitive?: boolean; diff --git a/packages/integration-tests/fixtures/markdown/.eslintrc.js b/packages/integration-tests/fixtures/markdown/.eslintrc.js deleted file mode 100644 index 9dd8a5505b98..000000000000 --- a/packages/integration-tests/fixtures/markdown/.eslintrc.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - env: { - es6: true, - node: true, - }, - parserOptions: { - sourceType: 'module', - extraFileExtensions: ['.vue'], - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ['markdown', '@typescript-eslint'], - overrides: [ - { - // this will also ensure that eslint will force lint the markdown files - files: ['**/*.md'], - processor: 'markdown/markdown', - }, - { - files: ['**/*.md/*.{js,ts,jsx,tsx,javascript,node}'], - rules: { - '@typescript-eslint/no-explicit-any': 'error', - 'no-console': 'error', - }, - }, - ], -}; diff --git a/packages/integration-tests/fixtures/markdown/eslint.config.js b/packages/integration-tests/fixtures/markdown/eslint.config.js new file mode 100644 index 000000000000..813da175da2f --- /dev/null +++ b/packages/integration-tests/fixtures/markdown/eslint.config.js @@ -0,0 +1,15 @@ +import markdown from 'eslint-plugin-markdown'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + tseslint.configs.base, + // this will also ensure that eslint will force lint the markdown files + { plugins: { markdown }, files: ['**/*.md'], processor: 'markdown/markdown' }, + { + files: ['**/*.md/*.{js,ts,jsx,tsx,javascript,node}'], + rules: { + '@typescript-eslint/no-explicit-any': 'error', + 'no-console': 'error', + }, + }, +); diff --git a/packages/integration-tests/fixtures/markdown/package.json b/packages/integration-tests/fixtures/markdown/package.json index a0cb6620d6cb..b109350f6a63 100644 --- a/packages/integration-tests/fixtures/markdown/package.json +++ b/packages/integration-tests/fixtures/markdown/package.json @@ -1,4 +1,5 @@ { + "type": "module", "devDependencies": { "eslint-plugin-markdown": "latest" } diff --git a/packages/integration-tests/fixtures/recommended-does-not-require-program/.eslintrc.js b/packages/integration-tests/fixtures/recommended-does-not-require-program/eslint.config.js similarity index 50% rename from packages/integration-tests/fixtures/recommended-does-not-require-program/.eslintrc.js rename to packages/integration-tests/fixtures/recommended-does-not-require-program/eslint.config.js index 0f28905d8de8..52b114c8ac7a 100644 --- a/packages/integration-tests/fixtures/recommended-does-not-require-program/.eslintrc.js +++ b/packages/integration-tests/fixtures/recommended-does-not-require-program/eslint.config.js @@ -1,14 +1,11 @@ +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; + // This integration test exists to make sure that the recommended config does // not require a program to be specified to ensure a fast and simple initial // setup. Users can add on one of our other configs if they want to opt in to // more expensive checks. -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/eslint-recommended', - 'plugin:@typescript-eslint/recommended', - ], - plugins: ['@typescript-eslint'], -}; +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommended, +); diff --git a/packages/integration-tests/fixtures/recommended-does-not-require-program/package.json b/packages/integration-tests/fixtures/recommended-does-not-require-program/package.json index 6ae64c0520b4..48b88be7f264 100644 --- a/packages/integration-tests/fixtures/recommended-does-not-require-program/package.json +++ b/packages/integration-tests/fixtures/recommended-does-not-require-program/package.json @@ -1,3 +1,4 @@ { + "type": "module", "devDependencies": {} } diff --git a/packages/integration-tests/fixtures/vue-jsx/.eslintrc.js b/packages/integration-tests/fixtures/vue-jsx/.eslintrc.js deleted file mode 100644 index 750fe39d0bdc..000000000000 --- a/packages/integration-tests/fixtures/vue-jsx/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = { - root: true, - parser: 'vue-eslint-parser', - env: { - es6: true, - node: true, - }, - extends: ['plugin:vue/essential'], - parserOptions: { - parser: '@typescript-eslint/parser', - sourceType: 'module', - extraFileExtensions: ['.vue'], - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ['@typescript-eslint'], - rules: { - '@typescript-eslint/no-explicit-any': 'error', - }, -}; diff --git a/packages/integration-tests/fixtures/vue-jsx/eslint.config.js b/packages/integration-tests/fixtures/vue-jsx/eslint.config.js new file mode 100644 index 000000000000..e363e288fd1e --- /dev/null +++ b/packages/integration-tests/fixtures/vue-jsx/eslint.config.js @@ -0,0 +1,13 @@ +import tseslint from 'typescript-eslint'; +import pluginVue from 'eslint-plugin-vue'; + +export default tseslint.config( + tseslint.configs.base, + ...pluginVue.configs['flat/essential'], + { + languageOptions: { + parserOptions: { ecmaFeatures: { jsx: true }, parser: tseslint.parser }, + }, + rules: { '@typescript-eslint/no-explicit-any': 'error' }, + }, +); diff --git a/packages/integration-tests/fixtures/vue-jsx/package.json b/packages/integration-tests/fixtures/vue-jsx/package.json index bef3a8935336..dd7e0cf5056c 100644 --- a/packages/integration-tests/fixtures/vue-jsx/package.json +++ b/packages/integration-tests/fixtures/vue-jsx/package.json @@ -1,4 +1,5 @@ { + "type": "module", "devDependencies": { "vue-eslint-parser": "latest", "eslint-plugin-vue": "latest", diff --git a/packages/integration-tests/fixtures/vue-sfc/.eslintrc.js b/packages/integration-tests/fixtures/vue-sfc/.eslintrc.js deleted file mode 100644 index 3306fe237555..000000000000 --- a/packages/integration-tests/fixtures/vue-sfc/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = { - root: true, - parser: 'vue-eslint-parser', - env: { - es6: true, - node: true, - }, - extends: ['plugin:vue/essential'], - parserOptions: { - parser: '@typescript-eslint/parser', - project: '/usr/linked/tsconfig.json', - sourceType: 'module', - extraFileExtensions: ['.vue'], - }, - plugins: ['@typescript-eslint'], - rules: { - '@typescript-eslint/no-explicit-any': 'error', - '@typescript-eslint/no-unnecessary-type-assertion': 'error', - 'semi-spacing': 'error', - }, -}; diff --git a/packages/integration-tests/fixtures/vue-sfc/eslint.config.js b/packages/integration-tests/fixtures/vue-sfc/eslint.config.js new file mode 100644 index 000000000000..37a9d7db399a --- /dev/null +++ b/packages/integration-tests/fixtures/vue-sfc/eslint.config.js @@ -0,0 +1,20 @@ +import pluginVue from 'eslint-plugin-vue'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + tseslint.configs.base, + ...pluginVue.configs['flat/essential'], + { + languageOptions: { + parserOptions: { + parser: tseslint.parser, + project: '/usr/linked/tsconfig.json', + }, + }, + rules: { + '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/no-unnecessary-type-assertion': 'error', + 'semi-spacing': 'error', + }, + }, +); diff --git a/packages/integration-tests/fixtures/vue-sfc/package.json b/packages/integration-tests/fixtures/vue-sfc/package.json index bef3a8935336..dd7e0cf5056c 100644 --- a/packages/integration-tests/fixtures/vue-sfc/package.json +++ b/packages/integration-tests/fixtures/vue-sfc/package.json @@ -1,4 +1,5 @@ { + "type": "module", "devDependencies": { "vue-eslint-parser": "latest", "eslint-plugin-vue": "latest", diff --git a/packages/integration-tests/tests/__snapshots__/recommended-does-not-require-program.test.ts.snap b/packages/integration-tests/tests/__snapshots__/recommended-does-not-require-program.test.ts.snap index ae2bd5a863e8..059dfb803b0e 100644 --- a/packages/integration-tests/tests/__snapshots__/recommended-does-not-require-program.test.ts.snap +++ b/packages/integration-tests/tests/__snapshots__/recommended-does-not-require-program.test.ts.snap @@ -24,16 +24,7 @@ exports[`recommended-does-not-require-program eslint should work successfully 1` "output": "const foo: unknown = true; ", "suppressedMessages": [], - "usedDeprecatedRules": [ - { - "replacedBy": [], - "ruleId": "no-extra-semi", - }, - { - "replacedBy": [], - "ruleId": "no-mixed-spaces-and-tabs", - }, - ], + "usedDeprecatedRules": [], "warningCount": 0, }, ] diff --git a/packages/integration-tests/tests/flat-config-types.test.ts b/packages/integration-tests/tests/flat-config-types.test.ts index a8483fba3fc3..15c8481b5433 100644 --- a/packages/integration-tests/tests/flat-config-types.test.ts +++ b/packages/integration-tests/tests/flat-config-types.test.ts @@ -25,4 +25,4 @@ for (const additionalFlags of [ }, ); } -eslintIntegrationTest(__filename, 'eslint.config.js', true); +eslintIntegrationTest(__filename, 'eslint.config.js'); diff --git a/packages/integration-tests/tools/integration-test-base.ts b/packages/integration-tests/tools/integration-test-base.ts index 548df55030e3..e9dbe74dcd37 100644 --- a/packages/integration-tests/tools/integration-test-base.ts +++ b/packages/integration-tests/tools/integration-test-base.ts @@ -128,7 +128,6 @@ function integrationTest( export function eslintIntegrationTest( testFilename: string, filesGlob: string, - flatConfig = false, ): void { integrationTest('eslint', testFilename, async testFolder => { // lint, outputting to a JSON file @@ -143,8 +142,6 @@ export function eslintIntegrationTest( 'json', '--output-file', outFile, - '--config', - flatConfig ? './eslint.config.js' : './.eslintrc.js', '--fix-dry-run', filesGlob, ], diff --git a/packages/website-eslint/build.ts b/packages/website-eslint/build.ts index b119efbf430f..a786940cbcbe 100644 --- a/packages/website-eslint/build.ts +++ b/packages/website-eslint/build.ts @@ -75,16 +75,21 @@ async function buildPackage(name: string, file: string): Promise { 'define.amd': 'false', global: 'window', }, - alias: { - util: requireResolved('./src/mock/util.js'), - assert: requireResolved('./src/mock/assert.js'), - path: requireResolved('./src/mock/path.js'), - typescript: requireResolved('./src/mock/typescript.js'), - 'typescript/lib/tsserverlibrary': requireResolved( - './src/mock/typescript.js', - ), - 'lru-cache': requireResolved('./src/mock/lru-cache.js'), - }, + alias: Object.fromEntries( + [ + // built-in Node packages — alias each twice — both with and without the `node:` prefix + ...['util', 'assert', 'path'].flatMap(from => [from, `node:${from}`]), + // other NPM packages + 'typescript', + 'typescript/lib/tsserverlibrary', + 'lru-cache', + ].map(from => [ + from, + requireResolved( + `./src/mock/${from.split('/')[0].split(':').at(-1)}.js`, + ), + ]), + ), plugins: [ { name: 'replace-plugin', diff --git a/packages/website/src/hooks/useClipboard.ts b/packages/website/src/hooks/useClipboard.ts index 0a98af33b91b..0c07beacf445 100644 --- a/packages/website/src/hooks/useClipboard.ts +++ b/packages/website/src/hooks/useClipboard.ts @@ -7,12 +7,13 @@ export type useClipboardResult = [copied: boolean, copy: () => void]; export function useClipboard(code: () => string): useClipboardResult { const [copied, setCopied] = useDebouncedToggle(false); - const copy = useCallback(() => { - // eslint-disable-next-line @typescript-eslint/no-floating-promises - void navigator.clipboard.writeText(code()).then(() => { - setCopied(true); - }); - }, [setCopied, code]); + const copy = useCallback( + () => + void navigator.clipboard.writeText(code()).then(() => { + setCopied(true); + }), + [setCopied, code], + ); return [copied, copy]; } diff --git a/packages/website/src/theme/MDXComponents/RuleAttributes.tsx b/packages/website/src/theme/MDXComponents/RuleAttributes.tsx index d3ccab92c538..338945fd2e6d 100644 --- a/packages/website/src/theme/MDXComponents/RuleAttributes.tsx +++ b/packages/website/src/theme/MDXComponents/RuleAttributes.tsx @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import Link from '@docusaurus/Link'; import { useRulesMeta } from '@site/src/hooks/useRulesMeta'; import type { ESLintPluginDocs } from '@typescript-eslint/eslint-plugin/use-at-your-own-risk/rules'; diff --git a/typings/eslint-plugin-deprecation.d.ts b/typings/eslint-plugin-deprecation.d.ts new file mode 100644 index 000000000000..007bdbf2c75b --- /dev/null +++ b/typings/eslint-plugin-deprecation.d.ts @@ -0,0 +1,12 @@ +declare module 'eslint-plugin-deprecation' { + import type { + ClassicConfig, + Linter, + } from '@typescript-eslint/utils/ts-eslint'; + + declare const exprt: { + configs: { recommended: ClassicConfig.Config }; + rules: NonNullable; + }; + export = exprt; +} diff --git a/typings/eslint__compat.d.ts b/typings/eslint__compat.d.ts new file mode 100644 index 000000000000..a097ec396d32 --- /dev/null +++ b/typings/eslint__compat.d.ts @@ -0,0 +1,12 @@ +declare module '@eslint/compat' { + import type { FlatConfig, Linter } from '@typescript-eslint/utils/ts-eslint'; + + declare const exprt: { + fixupConfigRules: ( + config: FlatConfig.ConfigArray, + ) => FlatConfig.ConfigArray; + fixupPluginRules: (plugin: Linter.Plugin) => Linter.Plugin; + }; + + export = exprt; +} diff --git a/yarn.lock b/yarn.lock index f14f64386719..ed95fc12e72c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3347,6 +3347,13 @@ __metadata: languageName: node linkType: hard +"@eslint/compat@npm:^1.0.1": + version: 1.0.1 + resolution: "@eslint/compat@npm:1.0.1" + checksum: 98d31eae0ab2a1c781790b184f2be7dd92565ac9bf3c08fe788b3a79b9ff36e196f76e80fdfde57c4d96cab8ed98cf468ca9175d60e40b9aea423d15b8b00692 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^2.1.4": version: 2.1.4 resolution: "@eslint/eslintrc@npm:2.1.4" @@ -3364,13 +3371,37 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:*, @eslint/js@npm:8.57.0, @eslint/js@npm:^8.57.0": +"@eslint/eslintrc@npm:^3.1.0": + version: 3.1.0 + resolution: "@eslint/eslintrc@npm:3.1.0" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^10.0.1 + globals: ^14.0.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: b0a9bbd98c8b9e0f4d975b042ff9b874dde722b20834ea2ff46551c3de740d4f10f56c449b790ef34d7f82147cbddfc22b004a43cc885dbc2664bb134766b5e4 + languageName: node + linkType: hard + +"@eslint/js@npm:*, @eslint/js@npm:^8.57.0": version: 8.57.0 resolution: "@eslint/js@npm:8.57.0" checksum: 315dc65b0e9893e2bff139bddace7ea601ad77ed47b4550e73da8c9c2d2766c7a575c3cddf17ef85b8fd6a36ff34f91729d0dcca56e73ca887c10df91a41b0bb languageName: node linkType: hard +"@eslint/js@npm:9.3.0": + version: 9.3.0 + resolution: "@eslint/js@npm:9.3.0" + checksum: 5af317c8bcfef660efc17624b825c71bac16770f8866bfdc2922e1fcc2010af96e4f896e91724b81550e5dba6db6983c221b5be9a1294c9e727dee9ada15c9f8 + languageName: node + linkType: hard + "@fastify/busboy@npm:^2.0.0": version: 2.0.0 resolution: "@fastify/busboy@npm:2.0.0" @@ -3394,14 +3425,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" dependencies: - "@humanwhocodes/object-schema": ^2.0.2 + "@humanwhocodes/object-schema": ^2.0.3 debug: ^4.3.1 minimatch: ^3.0.5 - checksum: 861ccce9eaea5de19546653bccf75bf09fe878bc39c3aab00aeee2d2a0e654516adad38dd1098aab5e3af0145bbcbf3f309bdf4d964f8dab9dcd5834ae4c02f2 + checksum: eae69ff9134025dd2924f0b430eb324981494be26f0fddd267a33c28711c4db643242cf9fddf7dadb9d16c96b54b2d2c073e60a56477df86e0173149313bd5d6 languageName: node linkType: hard @@ -3412,10 +3443,17 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": - version: 2.0.2 - resolution: "@humanwhocodes/object-schema@npm:2.0.2" - checksum: 2fc11503361b5fb4f14714c700c02a3f4c7c93e9acd6b87a29f62c522d90470f364d6161b03d1cc618b979f2ae02aed1106fd29d302695d8927e2fc8165ba8ee +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.0 + resolution: "@humanwhocodes/retry@npm:0.3.0" + checksum: 4349cb8b60466a000e945fde8f8551cefb01ebba22ead4a92ac7b145f67f5da6b52e5a1e0c53185d732d0a49958ac29327934a4a5ac1d0bc20efb4429a4f7bf7 languageName: node linkType: hard @@ -5876,6 +5914,7 @@ __metadata: "@babel/eslint-parser": ^7.24.1 "@babel/parser": ^7.24.4 "@babel/types": ^7.24.0 + "@eslint/compat": ^1.0.1 "@eslint/eslintrc": ^2.1.4 "@eslint/js": ^8.57.0 "@jest/types": 29.6.3 @@ -5901,7 +5940,7 @@ __metadata: cross-fetch: ^4.0.0 cspell: ^8.6.1 downlevel-dts: ">=0.11.0" - eslint: 8.57.0 + eslint: ^9.3.0 eslint-plugin-deprecation: ^2.0.0 eslint-plugin-eslint-comments: ^3.2.0 eslint-plugin-eslint-plugin: ^5.5.0 @@ -6119,7 +6158,7 @@ __metadata: languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0": +"@ungap/structured-clone@npm:^1.0.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 @@ -9159,15 +9198,6 @@ __metadata: languageName: node linkType: hard -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: ^2.0.2 - checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce - languageName: node - linkType: hard - "dom-converter@npm:^0.2.0": version: 0.2.0 resolution: "dom-converter@npm:0.2.0" @@ -10098,13 +10128,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.0.1": + version: 8.0.1 + resolution: "eslint-scope@npm:8.0.1" dependencies: esrecurse: ^4.3.0 estraverse: ^5.2.0 - checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + checksum: 67a5a39312dadb8c9a677df0f2e8add8daf15280b08bfe07f898d5347ee2d7cd2a1f5c2760f34e46e8f5f13f7192f47c2c10abe676bfa4173ae5539365551940 languageName: node linkType: hard @@ -10126,40 +10156,36 @@ __metadata: languageName: node linkType: hard -"eslint@npm:8.57.0": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" +"eslint@npm:^9": + version: 9.3.0 + resolution: "eslint@npm:9.3.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.6.1 - "@eslint/eslintrc": ^2.1.4 - "@eslint/js": 8.57.0 - "@humanwhocodes/config-array": ^0.11.14 + "@eslint/eslintrc": ^3.1.0 + "@eslint/js": 9.3.0 + "@humanwhocodes/config-array": ^0.13.0 "@humanwhocodes/module-importer": ^1.0.1 + "@humanwhocodes/retry": ^0.3.0 "@nodelib/fs.walk": ^1.2.8 - "@ungap/structured-clone": ^1.2.0 ajv: ^6.12.4 chalk: ^4.0.0 cross-spawn: ^7.0.2 debug: ^4.3.2 - doctrine: ^3.0.0 escape-string-regexp: ^4.0.0 - eslint-scope: ^7.2.2 - eslint-visitor-keys: ^3.4.3 - espree: ^9.6.1 + eslint-scope: ^8.0.1 + eslint-visitor-keys: ^4.0.0 + espree: ^10.0.1 esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 + file-entry-cache: ^8.0.0 find-up: ^5.0.0 glob-parent: ^6.0.2 - globals: ^13.19.0 - graphemer: ^1.4.0 ignore: ^5.2.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 is-path-inside: ^3.0.3 - js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 levn: ^0.4.1 lodash.merge: ^4.6.2 @@ -10170,7 +10196,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 3a48d7ff85ab420a8447e9810d8087aea5b1df9ef68c9151732b478de698389ee656fd895635b5f2871c89ee5a2652b3f343d11e9db6f8486880374ebc74a2d9 + checksum: c6d1eb8b4b064470a99f0d927b0d2b88f1947d7e871761b43b84e6c9b6464db4f6ebbb868f7196a45d2589978b09919a8807d200e3b1640d0a9cd245c9504707 languageName: node linkType: hard @@ -10185,7 +10211,7 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.6.0, espree@npm:^9.6.1": +"espree@npm:^9.6.0": version: 9.6.1 resolution: "espree@npm:9.6.1" dependencies: @@ -10632,15 +10658,6 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: ^3.0.4 - checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 - languageName: node - linkType: hard - "file-entry-cache@npm:^8.0.0": version: 8.0.0 resolution: "file-entry-cache@npm:8.0.0" @@ -10774,17 +10791,6 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^3.0.4": - version: 3.1.1 - resolution: "flat-cache@npm:3.1.1" - dependencies: - flatted: ^3.2.9 - keyv: ^4.5.3 - rimraf: ^3.0.2 - checksum: 4958cfe0f46acf84953d4e16676ef5f0d38eab3a92d532a1e8d5f88f11eea8b36d5d598070ff2aeae15f1fde18f8d7d089eefaf9db10b5a587cc1c9072325c7a - languageName: node - linkType: hard - "flat-cache@npm:^4.0.0": version: 4.0.1 resolution: "flat-cache@npm:4.0.1" @@ -11323,6 +11329,13 @@ __metadata: languageName: node linkType: hard +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 534b8216736a5425737f59f6e6a5c7f386254560c9f41d24a9227d60ee3ad4a9e82c5b85def0e212e9d92162f83a92544be4c7fd4c902cb913736c10e08237ac + languageName: node + linkType: hard + "globals@npm:^15.0.0": version: 15.6.0 resolution: "globals@npm:15.6.0" pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy