eslint-plugin-import-next 2.3.3 → 2.3.6

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +80 -70
  3. package/package.json +15 -3
  4. package/src/index.d.ts +192 -0
  5. package/src/index.js +13 -1
  6. package/src/oxlint.d.ts +20 -0
  7. package/src/oxlint.js +21 -0
  8. package/src/rules/consistent-type-specifier-style.js +5 -1
  9. package/src/rules/default.js +1 -0
  10. package/src/rules/dynamic-import-chunkname.js +4 -1
  11. package/src/rules/enforce-dependency-direction.js +2 -1
  12. package/src/rules/enforce-import-order.js +4 -2
  13. package/src/rules/enforce-team-boundaries.js +27 -17
  14. package/src/rules/export.js +3 -0
  15. package/src/rules/exports-last.js +3 -0
  16. package/src/rules/extensions.js +1 -0
  17. package/src/rules/first.js +2 -0
  18. package/src/rules/group-exports.js +3 -0
  19. package/src/rules/max-dependencies.js +2 -1
  20. package/src/rules/named.js +1 -0
  21. package/src/rules/namespace.js +1 -0
  22. package/src/rules/newline-after-import.js +1 -0
  23. package/src/rules/no-absolute-path.js +3 -0
  24. package/src/rules/no-amd.js +2 -1
  25. package/src/rules/no-anonymous-default-export.js +2 -0
  26. package/src/rules/no-barrel-file.js +2 -1
  27. package/src/rules/no-barrel-import.js +1 -0
  28. package/src/rules/no-commonjs.js +2 -1
  29. package/src/rules/no-cross-domain-imports.js +2 -1
  30. package/src/rules/no-cycle.js +94 -73
  31. package/src/rules/no-default-export.js +2 -1
  32. package/src/rules/no-deprecated.js +2 -1
  33. package/src/rules/no-duplicates.js +1 -0
  34. package/src/rules/no-dynamic-require.js +3 -0
  35. package/src/rules/no-empty-named-blocks.js +4 -1
  36. package/src/rules/no-extraneous-dependencies.js +4 -1
  37. package/src/rules/no-full-package-import.js +1 -0
  38. package/src/rules/no-import-module-exports.js +3 -0
  39. package/src/rules/no-internal-modules.js +1 -0
  40. package/src/rules/no-legacy-imports.js +1 -0
  41. package/src/rules/no-mutable-exports.js +2 -1
  42. package/src/rules/no-named-as-default-member.js +3 -0
  43. package/src/rules/no-named-as-default.js +3 -0
  44. package/src/rules/no-named-default.js +3 -0
  45. package/src/rules/no-named-export.js +2 -1
  46. package/src/rules/no-namespace.js +12 -5
  47. package/src/rules/no-nodejs-modules.js +3 -1
  48. package/src/rules/no-relative-packages.js +4 -1
  49. package/src/rules/no-relative-parent-imports.js +1 -0
  50. package/src/rules/no-restricted-paths.js +1 -0
  51. package/src/rules/no-self-import.js +2 -1
  52. package/src/rules/no-unassigned-import.js +1 -0
  53. package/src/rules/no-unresolved.js +3 -2
  54. package/src/rules/no-unused-modules.js +1 -0
  55. package/src/rules/no-useless-path-segments.js +3 -0
  56. package/src/rules/prefer-default-export.js +2 -1
  57. package/src/rules/prefer-direct-import.js +1 -0
  58. package/src/rules/prefer-modern-api.js +1 -0
  59. package/src/rules/prefer-node-protocol.js +2 -0
  60. package/src/rules/prefer-tree-shakeable-imports.js +1 -0
  61. package/src/rules/require-import-approval.js +1 -0
  62. package/src/rules/unambiguous.js +3 -0
@@ -13,6 +13,7 @@ exports.noDuplicates = (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-duplicates.md',
16
17
  description: 'Reports duplicate imports',
17
18
  },
18
19
  fixable: 'code',
@@ -12,7 +12,10 @@ exports.noDynamicRequire = (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/no-dynamic-require.md',
15
16
  description: 'Forbid require() calls with expressions',
17
+ cwe: 'CWE-829',
18
+ cvss: 5,
16
19
  },
17
20
  messages: {
18
21
  dynamicRequire: (0, eslint_devkit_1.formatLLMMessage)({
@@ -12,7 +12,10 @@ exports.noEmptyNamedBlocks = (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/no-empty-named-blocks.md',
15
16
  description: 'Forbid empty named import blocks',
17
+ cwe: 'CWE-561',
18
+ cvss: 2.5,
16
19
  },
17
20
  fixable: 'code',
18
21
  hasSuggestions: true,
@@ -40,7 +43,7 @@ exports.noEmptyNamedBlocks = (0, eslint_devkit_1.createRule)({
40
43
  const hasNamespaceImport = node.specifiers.some((spec) => spec.type === 'ImportNamespaceSpecifier');
41
44
  const namedImports = node.specifiers.filter((spec) => spec.type === 'ImportSpecifier');
42
45
  // Get the source code
43
- const sourceCode = context.getSourceCode();
46
+ const sourceCode = context.sourceCode;
44
47
  const importText = sourceCode.getText(node);
45
48
  // Check for empty braces pattern: {}
46
49
  const hasEmptyBraces = /\{\s*\}/.test(importText);
@@ -15,6 +15,7 @@ exports.noExtraneousDependencies = (0, eslint_devkit_1.createRule)({
15
15
  meta: {
16
16
  type: 'problem',
17
17
  docs: {
18
+ url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-extraneous-dependencies.md',
18
19
  description: 'Forbid the use of extraneous packages not listed in package.json',
19
20
  },
20
21
  hasSuggestions: true,
@@ -134,7 +135,7 @@ exports.noExtraneousDependencies = (0, eslint_devkit_1.createRule)({
134
135
  create(context) {
135
136
  const [options] = context.options;
136
137
  const { devDependencies = true, optionalDependencies = true, peerDependencies = true, bundledDependencies = true, packageJsonPath, packageJson, resolutionStrategy = 'strict', allowPatterns = [], } = options || {};
137
- const filename = context.getFilename();
138
+ const filename = context.filename;
138
139
  if (!filename) {
139
140
  return {};
140
141
  }
@@ -188,6 +189,7 @@ exports.noExtraneousDependencies = (0, eslint_devkit_1.createRule)({
188
189
  if (bundledDependencies && resolvedPackageJson?.bundledDependencies) {
189
190
  resolvedPackageJson.bundledDependencies.forEach((pkg) => allowedPackages.add(pkg));
190
191
  }
192
+ // oxlint-disable-next-line consistent-function-scoping
191
193
  function isExternalPackage(importPath) {
192
194
  // Skip relative imports
193
195
  if (importPath.startsWith('./') || importPath.startsWith('../')) {
@@ -265,6 +267,7 @@ exports.noExtraneousDependencies = (0, eslint_devkit_1.createRule)({
265
267
  : importPath.split('/')[0];
266
268
  return packageName;
267
269
  }
270
+ // oxlint-disable-next-line consistent-function-scoping
268
271
  function isWorkspacePackage(packageName) {
269
272
  // For testing purposes, consider packages with @workspace/ or @company/ as workspace packages
270
273
  return (packageName.startsWith('@workspace/') ||
@@ -79,6 +79,7 @@ exports.noFullPackageImport = (0, eslint_devkit_1.createRule)({
79
79
  meta: {
80
80
  type: 'suggestion',
81
81
  docs: {
82
+ url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-full-package-import.md',
82
83
  description: 'Disallow full package imports from known large packages that prevent tree-shaking',
83
84
  },
84
85
  hasSuggestions: true,
@@ -12,7 +12,10 @@ exports.noImportModuleExports = (0, eslint_devkit_1.createRule)({
12
12
  meta: {
13
13
  type: 'problem',
14
14
  docs: {
15
+ url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-import-module-exports.md',
15
16
  description: 'Forbid import statements with CommonJS module.exports',
17
+ cwe: 'CWE-1078',
18
+ cvss: 7.5,
16
19
  },
17
20
  fixable: 'code',
18
21
  messages: {
@@ -87,6 +87,7 @@ exports.noInternalModules = (0, eslint_devkit_1.createRule)({
87
87
  meta: {
88
88
  type: 'problem',
89
89
  docs: {
90
+ url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-internal-modules.md',
90
91
  description: 'Forbid importing the submodules of other modules',
91
92
  },
92
93
  fixable: 'code',
@@ -25,6 +25,7 @@ exports.noLegacyImports = (0, eslint_devkit_1.createRule)({
25
25
  meta: {
26
26
  type: 'suggestion',
27
27
  docs: {
28
+ url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-legacy-imports.md',
28
29
  description: 'Detect imports from deprecated internal paths and suggest alternatives',
29
30
  },
30
31
  fixable: 'code',
@@ -13,6 +13,7 @@ exports.noMutableExports = (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/no-mutable-exports.md',
16
17
  description: 'Forbid the use of mutable exports with `var` or `let`',
17
18
  },
18
19
  hasSuggestions: false,
@@ -70,7 +71,7 @@ exports.noMutableExports = (0, eslint_devkit_1.createRule)({
70
71
  create(context) {
71
72
  const [options] = context.options;
72
73
  const { allowInFiles = [], ignoreExports = [] } = options || {};
73
- const filename = context.getFilename();
74
+ const filename = context.filename;
74
75
  if (!filename) {
75
76
  return {};
76
77
  }
@@ -12,7 +12,10 @@ exports.noNamedAsDefaultMember = (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/no-named-as-default-member.md',
15
16
  description: 'Forbid use of exported name as property of default export',
17
+ cwe: 'CWE-1078',
18
+ cvss: 2.5,
16
19
  },
17
20
  messages: {
18
21
  namedAsDefaultMember: (0, eslint_devkit_1.formatLLMMessage)({
@@ -12,7 +12,10 @@ exports.noNamedAsDefault = (0, eslint_devkit_1.createRule)({
12
12
  meta: {
13
13
  type: 'problem',
14
14
  docs: {
15
+ url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-named-as-default.md',
15
16
  description: 'Forbid use of exported name as identifier of default export',
17
+ cwe: 'CWE-1078',
18
+ cvss: 5,
16
19
  },
17
20
  messages: {
18
21
  namedAsDefault: (0, eslint_devkit_1.formatLLMMessage)({
@@ -12,7 +12,10 @@ exports.noNamedDefault = (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/no-named-default.md',
15
16
  description: 'Forbid named default exports',
17
+ cwe: 'CWE-1078',
18
+ cvss: 2.5,
16
19
  },
17
20
  messages: {
18
21
  namedDefault: (0, eslint_devkit_1.formatLLMMessage)({
@@ -13,6 +13,7 @@ exports.noNamedExport = (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-named-export.md',
16
17
  description: 'Prevents named exports',
17
18
  },
18
19
  hasSuggestions: false,
@@ -82,7 +83,7 @@ exports.noNamedExport = (0, eslint_devkit_1.createRule)({
82
83
  const { allowInFiles = [], allowNames = [], allowPatterns = [],
83
84
  // suggestDefault // unused option
84
85
  } = options || {};
85
- const filename = context.getFilename();
86
+ const filename = context.filename;
86
87
  function shouldAllow(specifier) {
87
88
  if (!filename) {
88
89
  return false;
@@ -12,7 +12,10 @@ exports.noNamespace = (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/no-namespace.md',
15
16
  description: 'Forbid namespace (a.k.a. "wildcard" *) imports',
17
+ cwe: 'CWE-1078',
18
+ cvss: 2.5,
16
19
  },
17
20
  fixable: 'code',
18
21
  messages: {
@@ -45,12 +48,16 @@ exports.noNamespace = (0, eslint_devkit_1.createRule)({
45
48
  const ignorePatterns = options.ignore || [];
46
49
  function isIgnored(source) {
47
50
  return ignorePatterns.some((pattern) => {
48
- // Simple glob matching
51
+ // Escape ALL regex metacharacters — including `*`, `?`, and `\` — so
52
+ // the subsequent replaces can find the now-escaped `\*` and `\?` and
53
+ // translate them back to glob meanings. Without escaping `*` and `?`,
54
+ // the inner replaces don't match anything and raw `*` / `?` reach
55
+ // `new RegExp()` (CodeQL: `js/incomplete-sanitization`).
56
+ const escaped = pattern.replace(/[.+^${}()|[\]\\*?]/g, '\\$&');
49
57
  const regex = new RegExp('^' +
50
- pattern
51
- .replace(/\*/g, '.*')
52
- .replace(/\?/g, '.')
53
- .replace(/\//g, '\\/') +
58
+ escaped
59
+ .replace(/\\\*/g, '.*')
60
+ .replace(/\\\?/g, '.') +
54
61
  '$');
55
62
  return regex.test(source);
56
63
  });
@@ -64,6 +64,7 @@ exports.noNodejsModules = (0, eslint_devkit_1.createRule)({
64
64
  meta: {
65
65
  type: 'problem',
66
66
  docs: {
67
+ url: 'https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-nodejs-modules.md',
67
68
  description: 'Prevents Node.js builtin imports',
68
69
  },
69
70
  messages: {
@@ -146,6 +147,7 @@ exports.noNodejsModules = (0, eslint_devkit_1.createRule)({
146
147
  }
147
148
  return false;
148
149
  }
150
+ // oxlint-disable-next-line consistent-function-scoping
149
151
  function getBuiltinName(moduleName) {
150
152
  if (moduleName.startsWith('node:')) {
151
153
  return moduleName.slice(5);
@@ -189,7 +191,7 @@ exports.noNodejsModules = (0, eslint_devkit_1.createRule)({
189
191
  data: {
190
192
  moduleName,
191
193
  builtinName,
192
- currentFile: context.getFilename(),
194
+ currentFile: context.filename,
193
195
  alternative,
194
196
  suggestion: fixSuggestion,
195
197
  },
@@ -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.getFilename();
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.getFilename();
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 || context.getFilename();
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 eslint-plugin-llm-optimized/no-unresolved\n');
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.getFilename();
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: {
@@ -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)({