diff --git a/.eslintrc.js b/.eslintrc.js index 9aa00b3ecf..39dc6844a1 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,7 +4,6 @@ module.exports = { browser: true, jest: true, }, - plugins: ['@builder.io/mitosis'], parser: '@typescript-eslint/parser', // Specifies the ESLint parser extends: [], parserOptions: { @@ -14,8 +13,4 @@ module.exports = { jsx: true, // Allows for the parsing of JSX }, }, - - rules: { - // '@builder.io/mitosis/no-conditional-render': 'warn', - }, }; diff --git a/.yarn/versions/46f8ffda.yml b/.yarn/versions/46f8ffda.yml new file mode 100644 index 0000000000..d84a8f9a9c --- /dev/null +++ b/.yarn/versions/46f8ffda.yml @@ -0,0 +1,3 @@ +undecided: + - "@builder.io/mitosis-repo" + - "@builder.io/basic-example" diff --git a/examples/basic/.eslintignore b/examples/basic/.eslintignore new file mode 100644 index 0000000000..1eb053f015 --- /dev/null +++ b/examples/basic/.eslintignore @@ -0,0 +1,2 @@ +node_modules +output/ diff --git a/examples/basic/.eslintrc.js b/examples/basic/.eslintrc.js new file mode 100644 index 0000000000..d21a942d32 --- /dev/null +++ b/examples/basic/.eslintrc.js @@ -0,0 +1,20 @@ +module.exports = { + env: { + browser: true, + es2021: true, + }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:@builder.io/mitosis/recommended', + ], + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + ecmaVersion: 'latest', + sourceType: 'module', + }, + plugins: ['@typescript-eslint', '@builder.io/mitosis'], +}; diff --git a/examples/basic/package.json b/examples/basic/package.json index a3a22fc8ed..52165bfe9b 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -14,14 +14,17 @@ "seedrandom": "^3.0.5" }, "devDependencies": { + "@builder.io/eslint-plugin-mitosis": "workspace:*", "@types/jest": "^27.4.0", "@types/node-fetch": "^2.5.12", - "eslint": "^7.21.0", + "@typescript-eslint/eslint-plugin": "^5.27.1", + "@typescript-eslint/parser": "^5.27.1", + "eslint": "^8.17.0", "jest": "^27.5.1", "jest-fetch-mock": "^3.0.3", "prettier": "^2.5.0", "ts-jest": "^27.1.3", - "typescript": "^4.5.5", + "typescript": "^4.7.3", "watch": "^1.0.2" } } diff --git a/package.json b/package.json index d9f9ac10f3..f71a787682 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,8 @@ }, "devDependencies": { "@babel/preset-env": "^7.6.0", + "@typescript-eslint/eslint-plugin": "^5.27.1", + "@typescript-eslint/parser": "^5.27.1", "commitizen": "^3.0.2", "esbuild": "0.14.25", "esbuild-register": "3.3.2", diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md index 9dc5a575f9..495ad64ed7 100644 --- a/packages/eslint-plugin/README.md +++ b/packages/eslint-plugin/README.md @@ -30,18 +30,18 @@ Finally, add the plugin to the `plugins` array, and the rules you want to the `r ```js module.exports = { - // [...other settings] parserOptions: { ecmaFeatures: { jsx: true, }, }, - plugins: [ - // [...other plugins] - '@builder.io/mitosis', + plugins: ['@builder.io/mitosis'], + extends: [ + // Use this approach for our recommended rules configuration + 'plugin:@builder.io/mitosis/recommended', ], rules: { - // example of adding one of our rules + // Use this to configure rules individually '@builder.io/mitosis/css-no-vars': 'error', }, }; diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 3d4faa5450..8973b36b7d 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@builder.io/eslint-plugin-mitosis", - "version": "0.0.1-1", + "version": "0.0.1", "main": "./dist/index.js", "types": "./dist/index.d.ts", "license": "MIT", @@ -43,6 +43,5 @@ "dependencies": { "@babel/types": "7.12.6", "ts-pattern": "^3.3.5" - }, - "stableVersion": "0.0.1-0" + } } diff --git a/packages/eslint-plugin/src/configs/recommended.ts b/packages/eslint-plugin/src/configs/recommended.ts index 593c4ead83..bd375d3e1a 100644 --- a/packages/eslint-plugin/src/configs/recommended.ts +++ b/packages/eslint-plugin/src/configs/recommended.ts @@ -1,24 +1,33 @@ +import { rules } from '../rules'; + +const PLUGIN_NAME = '@builder.io/mitosis' as const; + +type RulesKeys = `${typeof PLUGIN_NAME}/${keyof typeof rules}`; + +const recommendedRules: Record = { + '@builder.io/mitosis/css-no-vars': 'error', + '@builder.io/mitosis/jsx-callback-arg-name': 'error', + '@builder.io/mitosis/jsx-callback-arrow-function': 'error', + '@builder.io/mitosis/no-assign-props-to-state': 'error', + '@builder.io/mitosis/no-async-methods-on-state': 'error', + '@builder.io/mitosis/no-conditional-logic-in-component-render': 'error', + '@builder.io/mitosis/no-state-destructuring': 'error', + '@builder.io/mitosis/no-var-declaration-in-jsx': 'error', + '@builder.io/mitosis/no-var-declaration-or-assignment-in-component': 'error', + '@builder.io/mitosis/no-var-name-same-as-state-property': 'error', + '@builder.io/mitosis/only-default-function-and-imports': 'error', + '@builder.io/mitosis/ref-no-current': 'error', + '@builder.io/mitosis/use-state-var-declarator': 'error', + '@builder.io/mitosis/static-control-flow': 'error', + '@builder.io/mitosis/no-var-name-same-as-prop-name': 'error', +}; + export default { parserOptions: { ecmaFeatures: { jsx: true, }, }, - plugins: ['@builder.io/mitosis'], - rules: { - '@builder.io/mitosis/css-no-vars': 'error', - '@builder.io/mitosis/jsx-callback-arg-name': 'error', - '@builder.io/mitosis/jsx-callback-arrow-function': 'error', - '@builder.io/mitosis/no-assign-props-to-state': 'error', - '@builder.io/mitosis/no-async-methods-on-state': 'error', - '@builder.io/mitosis/no-conditional-logic-in-component-render': 'error', - '@builder.io/mitosis/no-state-destructuring': 'error', - '@builder.io/mitosis/no-var-declaration-in-jsx': 'error', - '@builder.io/mitosis/no-var-declaration-or-assignment-in-component': - 'error', - '@builder.io/mitosis/no-var-name-same-as-state-property': 'error', - '@builder.io/mitosis/only-default-function-and-imports': 'error', - '@builder.io/mitosis/ref-no-current': 'error', - '@builder.io/mitosis/use-state-var-declarator': 'error', - }, + plugins: [PLUGIN_NAME], + rules: recommendedRules, }; diff --git a/packages/eslint-plugin/src/index.ts b/packages/eslint-plugin/src/index.ts index 9dd721a09e..98db1a6972 100644 --- a/packages/eslint-plugin/src/index.ts +++ b/packages/eslint-plugin/src/index.ts @@ -1,106 +1,6 @@ -import { Rule } from 'eslint'; -import * as types from '@babel/types'; -import isMitosisPath from './helpers/isMitosisPath'; -import cssNoVars from './rules/css-no-vars'; -import refNoCurrent from './rules/ref-no-current'; -import noStateDestructuring from './rules/no-state-destructuring'; -import jsxCallbackArgNameRule from './rules/jsx-callback-arg-name'; -import noAssignPropsToState from './rules/no-assign-props-to-state'; -import useStateVarDeclarator from './rules/use-state-var-declarator'; -import noAsyncMethodsOnState from './rules/no-async-methods-on-state'; -import notVarDeclarationInJSX from './rules/no-var-declaration-in-jsx'; -import jsxCallbackArrowFunction from './rules/jsx-callback-arrow-function'; -import noVarNameSameAsPropName from './rules/no-var-name-same-as-prop-name'; -import noVarNameSameAsStateProperty from './rules/no-var-name-same-as-state-property'; -import onlyDefaultFunctionAndImports from './rules/only-default-function-and-imports'; -import noConditionalLogicInComponentRender from './rules/no-conditional-logic-in-component-render'; -import noVarDeclarationOrAssignmentInComponent from './rules/no-var-declaration-or-assignment-in-component'; import recommended from './configs/recommended'; -export const staticControlFlow: Rule.RuleModule = { - create(context) { - if (!isMitosisPath(context.getFilename())) return {}; - return { - VariableDeclarator(node) { - if (types.isVariableDeclarator(node)) { - if ( - types.isObjectPattern(node.id) && - types.isIdentifier(node.init) && - node.init.name === 'state' - ) { - context.report({ - node: node as any, - message: - 'Destructuring the state object is currently not supported', - }); - } - } - }, - - CallExpression(node) { - if (types.isCallExpression(node)) { - if ( - types.isIdentifier(node.callee) && - node.callee.name === 'useEffect' - ) { - const useEffectMessage = - 'Only useEffect with an empty array second argument is allowed. E.g. useEffect(...) must be useEffect(..., [])'; - const secondArg = node.arguments[1]; - if ( - !( - secondArg && - types.isArrayExpression(secondArg) && - secondArg.elements.length === 0 - ) - ) { - context.report({ - node: node, - message: useEffectMessage, - }); - } - } - } - }, - - JSXExpressionContainer(node) { - if (types.isJSXExpressionContainer(node)) { - if (types.isConditionalExpression(node.expression)) { - if ( - types.isJSXElement(node.expression.consequent) || - types.isJSXElement(node.expression.alternate) - ) { - context.report({ - node: node as any, - message: - 'Ternaries around JSX Elements are not currently supported. Instead use binary expressions - e.g. {foo ? : } should be {foo && }{!foo && }', - }); - } - } - } - }, - }; - }, -}; - -export const rules = { - 'css-no-vars': cssNoVars, - 'res-no-current': refNoCurrent, - 'static-control-flow': staticControlFlow, - 'no-state-destructuring': noStateDestructuring, - 'jsx-callback-arg-name': jsxCallbackArgNameRule, - 'no-assign-props-to-state': noAssignPropsToState, - 'use-state-var-declarator': useStateVarDeclarator, - 'no-async-methods-on-state': noAsyncMethodsOnState, - 'no-var-declaration-in-jsx': notVarDeclarationInJSX, - 'no-var-name-same-as-prop-name': noVarNameSameAsPropName, - 'jsx-callback-arrow-function': jsxCallbackArrowFunction, - 'no-var-name-same-as-state-property': noVarNameSameAsStateProperty, - 'only-default-function-and-imports': onlyDefaultFunctionAndImports, - 'no-conditional-logic-in-component-render': - noConditionalLogicInComponentRender, - 'no-var-declaration-or-assignment-in-component': - noVarDeclarationOrAssignmentInComponent, -}; +export { rules } from './rules'; export const configs = { recommended, diff --git a/packages/eslint-plugin/src/__tests__/no-conditional-render.ts b/packages/eslint-plugin/src/rules/__tests__/static-control-flow.ts similarity index 93% rename from packages/eslint-plugin/src/__tests__/no-conditional-render.ts rename to packages/eslint-plugin/src/rules/__tests__/static-control-flow.ts index d4686f88d8..7535c8c061 100644 --- a/packages/eslint-plugin/src/__tests__/no-conditional-render.ts +++ b/packages/eslint-plugin/src/rules/__tests__/static-control-flow.ts @@ -1,6 +1,6 @@ import { RuleTester } from 'eslint'; -import { staticControlFlow } from '../index'; +import { staticControlFlow } from '../static-control-flow'; const ruleTester = new RuleTester(); diff --git a/packages/eslint-plugin/src/rules/index.ts b/packages/eslint-plugin/src/rules/index.ts new file mode 100644 index 0000000000..872ae1bf09 --- /dev/null +++ b/packages/eslint-plugin/src/rules/index.ts @@ -0,0 +1,35 @@ +import cssNoVars from './css-no-vars'; +import refNoCurrent from './ref-no-current'; +import noStateDestructuring from './no-state-destructuring'; +import jsxCallbackArgNameRule from './jsx-callback-arg-name'; +import noAssignPropsToState from './no-assign-props-to-state'; +import useStateVarDeclarator from './use-state-var-declarator'; +import noAsyncMethodsOnState from './no-async-methods-on-state'; +import notVarDeclarationInJSX from './no-var-declaration-in-jsx'; +import jsxCallbackArrowFunction from './jsx-callback-arrow-function'; +import noVarNameSameAsPropName from './no-var-name-same-as-prop-name'; +import noVarNameSameAsStateProperty from './no-var-name-same-as-state-property'; +import onlyDefaultFunctionAndImports from './only-default-function-and-imports'; +import noConditionalLogicInComponentRender from './no-conditional-logic-in-component-render'; +import noVarDeclarationOrAssignmentInComponent from './no-var-declaration-or-assignment-in-component'; +import { staticControlFlow } from './static-control-flow'; + +export const rules = { + 'css-no-vars': cssNoVars, + 'ref-no-current': refNoCurrent, + 'static-control-flow': staticControlFlow, + 'no-state-destructuring': noStateDestructuring, + 'jsx-callback-arg-name': jsxCallbackArgNameRule, + 'no-assign-props-to-state': noAssignPropsToState, + 'use-state-var-declarator': useStateVarDeclarator, + 'no-async-methods-on-state': noAsyncMethodsOnState, + 'no-var-declaration-in-jsx': notVarDeclarationInJSX, + 'no-var-name-same-as-prop-name': noVarNameSameAsPropName, + 'jsx-callback-arrow-function': jsxCallbackArrowFunction, + 'no-var-name-same-as-state-property': noVarNameSameAsStateProperty, + 'only-default-function-and-imports': onlyDefaultFunctionAndImports, + 'no-conditional-logic-in-component-render': + noConditionalLogicInComponentRender, + 'no-var-declaration-or-assignment-in-component': + noVarDeclarationOrAssignmentInComponent, +}; diff --git a/packages/eslint-plugin/src/rules/static-control-flow.ts b/packages/eslint-plugin/src/rules/static-control-flow.ts new file mode 100644 index 0000000000..c23182d635 --- /dev/null +++ b/packages/eslint-plugin/src/rules/static-control-flow.ts @@ -0,0 +1,69 @@ +import { Rule } from 'eslint'; +import * as types from '@babel/types'; +import isMitosisPath from '../helpers/isMitosisPath'; + +export const staticControlFlow: Rule.RuleModule = { + create(context) { + if (!isMitosisPath(context.getFilename())) return {}; + + return { + VariableDeclarator(node) { + if (types.isVariableDeclarator(node)) { + if ( + types.isObjectPattern(node.id) && + types.isIdentifier(node.init) && + node.init.name === 'state' + ) { + context.report({ + node: node as any, + message: + 'Destructuring the state object is currently not supported', + }); + } + } + }, + + CallExpression(node) { + if (types.isCallExpression(node)) { + if ( + types.isIdentifier(node.callee) && + node.callee.name === 'useEffect' + ) { + const useEffectMessage = + 'Only useEffect with an empty array second argument is allowed. E.g. useEffect(...) must be useEffect(..., [])'; + const secondArg = node.arguments[1]; + if ( + !( + secondArg && + types.isArrayExpression(secondArg) && + secondArg.elements.length === 0 + ) + ) { + context.report({ + node: node, + message: useEffectMessage, + }); + } + } + } + }, + + JSXExpressionContainer(node) { + if (types.isJSXExpressionContainer(node)) { + if (types.isConditionalExpression(node.expression)) { + if ( + types.isJSXElement(node.expression.consequent) || + types.isJSXElement(node.expression.alternate) + ) { + context.report({ + node: node as any, + message: + 'Ternaries around JSX Elements are not currently supported. Instead use binary expressions - e.g. {foo ? : } should be {foo && }{!foo && }', + }); + } + } + } + }, + }; + }, +}; diff --git a/yarn.lock b/yarn.lock index 6552f2f6fe..4111cc198d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1598,23 +1598,26 @@ __metadata: version: 0.0.0-use.local resolution: "@builder.io/basic-example@workspace:examples/basic" dependencies: + "@builder.io/eslint-plugin-mitosis": "workspace:*" "@builder.io/mitosis": "workspace:*" "@builder.io/mitosis-cli": "workspace:*" "@types/jest": ^27.4.0 "@types/node-fetch": ^2.5.12 - eslint: ^7.21.0 + "@typescript-eslint/eslint-plugin": ^5.27.1 + "@typescript-eslint/parser": ^5.27.1 + eslint: ^8.17.0 jest: ^27.5.1 jest-fetch-mock: ^3.0.3 node-fetch: ^2.6.1 prettier: ^2.5.0 seedrandom: ^3.0.5 ts-jest: ^27.1.3 - typescript: ^4.5.5 + typescript: ^4.7.3 watch: ^1.0.2 languageName: unknown linkType: soft -"@builder.io/eslint-plugin-mitosis@workspace:packages/eslint-plugin": +"@builder.io/eslint-plugin-mitosis@workspace:*, @builder.io/eslint-plugin-mitosis@workspace:packages/eslint-plugin": version: 0.0.0-use.local resolution: "@builder.io/eslint-plugin-mitosis@workspace:packages/eslint-plugin" dependencies: @@ -1779,6 +1782,8 @@ __metadata: dependencies: "@babel/core": 7.14.5 "@babel/preset-env": ^7.6.0 + "@typescript-eslint/eslint-plugin": ^5.27.1 + "@typescript-eslint/parser": ^5.27.1 commitizen: ^3.0.2 esbuild: 0.14.25 esbuild-register: 3.3.2 @@ -2063,6 +2068,23 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^1.3.0": + version: 1.3.0 + resolution: "@eslint/eslintrc@npm:1.3.0" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.3.2 + globals: ^13.15.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: a1e734ad31a8b5328dce9f479f185fd4fc83dd7f06c538e1fa457fd8226b89602a55cc6458cd52b29573b01cdfaf42331be8cfc1fec732570086b591f4ed6515 + languageName: node + linkType: hard + "@evocateur/libnpmaccess@npm:^3.1.2": version: 3.1.2 resolution: "@evocateur/libnpmaccess@npm:3.1.2" @@ -2205,7 +2227,18 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^1.2.0": +"@humanwhocodes/config-array@npm:^0.9.2": + version: 0.9.5 + resolution: "@humanwhocodes/config-array@npm:0.9.5" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.4 + checksum: 8ba6281bc0590f6c6eadeefc14244b5a3e3f5903445aadd1a32099ed80e753037674026ce1b3c945ab93561bea5eb29e3c5bff67060e230c295595ba517a3492 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.0, @humanwhocodes/object-schema@npm:^1.2.1": version: 1.2.1 resolution: "@humanwhocodes/object-schema@npm:1.2.1" checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 @@ -4621,7 +4654,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d @@ -4979,6 +5012,29 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:^5.27.1": + version: 5.27.1 + resolution: "@typescript-eslint/eslint-plugin@npm:5.27.1" + dependencies: + "@typescript-eslint/scope-manager": 5.27.1 + "@typescript-eslint/type-utils": 5.27.1 + "@typescript-eslint/utils": 5.27.1 + debug: ^4.3.4 + functional-red-black-tree: ^1.0.1 + ignore: ^5.2.0 + regexpp: ^3.2.0 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: ee00d8d3a7b395e346801b7bf30209e278f06b5c283ad71c03b34db9e2d68a43ca0e292e315fa7e5bf131a8839ff4a24e0ed76c37811d230f97aae7e123d73ea + languageName: node + linkType: hard + "@typescript-eslint/experimental-utils@npm:4.33.0, @typescript-eslint/experimental-utils@npm:^4.0.1": version: 4.33.0 resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" @@ -5044,6 +5100,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^5.27.1": + version: 5.27.1 + resolution: "@typescript-eslint/parser@npm:5.27.1" + dependencies: + "@typescript-eslint/scope-manager": 5.27.1 + "@typescript-eslint/types": 5.27.1 + "@typescript-eslint/typescript-estree": 5.27.1 + debug: ^4.3.4 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 0f1df76142c9d7a6c6dbfc5d19fdee02bbc0e79def6e6df4b126c7eaae1c3a46a3871ad498d4b1fc7ad5cb58d6eb70f020807f600d99c0b9add98441fc12f23b + 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" @@ -5064,6 +5137,32 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.27.1": + version: 5.27.1 + resolution: "@typescript-eslint/scope-manager@npm:5.27.1" + dependencies: + "@typescript-eslint/types": 5.27.1 + "@typescript-eslint/visitor-keys": 5.27.1 + checksum: 401bf2b46de08ddb80ec9f36df7d58bf5de7837185a472b190b670d421d685743aad4c9fa8a6893f65ba933b822c5d7060c640e87cf0756d7aa56abdd25689cc + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.27.1": + version: 5.27.1 + resolution: "@typescript-eslint/type-utils@npm:5.27.1" + dependencies: + "@typescript-eslint/utils": 5.27.1 + debug: ^4.3.4 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 43b7da26ea1bd7d249c45d168ec88f971fb71362bbc21ec4748d73b1ecb43f4ca59f5ed338e8dbc74272ae4ebac1cab87a9b62c0fa616c6f9bd833a212dc8a40 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:3.10.1": version: 3.10.1 resolution: "@typescript-eslint/types@npm:3.10.1" @@ -5085,6 +5184,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.27.1": + version: 5.27.1 + resolution: "@typescript-eslint/types@npm:5.27.1" + checksum: 81faa50256ba67c23221273744c51676774fe6a1583698c3a542f3e2fd21ab34a4399019527c9cf7ab4e5a1577272f091d5848d3af937232ddb2dbf558a7c39a + 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" @@ -5140,6 +5246,40 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.27.1": + version: 5.27.1 + resolution: "@typescript-eslint/typescript-estree@npm:5.27.1" + dependencies: + "@typescript-eslint/types": 5.27.1 + "@typescript-eslint/visitor-keys": 5.27.1 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 59d2a0885be7d54bd86472a446d84930cc52d2690ea432d9164075ea437b3b4206dadd49799764ad0fb68f3e4ebb4e36db9717c7a443d0f3c82d5659e41fbd05 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.27.1": + version: 5.27.1 + resolution: "@typescript-eslint/utils@npm:5.27.1" + dependencies: + "@types/json-schema": ^7.0.9 + "@typescript-eslint/scope-manager": 5.27.1 + "@typescript-eslint/types": 5.27.1 + "@typescript-eslint/typescript-estree": 5.27.1 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 51add038226cddad2b3322225de18d53bc1ed44613f7b3a379eb597114b8830a632990b0f4321e0ddf3502b460d80072d7e789be89135b5e11e8dae167005625 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:3.10.1": version: 3.10.1 resolution: "@typescript-eslint/visitor-keys@npm:3.10.1" @@ -5169,6 +5309,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.27.1": + version: 5.27.1 + resolution: "@typescript-eslint/visitor-keys@npm:5.27.1" + dependencies: + "@typescript-eslint/types": 5.27.1 + eslint-visitor-keys: ^3.3.0 + checksum: 8f104eda321cd6c613daf284fbebbd32b149d4213d137b0ce1caec7a1334c9f46c82ed64aff1243b712ac8c13f67ac344c996cd36d21fbb15032c24d9897a64a + languageName: node + linkType: hard + "@vue/compiler-core@npm:3.2.36": version: 3.2.36 resolution: "@vue/compiler-core@npm:3.2.36" @@ -5515,7 +5665,7 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.3.1": +"acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" peerDependencies: @@ -5572,7 +5722,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.5.0, acorn@npm:^8.7.0": +"acorn@npm:^8.2.4, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1": version: 8.7.1 resolution: "acorn@npm:8.7.1" bin: @@ -5933,6 +6083,13 @@ __metadata: languageName: node linkType: hard +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + "aria-query@npm:^4.2.2": version: 4.2.2 resolution: "aria-query@npm:4.2.2" @@ -9136,7 +9293,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -10525,6 +10682,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^7.1.1": + version: 7.1.1 + resolution: "eslint-scope@npm:7.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: 9f6e974ab2db641ca8ab13508c405b7b859e72afe9f254e8131ff154d2f40c99ad4545ce326fd9fde3212ff29707102562a4834f1c48617b35d98c71a97fbf3e + 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" @@ -10633,6 +10800,51 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^8.17.0": + version: 8.17.0 + resolution: "eslint@npm:8.17.0" + dependencies: + "@eslint/eslintrc": ^1.3.0 + "@humanwhocodes/config-array": ^0.9.2 + ajv: ^6.10.0 + 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.1.1 + eslint-utils: ^3.0.0 + eslint-visitor-keys: ^3.3.0 + espree: ^9.3.2 + esquery: ^1.4.0 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + functional-red-black-tree: ^1.0.1 + glob-parent: ^6.0.1 + globals: ^13.15.0 + ignore: ^5.2.0 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + js-yaml: ^4.1.0 + 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.1 + regexpp: ^3.2.0 + strip-ansi: ^6.0.1 + strip-json-comments: ^3.1.0 + text-table: ^0.2.0 + v8-compile-cache: ^2.0.3 + bin: + eslint: bin/eslint.js + checksum: b484c96681c6b19f5b437f664623f1cd310d3ee9be88400d8450e086e664cd968a9dc202f0b0678578fd50e7a445b92586efe8c787de5073ff2f83213b00bb7b + languageName: node + linkType: hard + "espree@npm:^7.3.0, espree@npm:^7.3.1": version: 7.3.1 resolution: "espree@npm:7.3.1" @@ -10644,6 +10856,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.3.2": + version: 9.3.2 + resolution: "espree@npm:9.3.2" + dependencies: + acorn: ^8.7.1 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.3.0 + checksum: 9a790d6779847051e87f70d720a0f6981899a722419e80c92ab6dee01e1ab83b8ce52d11b4dc96c2c490182efb5a4c138b8b0d569205bfe1cd4629e658e58c30 + languageName: node + linkType: hard + "esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -12017,6 +12240,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.1": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + "glob-to-regexp@npm:^0.3.0": version: 0.3.0 resolution: "glob-to-regexp@npm:0.3.0" @@ -12125,7 +12357,7 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.6.0, globals@npm:^13.9.0": +"globals@npm:^13.15.0, globals@npm:^13.6.0, globals@npm:^13.9.0": version: 13.15.0 resolution: "globals@npm:13.15.0" dependencies: @@ -15524,6 +15756,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + "jsbn@npm:~0.1.0": version: 0.1.1 resolution: "jsbn@npm:0.1.1" @@ -21410,7 +21653,7 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.1.0": +"regexpp@npm:^3.1.0, regexpp@npm:^3.2.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 @@ -24430,6 +24673,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^4.7.3": + version: 4.7.3 + resolution: "typescript@npm:4.7.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: fd13a1ce53790a36bb8350e1f5e5e384b5f6cb9b0635114a6d01d49cb99916abdcfbc13c7521cdae2f2d3f6d8bc4a8ae7625edf645a04ee940588cd5e7597b2f + languageName: node + linkType: hard + "typescript@patch:typescript@^4.2.3#~builtin, typescript@patch:typescript@^4.5.4#~builtin, typescript@patch:typescript@^4.5.5#~builtin": version: 4.7.2 resolution: "typescript@patch:typescript@npm%3A4.7.2#~builtin::version=4.7.2&hash=bda367" @@ -24440,6 +24693,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@^4.7.3#~builtin": + version: 4.7.3 + resolution: "typescript@patch:typescript@npm%3A4.7.3#~builtin::version=4.7.3&hash=bda367" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 8257ce7ecbbf9416da60045a76a99d473698ca9e973fa0ddab7137cacb1587255431176cbbcc801a650938c4dc8109ab88355774829a714fabe56a53a2fe4524 + languageName: node + linkType: hard + "ua-parser-js@npm:^0.7.30": version: 0.7.31 resolution: "ua-parser-js@npm:0.7.31"