eslint-plugin-import-next 2.3.5 → 2.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/README.md +99 -78
- package/package.json +21 -5
- package/src/index.d.ts +192 -0
- package/src/index.js +13 -1
- package/src/oxlint.d.ts +20 -0
- package/src/oxlint.js +21 -0
- package/src/rules/consistent-type-specifier-style.js +5 -1
- package/src/rules/default.js +1 -0
- package/src/rules/dynamic-import-chunkname.js +4 -1
- package/src/rules/enforce-dependency-direction.js +2 -1
- package/src/rules/enforce-import-order.js +4 -2
- package/src/rules/enforce-team-boundaries.js +27 -17
- package/src/rules/export.js +3 -0
- package/src/rules/exports-last.js +3 -0
- package/src/rules/extensions.js +1 -0
- package/src/rules/first.js +2 -1
- package/src/rules/group-exports.js +3 -0
- package/src/rules/max-dependencies.js +2 -1
- package/src/rules/named.js +1 -1
- package/src/rules/namespace.js +1 -0
- package/src/rules/newline-after-import.js +1 -0
- package/src/rules/no-absolute-path.js +3 -0
- package/src/rules/no-amd.js +2 -1
- package/src/rules/no-anonymous-default-export.js +2 -0
- package/src/rules/no-barrel-file.js +2 -1
- package/src/rules/no-barrel-import.js +1 -1
- package/src/rules/no-commonjs.js +2 -1
- package/src/rules/no-cross-domain-imports.js +2 -1
- package/src/rules/no-cycle.d.ts +1 -1
- package/src/rules/no-cycle.js +187 -71
- package/src/rules/no-default-export.js +2 -1
- package/src/rules/no-deprecated.js +2 -1
- package/src/rules/no-duplicates.js +1 -0
- package/src/rules/no-dynamic-require.js +3 -0
- package/src/rules/no-empty-named-blocks.js +4 -1
- package/src/rules/no-extraneous-dependencies.js +4 -1
- package/src/rules/no-full-package-import.js +1 -0
- package/src/rules/no-import-module-exports.js +3 -1
- package/src/rules/no-internal-modules.js +1 -0
- package/src/rules/no-legacy-imports.js +1 -0
- package/src/rules/no-mutable-exports.js +2 -1
- package/src/rules/no-named-as-default-member.js +3 -0
- package/src/rules/no-named-as-default.js +3 -0
- package/src/rules/no-named-default.js +3 -0
- package/src/rules/no-named-export.js +2 -1
- package/src/rules/no-namespace.js +12 -6
- package/src/rules/no-nodejs-modules.js +3 -1
- package/src/rules/no-relative-packages.js +4 -1
- package/src/rules/no-relative-parent-imports.js +1 -0
- package/src/rules/no-restricted-paths.js +1 -0
- package/src/rules/no-self-import.js +2 -1
- package/src/rules/no-unassigned-import.js +1 -0
- package/src/rules/no-unresolved.js +3 -2
- package/src/rules/no-unused-modules.js +1 -0
- package/src/rules/no-useless-path-segments.js +3 -0
- package/src/rules/prefer-default-export.js +2 -1
- package/src/rules/prefer-direct-import.js +1 -0
- package/src/rules/prefer-modern-api.js +1 -0
- package/src/rules/prefer-node-protocol.js +2 -0
- package/src/rules/prefer-tree-shakeable-imports.js +1 -0
- package/src/rules/require-import-approval.js +1 -0
- package/src/rules/unambiguous.js +3 -0
|
@@ -33,7 +33,10 @@ exports.noRelativePackages = (0, eslint_devkit_1.createRule)({
|
|
|
33
33
|
meta: {
|
|
34
34
|
type: 'suggestion',
|
|
35
35
|
docs: {
|
|
36
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-relative-packages.md',
|
|
36
37
|
description: 'Forbid importing packages through relative paths',
|
|
38
|
+
cwe: 'CWE-1047',
|
|
39
|
+
cvss: 5,
|
|
37
40
|
},
|
|
38
41
|
fixable: 'code',
|
|
39
42
|
messages: {
|
|
@@ -61,7 +64,7 @@ exports.noRelativePackages = (0, eslint_devkit_1.createRule)({
|
|
|
61
64
|
create(context) {
|
|
62
65
|
const options = context.options[0] || {};
|
|
63
66
|
const { allowSamePackage = true } = options;
|
|
64
|
-
const filename = context.
|
|
67
|
+
const filename = context.filename;
|
|
65
68
|
const currentDir = path.dirname(filename);
|
|
66
69
|
const currentPackageRoot = findPackageJson(currentDir);
|
|
67
70
|
function checkImport(node, source) {
|
|
@@ -13,6 +13,7 @@ exports.noRelativeParentImports = (0, eslint_devkit_1.createRule)({
|
|
|
13
13
|
meta: {
|
|
14
14
|
type: 'problem',
|
|
15
15
|
docs: {
|
|
16
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-relative-parent-imports.md',
|
|
16
17
|
description: 'Prevents ../ imports',
|
|
17
18
|
},
|
|
18
19
|
hasSuggestions: false,
|
|
@@ -13,6 +13,7 @@ exports.noRestrictedPaths = (0, eslint_devkit_1.createRule)({
|
|
|
13
13
|
meta: {
|
|
14
14
|
type: 'problem',
|
|
15
15
|
docs: {
|
|
16
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-restricted-paths.md',
|
|
16
17
|
description: 'Enforce which files can be imported in a given folder',
|
|
17
18
|
},
|
|
18
19
|
hasSuggestions: false,
|
|
@@ -15,7 +15,7 @@ const path = tslib_1.__importStar(require("node:path"));
|
|
|
15
15
|
const eslint_devkit_1 = require("@interlace/eslint-devkit");
|
|
16
16
|
const eslint_devkit_2 = require("@interlace/eslint-devkit");
|
|
17
17
|
function isImportingSelf(context, node, importPath) {
|
|
18
|
-
const filename = context.
|
|
18
|
+
const filename = context.filename;
|
|
19
19
|
// If the input is from stdin, this test can't fail
|
|
20
20
|
if (filename === '<text>') {
|
|
21
21
|
return false;
|
|
@@ -55,6 +55,7 @@ exports.noSelfImport = (0, eslint_devkit_1.createRule)({
|
|
|
55
55
|
meta: {
|
|
56
56
|
type: 'problem',
|
|
57
57
|
docs: {
|
|
58
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-self-import.md',
|
|
58
59
|
description: 'Forbid a module from importing itself',
|
|
59
60
|
},
|
|
60
61
|
messages: {
|
|
@@ -13,6 +13,7 @@ exports.noUnassignedImport = (0, eslint_devkit_1.createRule)({
|
|
|
13
13
|
meta: {
|
|
14
14
|
type: 'problem',
|
|
15
15
|
docs: {
|
|
16
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-unassigned-import.md',
|
|
16
17
|
description: 'Prevents unassigned imports',
|
|
17
18
|
},
|
|
18
19
|
hasSuggestions: false,
|
|
@@ -19,6 +19,7 @@ exports.noUnresolved = (0, eslint_devkit_1.createRule)({
|
|
|
19
19
|
meta: {
|
|
20
20
|
type: 'problem',
|
|
21
21
|
docs: {
|
|
22
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-unresolved.md',
|
|
22
23
|
description: 'Ensures imports point to resolvable modules',
|
|
23
24
|
},
|
|
24
25
|
hasSuggestions: true,
|
|
@@ -117,7 +118,7 @@ exports.noUnresolved = (0, eslint_devkit_1.createRule)({
|
|
|
117
118
|
node_module_1.builtinModules.includes(importPath)) {
|
|
118
119
|
return;
|
|
119
120
|
}
|
|
120
|
-
const filePath = context.filename
|
|
121
|
+
const filePath = context.filename;
|
|
121
122
|
const resolved = (0, eslint_devkit_3.resolveModule)(importPath, filePath, {
|
|
122
123
|
extensions: options?.extensions,
|
|
123
124
|
});
|
|
@@ -149,7 +150,7 @@ exports.noUnresolved = (0, eslint_devkit_1.createRule)({
|
|
|
149
150
|
}
|
|
150
151
|
statement = statement.parent;
|
|
151
152
|
}
|
|
152
|
-
return fixer.insertTextBefore(statement, '// eslint-disable-next-line
|
|
153
|
+
return fixer.insertTextBefore(statement, '// eslint-disable-next-line import-next/no-unresolved\n');
|
|
153
154
|
},
|
|
154
155
|
},
|
|
155
156
|
],
|
|
@@ -13,6 +13,7 @@ exports.noUnusedModules = (0, eslint_devkit_1.createRule)({
|
|
|
13
13
|
meta: {
|
|
14
14
|
type: 'problem',
|
|
15
15
|
docs: {
|
|
16
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-unused-modules.md',
|
|
16
17
|
description: 'Forbid modules without exports',
|
|
17
18
|
},
|
|
18
19
|
hasSuggestions: false,
|
|
@@ -14,7 +14,10 @@ exports.noUselessPathSegments = (0, eslint_devkit_1.createRule)({
|
|
|
14
14
|
meta: {
|
|
15
15
|
type: 'suggestion',
|
|
16
16
|
docs: {
|
|
17
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-useless-path-segments.md',
|
|
17
18
|
description: 'Forbid unnecessary path segments in import and require statements',
|
|
19
|
+
cwe: 'CWE-1078',
|
|
20
|
+
cvss: 2.5,
|
|
18
21
|
},
|
|
19
22
|
fixable: 'code',
|
|
20
23
|
messages: {
|
|
@@ -13,6 +13,7 @@ exports.preferDefaultExport = (0, eslint_devkit_1.createRule)({
|
|
|
13
13
|
meta: {
|
|
14
14
|
type: 'suggestion',
|
|
15
15
|
docs: {
|
|
16
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/prefer-default-export.md',
|
|
16
17
|
description: 'Prefer a default export if module exports a single name',
|
|
17
18
|
},
|
|
18
19
|
hasSuggestions: true,
|
|
@@ -77,7 +78,7 @@ exports.preferDefaultExport = (0, eslint_devkit_1.createRule)({
|
|
|
77
78
|
create(context) {
|
|
78
79
|
const [options] = context.options;
|
|
79
80
|
const { target = 'single', ignoreFiles = [], allowNamedExports = false, } = options || {};
|
|
80
|
-
const filename = context.
|
|
81
|
+
const filename = context.filename;
|
|
81
82
|
if (!filename) {
|
|
82
83
|
return {};
|
|
83
84
|
}
|
|
@@ -47,6 +47,7 @@ exports.preferDirectImport = (0, eslint_devkit_1.createRule)({
|
|
|
47
47
|
meta: {
|
|
48
48
|
type: 'suggestion',
|
|
49
49
|
docs: {
|
|
50
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/prefer-direct-import.md',
|
|
50
51
|
description: 'Prefer direct imports over barrel imports for better tree-shaking and build performance',
|
|
51
52
|
},
|
|
52
53
|
fixable: 'code',
|
|
@@ -126,6 +126,7 @@ exports.preferModernApi = (0, eslint_devkit_1.createRule)({
|
|
|
126
126
|
meta: {
|
|
127
127
|
type: 'suggestion',
|
|
128
128
|
docs: {
|
|
129
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/prefer-modern-api.md',
|
|
129
130
|
description: 'Suggest modern replacements for deprecated or outdated libraries',
|
|
130
131
|
},
|
|
131
132
|
messages: {
|
|
@@ -58,6 +58,7 @@ exports.preferNodeProtocol = (0, eslint_devkit_1.createRule)({
|
|
|
58
58
|
meta: {
|
|
59
59
|
type: 'suggestion',
|
|
60
60
|
docs: {
|
|
61
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/prefer-node-protocol.md',
|
|
61
62
|
description: 'Prefer using the node: protocol when importing Node.js builtin modules',
|
|
62
63
|
},
|
|
63
64
|
fixable: 'code',
|
|
@@ -160,6 +161,7 @@ exports.preferNodeProtocol = (0, eslint_devkit_1.createRule)({
|
|
|
160
161
|
}
|
|
161
162
|
},
|
|
162
163
|
};
|
|
164
|
+
// oxlint-disable-next-line consistent-function-scoping
|
|
163
165
|
function isBuiltInModule(moduleName, modulesToCheck) {
|
|
164
166
|
// Skip if already using node: protocol
|
|
165
167
|
if (moduleName.startsWith('node:')) {
|
|
@@ -39,6 +39,7 @@ exports.preferTreeShakeableImports = (0, eslint_devkit_1.createRule)({
|
|
|
39
39
|
meta: {
|
|
40
40
|
type: 'suggestion',
|
|
41
41
|
docs: {
|
|
42
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/prefer-tree-shakeable-imports.md',
|
|
42
43
|
description: 'Prefer import patterns that enable effective tree-shaking',
|
|
43
44
|
},
|
|
44
45
|
hasSuggestions: true,
|
|
@@ -44,6 +44,7 @@ exports.requireImportApproval = (0, eslint_devkit_1.createRule)({
|
|
|
44
44
|
meta: {
|
|
45
45
|
type: 'problem',
|
|
46
46
|
docs: {
|
|
47
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/require-import-approval.md',
|
|
47
48
|
description: 'Enforce explicit approval for high-risk package imports',
|
|
48
49
|
},
|
|
49
50
|
messages: {
|
package/src/rules/unambiguous.js
CHANGED
|
@@ -12,7 +12,10 @@ exports.unambiguous = (0, eslint_devkit_1.createRule)({
|
|
|
12
12
|
meta: {
|
|
13
13
|
type: 'suggestion',
|
|
14
14
|
docs: {
|
|
15
|
+
url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/unambiguous.md',
|
|
15
16
|
description: 'Forbid potentially ambiguous parse goal (script vs. module)',
|
|
17
|
+
cwe: 'CWE-1078',
|
|
18
|
+
cvss: 2.5,
|
|
16
19
|
},
|
|
17
20
|
messages: {
|
|
18
21
|
ambiguous: (0, eslint_devkit_1.formatLLMMessage)({
|