Initial commit

This commit is contained in:
Alex
2023-07-19 23:40:39 -04:00
commit fd67e90cbc
24 changed files with 7998 additions and 0 deletions

View File

@ -0,0 +1,498 @@
diff --git a/.babelrc b/.babelrc
index 883c03b7..0111d616 100644
--- a/.babelrc
+++ b/.babelrc
@@ -1,18 +1,11 @@
{
- "presets": ["airbnb"],
- "sourceMaps": "inline",
- "retainLines": true,
+ "presets": [["@babel/preset-env", { "targets": { "node": 16 } }]],
"env": {
"test": {
- "plugins": [
- "istanbul",
- ["module-resolver", { "root": ["./src/"] }],
- ]
+ "plugins": ["istanbul", ["module-resolver", { "root": ["./src/"] }]]
},
"testCompiled": {
- "plugins": [
- ["module-resolver", { "root": ["./lib/"] }],
- ]
+ "plugins": [["module-resolver", { "root": ["./lib/"] }]]
}
}
}
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index 709a4744..00000000
--- a/.eslintrc
+++ /dev/null
@@ -1,247 +0,0 @@
-{
- "root": true,
- "plugins": [
- "eslint-plugin",
- "import",
- ],
- "extends": [
- "eslint:recommended",
- "plugin:eslint-plugin/recommended",
- "plugin:import/recommended",
- ],
- "env": {
- "node": true,
- "es6": true,
- "es2017": true,
- },
- "parserOptions": {
- "sourceType": "module",
- "ecmaVersion": 2020,
- },
- "rules": {
- "arrow-body-style": [2, "as-needed"],
- "arrow-parens": [2, "always"],
- "arrow-spacing": [2, { "before": true, "after": true }],
- "block-spacing": [2, "always"],
- "brace-style": [2, "1tbs", { "allowSingleLine": true }],
- "comma-dangle": ["error", {
- "arrays": "always-multiline",
- "objects": "always-multiline",
- "imports": "always-multiline",
- "exports": "always-multiline",
- "functions": "always-multiline",
- }],
- "comma-spacing": [2, { "before": false, "after": true }],
- "comma-style": [2, "last"],
- "computed-property-spacing": [2, "never"],
- "curly": [2, "all"],
- "default-case": [2, { "commentPattern": "(?:)" }],
- "default-case-last": [2],
- "default-param-last": [2],
- "dot-location": [2, "property"],
- "dot-notation": [2, { "allowKeywords": true, "allowPattern": "throws" }],
- "eol-last": [2, "always"],
- "eqeqeq": [2, "allow-null"],
- "for-direction": [2],
- "function-call-argument-newline": [2, "consistent"],
- "func-call-spacing": [2, "never"],
- "implicit-arrow-linebreak": [2, "beside"],
- "indent": [2, 2, {
- "SwitchCase": 1,
- "VariableDeclarator": 1,
- "outerIIFEBody": 1,
- "FunctionDeclaration": {
- "parameters": 1,
- "body": 1
- },
- "FunctionExpression": {
- "parameters": 1,
- "body": 1
- },
- "CallExpression": {
- "arguments": 1
- },
- "ArrayExpression": 1,
- "ObjectExpression": 1,
- "ImportDeclaration": 1,
- "flatTernaryExpressions": false,
- }],
- "jsx-quotes": [2, "prefer-double"],
- "key-spacing": [2, {
- "beforeColon": false,
- "afterColon": true,
- "mode": "strict",
- }],
- "keyword-spacing": ["error", {
- "before": true,
- "after": true,
- "overrides": {
- "return": { "after": true },
- "throw": { "after": true },
- "case": { "after": true }
- }
- }],
- "linebreak-style": [2, "unix"],
- "lines-around-directive": [2, {
- "before": "always",
- "after": "always",
- }],
- "max-len": 0,
- "new-parens": 2,
- "no-array-constructor": 2,
- "no-compare-neg-zero": 2,
- "no-cond-assign": [2, "always"],
- "no-extra-parens": 2,
- "no-multiple-empty-lines": [2, { "max": 1, "maxEOF": 1, "maxBOF": 0 }],
- "no-return-assign": [2, "always"],
- "no-trailing-spaces": 2,
- "no-var": 2,
- "object-curly-spacing": [2, "always"],
- "object-shorthand": ["error", "always", {
- "ignoreConstructors": false,
- "avoidQuotes": false,
- "avoidExplicitReturnArrows": true,
- }],
- "one-var": [2, "never"],
- "operator-linebreak": [2, "none", {
- "overrides": {
- "?": "before",
- ":": "before",
- "&&": "before",
- "||": "before",
- },
- }],
- "prefer-const": 2,
- "prefer-object-spread": 2,
- "prefer-rest-params": 2,
- "prefer-template": 2,
- "quote-props": [2, "as-needed", { "keywords": false }],
- "quotes": [2, "single", {
- "allowTemplateLiterals": true,
- "avoidEscape": true,
- }],
- "rest-spread-spacing": [2, "never"],
- "semi": [2, "always"],
- "semi-spacing": [2, { "before": false, "after": true }],
- "semi-style": [2, "last"],
- "space-before-blocks": [2, { "functions": "always", "keywords": "always", "classes": "always" }],
- "space-before-function-paren": ["error", {
- "anonymous": "always",
- "named": "never",
- "asyncArrow": "always",
- }],
- "space-in-parens": [2, "never"],
- "space-infix-ops": [2],
- "space-unary-ops": [2, { "words": true, "nonwords": false }],
- "switch-colon-spacing": [2, { "after": true, "before": false }],
- "template-curly-spacing": [2, "never"],
- "template-tag-spacing": [2, "never"],
- "unicode-bom": [2, "never"],
- "use-isnan": [2, { "enforceForSwitchCase": true }],
- "valid-typeof": [2],
- "wrap-iife": [2, "outside", { "functionPrototypeMethods": true }],
- "wrap-regex": [2],
- "yield-star-spacing": [2, { "before": false, "after": true }],
- "yoda": [2, "never", { "exceptRange": true, "onlyEquality": false }],
-
- "eslint-plugin/consistent-output": [
- "error",
- "always",
- ],
- "eslint-plugin/meta-property-ordering": "error",
- "eslint-plugin/no-deprecated-context-methods": "error",
- "eslint-plugin/no-deprecated-report-api": "off",
- "eslint-plugin/prefer-replace-text": "error",
- "eslint-plugin/report-message-format": "error",
- "eslint-plugin/require-meta-docs-description": ["error", { "pattern": "^(Enforce|Ensure|Prefer|Forbid).+\\.$" }],
- "eslint-plugin/require-meta-schema": "error",
- "eslint-plugin/require-meta-type": "error",
-
- // dog fooding
- "import/no-extraneous-dependencies": ["error", {
- "devDependencies": [
- "tests/**",
- "resolvers/*/test/**",
- "scripts/**"
- ],
- "optionalDependencies": false,
- "peerDependencies": true,
- "bundledDependencies": false,
- }],
- "import/unambiguous": "off",
- },
-
- "settings": {
- "import/resolver": {
- "node": {
- "paths": [
- "src",
- ],
- },
- },
- },
-
- "overrides": [
- {
- "files": "scripts/**",
- "rules": {
- "no-console": "off",
- },
- },
- {
- "files": "resolvers/**",
- "env": {
- "es6": false,
- },
- },
- {
- "files": "resolvers/webpack/**",
- "rules": {
- "no-console": 1,
- "prefer-template": 0,
- "prefer-object-spread": 0,
- "prefer-rest-params": 0,
- },
- "env": {
- "es6": true,
- },
- },
- {
- "files": [
- "resolvers/*/test/**/*",
- ],
- "env": {
- "mocha": true,
- "es6": false
- },
- },
- {
- "files": "utils/**",
- "parserOptions": {
- "ecmaVersion": 6,
- },
- "rules": {
- "comma-dangle": ["error", {
- "arrays": "always-multiline",
- "objects": "always-multiline",
- "imports": "always-multiline",
- "exports": "always-multiline",
- "functions": "never"
- }],
- "prefer-object-spread": "off",
- "prefer-template": "off",
- "no-console": 1,
- },
- },
- {
- "files": "tests/**",
- "env": {
- "mocha": true,
- },
- "rules": {
- "max-len": 0,
- "import/default": 0,
- },
- },
- ],
-}
diff --git a/scripts/resolverDirectories.js b/scripts/resolverDirectories.js
index f0c03a3c..a7cadb55 100644
--- a/scripts/resolverDirectories.js
+++ b/scripts/resolverDirectories.js
@@ -1,3 +1,3 @@
-import glob from 'glob';
+import { globSync } from 'glob';
-export default glob.sync('./resolvers/*/');
+export default globSync('./resolvers/*/');
diff --git a/src/docsUrl.js b/src/docsUrl.js
index 92b838c0..ccb13ba0 100644
--- a/src/docsUrl.js
+++ b/src/docsUrl.js
@@ -1,7 +1,7 @@
-import pkg from '../package.json';
+import { version } from '../package.json';
const repoUrl = 'https://github.com/import-js/eslint-plugin-import';
-export default function docsUrl(ruleName, commitish = `v${pkg.version}`) {
+export default function docsUrl(ruleName, commitish = `v${version}`) {
return `${repoUrl}/blob/${commitish}/docs/rules/${ruleName}.md`;
}
diff --git a/src/index.js b/src/index.js
index feafba90..84992bef 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,71 +1,132 @@
-export const rules = {
- 'no-unresolved': require('./rules/no-unresolved'),
- named: require('./rules/named'),
- default: require('./rules/default'),
- namespace: require('./rules/namespace'),
- 'no-namespace': require('./rules/no-namespace'),
- export: require('./rules/export'),
- 'no-mutable-exports': require('./rules/no-mutable-exports'),
- extensions: require('./rules/extensions'),
- 'no-restricted-paths': require('./rules/no-restricted-paths'),
- 'no-internal-modules': require('./rules/no-internal-modules'),
- 'group-exports': require('./rules/group-exports'),
- 'no-relative-packages': require('./rules/no-relative-packages'),
- 'no-relative-parent-imports': require('./rules/no-relative-parent-imports'),
- 'consistent-type-specifier-style': require('./rules/consistent-type-specifier-style'),
+/* eslint-disable spaced-comment */
+import noUnresolved from './rules/no-unresolved';
+import named from './rules/named';
+import defaultRule from './rules/default';
+import namespace from './rules/namespace';
+import noNamespace from './rules/no-namespace';
+import exportRule from './rules/export';
+import noMutableExports from './rules/no-mutable-exports';
+import extensions from './rules/extensions';
+import noRestrictedPaths from './rules/no-restricted-paths';
+import noInternalModules from './rules/no-internal-modules';
+import groupExports from './rules/group-exports';
+import noRelativePackages from './rules/no-relative-packages';
+import noRelativeParentImports from './rules/no-relative-parent-imports';
+import consistentTypeSpecifierStyle from './rules/consistent-type-specifier-style';
+import noSelfImport from './rules/no-self-import';
+import noCycle from './rules/no-cycle';
+import noNamedDefault from './rules/no-named-default';
+import noNamedAsDefault from './rules/no-named-as-default';
+import noNamedAsDefaultMember from './rules/no-named-as-default-member';
+import noAnonymousDefaultExport from './rules/no-anonymous-default-export';
+import noUnusedModules from './rules/no-unused-modules';
+import noCommonjs from './rules/no-commonjs';
+import noAmd from './rules/no-amd';
+import noDuplicates from './rules/no-duplicates';
+import first from './rules/first';
+import maxDependencies from './rules/max-dependencies';
+import noExtraneousDependencies from './rules/no-extraneous-dependencies';
+import noAbsolutePath from './rules/no-absolute-path';
+import noNodejsModules from './rules/no-nodejs-modules';
+import noWebpackLoaderSyntax from './rules/no-webpack-loader-syntax';
+import order from './rules/order';
+import newlineAfterImport from './rules/newline-after-import';
+import preferDefaultExport from './rules/prefer-default-export';
+import noDefaultExport from './rules/no-default-export';
+import noNamedExport from './rules/no-named-export';
+import noDynamicRequire from './rules/no-dynamic-require';
+import unambiguous from './rules/unambiguous';
+import noUnassignedImport from './rules/no-unassigned-import';
+import noUselessPathSegments from './rules/no-useless-path-segments';
+import dynamicImportChunkname from './rules/dynamic-import-chunkname';
+import noImportModuleExports from './rules/no-import-module-exports';
+import noEmptyNamedBlocks from './rules/no-empty-named-blocks';
+import exportsLast from './rules/exports-last';
+import noDeprecated from './rules/no-deprecated';
+import importsFirst from './rules/imports-first';
+import recommended from '../config/recommended';
+import errors from '../config/errors';
+import warnings from '../config/warnings';
+import stage0 from '../config/stage-0';
+import react from '../config/react';
+import reactNative from '../config/react-native';
+import electron from '../config/electron';
+import typescript from '../config/typescript';
- 'no-self-import': require('./rules/no-self-import'),
- 'no-cycle': require('./rules/no-cycle'),
- 'no-named-default': require('./rules/no-named-default'),
- 'no-named-as-default': require('./rules/no-named-as-default'),
- 'no-named-as-default-member': require('./rules/no-named-as-default-member'),
- 'no-anonymous-default-export': require('./rules/no-anonymous-default-export'),
- 'no-unused-modules': require('./rules/no-unused-modules'),
+export const rules = /*#__PURE__*/ kebabCase({
+ noUnresolved,
+ named,
+ default: defaultRule,
+ namespace,
+ noNamespace,
+ export: exportRule,
+ noMutableExports,
+ extensions,
+ noRestrictedPaths,
+ noInternalModules,
+ groupExports,
+ noRelativePackages,
+ noRelativeParentImports,
+ consistentTypeSpecifierStyle,
- 'no-commonjs': require('./rules/no-commonjs'),
- 'no-amd': require('./rules/no-amd'),
- 'no-duplicates': require('./rules/no-duplicates'),
- first: require('./rules/first'),
- 'max-dependencies': require('./rules/max-dependencies'),
- 'no-extraneous-dependencies': require('./rules/no-extraneous-dependencies'),
- 'no-absolute-path': require('./rules/no-absolute-path'),
- 'no-nodejs-modules': require('./rules/no-nodejs-modules'),
- 'no-webpack-loader-syntax': require('./rules/no-webpack-loader-syntax'),
- order: require('./rules/order'),
- 'newline-after-import': require('./rules/newline-after-import'),
- 'prefer-default-export': require('./rules/prefer-default-export'),
- 'no-default-export': require('./rules/no-default-export'),
- 'no-named-export': require('./rules/no-named-export'),
- 'no-dynamic-require': require('./rules/no-dynamic-require'),
- unambiguous: require('./rules/unambiguous'),
- 'no-unassigned-import': require('./rules/no-unassigned-import'),
- 'no-useless-path-segments': require('./rules/no-useless-path-segments'),
- 'dynamic-import-chunkname': require('./rules/dynamic-import-chunkname'),
- 'no-import-module-exports': require('./rules/no-import-module-exports'),
- 'no-empty-named-blocks': require('./rules/no-empty-named-blocks'),
+ noSelfImport,
+ noCycle,
+ noNamedDefault,
+ noNamedAsDefault,
+ noNamedAsDefaultMember,
+ noAnonymousDefaultExport,
+ noUnusedModules,
+
+ noCommonjs,
+ noAmd,
+ noDuplicates,
+ first,
+ maxDependencies,
+ noExtraneousDependencies,
+ noAbsolutePath,
+ noNodejsModules,
+ noWebpackLoaderSyntax,
+ order,
+ newlineAfterImport,
+ preferDefaultExport,
+ noDefaultExport,
+ noNamedExport,
+ noDynamicRequire,
+ unambiguous,
+ noUnassignedImport,
+ noUselessPathSegments,
+ dynamicImportChunkname,
+ noImportModuleExports,
+ noEmptyNamedBlocks,
// export
- 'exports-last': require('./rules/exports-last'),
+ exportsLast,
// metadata-based
- 'no-deprecated': require('./rules/no-deprecated'),
+ noDeprecated,
// deprecated aliases to rules
- 'imports-first': require('./rules/imports-first'),
-};
+ importsFirst,
+});
-export const configs = {
- recommended: require('../config/recommended'),
+export const configs = /*#__PURE__*/ kebabCase({
+ recommended,
- errors: require('../config/errors'),
- warnings: require('../config/warnings'),
+ errors,
+ warnings,
// shhhh... work in progress "secret" rules
- 'stage-0': require('../config/stage-0'),
+ 'stage-0': stage0,
// useful stuff for folks using various environments
- react: require('../config/react'),
- 'react-native': require('../config/react-native'),
- electron: require('../config/electron'),
- typescript: require('../config/typescript'),
-};
+ react,
+ reactNative,
+ electron,
+ typescript,
+});
+
+function kebabCase(obj) {
+ return Object.fromEntries(
+ Object.entries(obj).map(([key, value]) => [key.replace(/([A-Z])/g, '-$1').toLowerCase(), value])
+ )
+}
\ No newline at end of file

View File

@ -0,0 +1,144 @@
diff --git a/src/index.js b/src/index.js
index 7b931fe..f7c1f91 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,47 +1,87 @@
/* eslint-disable global-require */
+// @ts-check
+import accessibleEmoji from './rules/accessible-emoji';
+import altText from './rules/alt-text';
+import anchorAmbiguousText from './rules/anchor-ambiguous-text';
+import anchorHasContent from './rules/anchor-has-content';
+import anchorIsValid from './rules/anchor-is-valid';
+import ariaActivedescendantHasTabindex from './rules/aria-activedescendant-has-tabindex';
+import ariaProps from './rules/aria-props';
+import ariaProptypes from './rules/aria-proptypes';
+import ariaRole from './rules/aria-role';
+import ariaUnsupportedElements from './rules/aria-unsupported-elements';
+import autocompleteValid from './rules/autocomplete-valid';
+import clickEventsHaveKeyEvents from './rules/click-events-have-key-events';
+import controlHasAssociatedLabel from './rules/control-has-associated-label';
+import headingHasContent from './rules/heading-has-content';
+import htmlHasLang from './rules/html-has-lang';
+import iframeHasTitle from './rules/iframe-has-title';
+import imgRedundantAlt from './rules/img-redundant-alt';
+import interactiveSupportsFocus from './rules/interactive-supports-focus';
+import labelHasAssociatedControl from './rules/label-has-associated-control';
+import labelHasFor from './rules/label-has-for';
+import lang from './rules/lang';
+import mediaHasCaption from './rules/media-has-caption';
+import mouseEventsHaveKeyEvents from './rules/mouse-events-have-key-events';
+import noAriaHiddenOnFocusable from './rules/no-aria-hidden-on-focusable';
+import noAccessKey from './rules/no-access-key';
+import noAutofocus from './rules/no-autofocus';
+import noDistractingElements from './rules/no-distracting-elements';
+import noInteractiveElementToNoninteractiveRole from './rules/no-interactive-element-to-noninteractive-role';
+import noNoninteractiveElementInteractions from './rules/no-noninteractive-element-interactions';
+import noNoninteractiveElementToInteractiveRole from './rules/no-noninteractive-element-to-interactive-role';
+import noNoninteractiveTabindex from './rules/no-noninteractive-tabindex';
+import noOnChange from './rules/no-onchange';
+import noRedundantRoles from './rules/no-redundant-roles';
+import noStaticElementInteractions from './rules/no-static-element-interactions';
+import preferTagOverRole from './rules/prefer-tag-over-role';
+import roleHasRequiredAriaProps from './rules/role-has-required-aria-props';
+import roleSupportsAriaProps from './rules/role-supports-aria-props';
+import scope from './rules/scope';
+import tabindexNoPositive from './rules/tabindex-no-positive';
module.exports = {
- rules: {
- 'accessible-emoji': require('./rules/accessible-emoji'),
- 'alt-text': require('./rules/alt-text'),
- 'anchor-ambiguous-text': require('./rules/anchor-ambiguous-text'),
- 'anchor-has-content': require('./rules/anchor-has-content'),
- 'anchor-is-valid': require('./rules/anchor-is-valid'),
- 'aria-activedescendant-has-tabindex': require('./rules/aria-activedescendant-has-tabindex'),
- 'aria-props': require('./rules/aria-props'),
- 'aria-proptypes': require('./rules/aria-proptypes'),
- 'aria-role': require('./rules/aria-role'),
- 'aria-unsupported-elements': require('./rules/aria-unsupported-elements'),
- 'autocomplete-valid': require('./rules/autocomplete-valid'),
- 'click-events-have-key-events': require('./rules/click-events-have-key-events'),
- 'control-has-associated-label': require('./rules/control-has-associated-label'),
- 'heading-has-content': require('./rules/heading-has-content'),
- 'html-has-lang': require('./rules/html-has-lang'),
- 'iframe-has-title': require('./rules/iframe-has-title'),
- 'img-redundant-alt': require('./rules/img-redundant-alt'),
- 'interactive-supports-focus': require('./rules/interactive-supports-focus'),
- 'label-has-associated-control': require('./rules/label-has-associated-control'),
- 'label-has-for': require('./rules/label-has-for'),
- lang: require('./rules/lang'),
- 'media-has-caption': require('./rules/media-has-caption'),
- 'mouse-events-have-key-events': require('./rules/mouse-events-have-key-events'),
- 'no-access-key': require('./rules/no-access-key'),
- 'no-aria-hidden-on-focusable': require('./rules/no-aria-hidden-on-focusable'),
- 'no-autofocus': require('./rules/no-autofocus'),
- 'no-distracting-elements': require('./rules/no-distracting-elements'),
- 'no-interactive-element-to-noninteractive-role': require('./rules/no-interactive-element-to-noninteractive-role'),
- 'no-noninteractive-element-interactions': require('./rules/no-noninteractive-element-interactions'),
- 'no-noninteractive-element-to-interactive-role': require('./rules/no-noninteractive-element-to-interactive-role'),
- 'no-noninteractive-tabindex': require('./rules/no-noninteractive-tabindex'),
- 'no-onchange': require('./rules/no-onchange'),
- 'no-redundant-roles': require('./rules/no-redundant-roles'),
- 'no-static-element-interactions': require('./rules/no-static-element-interactions'),
- 'prefer-tag-over-role': require('./rules/prefer-tag-over-role'),
- 'role-has-required-aria-props': require('./rules/role-has-required-aria-props'),
- 'role-supports-aria-props': require('./rules/role-supports-aria-props'),
- scope: require('./rules/scope'),
- 'tabindex-no-positive': require('./rules/tabindex-no-positive'),
- },
+ rules: kebabCase({
+ accessibleEmoji,
+ altText,
+ anchorAmbiguousText,
+ anchorHasContent,
+ anchorIsValid,
+ ariaActivedescendantHasTabindex,
+ ariaProps,
+ ariaProptypes,
+ ariaRole,
+ ariaUnsupportedElements,
+ autocompleteValid,
+ clickEventsHaveKeyEvents,
+ controlHasAssociatedLabel,
+ headingHasContent,
+ htmlHasLang,
+ iframeHasTitle,
+ imgRedundantAlt,
+ interactiveSupportsFocus,
+ labelHasAssociatedControl,
+ labelHasFor,
+ lang,
+ mediaHasCaption,
+ mouseEventsHaveKeyEvents,
+ noAccessKey,
+ noAriaHiddenOnFocusable,
+ noAutofocus,
+ noDistractingElements,
+ noInteractiveElementToNoninteractiveRole,
+ noNoninteractiveElementInteractions,
+ noNoninteractiveElementToInteractiveRole,
+ noNoninteractiveTabindex,
+ noOnChange,
+ noRedundantRoles,
+ noStaticElementInteractions,
+ preferTagOverRole,
+ roleHasRequiredAriaProps,
+ roleSupportsAriaProps,
+ scope,
+ tabindexNoPositive,
+ }),
configs: {
recommended: {
plugins: [
@@ -294,3 +334,9 @@ module.exports = {
},
},
};
+
+function kebabCase(obj) {
+ return Object.fromEntries(
+ Object.entries(obj).map(([key, value]) => [key.replace(/([A-Z])/g, '-$1').toLowerCase(), value])
+ )
+}
\ No newline at end of file

View File

@ -0,0 +1,310 @@
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index 4991f200..00000000
--- a/.eslintrc
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "root": true,
- "extends": ["airbnb-base", "plugin:eslint-plugin/recommended"],
- "plugins": ["eslint-plugin"],
- "env": {
- "es6": true,
- "node": true
- },
- "parserOptions": {
- "ecmaVersion": 6,
- "ecmaFeatures": {
- "jsx": true
- },
- "sourceType": "script",
- },
- "ignorePatterns": [
- "coverage/",
- ".nyc_output/",
- ],
- "rules": {
- "comma-dangle": [2, "always-multiline"],
- "object-shorthand": [2, "always", {
- "ignoreConstructors": false,
- "avoidQuotes": false, // this is the override vs airbnb
- }],
- "max-len": [2, 120, {
- "ignoreStrings": true,
- "ignoreTemplateLiterals": true,
- "ignoreComments": true,
- }],
- "consistent-return": 0,
-
- "prefer-destructuring": [2, { "array": false, "object": false }, { "enforceForRenamedProperties": false }],
- "prefer-object-spread": 0, // until node 8 is required
- "prefer-rest-params": 0, // until node 6 is required
- "prefer-spread": 0, // until node 6 is required
- "function-call-argument-newline": 1, // TODO: enable
- "function-paren-newline": 0,
- "no-plusplus": [2, {"allowForLoopAfterthoughts": true}],
- "no-param-reassign": 1,
- "no-restricted-syntax": [2, {
- "selector": "ObjectPattern",
- "message": "Object destructuring is not compatible with Node v4"
- }],
- "strict": [2, "safe"],
- "valid-jsdoc": [2, {
- "requireReturn": false,
- "requireParamDescription": false,
- "requireReturnDescription": false,
- }],
-
- "eslint-plugin/consistent-output": 0,
- "eslint-plugin/require-meta-docs-description": [2, { "pattern": "^(Enforce|Require|Disallow)" }],
- "eslint-plugin/require-meta-schema": 0,
- "eslint-plugin/require-meta-type": 0
- },
- "overrides": [
- {
- "files": "tests/**",
- "rules": {
- "no-template-curly-in-string": 1,
- },
- },
- {
- "files": "markdown.config.js",
- "rules": {
- "no-console": 0,
- },
- },
- {
- "files": ".github/workflows/*.js",
- "parserOptions": {
- "ecmaVersion": 2019,
- },
- "rules": {
- "camelcase": 0,
- "no-console": 0,
- "no-restricted-syntax": 0,
- },
- },
- ],
-}
diff --git a/index.js b/index.js
index 4140c6c8..792ceb4f 100644
--- a/index.js
+++ b/index.js
@@ -1,15 +1,13 @@
'use strict';
-const configAll = require('./configs/all');
-const configRecommended = require('./configs/recommended');
-const configRuntime = require('./configs/jsx-runtime');
-
-const allRules = require('./lib/rules');
+import configAll from './configs/all';
+import configRecommended from './configs/recommended';
+import configRuntime from './configs/jsx-runtime';
+import { name } from './package.json';
+import allRules from './lib/rules';
// for legacy config system
-const plugins = [
- 'react',
-];
+const plugins = [name];
module.exports = {
deprecatedRules: configAll.plugins.react.deprecatedRules,
diff --git a/lib/rules/button-has-type.js b/lib/rules/button-has-type.js
index 204a33c4..01d992c2 100644
--- a/lib/rules/button-has-type.js
+++ b/lib/rules/button-has-type.js
@@ -5,8 +5,7 @@
'use strict';
-const getProp = require('jsx-ast-utils/getProp');
-const getLiteralPropValue = require('jsx-ast-utils/getLiteralPropValue');
+const { getProp, getLiteralPropValue } = require('jsx-ast-utils');
const docsUrl = require('../util/docsUrl');
const isCreateElement = require('../util/isCreateElement');
const report = require('../util/report');
diff --git a/lib/rules/jsx-fragments.js b/lib/rules/jsx-fragments.js
index 38b4dd8b..d0575572 100644
--- a/lib/rules/jsx-fragments.js
+++ b/lib/rules/jsx-fragments.js
@@ -5,7 +5,7 @@
'use strict';
-const elementType = require('jsx-ast-utils/elementType');
+import { elementType } from 'jsx-ast-utils';
const pragmaUtil = require('../util/pragma');
const variableUtil = require('../util/variable');
const testReactVersion = require('../util/version').testReactVersion;
diff --git a/lib/rules/jsx-key.js b/lib/rules/jsx-key.js
index 263ed824..e413ef5d 100644
--- a/lib/rules/jsx-key.js
+++ b/lib/rules/jsx-key.js
@@ -5,8 +5,7 @@
'use strict';
-const hasProp = require('jsx-ast-utils/hasProp');
-const propName = require('jsx-ast-utils/propName');
+import { hasProp, propName } from 'jsx-ast-utils';
const values = require('object.values');
const docsUrl = require('../util/docsUrl');
const pragmaUtil = require('../util/pragma');
diff --git a/lib/rules/jsx-no-bind.js b/lib/rules/jsx-no-bind.js
index 0a4c38e6..75a57bd9 100644
--- a/lib/rules/jsx-no-bind.js
+++ b/lib/rules/jsx-no-bind.js
@@ -7,7 +7,7 @@
'use strict';
-const propName = require('jsx-ast-utils/propName');
+import { propName } from 'jsx-ast-utils';
const docsUrl = require('../util/docsUrl');
const jsxUtil = require('../util/jsx');
const report = require('../util/report');
diff --git a/lib/rules/jsx-pascal-case.js b/lib/rules/jsx-pascal-case.js
index a1bb4811..db051356 100644
--- a/lib/rules/jsx-pascal-case.js
+++ b/lib/rules/jsx-pascal-case.js
@@ -5,7 +5,7 @@
'use strict';
-const elementType = require('jsx-ast-utils/elementType');
+import { elementType } from 'jsx-ast-utils';
const minimatch = require('minimatch');
const docsUrl = require('../util/docsUrl');
const jsxUtil = require('../util/jsx');
diff --git a/lib/rules/jsx-sort-props.js b/lib/rules/jsx-sort-props.js
index 5de5bee1..8013a8de 100644
--- a/lib/rules/jsx-sort-props.js
+++ b/lib/rules/jsx-sort-props.js
@@ -5,7 +5,7 @@
'use strict';
-const propName = require('jsx-ast-utils/propName');
+import { propName } from 'jsx-ast-utils';
const includes = require('array-includes');
const toSorted = require('array.prototype.tosorted');
diff --git a/lib/rules/no-namespace.js b/lib/rules/no-namespace.js
index 64bbc8d5..b5e9c803 100644
--- a/lib/rules/no-namespace.js
+++ b/lib/rules/no-namespace.js
@@ -5,7 +5,7 @@
'use strict';
-const elementType = require('jsx-ast-utils/elementType');
+import { elementType } from 'jsx-ast-utils';
const docsUrl = require('../util/docsUrl');
const isCreateElement = require('../util/isCreateElement');
const report = require('../util/report');
diff --git a/lib/util/annotations.js b/lib/util/annotations.js
index 60aaef8c..ad8dc0bf 100644
--- a/lib/util/annotations.js
+++ b/lib/util/annotations.js
@@ -27,6 +27,6 @@ function isAnnotatedFunctionPropsDeclaration(node, context) {
return (isAnnotated && (isDestructuredProps || isProps));
}
-module.exports = {
+export {
isAnnotatedFunctionPropsDeclaration,
};
diff --git a/lib/util/ast.js b/lib/util/ast.js
index fd6019a3..3cbc293e 100644
--- a/lib/util/ast.js
+++ b/lib/util/ast.js
@@ -4,7 +4,7 @@
'use strict';
-const estraverse = require('estraverse');
+import estraverse from 'estraverse';
// const pragmaUtil = require('./pragma');
/**
@@ -428,7 +428,7 @@ function isTSTypeParameterInstantiation(node) {
return nodeType === 'TSTypeParameterInstantiation';
}
-module.exports = {
+export {
traverse,
findReturnStatement,
getFirstNodeInLine,
diff --git a/lib/util/jsx.js b/lib/util/jsx.js
index 55073bfe..efc07af1 100644
--- a/lib/util/jsx.js
+++ b/lib/util/jsx.js
@@ -4,7 +4,7 @@
'use strict';
-const elementType = require('jsx-ast-utils/elementType');
+import { elementType } from 'jsx-ast-utils';
const astUtil = require('./ast');
const isCreateElement = require('./isCreateElement');
diff --git a/package.json b/package.json
index cb736434..a97113c0 100644
--- a/package.json
+++ b/package.json
@@ -25,21 +25,13 @@
"homepage": "https://github.com/jsx-eslint/eslint-plugin-react",
"bugs": "https://github.com/jsx-eslint/eslint-plugin-react/issues",
"dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "array.prototype.tosorted": "^1.1.1",
"doctrine": "^2.1.0",
"estraverse": "^5.3.0",
"jsx-ast-utils": "^2.4.1 || ^3.0.0",
"minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "object.hasown": "^1.1.2",
- "object.values": "^1.1.6",
"prop-types": "^15.8.1",
"resolve": "^2.0.0-next.4",
- "semver": "^6.3.0",
- "string.prototype.matchall": "^4.0.8"
+ "semver": "^6.3.0"
},
"devDependencies": {
"@babel/core": "^7.21.0",
diff --git a/tsconfig.json b/tsconfig.json
deleted file mode 100644
index 39187b7f..00000000
--- a/tsconfig.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
- "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
- // "lib": ["es2015"], /* Specify library files to be included in the compilation. */
- "allowJs": true, /* Allow javascript files to be compiled. */
- "checkJs": true, /* Report errors in .js files. */
- "noEmit": true, /* Do not emit outputs. */
- "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
-
- /* Strict Type-Checking Options */
- // "strict": true, /* Enable all strict type-checking options. */
- "noImplicitAny": false, /* Raise error on expressions and declarations with an implied 'any' type. */
- // "strictNullChecks": true, /* Enable strict null checks. */
- // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
- "strictFunctionTypes": true, /* Enable strict checking of function types. */
- "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
- "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
- "alwaysStrict": false, /* Parse in strict mode and emit "use strict" for each source file. */
- "resolveJsonModule": true
- },
- "include": ["lib"],
-}

459
patch/jsx-ast-utils.patch Normal file
View File

@ -0,0 +1,459 @@
diff --git a/elementType.js b/elementType.js
index 96873ac..c7b909a 100644
--- a/elementType.js
+++ b/elementType.js
@@ -1 +1 @@
-module.exports = require('./lib').elementType; // eslint-disable-line import/no-unresolved
+export { elementType as default } from './src';
\ No newline at end of file
diff --git a/eventHandlers.js b/eventHandlers.js
index b5d7f62..208eaca 100644
--- a/eventHandlers.js
+++ b/eventHandlers.js
@@ -1 +1 @@
-module.exports = require('./lib').eventHandlers; // eslint-disable-line import/no-unresolved
+export { eventHandlers as default } from './src';
\ No newline at end of file
diff --git a/eventHandlersByType.js b/eventHandlersByType.js
index b7a0c42..e2757e9 100644
--- a/eventHandlersByType.js
+++ b/eventHandlersByType.js
@@ -1 +1 @@
-module.exports = require('./lib').eventHandlersByType; // eslint-disable-line import/no-unresolved
+export { eventHandlersByType as default } from './src';
\ No newline at end of file
diff --git a/getLiteralPropValue.js b/getLiteralPropValue.js
index efc5c8d..970fc39 100644
--- a/getLiteralPropValue.js
+++ b/getLiteralPropValue.js
@@ -1 +1 @@
-module.exports = require('./lib').getLiteralPropValue; // eslint-disable-line import/no-unresolved
+export { getLiteralPropValue as default } from './src';
\ No newline at end of file
diff --git a/getProp.js b/getProp.js
index e523c2c..4e270e9 100644
--- a/getProp.js
+++ b/getProp.js
@@ -1 +1 @@
-module.exports = require('./lib').getProp; // eslint-disable-line import/no-unresolved
+export { getProp as default } from './src';
\ No newline at end of file
diff --git a/getPropValue.js b/getPropValue.js
index 883a37c..86bf585 100644
--- a/getPropValue.js
+++ b/getPropValue.js
@@ -1 +1 @@
-module.exports = require('./lib').getPropValue; // eslint-disable-line import/no-unresolved
+export { getPropValue as default } from './src';
\ No newline at end of file
diff --git a/hasAnyProp.js b/hasAnyProp.js
index 2a88420..95b3adc 100644
--- a/hasAnyProp.js
+++ b/hasAnyProp.js
@@ -1 +1 @@
-module.exports = require('./lib').hasAnyProp; // eslint-disable-line import/no-unresolved
+export { hasAnyProp as default } from './src';
\ No newline at end of file
diff --git a/hasEveryProp.js b/hasEveryProp.js
index 338f569..e865100 100644
--- a/hasEveryProp.js
+++ b/hasEveryProp.js
@@ -1 +1 @@
-module.exports = require('./lib').hasEveryProp; // eslint-disable-line import/no-unresolved
+export { hasEveryProp } from './src';
\ No newline at end of file
diff --git a/hasProp.js b/hasProp.js
index 0f1cd04..bfed363 100644
--- a/hasProp.js
+++ b/hasProp.js
@@ -1 +1 @@
-module.exports = require('./lib').hasProp; // eslint-disable-line import/no-unresolved
+export { hasProp } from './src';
\ No newline at end of file
diff --git a/package.json b/package.json
index 738d1b3..befb66e 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "jsx-ast-utils",
"version": "3.3.4",
"description": "AST utility module for statically analyzing JSX",
- "main": "lib/index.js",
+ "main": "src/index.js",
"scripts": {
"prepack": "npmignore --auto --commentLines=autogenerated && npm run build",
"prebuild": "rimraf lib",
@@ -62,8 +62,6 @@
},
"license": "MIT",
"dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
"object.assign": "^4.1.4",
"object.values": "^1.1.6"
},
diff --git a/propName.js b/propName.js
index 361a52b..4424cfe 100644
--- a/propName.js
+++ b/propName.js
@@ -1 +1 @@
-module.exports = require('./lib').propName; // eslint-disable-line import/no-unresolved
+export { propName } from './src';
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index 6814764..565a66e 100644
--- a/src/index.js
+++ b/src/index.js
@@ -5,7 +5,7 @@ import getProp from './getProp';
import getPropValue, { getLiteralPropValue } from './getPropValue';
import propName from './propName';
-module.exports = {
+export {
hasProp,
hasAnyProp,
hasEveryProp,
diff --git a/src/values/JSXElement.js b/src/values/JSXElement.js
index e5a049f..029c23d 100644
--- a/src/values/JSXElement.js
+++ b/src/values/JSXElement.js
@@ -1,12 +1,11 @@
+import getValue from './index';
+
/**
* Extractor function for a JSXElement type value node.
*
* Returns self-closing element with correct name.
*/
export default function extractValueFromJSXElement(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
-
const Tag = value.openingElement.name.name;
if (value.openingElement.selfClosing) {
return `<${Tag} />`;
diff --git a/src/values/JSXFragment.js b/src/values/JSXFragment.js
index 379137e..90cbc54 100644
--- a/src/values/JSXFragment.js
+++ b/src/values/JSXFragment.js
@@ -1,12 +1,11 @@
+import getValue from './index';
+
/**
* Extractor function for a JSXFragment type value node.
*
* Returns self-closing element with correct name.
*/
export default function extractValueFromJSXFragment(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
-
if (value.children.length === 0) {
return '<></>';
}
diff --git a/src/values/expressions/ArrayExpression.js b/src/values/expressions/ArrayExpression.js
index f333d58..4462c9d 100644
--- a/src/values/expressions/ArrayExpression.js
+++ b/src/values/expressions/ArrayExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for an ArrayExpression type value node.
* An array expression is an expression with [] syntax.
@@ -5,8 +7,6 @@
* @returns - An array of the extracted elements.
*/
export default function extractValueFromArrayExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
return value.elements.map((element) => {
if (element === null) return undefined;
return getValue(element);
diff --git a/src/values/expressions/AssignmentExpression.js b/src/values/expressions/AssignmentExpression.js
index 7a14de5..6fce401 100644
--- a/src/values/expressions/AssignmentExpression.js
+++ b/src/values/expressions/AssignmentExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a AssignmentExpression type value node.
* An assignment expression looks like `x = y` or `x += y` in expression position.
@@ -7,7 +9,5 @@
* @returns - The extracted value converted to correct type.
*/
export default function extractValueFromAssignmentExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
return `${getValue(value.left)} ${value.operator} ${getValue(value.right)}`;
}
diff --git a/src/values/expressions/BinaryExpression.js b/src/values/expressions/BinaryExpression.js
index 5764f3f..7cf9c07 100644
--- a/src/values/expressions/BinaryExpression.js
+++ b/src/values/expressions/BinaryExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a BinaryExpression type value node.
* A binary expression has a left and right side separated by an operator
@@ -7,8 +9,6 @@
* @returns - The extracted value converted to correct type.
*/
export default function extractValueFromBinaryExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
const { operator, left, right } = value;
const leftVal = getValue(left);
const rightVal = getValue(right);
diff --git a/src/values/expressions/BindExpression.js b/src/values/expressions/BindExpression.js
index bc0bf0f..6c10fa4 100644
--- a/src/values/expressions/BindExpression.js
+++ b/src/values/expressions/BindExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a BindExpression type value node.
* A bind expression looks like `::this.foo`
@@ -8,8 +10,6 @@
* @returns - The extracted value converted to correct type.
*/
export default function extractValueFromBindExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
const callee = getValue(value.callee);
// If value.object === null, the callee must be a MemberExpression.
diff --git a/src/values/expressions/CallExpression.js b/src/values/expressions/CallExpression.js
index f225d16..ce7e43d 100644
--- a/src/values/expressions/CallExpression.js
+++ b/src/values/expressions/CallExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a CallExpression type value node.
* A call expression looks like `bar()`
@@ -8,8 +10,6 @@
* @returns - The extracted value converted to correct type.
*/
export default function extractValueFromCallExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
const args = Array.isArray(value.arguments) ? value.arguments.map((x) => getValue(x)).join(', ') : '';
return `${getValue(value.callee)}${value.optional ? '?.' : ''}(${args})`;
}
diff --git a/src/values/expressions/ChainExpression.js b/src/values/expressions/ChainExpression.js
index 1fb00a7..e8b3b75 100644
--- a/src/values/expressions/ChainExpression.js
+++ b/src/values/expressions/ChainExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a ChainExpression type value node.
* A member expression is accessing a property on an object `obj.property`.
@@ -7,7 +9,5 @@
* and maintaing `obj?.property` convention.
*/
export default function extractValueFromChainExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
return getValue(value.expression || value);
}
diff --git a/src/values/expressions/ConditionalExpression.js b/src/values/expressions/ConditionalExpression.js
index 4fd185d..a3308f6 100644
--- a/src/values/expressions/ConditionalExpression.js
+++ b/src/values/expressions/ConditionalExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a ConditionalExpression type value node.
*
@@ -5,8 +7,6 @@
* @returns - The extracted value converted to correct type.
*/
export default function extractValueFromConditionalExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
const {
test,
alternate,
diff --git a/src/values/expressions/LogicalExpression.js b/src/values/expressions/LogicalExpression.js
index 5b65a4e..b5cc573 100644
--- a/src/values/expressions/LogicalExpression.js
+++ b/src/values/expressions/LogicalExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a LogicalExpression type value node.
* A logical expression is `a && b` or `a || b`, so we evaluate both sides
@@ -7,8 +9,6 @@
* @returns - The extracted value converted to correct type.
*/
export default function extractValueFromLogicalExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
const { operator, left, right } = value;
const leftVal = getValue(left);
const rightVal = getValue(right);
diff --git a/src/values/expressions/MemberExpression.js b/src/values/expressions/MemberExpression.js
index 5d48fd5..d0cb7af 100644
--- a/src/values/expressions/MemberExpression.js
+++ b/src/values/expressions/MemberExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a MemberExpression type value node.
* A member expression is accessing a property on an object `obj.property`.
@@ -7,7 +9,5 @@
* and maintaing `obj.property` convention.
*/
export default function extractValueFromMemberExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
return `${getValue(value.object)}${value.optional ? '?.' : '.'}${getValue(value.property)}`;
}
diff --git a/src/values/expressions/ObjectExpression.js b/src/values/expressions/ObjectExpression.js
index 383b569..c1c08a8 100644
--- a/src/values/expressions/ObjectExpression.js
+++ b/src/values/expressions/ObjectExpression.js
@@ -1,4 +1,5 @@
import assign from 'object.assign';
+import getValue from './index';
/**
* Extractor function for an ObjectExpression type value node.
@@ -7,8 +8,6 @@ import assign from 'object.assign';
* @returns - a representation of the object
*/
export default function extractValueFromObjectExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
return value.properties.reduce((obj, property) => {
// Support types: SpreadProperty and ExperimentalSpreadProperty
if (/^(?:Experimental)?Spread(?:Property|Element)$/.test(property.type)) {
diff --git a/src/values/expressions/OptionalCallExpression.js b/src/values/expressions/OptionalCallExpression.js
index bcee760..3a36971 100644
--- a/src/values/expressions/OptionalCallExpression.js
+++ b/src/values/expressions/OptionalCallExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a OptionalCallExpression type value node.
* A member expression is accessing a property on an object `obj.property` and invoking it.
@@ -7,7 +9,5 @@
* and maintaing `obj.property?.()` convention.
*/
export default function extractValueFromOptionalCallExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
return `${getValue(value.callee)}?.(${value.arguments.map((x) => getValue(x)).join(', ')})`;
}
diff --git a/src/values/expressions/OptionalMemberExpression.js b/src/values/expressions/OptionalMemberExpression.js
index 8062eae..d236b04 100644
--- a/src/values/expressions/OptionalMemberExpression.js
+++ b/src/values/expressions/OptionalMemberExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a OptionalMemberExpression type value node.
* A member expression is accessing a property on an object `obj.property`.
@@ -7,7 +9,5 @@
* and maintaing `obj?.property` convention.
*/
export default function extractValueFromOptionalMemberExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
return `${getValue(value.object)}?.${getValue(value.property)}`;
}
diff --git a/src/values/expressions/SequenceExpression.js b/src/values/expressions/SequenceExpression.js
index 129d992..d644730 100644
--- a/src/values/expressions/SequenceExpression.js
+++ b/src/values/expressions/SequenceExpression.js
@@ -1,3 +1,5 @@
+import getValue from './index';
+
/**
* Extractor function for a SequenceExpression type value node.
* A Sequence expression is an object with an attribute named
@@ -7,7 +9,5 @@
* @returns - An array of the extracted elements.
*/
export default function extractValueFromSequenceExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
return value.expressions.map((element) => getValue(element));
}
diff --git a/src/values/expressions/TSNonNullExpression.js b/src/values/expressions/TSNonNullExpression.js
index 79dd1b0..7d74c8f 100644
--- a/src/values/expressions/TSNonNullExpression.js
+++ b/src/values/expressions/TSNonNullExpression.js
@@ -1,5 +1,5 @@
-const extractValueFromThisExpression = require('./ThisExpression').default;
-const extractValueFromCallExpression = require('./CallExpression').default;
+import extractValueFromThisExpression from './ThisExpression';
+import extractValueFromCallExpression from './CallExpression';
function navigate(obj, prop, value) {
if (value.computed) {
diff --git a/src/values/expressions/TypeCastExpression.js b/src/values/expressions/TypeCastExpression.js
index 1afd232..aeda1e5 100644
--- a/src/values/expressions/TypeCastExpression.js
+++ b/src/values/expressions/TypeCastExpression.js
@@ -1,3 +1,4 @@
+import getValue from './index';
/**
* Extractor function for a TypeCastExpression type value node.
* A type cast expression looks like `(this.handleClick: (event: MouseEvent) => void))`
@@ -7,7 +8,5 @@
* @returns - The extracted value converted to correct type.
*/
export default function extractValueFromTypeCastExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
return getValue(value.expression);
}
diff --git a/src/values/expressions/UnaryExpression.js b/src/values/expressions/UnaryExpression.js
index b699722..cc1fa35 100644
--- a/src/values/expressions/UnaryExpression.js
+++ b/src/values/expressions/UnaryExpression.js
@@ -1,3 +1,4 @@
+import getValue from './index';
/**
* Extractor function for a UnaryExpression type value node.
* A unary expression is an expression with a unary operator.
@@ -7,8 +8,6 @@
* @returns - The extracted value converted to correct type.
*/
export default function extractValueFromUnaryExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
const { operator, argument } = value;
switch (operator) {
diff --git a/src/values/expressions/UpdateExpression.js b/src/values/expressions/UpdateExpression.js
index 0e3898c..ca005a2 100644
--- a/src/values/expressions/UpdateExpression.js
+++ b/src/values/expressions/UpdateExpression.js
@@ -1,3 +1,4 @@
+import getValue from './index';
/**
* Extractor function for an UpdateExpression type value node.
* An update expression is an expression with an update operator.
@@ -7,8 +8,6 @@
* @returns - The extracted value converted to correct type.
*/
export default function extractValueFromUpdateExpression(value) {
- // eslint-disable-next-line global-require
- const getValue = require('.').default;
const { operator, argument, prefix } = value;
let val = getValue(argument);