diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 8674d6f7b..87275e351 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -29,14 +29,15 @@ "license": "MIT", "repository": "https://github.com/emotion-js/emotion/tree/main/packages/eslint-plugin", "peerDependencies": { - "eslint": "6 || 7 || 8" + "eslint": "^6 || ^7 || ^8 || ^9" }, "dependencies": { - "@typescript-eslint/utils": "^5.25.0" + "@typescript-eslint/utils": "^8.3.0" }, "devDependencies": { - "@types/eslint": "^7.0.0", - "eslint": "^8.57.0", - "resolve-from": "^5.0.0" + "@types/eslint": "^9.6.1", + "@typescript-eslint/rule-tester": "^8.3.0", + "eslint": "^9.9.1", + "espree": "^10.1.0" } } diff --git a/packages/eslint-plugin/src/index.ts b/packages/eslint-plugin/src/index.ts index 3c27f57e2..0f99d4e2d 100644 --- a/packages/eslint-plugin/src/index.ts +++ b/packages/eslint-plugin/src/index.ts @@ -5,6 +5,8 @@ import styledImport from './rules/styled-import' import jsxImport from './rules/jsx-import' import pkgRenaming from './rules/pkg-renaming' +const { name, version } = require('../package.json') + export const rules = { 'import-from-emotion': importFromEmotion, 'no-vanilla': noVanilla, @@ -13,3 +15,13 @@ export const rules = { 'jsx-import': jsxImport, 'pkg-renaming': pkgRenaming } + +const plugin = { + meta: { + name, + version + }, + rules +} + +export default plugin diff --git a/packages/eslint-plugin/src/rules/jsx-import.ts b/packages/eslint-plugin/src/rules/jsx-import.ts index 2ee930f8d..af682be45 100644 --- a/packages/eslint-plugin/src/rules/jsx-import.ts +++ b/packages/eslint-plugin/src/rules/jsx-import.ts @@ -9,12 +9,6 @@ const JSX_IMPORT_SOURCE_REGEX = /\*?\s*@jsxImportSource\s+([^\s]+)/ // to //
+ import { css } -declare module '@typescript-eslint/utils/dist/ts-eslint/Rule' { - export interface SharedConfigurationSettings { - react?: { pragma?: string } - } -} - type JSXConfig = { runtime: string importSource?: string @@ -22,6 +16,15 @@ type JSXConfig = { type RuleOptions = [(JSXConfig | string)?] +interface ReactConfigurationSettings { + pragma?: string +} + +const isReactSettings = ( + settings: unknown +): settings is ReactConfigurationSettings => + typeof settings === 'object' && settings !== null && 'pragma' in settings + const messages = { cssProp: `The css prop can only be used if jsxImportSource is set to {{ importSource }}`, cssPropWithPragma: `The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma`, @@ -62,6 +65,8 @@ export default createRule({ }, defaultOptions: [], create(context) { + const filename = context.filename ?? context.getFilename() + const sourceCode = context.sourceCode ?? context.getSourceCode() const jsxRuntimeMode = context.options.find( (option): option is JSXConfig => typeof option === 'object' && option.runtime === 'automatic' @@ -77,7 +82,6 @@ export default createRule({ let jsxImportSourcePragmaComment: TSESTree.Comment | null = null let jsxImportSourceMatch let validJsxImportSource = false - let sourceCode = context.getSourceCode() let pragma = sourceCode.getAllComments().find(comment => { if (JSX_IMPORT_SOURCE_REGEX.test(comment.value)) { jsxImportSourcePragmaComment = comment @@ -113,7 +117,7 @@ export default createRule({ /* istanbul ignore if */ if (jsxImportSourcePragmaComment === null) { throw new Error( - `Unexpected null when attempting to fix ${context.getFilename()} - please file a github issue at ${REPO_URL}` + `Unexpected null when attempting to fix ${filename} - please file a github issue at ${REPO_URL}` ) } @@ -136,7 +140,6 @@ export default createRule({ let hasJsxImport = false let emotionCoreNode = null as TSESTree.ImportDeclaration | null let local: string | null = null - let sourceCode = context.getSourceCode() sourceCode.ast.body.forEach(x => { if ( x.type === AST_NODE_TYPES.ImportDeclaration && @@ -164,10 +167,9 @@ export default createRule({ } } }) - let hasSetPragma = false - if (context.settings.react && context.settings.react.pragma === 'jsx') { - hasSetPragma = true - } + let hasSetPragma = + isReactSettings(context.settings.react) && + context.settings.react.pragma === 'jsx' let pragma = sourceCode .getAllComments() .find(node => JSX_ANNOTATION_REGEX.test(node.value)) @@ -185,10 +187,14 @@ export default createRule({ /* istanbul ignore if */ if (emotionCoreNode === null) { throw new Error( - `Unexpected null when attempting to fix ${context.getFilename()} - please file a github issue at ${REPO_URL}` + `Unexpected null when attempting to fix ${filename} - please file a github issue at ${REPO_URL}` ) } + if (!hasSetPragma && pragma) { + return fixer.replaceText(pragma, `/** @jsx ${local} */`) + } + return fixer.insertTextBefore( emotionCoreNode, `/** @jsx ${local} */\n` @@ -227,7 +233,7 @@ export default createRule({ /* istanbul ignore if */ if (emotionCoreNode === null) { throw new Error( - `Unexpected null when attempting to fix ${context.getFilename()} - please file a github issue at ${REPO_URL}` + `Unexpected null when attempting to fix ${filename} - please file a github issue at ${REPO_URL}` ) } @@ -239,24 +245,38 @@ export default createRule({ value.type === AST_NODE_TYPES.JSXExpressionContainer && value.expression.type === AST_NODE_TYPES.TemplateLiteral ) { + let namespaceSpecifier = specifiers.find( + x => x.type === AST_NODE_TYPES.ImportNamespaceSpecifier + ) let cssSpecifier = specifiers.find( x => x.type === AST_NODE_TYPES.ImportSpecifier && x.imported.name === 'css' ) + context.report({ node, messageId: 'templateLiterals', fix(fixer) { + if (namespaceSpecifier) { + return fixer.insertTextBefore( + value.expression, + namespaceSpecifier.local.name + '.css' + ) + } if (cssSpecifier) { return fixer.insertTextBefore( value.expression, cssSpecifier.local.name ) } - let lastSpecifier = specifiers[specifiers.length - 1] - if (context.getScope().variables.some(x => x.name === 'css')) { + const lastSpecifier = specifiers[specifiers.length - 1] + const scope = sourceCode.getScope + ? sourceCode.getScope(node) + : context.getScope() + + if (scope.variables.some(x => x.name === 'css')) { return [ fixer.insertTextAfter(lastSpecifier, `, css as _css`), fixer.insertTextBefore(value.expression, '_css') diff --git a/packages/eslint-plugin/src/rules/syntax-preference.ts b/packages/eslint-plugin/src/rules/syntax-preference.ts index 7568eb805..d972191bd 100644 --- a/packages/eslint-plugin/src/rules/syntax-preference.ts +++ b/packages/eslint-plugin/src/rules/syntax-preference.ts @@ -78,9 +78,11 @@ const checkExpressionPreferringObject = ( ) => { switch (node.type) { case AST_NODE_TYPES.ArrayExpression: - node.elements.forEach(element => - checkExpressionPreferringObject(context, element) - ) + node.elements.forEach(element => { + if (element !== null) { + checkExpressionPreferringObject(context, element) + } + }) return case AST_NODE_TYPES.TemplateLiteral: context.report({ @@ -154,9 +156,11 @@ const checkExpressionPreferringString = ( ) => { switch (node.type) { case 'ArrayExpression': - node.elements.forEach(element => - checkExpressionPreferringString(context, element) - ) + node.elements.forEach(element => { + if (element !== null) { + checkExpressionPreferringString(context, element) + } + }) return case 'ObjectExpression': context.report({ @@ -242,6 +246,7 @@ export default createRule({ }, schema: [ { + type: 'string', enum: ['string', 'object'] } ], diff --git a/packages/eslint-plugin/src/utils.ts b/packages/eslint-plugin/src/utils.ts index 7fbef3077..90430d367 100644 --- a/packages/eslint-plugin/src/utils.ts +++ b/packages/eslint-plugin/src/utils.ts @@ -5,8 +5,14 @@ const { version } = require('../package.json') export const REPO_URL = 'https://github.com/emotion-js/emotion' -export const createRule = ESLintUtils.RuleCreator(name => { - const ruleName = parsePath(name).name +export interface EmotionESLintPluginDocs { + recommended: boolean +} - return `${REPO_URL}/blob/@emotion/eslint-plugin@${version}/packages/eslint-plugin/docs/rules/${ruleName}.md` -}) +export const createRule = ESLintUtils.RuleCreator( + name => { + const ruleName = parsePath(name).name + + return `${REPO_URL}/blob/@emotion/eslint-plugin@${version}/packages/eslint-plugin/docs/rules/${ruleName}.md` + } +) diff --git a/packages/eslint-plugin/test/rules/import-from-emotion.test.ts b/packages/eslint-plugin/test/rules/import-from-emotion.test.ts index 99be3a0fa..5a96f8290 100644 --- a/packages/eslint-plugin/test/rules/import-from-emotion.test.ts +++ b/packages/eslint-plugin/test/rules/import-from-emotion.test.ts @@ -2,17 +2,17 @@ * @jest-environment node */ -import { TSESLint } from '@typescript-eslint/utils' +import { RuleTester } from '@typescript-eslint/rule-tester' import rule from '../../src/rules/import-from-emotion' import { espreeParser } from '../test-utils' -const ruleTester = new TSESLint.RuleTester({ - parser: espreeParser, - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - ecmaFeatures: { - jsx: true +const ruleTester = new RuleTester({ + languageOptions: { + parser: espreeParser, + parserOptions: { + ecmaFeatures: { + jsx: true + } } } }) diff --git a/packages/eslint-plugin/test/rules/jsx-import.test.ts b/packages/eslint-plugin/test/rules/jsx-import.test.ts index f245357e6..56c2b0456 100644 --- a/packages/eslint-plugin/test/rules/jsx-import.test.ts +++ b/packages/eslint-plugin/test/rules/jsx-import.test.ts @@ -2,17 +2,17 @@ * @jest-environment node */ -import { TSESLint } from '@typescript-eslint/utils' +import { RuleTester } from '@typescript-eslint/rule-tester' import rule from '../../src/rules/jsx-import' import { espreeParser } from '../test-utils' -const ruleTester = new TSESLint.RuleTester({ - parser: espreeParser, - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - ecmaFeatures: { - jsx: true +const ruleTester = new RuleTester({ + languageOptions: { + parser: espreeParser, + parserOptions: { + ecmaFeatures: { + jsx: true + } } } }) @@ -233,7 +233,7 @@ let ele =
code: ` /** @jsx jsx */ import * as emotion from '@emotion/react' -let ele =
+let ele =
`.trim(), errors: [ { @@ -241,10 +241,9 @@ let ele =
} ], output: ` -/** @jsx jsx */ /** @jsx emotion.jsx */ import * as emotion from '@emotion/react' -let ele =
+let ele =
`.trim() }, { @@ -337,6 +336,23 @@ let ele2 =
import {jsx, css} from '@emotion/react' let ele =
`.trim() + }, + { + code: ` + /** @jsx emotion.jsx */ + import * as emotion from '@emotion/react' + let ele =
+ `.trim(), + errors: [ + { + messageId: 'templateLiterals' + } + ], + output: ` + /** @jsx emotion.jsx */ + import * as emotion from '@emotion/react' + let ele =
+ `.trim() } ] }) diff --git a/packages/eslint-plugin/test/rules/no-vanilla.test.ts b/packages/eslint-plugin/test/rules/no-vanilla.test.ts index a897ec3a7..b96afbfca 100644 --- a/packages/eslint-plugin/test/rules/no-vanilla.test.ts +++ b/packages/eslint-plugin/test/rules/no-vanilla.test.ts @@ -2,17 +2,17 @@ * @jest-environment node */ -import { TSESLint } from '@typescript-eslint/utils' +import { RuleTester } from '@typescript-eslint/rule-tester' import rule from '../../src/rules/no-vanilla' import { espreeParser } from '../test-utils' -const ruleTester = new TSESLint.RuleTester({ - parser: espreeParser, - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - ecmaFeatures: { - jsx: true +const ruleTester = new RuleTester({ + languageOptions: { + parser: espreeParser, + parserOptions: { + ecmaFeatures: { + jsx: true + } } } }) diff --git a/packages/eslint-plugin/test/rules/pkg-renaming.test.ts b/packages/eslint-plugin/test/rules/pkg-renaming.test.ts index 6e7093212..fd8cee16f 100644 --- a/packages/eslint-plugin/test/rules/pkg-renaming.test.ts +++ b/packages/eslint-plugin/test/rules/pkg-renaming.test.ts @@ -2,17 +2,17 @@ * @jest-environment node */ -import { TSESLint } from '@typescript-eslint/utils' +import { RuleTester } from '@typescript-eslint/rule-tester' import rule from '../../src/rules/pkg-renaming' import { espreeParser } from '../test-utils' -const ruleTester = new TSESLint.RuleTester({ - parser: espreeParser, - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - ecmaFeatures: { - jsx: true +const ruleTester = new RuleTester({ + languageOptions: { + parser: espreeParser, + parserOptions: { + ecmaFeatures: { + jsx: true + } } } }) diff --git a/packages/eslint-plugin/test/rules/styled-import.test.ts b/packages/eslint-plugin/test/rules/styled-import.test.ts index 944053cd4..7b3107311 100644 --- a/packages/eslint-plugin/test/rules/styled-import.test.ts +++ b/packages/eslint-plugin/test/rules/styled-import.test.ts @@ -2,17 +2,17 @@ * @jest-environment node */ -import { TSESLint } from '@typescript-eslint/utils' +import { RuleTester } from '@typescript-eslint/rule-tester' import rule from '../../src/rules/styled-import' import { espreeParser } from '../test-utils' -const ruleTester = new TSESLint.RuleTester({ - parser: espreeParser, - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - ecmaFeatures: { - jsx: true +const ruleTester = new RuleTester({ + languageOptions: { + parser: espreeParser, + parserOptions: { + ecmaFeatures: { + jsx: true + } } } }) diff --git a/packages/eslint-plugin/test/rules/syntax-preference.test.ts b/packages/eslint-plugin/test/rules/syntax-preference.test.ts index 4ea172d97..6263138a7 100644 --- a/packages/eslint-plugin/test/rules/syntax-preference.test.ts +++ b/packages/eslint-plugin/test/rules/syntax-preference.test.ts @@ -8,17 +8,18 @@ // Requirements // ------------------------------------------------------------------------------ -import { AST_NODE_TYPES, TSESLint } from '@typescript-eslint/utils' +import { RuleTester } from '@typescript-eslint/rule-tester' +import { AST_NODE_TYPES } from '@typescript-eslint/utils' import rule from '../../src/rules/syntax-preference' import { espreeParser } from '../test-utils' -const ruleTester = new TSESLint.RuleTester({ - parser: espreeParser, - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - ecmaFeatures: { - jsx: true +const ruleTester = new RuleTester({ + languageOptions: { + parser: espreeParser, + parserOptions: { + ecmaFeatures: { + jsx: true + } } } }) diff --git a/packages/eslint-plugin/test/test-utils.ts b/packages/eslint-plugin/test/test-utils.ts index 551a54e9d..00f1dfc05 100644 --- a/packages/eslint-plugin/test/test-utils.ts +++ b/packages/eslint-plugin/test/test-utils.ts @@ -1,6 +1 @@ -import resolveFrom from 'resolve-from' - -export const espreeParser: string = resolveFrom( - require.resolve('eslint'), - 'espree' -) +export const espreeParser = require('espree') diff --git a/yarn.lock b/yarn.lock index 3118f6267..69de7bcd9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2746,12 +2746,13 @@ __metadata: version: 0.0.0-use.local resolution: "@emotion/eslint-plugin@workspace:packages/eslint-plugin" dependencies: - "@types/eslint": ^7.0.0 - "@typescript-eslint/utils": ^5.25.0 - eslint: ^8.57.0 - resolve-from: ^5.0.0 + "@types/eslint": ^9.6.1 + "@typescript-eslint/rule-tester": ^8.3.0 + "@typescript-eslint/utils": ^8.3.0 + eslint: ^9.9.1 + espree: ^10.1.0 peerDependencies: - eslint: 6 || 7 || 8 + eslint: ^6 || ^7 || ^8 || ^9 languageName: unknown linkType: soft @@ -3030,6 +3031,24 @@ __metadata: languageName: node linkType: hard +"@eslint-community/regexpp@npm:^4.11.0": + version: 4.11.0 + resolution: "@eslint-community/regexpp@npm:4.11.0" + checksum: 97d2fe46690b69417a551bd19a3dc53b6d9590d2295c43cc4c4e44e64131af541e2f4a44d5c12e87de990403654d3dae9d33600081f3a2f0386b368abc9111ec + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.18.0": + version: 0.18.0 + resolution: "@eslint/config-array@npm:0.18.0" + dependencies: + "@eslint/object-schema": ^2.1.4 + debug: ^4.3.1 + minimatch: ^3.1.2 + checksum: 5ff748e1788745bfb3160c3b3151d62a7c054e336e9fe8069e86cfa6106f3abbd59b24f1253122268295f98c66803e9a7b23d7f947a8c00f62d2060cc44bc7fc + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^0.4.3": version: 0.4.3 resolution: "@eslint/eslintrc@npm:0.4.3" @@ -3064,6 +3083,23 @@ __metadata: languageName: node linkType: hard +"@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:8.57.0": version: 8.57.0 resolution: "@eslint/js@npm:8.57.0" @@ -3071,6 +3107,20 @@ __metadata: languageName: node linkType: hard +"@eslint/js@npm:9.9.1": + version: 9.9.1 + resolution: "@eslint/js@npm:9.9.1" + checksum: 24436d7a1023dbc6c63fd199e45afa9eab8537f7bd808872d9d17dd70c5237f599fe3d08f519d55b40e33bfde02a460861df1c96aa07674090c3f98c83b0c178 + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/object-schema@npm:2.1.4" + checksum: 5a03094115bcdab7991dbbc5d17a9713f394cebb4b44d3eaf990d7487b9b8e1877b817997334ab40be52e299a0384595c6f6ba91b389901e5e1d21efda779271 + languageName: node + linkType: hard + "@fortawesome/fontawesome-common-types@npm:6.1.1": version: 6.1.1 resolution: "@fortawesome/fontawesome-common-types@npm:6.1.1" @@ -3207,6 +3257,13 @@ __metadata: 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 + "@iarna/toml@npm:^2.2.0": version: 2.2.3 resolution: "@iarna/toml@npm:2.2.3" @@ -6001,23 +6058,23 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:^7.0.0": - version: 7.29.0 - resolution: "@types/eslint@npm:7.29.0" +"@types/eslint@npm:^7.2.6": + version: 7.28.2 + resolution: "@types/eslint@npm:7.28.2" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: df13991c554954353ce8f3bb03e19da6cc71916889443d68d178d4f858b561ba4cc4a4f291c6eb9eebb7f864b12b9b9313051b3a8dfea3e513dadf3188a77bdf + checksum: d177f3eec22971baeef8f244693687ee4c0357125f4a8fb7e614b83e36b98318a0b1a13b31230199d2a91af54122b67883faa7b4d2c29f0c83e2650f6b0d4d9c languageName: node linkType: hard -"@types/eslint@npm:^7.2.6": - version: 7.28.2 - resolution: "@types/eslint@npm:7.28.2" +"@types/eslint@npm:^9.6.1": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: d177f3eec22971baeef8f244693687ee4c0357125f4a8fb7e614b83e36b98318a0b1a13b31230199d2a91af54122b67883faa7b4d2c29f0c83e2650f6b0d4d9c + checksum: c286e79707ab604b577cf8ce51d9bbb9780e3d6a68b38a83febe13fa05b8012c92de17c28532fac2b03d3c460123f5055d603a579685325246ca1c86828223e0 languageName: node linkType: hard @@ -6223,13 +6280,6 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.9": - version: 7.0.11 - resolution: "@types/json-schema@npm:7.0.11" - checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d - languageName: node - linkType: hard - "@types/json5@npm:^0.0.29": version: 0.0.29 resolution: "@types/json5@npm:0.0.29" @@ -6693,6 +6743,22 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/rule-tester@npm:^8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/rule-tester@npm:8.3.0" + dependencies: + "@typescript-eslint/typescript-estree": 8.3.0 + "@typescript-eslint/utils": 8.3.0 + ajv: ^6.12.6 + json-stable-stringify-without-jsonify: ^1.0.1 + lodash.merge: 4.6.2 + semver: ^7.6.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + checksum: 170e14df968e44f7da5a6518e2e9984ec8313036ee2483329709746c75d131855599200c260c8ab1cc1d84be89f1e5025d5d7b33bd08977a896992acfa2587b5 + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/scope-manager@npm:4.33.0" @@ -6703,16 +6769,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/scope-manager@npm:5.32.0" - dependencies: - "@typescript-eslint/types": 5.32.0 - "@typescript-eslint/visitor-keys": 5.32.0 - checksum: 69bdeb029f39d1112299dc0cb0ddef30e51bdb782fdb79cc4e72fa448e00d71e39938d3bff3fa4ee43b3416c2e3b4564de2c37252914772b07eeedafb14412d6 - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:7.13.0": version: 7.13.0 resolution: "@typescript-eslint/scope-manager@npm:7.13.0" @@ -6723,6 +6779,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/scope-manager@npm:8.3.0" + dependencies: + "@typescript-eslint/types": 8.3.0 + "@typescript-eslint/visitor-keys": 8.3.0 + checksum: 2ccf0d965c0e812f21a156bdb551029d2777bf1e6528275ccb9b79f9a36e4c6803c94f4e98519095396d3e416a62dc2356fda7286a6feeec8af6b63154f158d9 + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:7.13.0": version: 7.13.0 resolution: "@typescript-eslint/type-utils@npm:7.13.0" @@ -6754,13 +6820,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/types@npm:5.32.0" - checksum: 6758f54d8d7763893cd7c1753f525ef1777eee8b558bf3d54fd2a2ce691ca0cf813c68a26e4db83a1deae4e4a62b247f1195e15a1f3577f1293849f9e55a232c - languageName: node - linkType: hard - "@typescript-eslint/types@npm:7.13.0": version: 7.13.0 resolution: "@typescript-eslint/types@npm:7.13.0" @@ -6768,6 +6827,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/types@npm:8.3.0" + checksum: 6fa6be32dbb32899b0ccb6a5cf78bf85892efa87048e0d3939f706743d3c2ad4afab8228d588883ac314d4934a01bafc5e4043b6608ebb82290edf3bfc17f442 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:3.10.1": version: 3.10.1 resolution: "@typescript-eslint/typescript-estree@npm:3.10.1" @@ -6805,32 +6871,33 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.32.0" +"@typescript-eslint/typescript-estree@npm:7.13.0": + version: 7.13.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.13.0" dependencies: - "@typescript-eslint/types": 5.32.0 - "@typescript-eslint/visitor-keys": 5.32.0 + "@typescript-eslint/types": 7.13.0 + "@typescript-eslint/visitor-keys": 7.13.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 + minimatch: ^9.0.4 + semver: ^7.6.0 + ts-api-utils: ^1.3.0 peerDependenciesMeta: typescript: optional: true - checksum: 6aee08be5d36603d038fb8340f324f5cb38519150c9b37c012f0c1ff2a4d8cf22fbc6835de31d069949c2b3d8ed3e729076a724ef29db4289d9fe73b97c9d310 + checksum: 5a410db27ddb514344414a579e9f81a0db0e7e9f579aa624ace223655b905705a37510992a94924d9ead3c4c84c9357cf5358599036f7c44f50b56b54a791d82 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.13.0": - version: 7.13.0 - resolution: "@typescript-eslint/typescript-estree@npm:7.13.0" +"@typescript-eslint/typescript-estree@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.3.0" dependencies: - "@typescript-eslint/types": 7.13.0 - "@typescript-eslint/visitor-keys": 7.13.0 + "@typescript-eslint/types": 8.3.0 + "@typescript-eslint/visitor-keys": 8.3.0 debug: ^4.3.4 - globby: ^11.1.0 + fast-glob: ^3.3.2 is-glob: ^4.0.3 minimatch: ^9.0.4 semver: ^7.6.0 @@ -6838,7 +6905,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 5a410db27ddb514344414a579e9f81a0db0e7e9f579aa624ace223655b905705a37510992a94924d9ead3c4c84c9357cf5358599036f7c44f50b56b54a791d82 + checksum: edfddfa895201be7cc6c83e8d4d72ce3e0877693bf109ced94dcd1496fc45ea9cceae08e1b8a451bee7df7f23748f79b80797ddf49d5e6c96d8f2053ce28e966 languageName: node linkType: hard @@ -6856,19 +6923,17 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:^5.25.0": - version: 5.32.0 - resolution: "@typescript-eslint/utils@npm:5.32.0" +"@typescript-eslint/utils@npm:8.3.0, @typescript-eslint/utils@npm:^8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/utils@npm:8.3.0" dependencies: - "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.32.0 - "@typescript-eslint/types": 5.32.0 - "@typescript-eslint/typescript-estree": 5.32.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 + "@eslint-community/eslint-utils": ^4.4.0 + "@typescript-eslint/scope-manager": 8.3.0 + "@typescript-eslint/types": 8.3.0 + "@typescript-eslint/typescript-estree": 8.3.0 peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: cfd88d93508c8fb0db17d2726691e1383db390357fa0637bd8111558fbe72da5130d995294001d71b1d929d620fbce3f20a70b277a77ca21a4241b3b470dc758 + eslint: ^8.57.0 || ^9.0.0 + checksum: 041cd2cef3d89d0b45c99a5226aadfa0b25fdd517842cf6dd864ae57fa28afb5f613f5589fe5138662025903de9df8e24ed7fe55486da46e971751405b5ed9fb languageName: node linkType: hard @@ -6891,16 +6956,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.32.0" - dependencies: - "@typescript-eslint/types": 5.32.0 - eslint-visitor-keys: ^3.3.0 - checksum: 1f9b756d648c2346a6e8538ffde729d3d9ce6621fded3d9f15c96aa0ebf8f511daf8232470423fb36359c2113538a4daaf3336181be78a0cfbfd297af91ce9ba - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:7.13.0": version: 7.13.0 resolution: "@typescript-eslint/visitor-keys@npm:7.13.0" @@ -6911,6 +6966,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.3.0" + dependencies: + "@typescript-eslint/types": 8.3.0 + eslint-visitor-keys: ^3.4.3 + checksum: 23a85ae0a3d693be1c9db92457727ab3f16cac3d1fb4950e29bfe2b0f4d186a755a71b2a347063cc94cf03b8dd1367502e0a60386eed71425f74c18fb686b0e8 + languageName: node + linkType: hard + "@ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" @@ -7324,6 +7389,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.12.0": + version: 8.12.1 + resolution: "acorn@npm:8.12.1" + bin: + acorn: bin/acorn + checksum: 677880034aee5bdf7434cc2d25b641d7bedb0b5ef47868a78dadabedccf58e1c5457526d9d8249cd253f2df087e081c3fe7d903b448d8e19e5131a3065b83c07 + languageName: node + linkType: hard + "acorn@npm:^8.2.4": version: 8.6.0 resolution: "acorn@npm:8.6.0" @@ -7466,7 +7540,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.5": +"ajv@npm:^6.12.5, ajv@npm:^6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -13691,6 +13765,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^8.0.2": + version: 8.0.2 + resolution: "eslint-scope@npm:8.0.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: bd1e7a0597ec605cf3bc9b35c9e13d7ea6c11fee031b0cada9e8993b0ecf16d81d6f40f1dcd463424af439abf53cd62302ea25707c1599689eb2750d6aa29688 + languageName: node + linkType: hard + "eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": version: 2.1.0 resolution: "eslint-utils@npm:2.1.0" @@ -13746,6 +13830,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^4.0.0": + version: 4.0.0 + resolution: "eslint-visitor-keys@npm:4.0.0" + checksum: 5c09f89cf29d87cdbfbac38802a880d3c2e65f8cb61c689888346758f1e24a4c7f6caefeac9474dfa52058a99920623599bdb00516976a30134abeba91275aa2 + languageName: node + linkType: hard + "eslint-webpack-plugin@npm:^2.5.2": version: 2.5.4 resolution: "eslint-webpack-plugin@npm:2.5.4" @@ -13861,6 +13952,66 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^9.9.1": + version: 9.9.1 + resolution: "eslint@npm:9.9.1" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.11.0 + "@eslint/config-array": ^0.18.0 + "@eslint/eslintrc": ^3.1.0 + "@eslint/js": 9.9.1 + "@humanwhocodes/module-importer": ^1.0.1 + "@humanwhocodes/retry": ^0.3.0 + "@nodelib/fs.walk": ^1.2.8 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + escape-string-regexp: ^4.0.0 + eslint-scope: ^8.0.2 + eslint-visitor-keys: ^4.0.0 + espree: ^10.1.0 + esquery: ^1.5.0 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^8.0.0 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + bin: + eslint: bin/eslint.js + checksum: a1ff85cd26a6f138e0f52e17668b7794371c81fd0ac66634c4d554dc2d878dcfbe6047a025e63e85168c897c83dfa453501a10395cbefda7debd79fe6ea00eab + languageName: node + linkType: hard + +"espree@npm:^10.0.1, espree@npm:^10.1.0": + version: 10.1.0 + resolution: "espree@npm:10.1.0" + dependencies: + acorn: ^8.12.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^4.0.0 + checksum: a4708ab987f6c03734b8738b1588e9f31b2e305e869ca4677c60d82294eb05f7099b6687eb39eeb0913bb2d49bdf0bd0f31c511599ea7ee171281f871a9c897e + languageName: node + linkType: hard + "espree@npm:^7.3.0": version: 7.3.0 resolution: "espree@npm:7.3.0" @@ -13922,6 +14073,15 @@ __metadata: languageName: node linkType: hard +"esquery@npm:^1.5.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: ^5.1.0 + checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 + languageName: node + linkType: hard + "esrecurse@npm:^4.1.0": version: 4.2.1 resolution: "esrecurse@npm:4.2.1" @@ -14465,6 +14625,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -14653,6 +14826,15 @@ __metadata: languageName: node linkType: hard +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" + dependencies: + flat-cache: ^4.0.0 + checksum: f67802d3334809048c69b3d458f672e1b6d26daefda701761c81f203b80149c35dea04d78ea4238969dd617678e530876722a0634c43031a0957f10cc3ed190f + languageName: node + linkType: hard + "file-loader@npm:6.1.1": version: 6.1.1 resolution: "file-loader@npm:6.1.1" @@ -14825,6 +15007,16 @@ __metadata: languageName: node linkType: hard +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" + dependencies: + flatted: ^3.2.9 + keyv: ^4.5.4 + checksum: 899fc86bf6df093547d76e7bfaeb900824b869d7d457d02e9b8aae24836f0a99fbad79328cfd6415ee8908f180699bf259dc7614f793447cb14f707caf5996f6 + languageName: node + linkType: hard + "flatted@npm:^3.1.0": version: 3.2.2 resolution: "flatted@npm:3.2.2" @@ -14832,6 +15024,13 @@ __metadata: languageName: node linkType: hard +"flatted@npm:^3.2.9": + version: 3.3.1 + resolution: "flatted@npm:3.3.1" + checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94 + languageName: node + linkType: hard + "flatten@npm:^1.0.2": version: 1.0.2 resolution: "flatten@npm:1.0.2" @@ -15636,6 +15835,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 + "globalthis@npm:^1.0.3": version: 1.0.4 resolution: "globalthis@npm:1.0.4" @@ -19838,6 +20044,13 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + "json-parse-better-errors@npm:^1.0.1, json-parse-better-errors@npm:^1.0.2": version: 1.0.2 resolution: "json-parse-better-errors@npm:1.0.2" @@ -20032,6 +20245,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.4": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 + languageName: node + linkType: hard + "killable@npm:^1.0.1": version: 1.0.1 resolution: "killable@npm:1.0.1" @@ -20476,7 +20698,7 @@ __metadata: languageName: node linkType: hard -"lodash.merge@npm:^4.6.2": +"lodash.merge@npm:4.6.2, lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005