eslint-plugin-import-x
Advanced tools
Comparing version
@@ -55,2 +55,69 @@ import type { TSESLint } from '@typescript-eslint/utils'; | ||
}; | ||
declare const plugin_: { | ||
meta: { | ||
name: string; | ||
version: string; | ||
}; | ||
rules: { | ||
'no-unresolved': TSESLint.RuleModule<import("./rules/no-unresolved.js").MessageId, [(import("./rules/no-unresolved.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
named: TSESLint.RuleModule<import("./rules/named.js").MessageId, [(import("./utils/module-visitor.ts").ModuleOptions | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
default: TSESLint.RuleModule<"noDefaultExport", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
namespace: TSESLint.RuleModule<import("./rules/namespace.js").MessageId, [import("./rules/namespace.js").Options], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-namespace': TSESLint.RuleModule<"noNamespace", [(import("./rules/no-namespace.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
export: TSESLint.RuleModule<import("./rules/export.js").MessageId, [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-mutable-exports': TSESLint.RuleModule<"noMutable", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
extensions: TSESLint.RuleModule<import("./rules/extensions.js").MessageId, import("./rules/extensions.js").Options, import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-restricted-paths': TSESLint.RuleModule<import("./rules/no-restricted-paths.js").MessageId, [(import("./rules/no-restricted-paths.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-internal-modules': TSESLint.RuleModule<"noAllowed", [(import("./rules/no-internal-modules.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'group-exports': TSESLint.RuleModule<import("./rules/group-exports.js").MessageId, [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-relative-packages': TSESLint.RuleModule<"noAllowed", [(import("./utils/module-visitor.ts").ModuleOptions | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-relative-parent-imports': TSESLint.RuleModule<"noAllowed", [(import("./utils/module-visitor.ts").ModuleOptions | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'consistent-type-specifier-style': TSESLint.RuleModule<"inline" | "topLevel", [(import("./rules/consistent-type-specifier-style.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-self-import': TSESLint.RuleModule<"self", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-cycle': TSESLint.RuleModule<import("./rules/no-cycle.js").MessageId, [(import("./rules/no-cycle.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-named-default': TSESLint.RuleModule<"default", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-named-as-default': TSESLint.RuleModule<"default", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-named-as-default-member': TSESLint.RuleModule<"member", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-anonymous-default-export': TSESLint.RuleModule<"assign" | "anonymous", [(import("./rules/no-anonymous-default-export.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-rename-default': TSESLint.RuleModule<"renameDefault", [(import("./rules/no-rename-default.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-unused-modules': TSESLint.RuleModule<"notFound" | "unused", import("./rules/no-unused-modules.js").Options[], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-commonjs': TSESLint.RuleModule<"import" | "export", [(import("./rules/no-commonjs.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-amd': TSESLint.RuleModule<"amd", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-duplicates': TSESLint.RuleModule<"duplicate", [(import("./rules/no-duplicates.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
first: TSESLint.RuleModule<import("./rules/first.js").MessageId, [(import("./rules/first.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'max-dependencies': TSESLint.RuleModule<"max", [(import("./rules/max-dependencies.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-extraneous-dependencies': TSESLint.RuleModule<import("./rules/no-extraneous-dependencies.js").MessageId, [(import("./rules/no-extraneous-dependencies.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-absolute-path': TSESLint.RuleModule<"absolute", [(import("./utils/module-visitor.ts").ModuleOptions | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-nodejs-modules': TSESLint.RuleModule<"builtin", [(import("./rules/no-nodejs-modules.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-webpack-loader-syntax': TSESLint.RuleModule<"unexpected", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
order: TSESLint.RuleModule<"error" | "order" | "noLineWithinGroup" | "noLineBetweenGroups" | "oneLineBetweenGroups" | "oneLineBetweenTheMultiLineImport" | "oneLineBetweenThisMultiLineImport" | "noLineBetweenSingleLineImport", [(import("./rules/order.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'newline-after-import': TSESLint.RuleModule<"newline", [(import("./rules/newline-after-import.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'prefer-default-export': TSESLint.RuleModule<"any" | "single", [(import("./rules/prefer-default-export.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-default-export': TSESLint.RuleModule<"preferNamed" | "noAliasDefault", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-named-export': TSESLint.RuleModule<"noAllowed", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-dynamic-require': TSESLint.RuleModule<import("./rules/no-dynamic-require.js").MessageId, [(import("./rules/no-dynamic-require.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
unambiguous: TSESLint.RuleModule<"module", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-unassigned-import': TSESLint.RuleModule<"unassigned", [(import("./rules/no-unassigned-import.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-useless-path-segments': TSESLint.RuleModule<"useless", [(import("./rules/no-useless-path-segments.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'dynamic-import-chunkname': TSESLint.RuleModule<import("./rules/dynamic-import-chunkname.js").MessageId, [(import("./rules/dynamic-import-chunkname.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-import-module-exports': TSESLint.RuleModule<"notAllowed", [(import("./rules/no-import-module-exports.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-empty-named-blocks': TSESLint.RuleModule<"emptyNamed" | "unused" | "emptyImport", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'exports-last': TSESLint.RuleModule<"end", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-deprecated': TSESLint.RuleModule<"deprecated" | "deprecatedDesc", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'imports-first': TSESLint.RuleModule<import("./rules/first.js").MessageId, [(import("./rules/first.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
}; | ||
cjsRequire: import("./types.js").CjsRequire; | ||
importXResolverCompat: typeof importXResolverCompat; | ||
createNodeResolver: typeof createNodeResolver; | ||
}; | ||
declare const flatConfigs: { | ||
recommended: PluginFlatConfig; | ||
errors: PluginFlatConfig; | ||
warnings: PluginFlatConfig; | ||
'stage-0': PluginFlatConfig; | ||
react: PluginFlatConfig; | ||
'react-native': PluginFlatConfig; | ||
electron: PluginFlatConfig; | ||
typescript: PluginFlatConfig; | ||
}; | ||
declare const configs: { | ||
@@ -133,153 +200,17 @@ recommended: { | ||
}; | ||
'flat/recommended': PluginFlatConfig; | ||
'flat/errors': PluginFlatConfig; | ||
'flat/warnings': PluginFlatConfig; | ||
'flat/stage-0': PluginFlatConfig; | ||
'flat/react': PluginFlatConfig; | ||
'flat/react-native': PluginFlatConfig; | ||
'flat/electron': PluginFlatConfig; | ||
'flat/typescript': PluginFlatConfig; | ||
}; | ||
declare const plugin_: { | ||
meta: { | ||
name: string; | ||
version: string; | ||
}; | ||
configs: { | ||
recommended: { | ||
plugins: ["import-x"]; | ||
rules: { | ||
'import-x/no-unresolved': "error"; | ||
'import-x/named': "error"; | ||
'import-x/namespace': "error"; | ||
'import-x/default': "error"; | ||
'import-x/export': "error"; | ||
'import-x/no-named-as-default': "warn"; | ||
'import-x/no-named-as-default-member': "warn"; | ||
'import-x/no-duplicates': "warn"; | ||
}; | ||
parserOptions: { | ||
sourceType: "module"; | ||
ecmaVersion: 2018; | ||
}; | ||
}; | ||
errors: { | ||
plugins: ["import-x"]; | ||
rules: { | ||
'import-x/no-unresolved': 2; | ||
'import-x/named': 2; | ||
'import-x/namespace': 2; | ||
'import-x/default': 2; | ||
'import-x/export': 2; | ||
}; | ||
}; | ||
warnings: { | ||
plugins: ["import-x"]; | ||
rules: { | ||
'import-x/no-named-as-default': 1; | ||
'import-x/no-named-as-default-member': 1; | ||
'import-x/no-rename-default': 1; | ||
'import-x/no-duplicates': 1; | ||
}; | ||
}; | ||
'stage-0': PluginConfig; | ||
react: { | ||
settings: { | ||
'import-x/extensions': (".js" | ".jsx")[]; | ||
}; | ||
parserOptions: { | ||
ecmaFeatures: { | ||
jsx: true; | ||
}; | ||
}; | ||
}; | ||
'react-native': { | ||
settings: { | ||
'import-x/resolver': { | ||
node: { | ||
extensions: string[]; | ||
}; | ||
}; | ||
}; | ||
}; | ||
electron: { | ||
settings: { | ||
'import-x/core-modules': string[]; | ||
}; | ||
}; | ||
typescript: { | ||
settings: { | ||
'import-x/extensions': readonly [".ts", ".tsx", ".cts", ".mts", ".js", ".jsx", ".cjs", ".mjs"]; | ||
'import-x/external-module-folders': string[]; | ||
'import-x/parsers': { | ||
'@typescript-eslint/parser': (".ts" | ".tsx" | ".cts" | ".mts")[]; | ||
}; | ||
'import-x/resolver': { | ||
typescript: true; | ||
}; | ||
}; | ||
rules: { | ||
'import-x/named': "off"; | ||
}; | ||
}; | ||
}; | ||
rules: { | ||
'no-unresolved': TSESLint.RuleModule<import("./rules/no-unresolved.js").MessageId, [(import("./rules/no-unresolved.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
named: TSESLint.RuleModule<import("./rules/named.js").MessageId, [(import("./utils/module-visitor.ts").ModuleOptions | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
default: TSESLint.RuleModule<"noDefaultExport", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
namespace: TSESLint.RuleModule<import("./rules/namespace.js").MessageId, [import("./rules/namespace.js").Options], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-namespace': TSESLint.RuleModule<"noNamespace", [(import("./rules/no-namespace.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
export: TSESLint.RuleModule<import("./rules/export.js").MessageId, [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-mutable-exports': TSESLint.RuleModule<"noMutable", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
extensions: TSESLint.RuleModule<import("./rules/extensions.js").MessageId, import("./rules/extensions.js").Options, import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-restricted-paths': TSESLint.RuleModule<import("./rules/no-restricted-paths.js").MessageId, [(import("./rules/no-restricted-paths.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-internal-modules': TSESLint.RuleModule<"noAllowed", [(import("./rules/no-internal-modules.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'group-exports': TSESLint.RuleModule<import("./rules/group-exports.js").MessageId, [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-relative-packages': TSESLint.RuleModule<"noAllowed", [(import("./utils/module-visitor.ts").ModuleOptions | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-relative-parent-imports': TSESLint.RuleModule<"noAllowed", [(import("./utils/module-visitor.ts").ModuleOptions | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'consistent-type-specifier-style': TSESLint.RuleModule<"inline" | "topLevel", [(import("./rules/consistent-type-specifier-style.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-self-import': TSESLint.RuleModule<"self", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-cycle': TSESLint.RuleModule<import("./rules/no-cycle.js").MessageId, [(import("./rules/no-cycle.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-named-default': TSESLint.RuleModule<"default", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-named-as-default': TSESLint.RuleModule<"default", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-named-as-default-member': TSESLint.RuleModule<"member", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-anonymous-default-export': TSESLint.RuleModule<"assign" | "anonymous", [(import("./rules/no-anonymous-default-export.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-rename-default': TSESLint.RuleModule<"renameDefault", [(import("./rules/no-rename-default.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-unused-modules': TSESLint.RuleModule<"notFound" | "unused", import("./rules/no-unused-modules.js").Options[], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-commonjs': TSESLint.RuleModule<"import" | "export", [(import("./rules/no-commonjs.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-amd': TSESLint.RuleModule<"amd", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-duplicates': TSESLint.RuleModule<"duplicate", [(import("./rules/no-duplicates.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
first: TSESLint.RuleModule<import("./rules/first.js").MessageId, [(import("./rules/first.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'max-dependencies': TSESLint.RuleModule<"max", [(import("./rules/max-dependencies.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-extraneous-dependencies': TSESLint.RuleModule<import("./rules/no-extraneous-dependencies.js").MessageId, [(import("./rules/no-extraneous-dependencies.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-absolute-path': TSESLint.RuleModule<"absolute", [(import("./utils/module-visitor.ts").ModuleOptions | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-nodejs-modules': TSESLint.RuleModule<"builtin", [(import("./rules/no-nodejs-modules.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-webpack-loader-syntax': TSESLint.RuleModule<"unexpected", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
order: TSESLint.RuleModule<"error" | "order" | "noLineWithinGroup" | "noLineBetweenGroups" | "oneLineBetweenGroups" | "oneLineBetweenTheMultiLineImport" | "oneLineBetweenThisMultiLineImport" | "noLineBetweenSingleLineImport", [(import("./rules/order.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'newline-after-import': TSESLint.RuleModule<"newline", [(import("./rules/newline-after-import.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'prefer-default-export': TSESLint.RuleModule<"any" | "single", [(import("./rules/prefer-default-export.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-default-export': TSESLint.RuleModule<"preferNamed" | "noAliasDefault", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-named-export': TSESLint.RuleModule<"noAllowed", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-dynamic-require': TSESLint.RuleModule<import("./rules/no-dynamic-require.js").MessageId, [(import("./rules/no-dynamic-require.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
unambiguous: TSESLint.RuleModule<"module", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-unassigned-import': TSESLint.RuleModule<"unassigned", [(import("./rules/no-unassigned-import.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-useless-path-segments': TSESLint.RuleModule<"useless", [(import("./rules/no-useless-path-segments.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'dynamic-import-chunkname': TSESLint.RuleModule<import("./rules/dynamic-import-chunkname.js").MessageId, [(import("./rules/dynamic-import-chunkname.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-import-module-exports': TSESLint.RuleModule<"notAllowed", [(import("./rules/no-import-module-exports.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-empty-named-blocks': TSESLint.RuleModule<"emptyNamed" | "unused" | "emptyImport", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'exports-last': TSESLint.RuleModule<"end", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'no-deprecated': TSESLint.RuleModule<"deprecated" | "deprecatedDesc", [], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
'imports-first': TSESLint.RuleModule<import("./rules/first.js").MessageId, [(import("./rules/first.js").Options | undefined)?], import("./utils/create-rule.ts").ImportXPluginDocs, TSESLint.RuleListener>; | ||
}; | ||
cjsRequire: import("./types.js").CjsRequire; | ||
importXResolverCompat: typeof importXResolverCompat; | ||
createNodeResolver: typeof createNodeResolver; | ||
}; | ||
declare const plugin: typeof plugin_ & { | ||
flatConfigs: typeof flatConfigs; | ||
configs: typeof configs; | ||
}; | ||
declare const flatConfigs: { | ||
recommended: PluginFlatConfig; | ||
errors: PluginFlatConfig; | ||
warnings: PluginFlatConfig; | ||
'stage-0': PluginFlatConfig; | ||
react: PluginFlatConfig; | ||
'react-native': PluginFlatConfig; | ||
electron: PluginFlatConfig; | ||
typescript: PluginFlatConfig; | ||
}; | ||
export default plugin; | ||
export { meta, configs, flatConfigs, rules, cjsRequire, importXResolverCompat, createNodeResolver, plugin as importX, }; | ||
export type * from './types.js'; |
@@ -115,15 +115,4 @@ import electron from './config/electron.js'; | ||
}; | ||
const configs = { | ||
recommended, | ||
errors, | ||
warnings, | ||
'stage-0': stage0, | ||
react, | ||
'react-native': reactNative, | ||
electron, | ||
typescript, | ||
}; | ||
const plugin_ = { | ||
meta, | ||
configs, | ||
rules, | ||
@@ -134,7 +123,6 @@ cjsRequire, | ||
}; | ||
const plugin = plugin_; | ||
const createFlatConfig = (baseConfig, configName) => ({ | ||
...baseConfig, | ||
name: `import-x/${configName}`, | ||
plugins: { 'import-x': plugin }, | ||
plugins: { 'import-x': plugin_ }, | ||
}); | ||
@@ -151,5 +139,25 @@ const flatConfigs = { | ||
}; | ||
const configs = { | ||
recommended, | ||
errors, | ||
warnings, | ||
'stage-0': stage0, | ||
react, | ||
'react-native': reactNative, | ||
electron, | ||
typescript, | ||
'flat/recommended': flatConfigs.recommended, | ||
'flat/errors': flatConfigs.errors, | ||
'flat/warnings': flatConfigs.warnings, | ||
'flat/stage-0': flatConfigs['stage-0'], | ||
'flat/react': flatConfigs.react, | ||
'flat/react-native': flatConfigs['react-native'], | ||
'flat/electron': flatConfigs.electron, | ||
'flat/typescript': flatConfigs.typescript, | ||
}; | ||
const plugin = plugin_; | ||
plugin.flatConfigs = flatConfigs; | ||
plugin.configs = configs; | ||
export default plugin; | ||
export { meta, configs, flatConfigs, rules, cjsRequire, importXResolverCompat, createNodeResolver, plugin as importX, }; | ||
//# sourceMappingURL=index.js.map |
@@ -11,4 +11,7 @@ import path from 'node:path'; | ||
: path.resolve(filename, '..', source); | ||
return globs.some(glob => minimatch(filePath, glob) || | ||
minimatch(filePath, path.resolve(glob), { windowsPathsNoEscape: true })); | ||
return globs.some(glob => minimatch(filePath, glob, { nocomment: true }) || | ||
minimatch(filePath, path.resolve(glob), { | ||
nocomment: true, | ||
windowsPathsNoEscape: true, | ||
})); | ||
} | ||
@@ -15,0 +18,0 @@ export default createRule({ |
export { pluginName } from 'eslint-import-context'; | ||
export type { PluginName, LegacyResolverName, LegacyResolverResolveImport, LegacyResolverResolve, LegacyResolver, LegacyResolverObject, LegacyResolverRecord, LegacyImportResolver, } from 'eslint-import-context'; | ||
export * from './arraify.js'; | ||
export * from './create-rule.js'; | ||
@@ -4,0 +5,0 @@ export * from './declared-scope.js'; |
export { pluginName } from 'eslint-import-context'; | ||
export * from './arraify.js'; | ||
export * from './create-rule.js'; | ||
@@ -3,0 +4,0 @@ export * from './declared-scope.js'; |
import type { LegacyImportResolver, LegacyResolver, LegacyResolverObject, ResolvedResult } from 'eslint-import-context'; | ||
export declare function resolveWithLegacyResolver(resolver: LegacyResolver, config: unknown, modulePath: string, sourceFile: string): ResolvedResult; | ||
export declare function normalizeConfigResolvers(resolvers: LegacyImportResolver, sourceFile: string): Required<LegacyResolverObject>[]; | ||
export declare const LEGACY_NODE_RESOLVERS: Set<string>; |
@@ -50,2 +50,3 @@ import { createRequire } from 'node:module'; | ||
for (const [name, enableOrOptions] of Object.entries(record)) { | ||
const resolver = requireResolver(name, sourceFile); | ||
if (typeof enableOrOptions === 'boolean') { | ||
@@ -56,3 +57,3 @@ map.set(name, { | ||
options: undefined, | ||
resolver: requireResolver(name, sourceFile), | ||
resolver, | ||
}); | ||
@@ -65,3 +66,3 @@ } | ||
options: enableOrOptions, | ||
resolver: requireResolver(name, sourceFile), | ||
resolver, | ||
}); | ||
@@ -80,2 +81,11 @@ } | ||
} | ||
export const LEGACY_NODE_RESOLVERS = new Set([ | ||
'node', | ||
'eslint-import-resolver-node', | ||
]); | ||
try { | ||
LEGACY_NODE_RESOLVERS.add(cjsRequire.resolve('eslint-import-resolver-node')); | ||
} | ||
catch { | ||
} | ||
function requireResolver(name, sourceFile) { | ||
@@ -86,2 +96,5 @@ const resolver = tryRequire(`eslint-import-resolver-${name}`, sourceFile) || | ||
if (!resolver) { | ||
if (LEGACY_NODE_RESOLVERS.has(name)) { | ||
return undefined; | ||
} | ||
const err = new Error(`unable to load resolver "${name}".`); | ||
@@ -88,0 +101,0 @@ err.name = IMPORT_RESOLVE_ERROR_NAME; |
@@ -6,4 +6,7 @@ import fs from 'node:fs'; | ||
import { stableHash } from 'stable-hash'; | ||
import { createNodeResolver } from '../node-resolver.js'; | ||
import { cjsRequire } from '../require.js'; | ||
import { arraify } from './arraify.js'; | ||
import { makeContextCacheKey } from './export-map.js'; | ||
import { normalizeConfigResolvers, resolveWithLegacyResolver, } from './legacy-resolver-settings.js'; | ||
import { LEGACY_NODE_RESOLVERS, normalizeConfigResolvers, resolveWithLegacyResolver, } from './legacy-resolver-settings.js'; | ||
import { ModuleCache } from './module-cache.js'; | ||
@@ -71,2 +74,56 @@ const importMetaUrl = import.meta.url; | ||
} | ||
function legacyNodeResolve(resolverOptions, context, modulePath, sourceFile) { | ||
const { extensions, includeCoreModules, moduleDirectory, paths, preserveSymlinks, package: packageJson, packageFilter, pathFilter, packageIterator, ...rest } = resolverOptions; | ||
const normalizedExtensions = arraify(extensions); | ||
const modules = arraify(moduleDirectory); | ||
const symlinks = preserveSymlinks === false; | ||
const resolver = createNodeResolver({ | ||
extensions: normalizedExtensions, | ||
builtinModules: includeCoreModules !== false, | ||
modules, | ||
symlinks, | ||
...rest, | ||
}); | ||
const resolved = setRuleContext(context, () => resolver.resolve(modulePath, sourceFile)); | ||
if (resolved.found) { | ||
return resolved; | ||
} | ||
const normalizedPaths = arraify(paths); | ||
if (normalizedPaths?.length) { | ||
const paths = modules?.length | ||
? normalizedPaths.filter(p => !modules.includes(p)) | ||
: normalizedPaths; | ||
if (paths.length > 0) { | ||
const resolver = createNodeResolver({ | ||
extensions: normalizedExtensions, | ||
builtinModules: includeCoreModules !== false, | ||
modules: paths, | ||
symlinks, | ||
...rest, | ||
}); | ||
const resolved = setRuleContext(context, () => resolver.resolve(modulePath, sourceFile)); | ||
if (resolved.found) { | ||
return resolved; | ||
} | ||
} | ||
} | ||
if ([packageJson, packageFilter, pathFilter, packageIterator].some(it => it != null)) { | ||
let legacyNodeResolver; | ||
try { | ||
legacyNodeResolver = cjsRequire('eslint-import-resolver-node'); | ||
} | ||
catch { | ||
throw new Error([ | ||
"You're using legacy resolver options which are not supported by the new resolver.", | ||
'Please either:', | ||
'1. Install `eslint-import-resolver-node` as a fallback, or', | ||
'2. Remove legacy options: `package`, `packageFilter`, `pathFilter`, `packageIterator`', | ||
].join('\n')); | ||
} | ||
const resolved = resolveWithLegacyResolver(legacyNodeResolver, resolverOptions, modulePath, sourceFile); | ||
if (resolved.found) { | ||
return resolved; | ||
} | ||
} | ||
} | ||
function fullResolve(modulePath, sourceFile, settings, context) { | ||
@@ -87,7 +144,7 @@ const coreSet = new Set(settings['import-x/core-modules']); | ||
const cacheKey = sourceDir + | ||
',' + | ||
'\0' + | ||
childContextHashKey + | ||
',' + | ||
'\0' + | ||
memoizedHash + | ||
',' + | ||
'\0' + | ||
modulePath; | ||
@@ -99,4 +156,3 @@ const cacheSettings = ModuleCache.getSettings(settings); | ||
} | ||
if (Object.hasOwn(settings, 'import-x/resolver-next') && | ||
settings['import-x/resolver-next']) { | ||
if (settings['import-x/resolver-next']) { | ||
let configResolvers = settings['import-x/resolver-next']; | ||
@@ -129,6 +185,17 @@ if (!Array.isArray(configResolvers)) { | ||
}; | ||
for (const { enable, options, resolver } of normalizeConfigResolvers(configResolvers, sourceFile)) { | ||
for (const { enable, name, options, resolver } of normalizeConfigResolvers(configResolvers, sourceFile)) { | ||
if (!enable) { | ||
continue; | ||
} | ||
if (LEGACY_NODE_RESOLVERS.has(name)) { | ||
const resolverOptions = (options || {}); | ||
const resolved = legacyNodeResolve(resolverOptions, context, modulePath, sourceFile); | ||
if (resolved?.found) { | ||
fileExistsCache.set(cacheKey, resolved.path); | ||
return resolved; | ||
} | ||
if (!resolver) { | ||
continue; | ||
} | ||
} | ||
const resolved = setRuleContext(context, () => resolveWithLegacyResolver(resolver, options, modulePath, sourceFile)); | ||
@@ -135,0 +202,0 @@ if (!resolved?.found) { |
{ | ||
"name": "eslint-plugin-import-x", | ||
"version": "4.13.3", | ||
"version": "4.14.0", | ||
"type": "module", | ||
@@ -49,4 +49,10 @@ "description": "Import with sanity.", | ||
"peerDependencies": { | ||
"eslint": "^8.57.0 || ^9.0.0" | ||
"eslint": "^8.57.0 || ^9.0.0", | ||
"eslint-import-resolver-node": "*" | ||
}, | ||
"peerDependenciesMeta": { | ||
"eslint-import-resolver-node": { | ||
"optional": true | ||
} | ||
}, | ||
"dependencies": { | ||
@@ -56,4 +62,3 @@ "@typescript-eslint/utils": "^8.32.1", | ||
"debug": "^4.4.1", | ||
"eslint-import-context": "^0.1.5", | ||
"eslint-import-resolver-node": "^0.3.9", | ||
"eslint-import-context": "^0.1.6", | ||
"is-glob": "^4.0.3", | ||
@@ -64,4 +69,4 @@ "minimatch": "^9.0.3 || ^10.0.1", | ||
"tslib": "^2.8.1", | ||
"unrs-resolver": "^1.7.2" | ||
"unrs-resolver": "^1.7.5" | ||
} | ||
} |
118
README.md
@@ -32,2 +32,3 @@ # eslint-plugin-import-x | ||
- [As a standalone ESLint plugin](#as-a-standalone-eslint-plugin) | ||
- [Using `defineConfig`](#using-defineconfig) | ||
- [Configuration (legacy: `.eslintrc*`)](#configuration-legacy-eslintrc) | ||
@@ -166,2 +167,21 @@ - [TypeScript](#typescript) | ||
### Using `defineConfig` | ||
```js | ||
import { importX } from 'eslint-plugin-import-x' | ||
import { defineConfig } from 'eslint/config' | ||
export default defineConfig([ | ||
{ | ||
plugins: { | ||
'import-x': importX, | ||
}, | ||
extends: ['import-x/flat/recommended'], | ||
rules: { | ||
'import-x/no-dynamic-require': 'warn', | ||
}, | ||
}, | ||
]) | ||
``` | ||
## Configuration (legacy: `.eslintrc*`) | ||
@@ -226,2 +246,6 @@ | ||
❗ Set in the `errors` configuration.\ | ||
❗ Set in the `flat/errors` configuration.\ | ||
☑️ Set in the `flat/recommended` configuration.\ | ||
⌨️ Set in the `flat/typescript` configuration.\ | ||
🚸 Set in the `flat/warnings` configuration.\ | ||
☑️ Set in the `recommended` configuration.\ | ||
@@ -236,13 +260,13 @@ ⌨️ Set in the `typescript` configuration.\ | ||
| Name | Description | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ | | ||
| :--------------------------------------------------------------------- | :------------------------------------------------------------------------------------ | :---- | :---- | :-- | :-- | :-- | :-- | | ||
| [export](docs/rules/export.md) | Forbid any invalid exports, i.e. re-export of the same name. | ❗ ☑️ | | | | | | | ||
| [no-deprecated](docs/rules/no-deprecated.md) | Forbid imported names marked with `@deprecated` documentation tag. | | | | | | | | ||
| [no-empty-named-blocks](docs/rules/no-empty-named-blocks.md) | Forbid empty named import blocks. | | | | 🔧 | 💡 | | | ||
| [no-extraneous-dependencies](docs/rules/no-extraneous-dependencies.md) | Forbid the use of extraneous packages. | | | | | | | | ||
| [no-mutable-exports](docs/rules/no-mutable-exports.md) | Forbid the use of mutable exports with `var` or `let`. | | | | | | | | ||
| [no-named-as-default](docs/rules/no-named-as-default.md) | Forbid use of exported name as identifier of default export. | | ☑️ 🚸 | | | | | | ||
| [no-named-as-default-member](docs/rules/no-named-as-default-member.md) | Forbid use of exported name as property of default export. | | ☑️ 🚸 | | | | | | ||
| [no-rename-default](docs/rules/no-rename-default.md) | Forbid importing a default export by a different name. | | 🚸 | | | | | | ||
| [no-unused-modules](docs/rules/no-unused-modules.md) | Forbid modules without exports, or exports without matching import in another module. | | | | | | | | ||
| Name | Description | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ | | ||
| :--------------------------------------------------------------------- | :------------------------------------------------------------------------------------ | :---------- | :---------- | :-- | :-- | :-- | :-- | | ||
| [export](docs/rules/export.md) | Forbid any invalid exports, i.e. re-export of the same name. | ❗ ❗ ☑️ ☑️ | | | | | | | ||
| [no-deprecated](docs/rules/no-deprecated.md) | Forbid imported names marked with `@deprecated` documentation tag. | | | | | | | | ||
| [no-empty-named-blocks](docs/rules/no-empty-named-blocks.md) | Forbid empty named import blocks. | | | | 🔧 | 💡 | | | ||
| [no-extraneous-dependencies](docs/rules/no-extraneous-dependencies.md) | Forbid the use of extraneous packages. | | | | | | | | ||
| [no-mutable-exports](docs/rules/no-mutable-exports.md) | Forbid the use of mutable exports with `var` or `let`. | | | | | | | | ||
| [no-named-as-default](docs/rules/no-named-as-default.md) | Forbid use of exported name as identifier of default export. | | ☑️ 🚸 ☑️ 🚸 | | | | | | ||
| [no-named-as-default-member](docs/rules/no-named-as-default-member.md) | Forbid use of exported name as property of default export. | | ☑️ 🚸 ☑️ 🚸 | | | | | | ||
| [no-rename-default](docs/rules/no-rename-default.md) | Forbid importing a default export by a different name. | | 🚸 🚸 | | | | | | ||
| [no-unused-modules](docs/rules/no-unused-modules.md) | Forbid modules without exports, or exports without matching import in another module. | | | | | | | | ||
@@ -261,41 +285,41 @@ ### Module systems | ||
| Name | Description | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ | | ||
| :--------------------------------------------------------------------- | :----------------------------------------------------------------------------------- | :---- | :-- | :-- | :-- | :-- | :-- | | ||
| [default](docs/rules/default.md) | Ensure a default export is present, given a default import. | ❗ ☑️ | | | | | | | ||
| [named](docs/rules/named.md) | Ensure named imports correspond to a named export in the remote file. | ❗ ☑️ | | ⌨️ | | | | | ||
| [namespace](docs/rules/namespace.md) | Ensure imported namespaces contain dereferenced properties as they are dereferenced. | ❗ ☑️ | | | | | | | ||
| [no-absolute-path](docs/rules/no-absolute-path.md) | Forbid import of modules using absolute paths. | | | | 🔧 | | | | ||
| [no-cycle](docs/rules/no-cycle.md) | Forbid a module from importing a module with a dependency path back to itself. | | | | | | | | ||
| [no-dynamic-require](docs/rules/no-dynamic-require.md) | Forbid `require()` calls with expressions. | | | | | | | | ||
| [no-internal-modules](docs/rules/no-internal-modules.md) | Forbid importing the submodules of other modules. | | | | | | | | ||
| [no-relative-packages](docs/rules/no-relative-packages.md) | Forbid importing packages through relative paths. | | | | 🔧 | | | | ||
| [no-relative-parent-imports](docs/rules/no-relative-parent-imports.md) | Forbid importing modules from parent directories. | | | | | | | | ||
| [no-restricted-paths](docs/rules/no-restricted-paths.md) | Enforce which files can be imported in a given folder. | | | | | | | | ||
| [no-self-import](docs/rules/no-self-import.md) | Forbid a module from importing itself. | | | | | | | | ||
| [no-unresolved](docs/rules/no-unresolved.md) | Ensure imports point to a file/module that can be resolved. | ❗ ☑️ | | | | | | | ||
| [no-useless-path-segments](docs/rules/no-useless-path-segments.md) | Forbid unnecessary path segments in import and require statements. | | | | 🔧 | | | | ||
| [no-webpack-loader-syntax](docs/rules/no-webpack-loader-syntax.md) | Forbid webpack loader syntax in imports. | | | | | | | | ||
| Name | Description | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ | | ||
| :--------------------------------------------------------------------- | :----------------------------------------------------------------------------------- | :---------- | :-- | :---- | :-- | :-- | :-- | | ||
| [default](docs/rules/default.md) | Ensure a default export is present, given a default import. | ❗ ❗ ☑️ ☑️ | | | | | | | ||
| [named](docs/rules/named.md) | Ensure named imports correspond to a named export in the remote file. | ❗ ❗ ☑️ ☑️ | | ⌨️ ⌨️ | | | | | ||
| [namespace](docs/rules/namespace.md) | Ensure imported namespaces contain dereferenced properties as they are dereferenced. | ❗ ❗ ☑️ ☑️ | | | | | | | ||
| [no-absolute-path](docs/rules/no-absolute-path.md) | Forbid import of modules using absolute paths. | | | | 🔧 | | | | ||
| [no-cycle](docs/rules/no-cycle.md) | Forbid a module from importing a module with a dependency path back to itself. | | | | | | | | ||
| [no-dynamic-require](docs/rules/no-dynamic-require.md) | Forbid `require()` calls with expressions. | | | | | | | | ||
| [no-internal-modules](docs/rules/no-internal-modules.md) | Forbid importing the submodules of other modules. | | | | | | | | ||
| [no-relative-packages](docs/rules/no-relative-packages.md) | Forbid importing packages through relative paths. | | | | 🔧 | | | | ||
| [no-relative-parent-imports](docs/rules/no-relative-parent-imports.md) | Forbid importing modules from parent directories. | | | | | | | | ||
| [no-restricted-paths](docs/rules/no-restricted-paths.md) | Enforce which files can be imported in a given folder. | | | | | | | | ||
| [no-self-import](docs/rules/no-self-import.md) | Forbid a module from importing itself. | | | | | | | | ||
| [no-unresolved](docs/rules/no-unresolved.md) | Ensure imports point to a file/module that can be resolved. | ❗ ❗ ☑️ ☑️ | | | | | | | ||
| [no-useless-path-segments](docs/rules/no-useless-path-segments.md) | Forbid unnecessary path segments in import and require statements. | | | | 🔧 | | | | ||
| [no-webpack-loader-syntax](docs/rules/no-webpack-loader-syntax.md) | Forbid webpack loader syntax in imports. | | | | | | | | ||
### Style guide | ||
| Name | Description | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ | | ||
| :------------------------------------------------------------------------------- | :-------------------------------------------------------------------------- | :-- | :---- | :-- | :-- | :-- | :-- | | ||
| [consistent-type-specifier-style](docs/rules/consistent-type-specifier-style.md) | Enforce or ban the use of inline type-only markers for named imports. | | | | 🔧 | | | | ||
| [dynamic-import-chunkname](docs/rules/dynamic-import-chunkname.md) | Enforce a leading comment with the webpackChunkName for dynamic imports. | | | | | 💡 | | | ||
| [exports-last](docs/rules/exports-last.md) | Ensure all exports appear after other statements. | | | | | | | | ||
| [extensions](docs/rules/extensions.md) | Ensure consistent use of file extension within the import path. | | | | 🔧 | 💡 | | | ||
| [first](docs/rules/first.md) | Ensure all imports appear before other statements. | | | | 🔧 | | | | ||
| [group-exports](docs/rules/group-exports.md) | Prefer named exports to be grouped together in a single export declaration. | | | | | | | | ||
| [imports-first](docs/rules/imports-first.md) | Replaced by `import-x/first`. | | | | 🔧 | | ❌ | | ||
| [max-dependencies](docs/rules/max-dependencies.md) | Enforce the maximum number of dependencies a module can have. | | | | | | | | ||
| [newline-after-import](docs/rules/newline-after-import.md) | Enforce a newline after import statements. | | | | 🔧 | | | | ||
| [no-anonymous-default-export](docs/rules/no-anonymous-default-export.md) | Forbid anonymous values as default exports. | | | | | | | | ||
| [no-default-export](docs/rules/no-default-export.md) | Forbid default exports. | | | | | | | | ||
| [no-duplicates](docs/rules/no-duplicates.md) | Forbid repeated import of the same module in multiple places. | | ☑️ 🚸 | | 🔧 | | | | ||
| [no-named-default](docs/rules/no-named-default.md) | Forbid named default exports. | | | | | | | | ||
| [no-named-export](docs/rules/no-named-export.md) | Forbid named exports. | | | | | | | | ||
| [no-namespace](docs/rules/no-namespace.md) | Forbid namespace (a.k.a. "wildcard" `*`) imports. | | | | 🔧 | | | | ||
| [no-unassigned-import](docs/rules/no-unassigned-import.md) | Forbid unassigned imports. | | | | | | | | ||
| [order](docs/rules/order.md) | Enforce a convention in module import order. | | | | 🔧 | | | | ||
| [prefer-default-export](docs/rules/prefer-default-export.md) | Prefer a default export if module exports a single name or multiple names. | | | | | | | | ||
| Name | Description | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ | | ||
| :------------------------------------------------------------------------------- | :-------------------------------------------------------------------------- | :-- | :---------- | :-- | :-- | :-- | :-- | | ||
| [consistent-type-specifier-style](docs/rules/consistent-type-specifier-style.md) | Enforce or ban the use of inline type-only markers for named imports. | | | | 🔧 | | | | ||
| [dynamic-import-chunkname](docs/rules/dynamic-import-chunkname.md) | Enforce a leading comment with the webpackChunkName for dynamic imports. | | | | | 💡 | | | ||
| [exports-last](docs/rules/exports-last.md) | Ensure all exports appear after other statements. | | | | | | | | ||
| [extensions](docs/rules/extensions.md) | Ensure consistent use of file extension within the import path. | | | | 🔧 | 💡 | | | ||
| [first](docs/rules/first.md) | Ensure all imports appear before other statements. | | | | 🔧 | | | | ||
| [group-exports](docs/rules/group-exports.md) | Prefer named exports to be grouped together in a single export declaration. | | | | | | | | ||
| [imports-first](docs/rules/imports-first.md) | Replaced by `import-x/first`. | | | | 🔧 | | ❌ | | ||
| [max-dependencies](docs/rules/max-dependencies.md) | Enforce the maximum number of dependencies a module can have. | | | | | | | | ||
| [newline-after-import](docs/rules/newline-after-import.md) | Enforce a newline after import statements. | | | | 🔧 | | | | ||
| [no-anonymous-default-export](docs/rules/no-anonymous-default-export.md) | Forbid anonymous values as default exports. | | | | | | | | ||
| [no-default-export](docs/rules/no-default-export.md) | Forbid default exports. | | | | | | | | ||
| [no-duplicates](docs/rules/no-duplicates.md) | Forbid repeated import of the same module in multiple places. | | ☑️ 🚸 ☑️ 🚸 | | 🔧 | | | | ||
| [no-named-default](docs/rules/no-named-default.md) | Forbid named default exports. | | | | | | | | ||
| [no-named-export](docs/rules/no-named-export.md) | Forbid named exports. | | | | | | | | ||
| [no-namespace](docs/rules/no-namespace.md) | Forbid namespace (a.k.a. "wildcard" `*`) imports. | | | | 🔧 | | | | ||
| [no-unassigned-import](docs/rules/no-unassigned-import.md) | Forbid unassigned imports. | | | | | | | | ||
| [order](docs/rules/order.md) | Enforce a convention in module import order. | | | | 🔧 | | | | ||
| [prefer-default-export](docs/rules/prefer-default-export.md) | Prefer a default export if module exports a single name or multiple names. | | | | | | | | ||
@@ -302,0 +326,0 @@ <!-- end auto-generated rules list --> |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
1045919
0.73%287
1.06%17392
0.62%756
3.28%- Removed
Updated
Updated