eslint-plugin-import-next 2.8.12 → 2.8.13

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/README.md CHANGED
@@ -237,6 +237,7 @@ Part of the **Interlace ESLint ecosystem** — AI-native rules with LLM-optimize
237
237
 
238
238
  | Plugin | Downloads | Description |
239
239
  | :--- | :---: | :--- |
240
+ | [`eslint-plugin-cli-floor`](https://www.npmjs.com/package/eslint-plugin-cli-floor) | [![downloads](https://img.shields.io/npm/dt/eslint-plugin-cli-floor.svg?style=flat-square)](https://www.npmjs.com/package/eslint-plugin-cli-floor) | CLI floor for commander, yargs and burgee. |
240
241
  | [`eslint-plugin-conventions`](https://www.npmjs.com/package/eslint-plugin-conventions) | [![downloads](https://img.shields.io/npm/dt/eslint-plugin-conventions.svg?style=flat-square)](https://www.npmjs.com/package/eslint-plugin-conventions) | Team-specific habits and styles. |
241
242
  | [`eslint-plugin-maintainability`](https://www.npmjs.com/package/eslint-plugin-maintainability) | [![downloads](https://img.shields.io/npm/dt/eslint-plugin-maintainability.svg?style=flat-square)](https://www.npmjs.com/package/eslint-plugin-maintainability) | Cognitive load and clean-code patterns. |
242
243
  | [`eslint-plugin-modernization`](https://www.npmjs.com/package/eslint-plugin-modernization) | [![downloads](https://img.shields.io/npm/dt/eslint-plugin-modernization.svg?style=flat-square)](https://www.npmjs.com/package/eslint-plugin-modernization) | ESNext migration + syntax evolution. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-import-next",
3
- "version": "2.8.12",
3
+ "version": "2.8.13",
4
4
  "description": "ESLint plugin for imports and module boundaries — drop-in replacement for eslint-plugin-import, 3.1x faster end-to-end, zero-config migration.",
5
5
  "type": "commonjs",
6
6
  "main": "./src/index.js",
package/src/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.clearCircularDependencyCache=exports.configs=exports.plugin=exports.rules=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");const no_cycle_1=require("./rules/no-cycle");Object.defineProperty(exports,"clearCircularDependencyCache",{enumerable:true,get:function(){return no_cycle_1.clearCircularDependencyCache}});exports.rules={get"no-duplicates"(){return require("./rules/no-duplicates").noDuplicates},get named(){return require("./rules/named").named},get default(){return require("./rules/default").defaultRule},get namespace(){return require("./rules/namespace").namespace},get extensions(){return require("./rules/extensions").extensions},get"no-self-import"(){return require("./rules/no-self-import").noSelfImport},get"no-unresolved"(){return require("./rules/no-unresolved").noUnresolved},get"no-absolute-path"(){return require("./rules/no-absolute-path").noAbsolutePath},get"no-dynamic-require"(){return require("./rules/no-dynamic-require").noDynamicRequire},get"no-relative-packages"(){return require("./rules/no-relative-packages").noRelativePackages},get"no-useless-path-segments"(){return require("./rules/no-useless-path-segments").noUselessPathSegments},get"no-amd"(){return require("./rules/no-amd").noAmd},get"no-commonjs"(){return require("./rules/no-commonjs").noCommonjs},get"no-nodejs-modules"(){return require("./rules/no-nodejs-modules").noNodejsModules},get"no-import-module-exports"(){return require("./rules/no-import-module-exports").noImportModuleExports},get unambiguous(){return require("./rules/unambiguous").unambiguous},get"no-cycle"(){return require("./rules/no-cycle").noCycle},get"no-internal-modules"(){return require("./rules/no-internal-modules").noInternalModules},get"no-cross-domain-imports"(){return require("./rules/no-cross-domain-imports").noCrossDomainImports},get"enforce-dependency-direction"(){return require("./rules/enforce-dependency-direction").enforceDependencyDirection},get"no-restricted-paths"(){return require("./rules/no-restricted-paths").noRestrictedPaths},get"no-relative-parent-imports"(){return require("./rules/no-relative-parent-imports").noRelativeParentImports},get export(){return require("./rules/export").exportRule},get"no-default-export"(){return require("./rules/no-default-export").noDefaultExport},get"no-named-export"(){return require("./rules/no-named-export").noNamedExport},get"prefer-default-export"(){return require("./rules/prefer-default-export").preferDefaultExport},get"no-anonymous-default-export"(){return require("./rules/no-anonymous-default-export").noAnonymousDefaultExport},get"no-mutable-exports"(){return require("./rules/no-mutable-exports").noMutableExports},get"no-deprecated"(){return require("./rules/no-deprecated").noDeprecated},get"exports-last"(){return require("./rules/exports-last").exportsLast},get"group-exports"(){return require("./rules/group-exports").groupExports},get"enforce-import-order"(){return require("./rules/enforce-import-order").enforceImportOrder},get order(){return require("./rules/enforce-import-order").enforceImportOrder},get"no-unassigned-import"(){return require("./rules/no-unassigned-import").noUnassignedImport},get first(){return require("./rules/first").first},get"newline-after-import"(){return require("./rules/newline-after-import").newlineAfterImport},get"no-empty-named-blocks"(){return require("./rules/no-empty-named-blocks").noEmptyNamedBlocks},get"no-named-as-default"(){return require("./rules/no-named-as-default").noNamedAsDefault},get"no-named-as-default-member"(){return require("./rules/no-named-as-default-member").noNamedAsDefaultMember},get"no-named-default"(){return require("./rules/no-named-default").noNamedDefault},get"no-namespace"(){return require("./rules/no-namespace").noNamespace},get"consistent-type-specifier-style"(){return require("./rules/consistent-type-specifier-style").consistentTypeSpecifierStyle},get"dynamic-import-chunkname"(){return require("./rules/dynamic-import-chunkname").dynamicImportChunkname},get"no-extraneous-dependencies"(){return require("./rules/no-extraneous-dependencies").noExtraneousDependencies},get"no-unused-modules"(){return require("./rules/no-unused-modules").noUnusedModules},get"max-dependencies"(){return require("./rules/max-dependencies").maxDependencies},get"prefer-node-protocol"(){return require("./rules/prefer-node-protocol").preferNodeProtocol},get"no-barrel-file"(){return require("./rules/no-barrel-file").noBarrelFile},get"no-barrel-import"(){return require("./rules/no-barrel-import").noBarrelImport},get"prefer-tree-shakeable-imports"(){return require("./rules/prefer-tree-shakeable-imports").preferTreeShakeableImports},get"prefer-direct-import"(){return require("./rules/prefer-direct-import").preferDirectImport},get"no-full-package-import"(){return require("./rules/no-full-package-import").noFullPackageImport},get"enforce-team-boundaries"(){return require("./rules/enforce-team-boundaries").enforceTeamBoundaries},get"no-legacy-imports"(){return require("./rules/no-legacy-imports").noLegacyImports},get"require-import-approval"(){return require("./rules/require-import-approval").requireImportApproval},get"prefer-modern-api"(){return require("./rules/prefer-modern-api").preferModernApi}};(0,eslint_devkit_1.withCanonicalDocsUrls)("plugin-import-next",exports.rules);exports.plugin={meta:{name:"eslint-plugin-import-next",version:"2.8.12"},rules:exports.rules};exports.configs={flagship:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-cycle":"error"}},recommended:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-unresolved":"error","import-next/named":"error","import-next/default":"error","import-next/namespace":"warn","import-next/no-duplicates":"error","import-next/export":"error","import-next/no-cycle":"error","import-next/no-self-import":"error","import-next/no-named-as-default":"warn","import-next/no-named-as-default-member":"warn","import-next/no-amd":"warn","import-next/no-empty-named-blocks":"warn","import-next/no-extraneous-dependencies":"warn"}},strict:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-unresolved":"error","import-next/named":"error","import-next/default":"error","import-next/namespace":"error","import-next/extensions":"error","import-next/no-self-import":"error","import-next/no-duplicates":"error","import-next/no-absolute-path":"error","import-next/no-dynamic-require":"error","import-next/no-useless-path-segments":"error","import-next/export":"error","import-next/no-amd":"error","import-next/no-commonjs":"error","import-next/no-nodejs-modules":"error","import-next/no-import-module-exports":"error","import-next/unambiguous":"error","import-next/no-cycle":"error","import-next/no-internal-modules":"error","import-next/no-cross-domain-imports":"error","import-next/enforce-dependency-direction":"error","import-next/no-restricted-paths":"error","import-next/no-relative-parent-imports":"error","import-next/no-relative-packages":"error","import-next/no-anonymous-default-export":"error","import-next/no-mutable-exports":"error","import-next/no-deprecated":"error","import-next/exports-last":"error","import-next/group-exports":"error","import-next/order":"error","import-next/no-unassigned-import":"error","import-next/first":"error","import-next/newline-after-import":"error","import-next/no-empty-named-blocks":"error","import-next/no-named-as-default":"error","import-next/no-named-as-default-member":"error","import-next/no-named-default":"error","import-next/no-namespace":"error","import-next/consistent-type-specifier-style":["error","prefer-top-level"],"import-next/no-extraneous-dependencies":"error","import-next/no-unused-modules":"error","import-next/max-dependencies":"error","import-next/prefer-node-protocol":"error"}},typescript:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-unresolved":"error","import-next/named":"off","import-next/default":"error","import-next/namespace":"error","import-next/export":"error","import-next/no-cycle":"error","import-next/no-duplicates":"error","import-next/order":"warn","import-next/first":"warn","import-next/newline-after-import":"warn","import-next/consistent-type-specifier-style":["warn","prefer-top-level"]}},"module-resolution":{plugins:{"import-next":exports.plugin},rules:{"import-next/no-unresolved":"error","import-next/named":"error","import-next/default":"error","import-next/namespace":"error","import-next/extensions":"warn","import-next/no-self-import":"error","import-next/no-duplicates":"error","import-next/no-absolute-path":"error","import-next/no-useless-path-segments":"warn"}},"import-style":{plugins:{"import-next":exports.plugin},rules:{"import-next/order":"error","import-next/first":"error","import-next/newline-after-import":"error","import-next/no-duplicates":"error","import-next/no-unassigned-import":"warn","import-next/no-empty-named-blocks":"error","import-next/no-namespace":"warn"}},esm:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-amd":"error","import-next/no-commonjs":"error","import-next/no-import-module-exports":"error","import-next/unambiguous":"error","import-next/prefer-node-protocol":"error"}},architecture:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-cycle":"error","import-next/no-internal-modules":"error","import-next/no-cross-domain-imports":"error","import-next/enforce-dependency-direction":"error","import-next/no-restricted-paths":"error","import-next/no-relative-parent-imports":"warn","import-next/no-relative-packages":"error"}},errors:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-unresolved":"error","import-next/named":"error","import-next/default":"error","import-next/namespace":"error","import-next/export":"error"}},warnings:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-named-as-default":"warn","import-next/no-named-as-default-member":"warn","import-next/no-duplicates":"warn"}},performance:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-barrel-file":"error","import-next/no-barrel-import":"warn","import-next/prefer-tree-shakeable-imports":"warn","import-next/prefer-direct-import":"warn","import-next/no-full-package-import":"warn","import-next/no-cycle":"error"}},enterprise:{plugins:{"import-next":exports.plugin},rules:{"import-next/enforce-team-boundaries":"off","import-next/no-legacy-imports":"off","import-next/no-cross-domain-imports":"warn","import-next/enforce-dependency-direction":"warn","import-next/no-internal-modules":"warn"}}};exports.default=exports.plugin;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.clearCircularDependencyCache=exports.configs=exports.plugin=exports.rules=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");const no_cycle_1=require("./rules/no-cycle");Object.defineProperty(exports,"clearCircularDependencyCache",{enumerable:true,get:function(){return no_cycle_1.clearCircularDependencyCache}});exports.rules={get"no-duplicates"(){return require("./rules/no-duplicates").noDuplicates},get named(){return require("./rules/named").named},get default(){return require("./rules/default").defaultRule},get namespace(){return require("./rules/namespace").namespace},get extensions(){return require("./rules/extensions").extensions},get"no-self-import"(){return require("./rules/no-self-import").noSelfImport},get"no-unresolved"(){return require("./rules/no-unresolved").noUnresolved},get"no-absolute-path"(){return require("./rules/no-absolute-path").noAbsolutePath},get"no-dynamic-require"(){return require("./rules/no-dynamic-require").noDynamicRequire},get"no-relative-packages"(){return require("./rules/no-relative-packages").noRelativePackages},get"no-useless-path-segments"(){return require("./rules/no-useless-path-segments").noUselessPathSegments},get"no-amd"(){return require("./rules/no-amd").noAmd},get"no-commonjs"(){return require("./rules/no-commonjs").noCommonjs},get"no-nodejs-modules"(){return require("./rules/no-nodejs-modules").noNodejsModules},get"no-import-module-exports"(){return require("./rules/no-import-module-exports").noImportModuleExports},get unambiguous(){return require("./rules/unambiguous").unambiguous},get"no-cycle"(){return require("./rules/no-cycle").noCycle},get"no-internal-modules"(){return require("./rules/no-internal-modules").noInternalModules},get"no-cross-domain-imports"(){return require("./rules/no-cross-domain-imports").noCrossDomainImports},get"enforce-dependency-direction"(){return require("./rules/enforce-dependency-direction").enforceDependencyDirection},get"no-restricted-paths"(){return require("./rules/no-restricted-paths").noRestrictedPaths},get"no-relative-parent-imports"(){return require("./rules/no-relative-parent-imports").noRelativeParentImports},get export(){return require("./rules/export").exportRule},get"no-default-export"(){return require("./rules/no-default-export").noDefaultExport},get"no-named-export"(){return require("./rules/no-named-export").noNamedExport},get"prefer-default-export"(){return require("./rules/prefer-default-export").preferDefaultExport},get"no-anonymous-default-export"(){return require("./rules/no-anonymous-default-export").noAnonymousDefaultExport},get"no-mutable-exports"(){return require("./rules/no-mutable-exports").noMutableExports},get"no-deprecated"(){return require("./rules/no-deprecated").noDeprecated},get"exports-last"(){return require("./rules/exports-last").exportsLast},get"group-exports"(){return require("./rules/group-exports").groupExports},get"enforce-import-order"(){return require("./rules/enforce-import-order").enforceImportOrder},get order(){return require("./rules/enforce-import-order").enforceImportOrder},get"no-unassigned-import"(){return require("./rules/no-unassigned-import").noUnassignedImport},get first(){return require("./rules/first").first},get"newline-after-import"(){return require("./rules/newline-after-import").newlineAfterImport},get"no-empty-named-blocks"(){return require("./rules/no-empty-named-blocks").noEmptyNamedBlocks},get"no-named-as-default"(){return require("./rules/no-named-as-default").noNamedAsDefault},get"no-named-as-default-member"(){return require("./rules/no-named-as-default-member").noNamedAsDefaultMember},get"no-named-default"(){return require("./rules/no-named-default").noNamedDefault},get"no-namespace"(){return require("./rules/no-namespace").noNamespace},get"consistent-type-specifier-style"(){return require("./rules/consistent-type-specifier-style").consistentTypeSpecifierStyle},get"dynamic-import-chunkname"(){return require("./rules/dynamic-import-chunkname").dynamicImportChunkname},get"no-extraneous-dependencies"(){return require("./rules/no-extraneous-dependencies").noExtraneousDependencies},get"no-unused-modules"(){return require("./rules/no-unused-modules").noUnusedModules},get"max-dependencies"(){return require("./rules/max-dependencies").maxDependencies},get"prefer-node-protocol"(){return require("./rules/prefer-node-protocol").preferNodeProtocol},get"no-barrel-file"(){return require("./rules/no-barrel-file").noBarrelFile},get"no-barrel-import"(){return require("./rules/no-barrel-import").noBarrelImport},get"prefer-tree-shakeable-imports"(){return require("./rules/prefer-tree-shakeable-imports").preferTreeShakeableImports},get"prefer-direct-import"(){return require("./rules/prefer-direct-import").preferDirectImport},get"no-full-package-import"(){return require("./rules/no-full-package-import").noFullPackageImport},get"enforce-team-boundaries"(){return require("./rules/enforce-team-boundaries").enforceTeamBoundaries},get"no-legacy-imports"(){return require("./rules/no-legacy-imports").noLegacyImports},get"require-import-approval"(){return require("./rules/require-import-approval").requireImportApproval},get"prefer-modern-api"(){return require("./rules/prefer-modern-api").preferModernApi}};(0,eslint_devkit_1.withCanonicalDocsUrls)("plugin-import-next",exports.rules);exports.plugin={meta:{name:"eslint-plugin-import-next",version:"2.8.13"},rules:exports.rules};exports.configs={flagship:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-cycle":"error"}},recommended:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-unresolved":"error","import-next/named":"error","import-next/default":"error","import-next/namespace":"warn","import-next/no-duplicates":"error","import-next/export":"error","import-next/no-cycle":"error","import-next/no-self-import":"error","import-next/no-named-as-default":"warn","import-next/no-named-as-default-member":"warn","import-next/no-amd":"warn","import-next/no-empty-named-blocks":"warn","import-next/no-extraneous-dependencies":"warn"}},strict:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-unresolved":"error","import-next/named":"error","import-next/default":"error","import-next/namespace":"error","import-next/extensions":"error","import-next/no-self-import":"error","import-next/no-duplicates":"error","import-next/no-absolute-path":"error","import-next/no-dynamic-require":"error","import-next/no-useless-path-segments":"error","import-next/export":"error","import-next/no-amd":"error","import-next/no-commonjs":"error","import-next/no-nodejs-modules":"error","import-next/no-import-module-exports":"error","import-next/unambiguous":"error","import-next/no-cycle":"error","import-next/no-internal-modules":"error","import-next/no-cross-domain-imports":"error","import-next/enforce-dependency-direction":"error","import-next/no-restricted-paths":"error","import-next/no-relative-parent-imports":"error","import-next/no-relative-packages":"error","import-next/no-anonymous-default-export":"error","import-next/no-mutable-exports":"error","import-next/no-deprecated":"error","import-next/exports-last":"error","import-next/group-exports":"error","import-next/order":"error","import-next/no-unassigned-import":"error","import-next/first":"error","import-next/newline-after-import":"error","import-next/no-empty-named-blocks":"error","import-next/no-named-as-default":"error","import-next/no-named-as-default-member":"error","import-next/no-named-default":"error","import-next/no-namespace":"error","import-next/consistent-type-specifier-style":["error","prefer-top-level"],"import-next/no-extraneous-dependencies":"error","import-next/no-unused-modules":"error","import-next/max-dependencies":"error","import-next/prefer-node-protocol":"error"}},typescript:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-unresolved":"error","import-next/named":"off","import-next/default":"error","import-next/namespace":"error","import-next/export":"error","import-next/no-cycle":"error","import-next/no-duplicates":"error","import-next/order":"warn","import-next/first":"warn","import-next/newline-after-import":"warn","import-next/consistent-type-specifier-style":["warn","prefer-top-level"]}},"module-resolution":{plugins:{"import-next":exports.plugin},rules:{"import-next/no-unresolved":"error","import-next/named":"error","import-next/default":"error","import-next/namespace":"error","import-next/extensions":"warn","import-next/no-self-import":"error","import-next/no-duplicates":"error","import-next/no-absolute-path":"error","import-next/no-useless-path-segments":"warn"}},"import-style":{plugins:{"import-next":exports.plugin},rules:{"import-next/order":"error","import-next/first":"error","import-next/newline-after-import":"error","import-next/no-duplicates":"error","import-next/no-unassigned-import":"warn","import-next/no-empty-named-blocks":"error","import-next/no-namespace":"warn"}},esm:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-amd":"error","import-next/no-commonjs":"error","import-next/no-import-module-exports":"error","import-next/unambiguous":"error","import-next/prefer-node-protocol":"error"}},architecture:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-cycle":"error","import-next/no-internal-modules":"error","import-next/no-cross-domain-imports":"error","import-next/enforce-dependency-direction":"error","import-next/no-restricted-paths":"error","import-next/no-relative-parent-imports":"warn","import-next/no-relative-packages":"error"}},errors:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-unresolved":"error","import-next/named":"error","import-next/default":"error","import-next/namespace":"error","import-next/export":"error"}},warnings:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-named-as-default":"warn","import-next/no-named-as-default-member":"warn","import-next/no-duplicates":"warn"}},performance:{plugins:{"import-next":exports.plugin},rules:{"import-next/no-barrel-file":"error","import-next/no-barrel-import":"warn","import-next/prefer-tree-shakeable-imports":"warn","import-next/prefer-direct-import":"warn","import-next/no-full-package-import":"warn","import-next/no-cycle":"error"}},enterprise:{plugins:{"import-next":exports.plugin},rules:{"import-next/enforce-team-boundaries":"off","import-next/no-legacy-imports":"off","import-next/no-cross-domain-imports":"warn","import-next/enforce-dependency-direction":"warn","import-next/no-internal-modules":"warn"}}};exports.default=exports.plugin;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.noBarrelFile=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");const DEFAULT_BARREL_PATTERNS=[".*[/\\\\]index\\.(ts|tsx|js|jsx|mts|mjs)$"];function matchesPattern(filePath,patterns){return patterns.some(pattern=>{try{const regex=new RegExp(pattern);return regex.test(filePath)}catch{return filePath.includes(pattern)}})}function isReexport(node){if(node.type===eslint_devkit_1.AST_NODE_TYPES.ExportAllDeclaration){return true}if(node.type===eslint_devkit_1.AST_NODE_TYPES.ExportNamedDeclaration&&node.source!==null){return true}return false}function splitSpecifierClause(node,importSourceByLocalName){const reexportSources=[];let hasLocalExport=false;for(const specifier of node.specifiers){if(specifier.exportKind==="type"||node.exportKind==="type"){continue}const localName=specifier.local.name;const source=importSourceByLocalName.get(localName);if(source===void 0){hasLocalExport=true}else{reexportSources.push(source)}}return{reexportSources,hasLocalExport}}function isLocalExport(node){if(node.type===eslint_devkit_1.AST_NODE_TYPES.ExportNamedDeclaration){return node.source===null&&node.declaration!==null}if(node.type===eslint_devkit_1.AST_NODE_TYPES.ExportDefaultDeclaration){return true}return false}function collectReexportSources(reexports,namedReexports){const sources=new Set;for(const node of[...reexports,...namedReexports]){if(node.source?.value){sources.add(String(node.source.value))}}return sources}exports.noBarrelFile=(0,eslint_devkit_1.createRule)({name:"no-barrel-file",meta:{type:"problem",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-barrel-file.md",description:"Disallow barrel files that harm build performance and tree-shaking efficiency"},messages:{barrelFileDetected:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.SECURITY,issueName:"Barrel File Detected",description:"This file re-exports {{reexportCount}} modules without adding local logic. Barrel files severely impact build performance and prevent effective tree-shaking.",severity:"MEDIUM",fix:"Replace barrel pattern with direct imports. Instead of: import { Button } from '@/components'; Use: import { Button } from '@/components/Button';",documentationLink:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-barrel-file.md"}),considerDirectExports:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Consider Direct Exports",description:"This file has a high ratio of re-exports ({{ratio}}%). Consider using direct imports for better tree-shaking.",severity:"LOW",fix:"Evaluate if consumers can import directly from source modules instead of through this barrel file.",documentationLink:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-barrel-file.md"})},schema:[{type:"object",properties:{threshold:{type:"number",minimum:1,default:3,description:"Minimum number of re-exports to consider a file a barrel"},allowedPaths:{type:"array",items:{type:"string"},default:[],description:"Regex patterns for paths where barrel files are allowed"},barrelPatterns:{type:"array",items:{type:"string"},default:DEFAULT_BARREL_PATTERNS,description:"File patterns considered barrel candidates"},allowWithLocalExports:{type:"boolean",default:false,description:"Allow barrel files that also export local declarations"},reexportRatio:{type:"number",minimum:0,maximum:1,default:.8,description:"Maximum allowed ratio of re-exports to total exports"}},additionalProperties:false}]},defaultOptions:[{threshold:3,allowedPaths:[],barrelPatterns:DEFAULT_BARREL_PATTERNS,allowWithLocalExports:false,reexportRatio:.8}],create(context,[options={}]){const{threshold=3,allowedPaths=[],barrelPatterns=DEFAULT_BARREL_PATTERNS,allowWithLocalExports=false,reexportRatio=.8}=options||{};const filename=context.filename;if(!matchesPattern(filename,barrelPatterns)){return{}}if(allowedPaths.length>0&&matchesPattern(filename,allowedPaths)){return{}}const exportAllDeclarations=[];const namedReexports=[];const localExports=[];const importSourceByLocalName=new Map;const indirectReexportSources=new Set;return{ImportDeclaration(node){if(node.importKind==="type")return;for(const specifier of node.specifiers){if(specifier.type===eslint_devkit_1.AST_NODE_TYPES.ImportSpecifier&&specifier.importKind==="type"){continue}importSourceByLocalName.set(specifier.local.name,String(node.source.value))}},ExportAllDeclaration(node){exportAllDeclarations.push(node)},ExportNamedDeclaration(node){if(isReexport(node)){namedReexports.push(node)}else if(isLocalExport(node)){localExports.push(node)}else{const{reexportSources,hasLocalExport}=splitSpecifierClause(node,importSourceByLocalName);for(const source of reexportSources){indirectReexportSources.add(source)}if(reexportSources.length>0){namedReexports.push(node)}if(hasLocalExport){localExports.push(node)}}},ExportDefaultDeclaration(node){if(isLocalExport(node)){localExports.push(node)}},"Program:exit"(node){const totalReexports=exportAllDeclarations.length+namedReexports.length;const totalExports=totalReexports+localExports.length;if(totalExports===0){return}const sources=new Set(indirectReexportSources);for(const source of collectReexportSources(exportAllDeclarations,namedReexports)){sources.add(source)}const sourceCount=sources.size;const hasLocalExports=localExports.length>0;if(allowWithLocalExports&&hasLocalExports){return}const ratio=totalReexports/totalExports;if(sourceCount>=threshold&&!hasLocalExports){context.report({node,messageId:"barrelFileDetected",data:{reexportCount:String(sourceCount)}})}else if(hasLocalExports&&sourceCount>=threshold&&ratio>=reexportRatio){context.report({node,messageId:"considerDirectExports",data:{ratio:String(Math.round(ratio*100))}})}}}}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.noBarrelFile=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");const DEFAULT_BARREL_PATTERNS=[".*[/\\\\]index\\.(ts|tsx|js|jsx|mts|mjs)$"];function matchesPattern(filePath,patterns){return patterns.some(pattern=>{try{const regex=new RegExp(pattern);return regex.test(filePath)}catch{return filePath.includes(pattern)}})}function isReexport(node){if(node.type===eslint_devkit_1.AST_NODE_TYPES.ExportAllDeclaration){return true}if(node.type===eslint_devkit_1.AST_NODE_TYPES.ExportNamedDeclaration&&node.source!==null){return true}return false}function splitSpecifierClause(node,importSourceByLocalName,typeOnlyImportNames){const reexportSources=[];let hasLocalExport=false;for(const specifier of node.specifiers){if(specifier.exportKind==="type"||node.exportKind==="type"){continue}const localName=specifier.local.name;if(typeOnlyImportNames.has(localName)){continue}const source=importSourceByLocalName.get(localName);if(source===void 0){hasLocalExport=true}else{reexportSources.push(source)}}return{reexportSources,hasLocalExport}}function isLocalExport(node){if(node.type===eslint_devkit_1.AST_NODE_TYPES.ExportNamedDeclaration){return node.source===null&&node.declaration!==null}if(node.type===eslint_devkit_1.AST_NODE_TYPES.ExportDefaultDeclaration){return true}return false}function collectReexportSources(reexports,namedReexports){const sources=new Set;for(const node of[...reexports,...namedReexports]){if(node.source?.value){sources.add(String(node.source.value))}}return sources}exports.noBarrelFile=(0,eslint_devkit_1.createRule)({name:"no-barrel-file",meta:{type:"problem",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-barrel-file.md",description:"Disallow barrel files that harm build performance and tree-shaking efficiency"},messages:{barrelFileDetected:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.SECURITY,issueName:"Barrel File Detected",description:"This file re-exports {{reexportCount}} modules without adding local logic. Barrel files severely impact build performance and prevent effective tree-shaking.",severity:"MEDIUM",fix:"Replace barrel pattern with direct imports. Instead of: import { Button } from '@/components'; Use: import { Button } from '@/components/Button';",documentationLink:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-barrel-file.md"}),considerDirectExports:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Consider Direct Exports",description:"This file has a high ratio of re-exports ({{ratio}}%). Consider using direct imports for better tree-shaking.",severity:"LOW",fix:"Evaluate if consumers can import directly from source modules instead of through this barrel file.",documentationLink:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-barrel-file.md"})},schema:[{type:"object",properties:{threshold:{type:"number",minimum:1,default:3,description:"Minimum number of re-exports to consider a file a barrel"},allowedPaths:{type:"array",items:{type:"string"},default:[],description:"Regex patterns for paths where barrel files are allowed"},barrelPatterns:{type:"array",items:{type:"string"},default:DEFAULT_BARREL_PATTERNS,description:"File patterns considered barrel candidates"},allowWithLocalExports:{type:"boolean",default:false,description:"Allow barrel files that also export local declarations"},reexportRatio:{type:"number",minimum:0,maximum:1,default:.8,description:"Maximum allowed ratio of re-exports to total exports"}},additionalProperties:false}]},defaultOptions:[{threshold:3,allowedPaths:[],barrelPatterns:DEFAULT_BARREL_PATTERNS,allowWithLocalExports:false,reexportRatio:.8}],create(context,[options={}]){const{threshold=3,allowedPaths=[],barrelPatterns=DEFAULT_BARREL_PATTERNS,allowWithLocalExports=false,reexportRatio=.8}=options||{};const filename=context.filename;if(!matchesPattern(filename,barrelPatterns)){return{}}if(allowedPaths.length>0&&matchesPattern(filename,allowedPaths)){return{}}const exportAllDeclarations=[];const namedReexports=[];const localExports=[];const sourcelessClauses=[];const importSourceByLocalName=new Map;const typeOnlyImportNames=new Set;const indirectReexportSources=new Set;return{ImportDeclaration(node){for(const specifier of node.specifiers){if(node.importKind==="type"||specifier.type===eslint_devkit_1.AST_NODE_TYPES.ImportSpecifier&&specifier.importKind==="type"){typeOnlyImportNames.add(specifier.local.name);continue}importSourceByLocalName.set(specifier.local.name,String(node.source.value))}},ExportAllDeclaration(node){exportAllDeclarations.push(node)},ExportNamedDeclaration(node){if(isReexport(node)){namedReexports.push(node)}else if(isLocalExport(node)){localExports.push(node)}else{sourcelessClauses.push(node)}},ExportDefaultDeclaration(node){if(isLocalExport(node)){localExports.push(node)}},"Program:exit"(node){for(const clause of sourcelessClauses){const{reexportSources,hasLocalExport}=splitSpecifierClause(clause,importSourceByLocalName,typeOnlyImportNames);for(const source of reexportSources){indirectReexportSources.add(source)}if(reexportSources.length>0){namedReexports.push(clause)}if(hasLocalExport){localExports.push(clause)}}const totalReexports=exportAllDeclarations.length+namedReexports.length;const totalExports=totalReexports+localExports.length;if(totalExports===0){return}const sources=new Set(indirectReexportSources);for(const source of collectReexportSources(exportAllDeclarations,namedReexports)){sources.add(source)}const sourceCount=sources.size;const hasLocalExports=localExports.length>0;if(allowWithLocalExports&&hasLocalExports){return}const ratio=totalReexports/totalExports;if(sourceCount>=threshold&&!hasLocalExports){context.report({node,messageId:"barrelFileDetected",data:{reexportCount:String(sourceCount)}})}else if(hasLocalExports&&sourceCount>=threshold&&ratio>=reexportRatio){context.report({node,messageId:"considerDirectExports",data:{ratio:String(Math.round(ratio*100))}})}}}}});