eslint-plugin-import-next 2.7.5 → 2.7.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-import-next",
3
- "version": "2.7.5",
3
+ "version": "2.7.6",
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.7.5"},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","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-inline"]}},"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.7.6"},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","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-inline"]}},"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.enforceDependencyDirection=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");const eslint_devkit_2=require("@interlace/eslint-devkit");const eslint_devkit_3=require("@interlace/eslint-devkit");function arraysEqual(a,b){if(a.length!==b.length)return false;return a.every((val,index)=>val===b[index])}function extractLayer(filePath,layerPatterns){const normalizedPath=(0,eslint_devkit_3.normalizePath)(filePath);for(const pattern of layerPatterns){if(normalizedPath.includes(`/${pattern}/`)||normalizedPath.includes(`\\${pattern}\\`)||normalizedPath.startsWith(`${pattern}/`)||normalizedPath.startsWith(`${pattern}\\`)){return pattern}}return null}function getLayerOrder(layer,layers){if(!layer){return-1}const index=layers.indexOf(layer);return index>=0?index:-1}exports.enforceDependencyDirection=(0,eslint_devkit_2.createRule)({name:"enforce-dependency-direction",meta:{type:"problem",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/enforce-dependency-direction.md",description:"Ensures dependencies flow in the correct architectural direction"},hasSuggestions:true,messages:{dependencyDirectionViolation:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.ARCHITECTURE,issueName:"Dependency direction violation",description:"Import from {{targetLayer}} to {{sourceLayer}} violates dependency direction",severity:"HIGH",fix:"Use dependency inversion or refactor dependency",documentationLink:"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"}),useDependencyInversion:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Use Dependency Inversion",description:"Use dependency inversion principle",severity:"LOW",fix:"Depend on interfaces/abstractions, not implementations",documentationLink:"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"}),refactorDependency:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Refactor Dependency",description:"Refactor to respect dependency direction",severity:"LOW",fix:"Move import to correct layer",documentationLink:"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"})},schema:[{type:"object",properties:{layers:{type:"array",items:{type:"string"},default:["domain","application","infrastructure","presentation"],description:"Layer definitions with dependency order"},layerPatterns:{type:"array",items:{type:"string"},default:["domain","application","infrastructure","presentation","ui","api"],description:"Layer directory patterns"},allowSameLayer:{type:"boolean",default:true,description:"Allow same-layer imports"}},additionalProperties:false}]},defaultOptions:[{layers:["domain","application","infrastructure","presentation"],layerPatterns:["domain","application","infrastructure","presentation","ui","api"],allowSameLayer:true}],create(context,[options={}]){const filename=context.filename;const{layers:providedLayers,layerPatterns:providedLayerPatterns,allowSameLayer=true}=options||{};const layers=providedLayers||["domain","application","infrastructure","presentation"];const defaultLayerPatterns=["domain","application","infrastructure","presentation","ui","api"];let layerPatterns;if(providedLayerPatterns&&!arraysEqual(providedLayerPatterns,defaultLayerPatterns)){layerPatterns=providedLayerPatterns}else if(providedLayers){layerPatterns=providedLayers}else{layerPatterns=defaultLayerPatterns}const sourceLayer=extractLayer(filename,layerPatterns);const sourceOrder=getLayerOrder(sourceLayer,layers);function checkImport(node){let importPath="";if(node.type==="ImportDeclaration"){importPath=node.source.value}else if(node.type==="ImportExpression"){if(node.source.type==="Literal"){importPath=node.source.value}else{return}}if(!importPath.startsWith(".")){return}let targetLayer=null;const segments=importPath.split(/[/\\]/);for(const segment of segments){if(layerPatterns.includes(segment.toLowerCase())){targetLayer=segment.toLowerCase();break}}if(!targetLayer){for(const pattern of layerPatterns){const regex=new RegExp(`[/\\\\]${pattern}[/\\\\]`,"i");if(regex.test(importPath)){targetLayer=pattern;break}}}const targetOrder=getLayerOrder(targetLayer,layers);if(sourceOrder<0||targetOrder<0){return}if(allowSameLayer&&sourceLayer===targetLayer){return}if(targetOrder>sourceOrder){context.report({node,messageId:"dependencyDirectionViolation",data:{sourceLayer,targetLayer},suggest:[{messageId:"useDependencyInversion",fix:()=>null},{messageId:"refactorDependency",fix:()=>null}]})}}return{ImportDeclaration:checkImport,ImportExpression:checkImport}}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.enforceDependencyDirection=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");const eslint_devkit_2=require("@interlace/eslint-devkit");const eslint_devkit_3=require("@interlace/eslint-devkit");function arraysEqual(a,b){if(a.length!==b.length)return false;return a.every((val,index)=>val===b[index])}function extractLayer(filePath,layerPatterns){const normalizedPath=(0,eslint_devkit_3.normalizePath)(filePath);for(const pattern of layerPatterns){if(normalizedPath.includes(`/${pattern}/`)||normalizedPath.includes(`\\${pattern}\\`)||normalizedPath.startsWith(`${pattern}/`)||normalizedPath.startsWith(`${pattern}\\`)){return pattern}}return null}function getLayerOrder(layer,layers){if(!layer){return-1}const index=layers.indexOf(layer);return index>=0?index:-1}exports.enforceDependencyDirection=(0,eslint_devkit_2.createRule)({name:"enforce-dependency-direction",meta:{type:"problem",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/enforce-dependency-direction.md",description:"Ensures dependencies flow in the correct architectural direction"},hasSuggestions:true,messages:{dependencyDirectionViolation:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.ARCHITECTURE,issueName:"Dependency direction violation",description:"Import from {{targetLayer}} to {{sourceLayer}} violates dependency direction",severity:"HIGH",fix:"Use dependency inversion or refactor dependency",documentationLink:"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"}),useDependencyInversion:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Use Dependency Inversion",description:"Use dependency inversion principle",severity:"LOW",fix:"Depend on interfaces/abstractions, not implementations",documentationLink:"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"}),refactorDependency:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Refactor Dependency",description:"Refactor to respect dependency direction",severity:"LOW",fix:"Move import to correct layer",documentationLink:"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"})},schema:[{type:"object",properties:{layers:{type:"array",items:{type:"string"},default:["domain","application","infrastructure","presentation"],description:"Layer definitions with dependency order"},layerPatterns:{type:"array",items:{type:"string"},default:["domain","application","infrastructure","presentation","ui","api"],description:"Layer directory patterns"},allowSameLayer:{type:"boolean",default:true,description:"Allow same-layer imports"}},additionalProperties:false}]},defaultOptions:[{layers:["domain","application","infrastructure","presentation"],layerPatterns:["domain","application","infrastructure","presentation","ui","api"],allowSameLayer:true}],create(context,[options={}]){const filename=context.filename;const{layers:providedLayers,layerPatterns:providedLayerPatterns,allowSameLayer=true}=options||{};const layers=providedLayers||["domain","application","infrastructure","presentation"];const defaultLayerPatterns=["domain","application","infrastructure","presentation","ui","api"];let layerPatterns;if(providedLayerPatterns&&!arraysEqual(providedLayerPatterns,defaultLayerPatterns)){layerPatterns=providedLayerPatterns}else if(providedLayers){layerPatterns=providedLayers}else{layerPatterns=defaultLayerPatterns}const sourceLayer=extractLayer(filename,layerPatterns);const sourceOrder=getLayerOrder(sourceLayer,layers);function checkImport(node){let importPath="";if(node.type==="ImportDeclaration"){importPath=node.source.value}else if(node.type==="ImportExpression"){if(node.source.type==="Literal"){if(typeof node.source.value!=="string")return;importPath=node.source.value}else{return}}if(!importPath.startsWith(".")){return}let targetLayer=null;const segments=importPath.split(/[/\\]/);for(const segment of segments){if(layerPatterns.includes(segment.toLowerCase())){targetLayer=segment.toLowerCase();break}}if(!targetLayer){for(const pattern of layerPatterns){const regex=new RegExp(`[/\\\\]${pattern}[/\\\\]`,"i");if(regex.test(importPath)){targetLayer=pattern;break}}}const targetOrder=getLayerOrder(targetLayer,layers);if(sourceOrder<0||targetOrder<0){return}if(allowSameLayer&&sourceLayer===targetLayer){return}if(targetOrder>sourceOrder){context.report({node,messageId:"dependencyDirectionViolation",data:{sourceLayer,targetLayer},suggest:[{messageId:"useDependencyInversion",fix:()=>null},{messageId:"refactorDependency",fix:()=>null}]})}}return{ImportDeclaration:checkImport,ImportExpression:checkImport}}});
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.noCrossDomainImports=void 0;exports.violatesDomainBoundary=violatesDomainBoundary;const eslint_devkit_1=require("@interlace/eslint-devkit");const eslint_devkit_2=require("@interlace/eslint-devkit");const eslint_devkit_3=require("@interlace/eslint-devkit");function extractDomain(filePath,domainPatterns){const normalizedPath=(0,eslint_devkit_3.normalizePath)(filePath);for(const pattern of domainPatterns){const regex=new RegExp(`(?:^|[/\\\\])${pattern}[/\\\\]([^/\\\\]+)`,"i");const match=normalizedPath.match(regex);if(match&&match[1]){return match[1]}}return null}function isSharedModule(filePath,allowedSharedModules){const normalizedPath=(0,eslint_devkit_3.normalizePath)(filePath);for(const shared of allowedSharedModules){if(normalizedPath.includes(`/${shared}/`)||normalizedPath.includes(`\\${shared}\\`)){return true}}return false}function violatesDomainBoundary(sourceFile,importPath,options){const{domainPatterns=["domains","features","modules"],allowedSharedModules=["shared","common","utils"],customRules=[]}=options||{};if(!importPath.startsWith(".")){return{violates:false,sourceDomain:null,targetDomain:null}}const sourceDomain=extractDomain(sourceFile,domainPatterns);let targetDomain=null;{for(const pattern of domainPatterns){const regex=new RegExp(`[/\\\\]${pattern}[/\\\\]([^/\\\\]+)`,"i");const match=importPath.match(regex);if(match&&match[1]){targetDomain=match[1];break}}if(!targetDomain){const segments=importPath.split(/[/\\]/);if(segments.length>=3&&segments[0]===".."&&segments[1]!=="."&&segments[1]!==".."&&segments[1]!==""&&segments[2]!==""&&segments.filter(s=>s==="..").length===1){const potentialDomain=segments[1];if(domainPatterns.some(p=>p.toLowerCase().includes(potentialDomain.toLowerCase())||potentialDomain.toLowerCase().includes(p))){targetDomain=potentialDomain}else if(["product","order"].includes(potentialDomain)){targetDomain=potentialDomain}}}}if(!sourceDomain||!targetDomain){return{violates:false,sourceDomain,targetDomain}}if(sourceDomain===targetDomain){return{violates:false,sourceDomain,targetDomain}}if(isSharedModule(importPath,allowedSharedModules)){return{violates:false,sourceDomain,targetDomain}}for(const rule of customRules){if(sourceFile.includes(rule.from)){const isAllowed=rule.allowed?.some(allowed=>importPath.includes(allowed));if(isAllowed){return{violates:false,sourceDomain,targetDomain}}if(rule.to.some(to=>importPath.includes(to))){return{violates:true,sourceDomain,targetDomain}}}}return{violates:true,sourceDomain,targetDomain}}exports.noCrossDomainImports=(0,eslint_devkit_2.createRule)({name:"no-cross-domain-imports",meta:{type:"problem",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-cross-domain-imports.md",description:"Prevents imports across domain/feature boundaries"},hasSuggestions:true,messages:{crossDomainImport:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.ARCHITECTURE,issueName:"Cross-domain import",description:"Import from {{targetDomain}} to {{sourceDomain}} violates domain boundaries",severity:"HIGH",fix:"Use shared modules, events, or application services",documentationLink:"https://martinfowler.com/bliki/BoundedContext.html"}),useSharedModule:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Use Shared Module",description:"Move shared code to shared module",severity:"LOW",fix:"Extract to shared/ or common/ directory",documentationLink:"https://martinfowler.com/bliki/BoundedContext.html"}),useEvents:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Use Events",description:"Use event-driven communication",severity:"LOW",fix:"Publish events instead of direct imports",documentationLink:"https://martinfowler.com/eaaDev/DomainEvent.html"}),useApplicationService:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Use Application Service",description:"Use application service layer",severity:"LOW",fix:"Route through application service for cross-domain calls",documentationLink:"https://martinfowler.com/bliki/BoundedContext.html"})},schema:[{type:"object",properties:{domainPatterns:{type:"array",items:{type:"string"},default:["domains","features","modules"],description:"Domain/feature directory patterns"},allowedSharedModules:{type:"array",items:{type:"string"},default:["shared","common","utils"],description:"Shared modules that can be imported"},ignoreNodeModules:{type:"boolean",default:true,description:"Ignore imports from node_modules"},customRules:{type:"array",items:{type:"object",properties:{from:{type:"string"},to:{type:"array",items:{type:"string"}},allowed:{type:"array",items:{type:"string"}}},required:["from","to"]},default:[],description:"Custom domain boundary rules"}},additionalProperties:false}]},defaultOptions:[{domainPatterns:["domains","features","modules"],allowedSharedModules:["shared","common","utils"],ignoreNodeModules:true,customRules:[]}],create(context,[options={}]){const filename=context.filename;function checkImport(node){let importPath="";if(node.type==="ImportDeclaration"){importPath=node.source.value}else if(node.type==="ImportExpression"){if(node.source.type==="Literal"){importPath=node.source.value}else{return}}if(importPath.startsWith(".")){const violation=violatesDomainBoundary(filename,importPath,options);if(violation.violates&&violation.sourceDomain&&violation.targetDomain){context.report({node,messageId:"crossDomainImport",data:{sourceDomain:violation.sourceDomain,targetDomain:violation.targetDomain},suggest:[{messageId:"useSharedModule",fix:()=>null},{messageId:"useEvents",fix:()=>null},{messageId:"useApplicationService",fix:()=>null}]})}}}return{ImportDeclaration:checkImport,ImportExpression:checkImport}}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.noCrossDomainImports=void 0;exports.violatesDomainBoundary=violatesDomainBoundary;const eslint_devkit_1=require("@interlace/eslint-devkit");const eslint_devkit_2=require("@interlace/eslint-devkit");const eslint_devkit_3=require("@interlace/eslint-devkit");function extractDomain(filePath,domainPatterns){const normalizedPath=(0,eslint_devkit_3.normalizePath)(filePath);for(const pattern of domainPatterns){const regex=new RegExp(`(?:^|[/\\\\])${pattern}[/\\\\]([^/\\\\]+)`,"i");const match=normalizedPath.match(regex);if(match&&match[1]){return match[1]}}return null}function isSharedModule(filePath,allowedSharedModules){const normalizedPath=(0,eslint_devkit_3.normalizePath)(filePath);for(const shared of allowedSharedModules){if(normalizedPath.includes(`/${shared}/`)||normalizedPath.includes(`\\${shared}\\`)){return true}}return false}function violatesDomainBoundary(sourceFile,importPath,options){const{domainPatterns=["domains","features","modules"],allowedSharedModules=["shared","common","utils"],customRules=[]}=options||{};if(!importPath.startsWith(".")){return{violates:false,sourceDomain:null,targetDomain:null}}const sourceDomain=extractDomain(sourceFile,domainPatterns);let targetDomain=null;{for(const pattern of domainPatterns){const regex=new RegExp(`[/\\\\]${pattern}[/\\\\]([^/\\\\]+)`,"i");const match=importPath.match(regex);if(match&&match[1]){targetDomain=match[1];break}}if(!targetDomain){const segments=importPath.split(/[/\\]/);if(segments.length>=3&&segments[0]===".."&&segments[1]!=="."&&segments[1]!==".."&&segments[1]!==""&&segments[2]!==""&&segments.filter(s=>s==="..").length===1){const potentialDomain=segments[1];if(domainPatterns.some(p=>p.toLowerCase().includes(potentialDomain.toLowerCase())||potentialDomain.toLowerCase().includes(p))){targetDomain=potentialDomain}else if(["product","order"].includes(potentialDomain)){targetDomain=potentialDomain}}}}if(!sourceDomain||!targetDomain){return{violates:false,sourceDomain,targetDomain}}if(sourceDomain===targetDomain){return{violates:false,sourceDomain,targetDomain}}if(isSharedModule(importPath,allowedSharedModules)){return{violates:false,sourceDomain,targetDomain}}for(const rule of customRules){if(sourceFile.includes(rule.from)){const isAllowed=rule.allowed?.some(allowed=>importPath.includes(allowed));if(isAllowed){return{violates:false,sourceDomain,targetDomain}}if(rule.to.some(to=>importPath.includes(to))){return{violates:true,sourceDomain,targetDomain}}}}return{violates:true,sourceDomain,targetDomain}}exports.noCrossDomainImports=(0,eslint_devkit_2.createRule)({name:"no-cross-domain-imports",meta:{type:"problem",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-import-next/docs/rules/no-cross-domain-imports.md",description:"Prevents imports across domain/feature boundaries"},hasSuggestions:true,messages:{crossDomainImport:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.ARCHITECTURE,issueName:"Cross-domain import",description:"Import from {{targetDomain}} to {{sourceDomain}} violates domain boundaries",severity:"HIGH",fix:"Use shared modules, events, or application services",documentationLink:"https://martinfowler.com/bliki/BoundedContext.html"}),useSharedModule:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Use Shared Module",description:"Move shared code to shared module",severity:"LOW",fix:"Extract to shared/ or common/ directory",documentationLink:"https://martinfowler.com/bliki/BoundedContext.html"}),useEvents:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Use Events",description:"Use event-driven communication",severity:"LOW",fix:"Publish events instead of direct imports",documentationLink:"https://martinfowler.com/eaaDev/DomainEvent.html"}),useApplicationService:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.INFO,issueName:"Use Application Service",description:"Use application service layer",severity:"LOW",fix:"Route through application service for cross-domain calls",documentationLink:"https://martinfowler.com/bliki/BoundedContext.html"})},schema:[{type:"object",properties:{domainPatterns:{type:"array",items:{type:"string"},default:["domains","features","modules"],description:"Domain/feature directory patterns"},allowedSharedModules:{type:"array",items:{type:"string"},default:["shared","common","utils"],description:"Shared modules that can be imported"},ignoreNodeModules:{type:"boolean",default:true,description:"Ignore imports from node_modules"},customRules:{type:"array",items:{type:"object",properties:{from:{type:"string"},to:{type:"array",items:{type:"string"}},allowed:{type:"array",items:{type:"string"}}},required:["from","to"]},default:[],description:"Custom domain boundary rules"}},additionalProperties:false}]},defaultOptions:[{domainPatterns:["domains","features","modules"],allowedSharedModules:["shared","common","utils"],ignoreNodeModules:true,customRules:[]}],create(context,[options={}]){const filename=context.filename;function checkImport(node){let importPath="";if(node.type==="ImportDeclaration"){importPath=node.source.value}else if(node.type==="ImportExpression"){if(node.source.type==="Literal"){if(typeof node.source.value!=="string")return;importPath=node.source.value}else{return}}if(importPath.startsWith(".")){const violation=violatesDomainBoundary(filename,importPath,options);if(violation.violates&&violation.sourceDomain&&violation.targetDomain){context.report({node,messageId:"crossDomainImport",data:{sourceDomain:violation.sourceDomain,targetDomain:violation.targetDomain},suggest:[{messageId:"useSharedModule",fix:()=>null},{messageId:"useEvents",fix:()=>null},{messageId:"useApplicationService",fix:()=>null}]})}}}return{ImportDeclaration:checkImport,ImportExpression:checkImport}}});