{"_id":"eslint-plugin-fsd-lint","_rev":"16-a59da03a89f0d3a046eb458662a25467","name":"eslint-plugin-fsd-lint","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.0":{"name":"eslint-plugin-fsd-lint","version":"1.0.0","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.0","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"dist":{"shasum":"9cecd3d012ffe346a48fa9b3606e27705ff71032","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.0.tgz","fileCount":9,"integrity":"sha512-UF/PeSrnW8f77gh8TpzikaXEDpnKlojbVIkPo13VhedQMa1aQv7ckyElpwu41G9aizdNYDapLgtAuKHOW3OqCw==","signatures":[{"sig":"MEQCID624HqJAhWk9F/5Rms8ntpdW73j0AcTWq68ZMwZWwyrAiBUY8yfty7jQSGxMG3IfyFxu/QQ2AH2oWDvKSc+9iAv6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10166},"main":"src/index.js","type":"module","gitHead":"29073ba23964164835fa57fc20c516e0c026cb3d","scripts":{"lint":"eslint .","test":"node tests/fsd-rules.test.js"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"_npmVersion":"10.9.0","description":"ESLint plugin for enforcing Feature-Sliced Design architecture","directories":{},"_nodeVersion":"22.4.1","dependencies":{"eslint":"^9.19.0"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.0_1738246856983_0.38516644343712225","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"eslint-plugin-fsd-lint","version":"1.0.1","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.1","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"dist":{"shasum":"999bfa162cc36fa721d8b6648aff3805ed3cf31a","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.1.tgz","fileCount":14,"integrity":"sha512-3t/yLoJVvzBp974Ed+Fejippqy8yoGOunAGrEHzs/cZWABaYlYqlNCNazcqXYF9kGP20cqeBovKvpc9cBFHv2Q==","signatures":[{"sig":"MEUCIGw+Amf6xRN19KWDLr0hvBDjU23WCb3qtSAAzKxZEYcbAiEAsHmuZZ4dcUwra7+qQG3D8KVTcpD1CIBkg1s9R/OiMak=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39156},"main":"src/index.js","type":"module","gitHead":"7557d3a5ed24891aebca246717ea38e0617e3857","scripts":{"lint":"eslint .","test":"node tests/fsd-rules.test.js"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"_npmVersion":"10.9.0","description":"ESLint plugin for enforcing Feature-Sliced Design architecture","directories":{},"_nodeVersion":"22.4.1","dependencies":{"eslint":"^9.19.0"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.1_1738252355506_0.17820601878428488","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"eslint-plugin-fsd-lint","version":"1.0.2","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.2","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"247c3cd7c516aab48cdcfed27eb261bb51069e04","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.2.tgz","fileCount":14,"integrity":"sha512-CQxXObFCHIzqQXrNObLEAKXXEoD61gPs4DrKANOvYEQ+u5OOvvZn7Ol8QLgCXCU/h9mEIqqc0xZVfwzIY0MUHw==","signatures":[{"sig":"MEQCIFcaaAbh3toEA4DO+oSGhyd9qjR3oajcgPtU25G0c7+yAiB+/GPgrwWThnnlHtvAq4dDbf2XpnQfTcNPcjfbw/Bs+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39456},"main":"src/index.js","type":"module","gitHead":"492986120fda95c1381befeed85234e8fba8e066","scripts":{"lint":"eslint .","test":"node tests/fsd-rules.test.js"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"10.9.0","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"22.4.1","dependencies":{"eslint":"^9.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.2_1738254346061_0.019481052338899518","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"eslint-plugin-fsd-lint","version":"1.0.3","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.3","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"da90a88e0fda92f6e30aaae3fff0f2e6ed298ec1","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.3.tgz","fileCount":14,"integrity":"sha512-T8gvUl/pdhMiaeTYms8/AWMShWoB9Fduog/lV3VkNyLkHK5gMGPxoOIc/EUp4O7ghFXC9o+KNVs87jSPAIaAWQ==","signatures":[{"sig":"MEYCIQCSO3PXsFEVmyJzZKRmaJpnoStS/Cr0mF0BZT5iXRYu6gIhAOCtlc7QBvgN5OMMEm7lKbDJNLIbKaPjlT92L8uIm2BI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39428},"main":"src/index.js","type":"module","gitHead":"48ba77210c3ef95c0804c745a52fb386ce5b7bf4","scripts":{"lint":"eslint .","test":"node tests/fsd-rules.test.js"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"10.9.0","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"22.4.1","dependencies":{"eslint":"^9.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.3_1738255478184_0.8465593373828391","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"eslint-plugin-fsd-lint","version":"1.0.4","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.4","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"7eb62f646a469bd37b102fb31a981c6a8c15a726","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.4.tgz","fileCount":15,"integrity":"sha512-w1tDkCWce7AeZ1m3irbSxXxSsghNkL+V51EoGLQ+nYvG4JYKujqsVCbrlvgkHlRF4ZouDbZYxzbiyonZoWnALw==","signatures":[{"sig":"MEQCIFKgSYTs1t75f3o6fF0nBmbjE+GyWzvJPC3PGTBXRrzCAiA1xJ5nF+P2et9kEKhhIK9S4N+EvlPIysbjFniSEV5Yvw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40309},"main":"src/index.js","type":"module","gitHead":"2aa296ef8038ba974552d47f5a0e2b67b408d165","scripts":{"lint":"eslint .","test":"node tests/fsd-rules.test.js"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"18.20.6","dependencies":{"eslint":"^9.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.4_1738256691672_0.08086719340913895","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"eslint-plugin-fsd-lint","version":"1.0.5","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.5","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"8a8c959b895e0981cb674be89c5f8d8c67b97a0c","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.5.tgz","fileCount":15,"integrity":"sha512-b4iNVQGDexHX/862D80ddyaIVDV6qsJI9Hz5HYf5IYkA6ktF1GKxgDotQSUqZ5ByzjItKx2/FhTuTAUED8jfPQ==","signatures":[{"sig":"MEUCID+6cYyFdKfPcvhghoYazwOWSq1++UV3DQkMp8lLk4/kAiEA6K7IbaQJXIdXYSIkNm2KOVs1lnpgoHT7xe7DjHajn4o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40650},"main":"src/index.js","type":"module","gitHead":"ba5c344fe294c79e74f925d2559f4fa5f7f3ab63","scripts":{"lint":"eslint .","test":"node tests/fsd-rules.test.js"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"18.20.6","dependencies":{"eslint":"^9.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.5_1738257396751_0.12931849075174395","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"eslint-plugin-fsd-lint","version":"1.0.6","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.6","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"f93b561b20adfcaa9cd1d5f0ea45cb8d3bc0ca45","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.6.tgz","fileCount":27,"integrity":"sha512-jn6D4WERHFNmpefJ9Uxxyv++wpLABtuc26gmzm2VQlzO7Tj55ByKXctUcapJ+/Q3pd6fn6w8clS7FpshpTPTqw==","signatures":[{"sig":"MEYCIQCWHSf6MjaFtv50ajPNH9R3YvSG0pYVr934+obdOFpfhgIhAOxoF4Vk40vp0yc+tPrWA/QH5O+I7S+5PrZqCcRUhkhm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":955841},"main":"src/index.js","type":"module","gitHead":"0aea2c4298cb53261af202201ed3676296fa4117","scripts":{"lint":"eslint .","test":"vitest run","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"10.9.0","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"22.4.1","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.21.0","vitest":"^3.0.7","@vitest/ui":"^3.0.7","@typescript-eslint/parser":"^8.25.0"},"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.6_1741007076378_0.5783204686354573","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"eslint-plugin-fsd-lint","version":"1.0.7","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.7","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"70f4120e6c0e281321bdc19b1b011b3506163407","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.7.tgz","fileCount":29,"integrity":"sha512-ba6rHxSEdMb3UtA2XKxIXFb9S/4gAGuxK1Ikr/EkVHR08LsD/Yi4ZZ9KaTbW6662p5j2v+W0d4tB2NZl3QjsyA==","signatures":[{"sig":"MEUCIQDtLUTnDh+1VNo1U9lTPkCJ8Lk0wMOQXnFqNYMV6lXcFgIgF73H4N0MwyUl6nLHvn+TJH0B0SW0i7pwXR8oO+vNdA4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":993001},"main":"src/index.js","type":"module","gitHead":"28f537ede3f0eb4394af047e7c163b138af1c6cd","scripts":{"lint":"eslint .","test":"vitest run","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"18.20.7","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.21.0","vitest":"^3.0.7","@vitest/ui":"^3.0.7","@typescript-eslint/parser":"^8.25.0"},"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.7_1742760367549_0.7963218987833218","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"eslint-plugin-fsd-lint","version":"1.0.8","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.8","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"a489691972be1c823ddb47cf7e7697660f8c2e37","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.8.tgz","fileCount":29,"integrity":"sha512-ZhsmBdXbE5taQn+qXE4Gzr5A4jTl4iMwjgufwyYgi41eiYqCXgktoE6c0PY40izFMJNZMB4PRYEkNvKMoh4Ibg==","signatures":[{"sig":"MEUCIFOGL7A6dO3lcnpWyHTuXXzuxqtU4wmZOsTANNlomUe8AiEA/RyYJa0cJXE0JYRssF/blFWoIvN/Oj9kFS7CKPphXaI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1005288},"main":"src/index.js","type":"module","gitHead":"06c292afb275893da6f899337a3a222d60d1e622","scripts":{"lint":"eslint .","test":"vitest run","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"18.20.7","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.21.0","vitest":"^3.0.7","@vitest/ui":"^3.0.7","@typescript-eslint/parser":"^8.25.0"},"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.8_1743700452616_0.45731299848299933","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"eslint-plugin-fsd-lint","version":"1.0.9","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.9","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"8d63f742792c70ccaa4e3e3cacc0f0256ed9fa44","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.9.tgz","fileCount":17,"integrity":"sha512-D5Rh40tX9oqD63uD4RfYK6ZfbsMOGEstTC/nbRWmE5S4AK+WB2dibISyw9LQ5BIoP77yew/SmJ7fZ1iIH5IneA==","signatures":[{"sig":"MEUCIQDJOqpz7v6aAtHszbjOkOhpwN5dmAnZgxHjZd5anhuNigIgTunh7PqrDG8xY1R1ZW6MHnwr5T5ZCW0YJM/9e/pdhqw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105425},"main":"src/index.js","type":"module","gitHead":"de2ac86959931f23dc4c47ed2109b1d6effd745e","scripts":{"lint":"eslint .","test":"vitest run","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"10.2.3","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.21.0","vitest":"^3.0.7","@vitest/ui":"^3.0.7","@typescript-eslint/parser":"^8.25.0"},"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.9_1745686861431_0.560674193489002","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"eslint-plugin-fsd-lint","version":"1.0.10","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.10","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"1ee125f17d9ed0619640f690789e3aefb1c7f932","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.10.tgz","fileCount":17,"integrity":"sha512-BquN7x02gTQXdaq8F5PLi4HsCb2caT3ix1TfnIjG82u4psvbl9mxWSsAZzuNJlpJ/oKXoYWMfhOopwbBlu1rLg==","signatures":[{"sig":"MEUCIQCdDY7oSKMwWp18wYeLFse1PvguzOpY7utM3LD7dZMFTAIgZ5R3bRJ1Bu2ZFmXck3ZFZRds7XJYYciFz/fqGm+seo8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109573},"main":"src/index.js","type":"module","gitHead":"0e76aa836909e739dd87272eaffe2696538c24fd","scripts":{"lint":"eslint .","test":"vitest run","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"18.20.8","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.21.0","vitest":"^3.0.7","@vitest/ui":"^3.0.7","@typescript-eslint/parser":"^8.25.0"},"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.10_1758992091885_0.3346922302789366","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"eslint-plugin-fsd-lint","version":"1.0.11","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.11","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"0e8310eaea7ffc25a8f9ade9725b6931de465d7c","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.11.tgz","fileCount":17,"integrity":"sha512-yhgU5Hplo6AnnnIFrywzB/YxrVP6uvQrzQTk6Efqv7QK9q7R7PRq9b76+rd8+8TFGlYowg9OEMLOUgD+zlIJ3w==","signatures":[{"sig":"MEUCIQDsZLG0YDoZo+0SJk3kqgG7YM3aTF/m1bhO3TbEbXD8LwIgbpiDujXWNh+FvwyDHyDSuvXC6dg/ikpsWpmGfx7J11c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100240},"main":"src/index.js","type":"module","gitHead":"bcc01be5cdbbbbb75dac264483e8d7aec4db5c75","scripts":{"lint":"eslint .","test":"vitest run","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"11.9.0","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.21.0","vitest":"^3.0.7","@vitest/ui":"^3.0.7","@typescript-eslint/parser":"^8.25.0"},"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.11_1774447547422_0.9531369208707339","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"eslint-plugin-fsd-lint","version":"1.0.12","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.0.12","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"5a15f1521d07187bbe324272c01a98a15a4a2aac","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.0.12.tgz","fileCount":20,"integrity":"sha512-9oEe6iIfANnWbRYb539IgkAGIhP8Fv/4CQPWZHQQQk/SlTW35/C6IIZARLyg3KjCtYvfinFm/ru8eSlyNZk2Hg==","signatures":[{"sig":"MEUCIDc1B9XE8eBlI+yYqgqCEt7cI/LdCAQ0GsOK9klgKmooAiEA2xLU2XnGDGfFE0TlXblWTzYDU+u0wRYaqOEhUYpdUbE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103523},"main":"src/index.js","type":"module","gitHead":"8bedd815ffcba42af7324ae4f0760b348b8ac145","scripts":{"lint":"eslint .","test":"vitest run","format":"prettier --write .","test:ui":"vitest --ui","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","lint:test-project":"cd test-project && npm run lint"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"11.11.0","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.21.0","vitest":"^3.0.7","globals":"^14.0.0","prettier":"3.8.1","@eslint/js":"^9.39.4","@vitest/ui":"^3.0.7","@typescript-eslint/parser":"^8.25.0"},"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.0.12_1776003245590_0.43744284253394605","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"eslint-plugin-fsd-lint","version":"1.1.0","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.1.0","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"664012696946a95e4f5d112969965a5ed8b6891e","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.1.0.tgz","fileCount":17,"integrity":"sha512-8YeC/zJdc2JIleajBeWhdg9IwaKDPoSANKmnVBk+t7pPI+3XkDAJGGf9j6PJzHEAyBxff4o94pH9CDMw43XAUw==","signatures":[{"sig":"MEUCIHomFftwZbatloWJltS3kJgDcQmBLjWzGcRhJcEKc8+qAiEA0f4/w+KVYkYXqZA9HNegZfPXviRs4z54pA+W5e0ZM+8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111565},"main":"src/index.js","type":"module","gitHead":"9b89539203b08d868008bd06e0100542bcefe59b","scripts":{"lint":"eslint .","test":"vitest run","format":"prettier --write .","test:ui":"vitest --ui","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","lint:test-project":"cd test-project && npm run lint","lint:test-project-next":"cd test-project-next && eslint src --ext .ts,.tsx"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"11.11.0","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.21.0","vitest":"^3.0.7","globals":"^14.0.0","prettier":"3.8.1","@eslint/js":"^9.39.4","@vitest/ui":"^3.0.7","@typescript-eslint/parser":"^8.25.0"},"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.1.0_1776008694503_0.7595762870999914","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"eslint-plugin-fsd-lint","version":"1.2.0","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","_id":"eslint-plugin-fsd-lint@1.2.0","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"dist":{"shasum":"0a0f2c7ebcfef4c442246e085b008ed06ead067b","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.2.0.tgz","fileCount":17,"integrity":"sha512-sH/NWWwCasNSeaXv0upIxWlRxUjKpWg2becBoY8Fg6ZMM3cmr8jVFwmJE5wgY0IY/GTrozAr0m7HbD6VpsW5gw==","signatures":[{"sig":"MEQCID6gQTaseUD74NsDcWfK0oUEx/cbCD15hgcfKxSFAEMDAiBnABhUJzFWx/sNYQAUb+LsNCKwD7z3W145XxHWOKi6aw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128131},"main":"src/index.js","type":"module","gitHead":"c60ec79d4e2767f7837990a39ff14cd051e7656d","scripts":{"lint":"eslint .","test":"vitest run","format":"prettier --write .","test:ui":"vitest --ui","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","lint:test-project":"cd test-project && npm run lint","lint:test-project-next":"cd test-project-next && eslint src --ext .ts,.tsx"},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"repository":{"url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git","type":"git"},"_npmVersion":"11.11.0","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.21.0","vitest":"^3.0.7","globals":"^14.0.0","prettier":"3.8.1","@eslint/js":"^9.39.4","@vitest/ui":"^3.0.7","@typescript-eslint/parser":"^8.25.0"},"peerDependencies":{"eslint":">=9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-fsd-lint_1.2.0_1777472224239_0.17438954491353664","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"eslint-plugin-fsd-lint","version":"1.2.1","description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","main":"src/index.js","type":"module","scripts":{"lint":"eslint .","lint:test-project":"cd test-project && npm run lint","lint:test-project-next":"cd test-project-next && eslint src --ext .ts,.tsx","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","test:ui":"vitest --ui","format":"prettier --write .","format:check":"prettier --check ."},"keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"author":{"name":"effozen"},"license":"MIT","devDependencies":{"@eslint/js":"^9.39.4","@typescript-eslint/parser":"^8.25.0","@vitest/ui":"^3.0.7","eslint":"^9.21.0","globals":"^14.0.0","prettier":"3.8.1","vitest":"^3.0.7"},"peerDependencies":{"eslint":">=9.0.0"},"repository":{"type":"git","url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git"},"bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","gitHead":"d0407ca600ba09ed83a8dafe83cde53bb521b2bf","_id":"eslint-plugin-fsd-lint@1.2.1","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-VzKMZMv6MPkkT9j1gQ6Nt99FNxuEend+Ax+zucoNSyUnliIBmbqMmDrHtin/ixRd17kGrj0KFcUdqKDIw7N4jg==","shasum":"a2608b9ac0a1a07645a2220a9cee6a3f1cb7a807","tarball":"https://registry.npmjs.org/eslint-plugin-fsd-lint/-/eslint-plugin-fsd-lint-1.2.1.tgz","fileCount":17,"unpackedSize":128131,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDJWijIWJoc9zxJ+EP4WGwOzyqX38/+r5tcSsA6w6V5CAIgLwiu8bIAhAGyo1WBfmi3RI7XdUil6so+jy7/ILjLZIE="}]},"_npmUser":{"name":"effozen","email":"ashgrayblue0@gmail.com"},"directories":{},"maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-plugin-fsd-lint_1.2.1_1777473301833_0.414729192388102"},"_hasShrinkwrap":false}},"time":{"created":"2025-01-30T14:20:56.875Z","modified":"2026-04-29T14:35:02.104Z","1.0.0":"2025-01-30T14:20:57.208Z","1.0.1":"2025-01-30T15:52:35.719Z","1.0.2":"2025-01-30T16:25:46.220Z","1.0.3":"2025-01-30T16:44:38.434Z","1.0.4":"2025-01-30T17:04:51.844Z","1.0.5":"2025-01-30T17:16:36.920Z","1.0.6":"2025-03-03T13:04:36.698Z","1.0.7":"2025-03-23T20:06:07.794Z","1.0.8":"2025-04-03T17:14:12.921Z","1.0.9":"2025-04-26T17:01:01.658Z","1.0.10":"2025-09-27T16:54:52.108Z","1.0.11":"2026-03-25T14:05:47.550Z","1.0.12":"2026-04-12T14:14:05.731Z","1.1.0":"2026-04-12T15:44:54.627Z","1.2.0":"2026-04-29T14:17:04.370Z","1.2.1":"2026-04-29T14:35:01.990Z"},"bugs":{"url":"https://github.com/effozen/eslint-plugin-fsd-lint/issues"},"author":{"name":"effozen"},"license":"MIT","homepage":"https://github.com/effozen/eslint-plugin-fsd-lint#readme","keywords":["eslint","plugin","feature-sliced-design","fsd","lint"],"repository":{"type":"git","url":"git+https://github.com/effozen/eslint-plugin-fsd-lint.git"},"description":"ESLint plugin for enforcing Feature-Sliced Design (FSD) architecture","maintainers":[{"name":"effozen","email":"ashgrayblue0@gmail.com"}],"readme":"# 🚀 eslint-plugin-fsd-lint\n\n[![npm version](https://img.shields.io/npm/v/eslint-plugin-fsd-lint)](https://www.npmjs.com/package/eslint-plugin-fsd-lint)\n[![npm downloads](https://img.shields.io/npm/dt/eslint-plugin-fsd-lint)](https://www.npmjs.com/package/eslint-plugin-fsd-lint)\n[![npm bundle size](https://img.shields.io/bundlephobia/min/eslint-plugin-fsd-lint)](https://bundlephobia.com/package/eslint-plugin-fsd-lint)\n[![License](https://img.shields.io/npm/l/eslint-plugin-fsd-lint)](https://github.com/effozen/eslint-plugin-fsd-lint/blob/main/LICENSE)\n\n[English](README.md) | [한국어](README.ko.md)\n\n> ESLint 9+ plugin for enforcing Feature-Sliced Design rules with Flat Config support.\n\n## Overview\n\n`eslint-plugin-fsd-lint` helps you keep a Feature-Sliced Design codebase predictable as it grows.\nIt focuses on the rules that usually start drifting first:\n\n- layer boundaries\n- public API discipline\n- same-layer slice isolation\n- relative import hygiene\n- UI/business-logic separation\n- stable import ordering\n\nIt is built for modern ESLint setups and works with:\n\n- ESLint 9+\n- Flat Config\n- JavaScript and TypeScript projects\n- Windows and Unix-style paths\n- both `@shared/...` and `@/shared/...` aliases\n- `tsconfig.json` / `jsconfig.json` `paths` and `baseUrl` mappings\n- custom folder naming like `1_app`, `2_pages`, `5_features`\n- custom source roots through `rootPath`\n\n---\n\n## Installation\n\nInstall the plugin and make sure ESLint 9+ is available in your project.\n\n```shell\nnpm install --save-dev eslint eslint-plugin-fsd-lint\n```\n\nOr with pnpm:\n\n```shell\npnpm add -D eslint eslint-plugin-fsd-lint\n```\n\n---\n\n## Quick Start\n\n### Recommended Preset\n\nUse the built-in preset if you want sensible defaults with minimal setup.\n\n```js\nimport fsdPlugin from \"eslint-plugin-fsd-lint\";\n\nexport default [fsdPlugin.configs.recommended];\n```\n\n### Strict Preset\n\nUse `strict` when you want all architectural checks to fail the build. This\npreset also requires slice-level public API imports and applies public API\nenforcement to `shared`.\n\n```js\nimport fsdPlugin from \"eslint-plugin-fsd-lint\";\n\nexport default [fsdPlugin.configs.strict];\n```\n\n### Base Preset\n\nUse `base` if you are gradually adopting FSD rules in an existing codebase.\n\n```js\nimport fsdPlugin from \"eslint-plugin-fsd-lint\";\n\nexport default [fsdPlugin.configs.base];\n```\n\n<details>\n<summary>Recommended preset configuration</summary>\n\n```js\n{\n  plugins: {\n    fsd: fsdPlugin,\n  },\n  rules: {\n    \"fsd/forbidden-imports\": \"error\",\n    \"fsd/no-cross-slice-dependency\": \"error\",\n    \"fsd/no-global-store-imports\": \"error\",\n    \"fsd/no-public-api-sidestep\": \"error\",\n    \"fsd/no-relative-imports\": \"error\",\n    \"fsd/no-ui-in-business-logic\": \"error\",\n    \"fsd/ordered-imports\": \"warn\",\n  },\n}\n```\n\n</details>\n\n<details>\n<summary>Strict preset configuration</summary>\n\n```js\n{\n  plugins: {\n    fsd: fsdPlugin,\n  },\n  rules: {\n    \"fsd/forbidden-imports\": \"error\",\n    \"fsd/no-cross-slice-dependency\": \"error\",\n    \"fsd/no-global-store-imports\": \"error\",\n    \"fsd/no-public-api-sidestep\": [\n      \"error\",\n      {\n        publicApi: {\n          allowSegmentImports: false,\n          enforceShared: true,\n        },\n      },\n    ],\n    \"fsd/no-relative-imports\": \"error\",\n    \"fsd/no-ui-in-business-logic\": \"error\",\n    \"fsd/ordered-imports\": \"error\",\n  },\n}\n```\n\n</details>\n\n<details>\n<summary>Base preset configuration</summary>\n\n```js\n{\n  plugins: {\n    fsd: fsdPlugin,\n  },\n  rules: {\n    \"fsd/forbidden-imports\": \"warn\",\n    \"fsd/no-cross-slice-dependency\": \"warn\",\n    \"fsd/no-global-store-imports\": \"error\",\n    \"fsd/no-public-api-sidestep\": \"warn\",\n    \"fsd/no-relative-imports\": \"off\",\n    \"fsd/no-ui-in-business-logic\": \"error\",\n    \"fsd/ordered-imports\": \"warn\",\n  },\n}\n```\n\n</details>\n\n### Manual Configuration\n\nUse manual configuration when you want fine-grained control over each rule.\n\n```js\nimport fsdPlugin from \"eslint-plugin-fsd-lint\";\n\nexport default [\n  {\n    plugins: {\n      fsd: fsdPlugin,\n    },\n    rules: {\n      \"fsd/forbidden-imports\": \"error\",\n      \"fsd/no-relative-imports\": \"error\",\n      \"fsd/no-public-api-sidestep\": \"error\",\n      \"fsd/no-cross-slice-dependency\": \"error\",\n      \"fsd/no-ui-in-business-logic\": \"error\",\n      \"fsd/no-global-store-imports\": \"error\",\n      \"fsd/ordered-imports\": \"warn\",\n    },\n  },\n];\n```\n\n---\n\n## What The Rules Enforce\n\n- **Layer direction**: higher layers cannot import from lower-priority layers they should not know about.\n- **Slice isolation**: one slice cannot reach directly into another slice in the same layer.\n- **Public APIs**: other slices should import through `index.ts`, `index.js`, or allowed segment-level public entry points.\n- **Stable imports**: cross-slice and cross-layer imports should use aliases instead of brittle relative paths.\n- **Business logic purity**: model/api/lib code should not pull UI code into places where it does not belong.\n- **Readable import blocks**: FSD imports are grouped in a predictable order.\n\n---\n\n## Common Configuration Options\n\nSeveral rules support the same core options.\n\n| Option                 | Purpose                                                                                                                                             | Example                                                         |\n| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |\n| `alias`                | Defines the import alias format for your project.                                                                                                   | `{ value: '@', withSlash: false }`                              |\n| `rootPath`             | Tells the plugin where the FSD tree starts in the absolute file path. Useful for monorepos or nested apps.                                          | `'/apps/web/src/'`                                              |\n| `tsconfigPath`         | Points the resolver at a specific `tsconfig.json` / `jsconfig.json`. Optional — when omitted, the plugin walks up from the linted file to find one. | `'./tsconfig.json'`                                             |\n| `folderPattern`        | Supports numbered or customized layer directory names.                                                                                              | `{ enabled: true, regex: '^(\\\\d+_)?(.*)', extractionGroup: 2 }` |\n| `testFilesPatterns`    | Allows test files to bypass specific architectural rules.                                                                                           | `['**/*.test.*', '**/*.spec.*']`                                |\n| `ignoreImportPatterns` | Skips selected import paths for a rule.                                                                                                             | `['/types$', '^virtual:']`                                      |\n\n### `rootPath` Example\n\nIf your project does not start directly at `/src/`, set `rootPath` so file-path based rules can still resolve the current layer and slice correctly.\n\n```js\nimport fsdPlugin from \"eslint-plugin-fsd-lint\";\n\nexport default [\n  {\n    plugins: {\n      fsd: fsdPlugin,\n    },\n    rules: {\n      \"fsd/forbidden-imports\": [\"error\", { rootPath: \"/apps/storefront/src/\" }],\n      \"fsd/no-cross-slice-dependency\": [\n        \"error\",\n        { rootPath: \"/apps/storefront/src/\" },\n      ],\n      \"fsd/no-ui-in-business-logic\": [\n        \"error\",\n        { rootPath: \"/apps/storefront/src/\" },\n      ],\n    },\n  },\n];\n```\n\nTypical `rootPath` values:\n\n- `'/src/'`\n- `'/apps/web/src/'`\n- `'/packages/admin/src/'`\n- `'/src/root/'`\n\nThe value should match a stable segment inside the absolute path ESLint sees for your files.\n\n### Filesystem-aware Import Resolution\n\nLayer and slice information is now derived from the resolved file path, not from the literal text of an import. Each rule resolves an import in this order:\n\n1. `tsconfig.json` / `jsconfig.json` `paths` (longest pattern wins, multiple targets fall through until one exists on disk)\n2. `tsconfig.json` `baseUrl`\n3. The configured FSD `alias` against `rootPath`\n4. Relative path resolution against the importing file\n5. Legacy string parsing (used when no real file can be resolved, for example when an alias is declared in a bundler config but not in `tsconfig.json`)\n\nThis is what closes the same-slice false positives that previously appeared with aliased imports. For example, given a `tsconfig.json` that maps `@articles/*` to `src/pages/articles/*`, the following stays inside the `articles` slice and is no longer reported:\n\n```ts\n// src/pages/articles/ui/articles-pending-page.tsx\nimport { articleSections } from \"@articles/api/queries\";\nimport { ArticlesLayout } from \"@articles/ui/articles-page\";\n```\n\nBy default the resolver walks upward from the linted file looking for `tsconfig.json` or `jsconfig.json`. When that is not the file you want, point each rule at an explicit one with `tsconfigPath`:\n\n```js\nimport fsdPlugin from \"eslint-plugin-fsd-lint\";\n\nexport default [\n  {\n    plugins: {\n      fsd: fsdPlugin,\n    },\n    rules: {\n      \"fsd/forbidden-imports\": [\n        \"error\",\n        {\n          rootPath: \"/apps/web/src/\",\n          tsconfigPath: \"./apps/web/tsconfig.json\",\n        },\n      ],\n      \"fsd/no-cross-slice-dependency\": [\n        \"error\",\n        {\n          rootPath: \"/apps/web/src/\",\n          tsconfigPath: \"./apps/web/tsconfig.json\",\n        },\n      ],\n      \"fsd/no-public-api-sidestep\": [\n        \"error\",\n        {\n          rootPath: \"/apps/web/src/\",\n          tsconfigPath: \"./apps/web/tsconfig.json\",\n        },\n      ],\n    },\n  },\n];\n```\n\nResolution falls back to legacy string parsing whenever a target file cannot be located, so projects that rely on bundler-only aliases continue to work as before.\n\n### Next.js App Router and Custom Layer Folder Names\n\nNext.js App Router projects can keep Next's route files in `src/app` and use FSD layers for the rest of the application.\n\nThe recommended setup is to keep the standard FSD layer folder names (`app`, `pages`, `widgets`, `features`, `entities`, `shared`). Without a `layers` override, the plugin uses its built-in FSD folder names (`app`, `processes`, `pages`, `widgets`, `features`, `entities`, `shared`) by default, so existing projects that still use `processes` remain supported. Custom layer folder names are supported for existing projects, migrations, or framework constraints, but they are not recommended as a default choice because they make FSD conventions less recognizable.\n\nIf your project uses `screens` instead of the FSD `pages` folder name, map the `pages` layer to the `screens` folder with `layers.pages.pattern` in `eslint.config.js`. The same pattern works for other layer folder names as well. Keep the canonical FSD layer keys in the config and set each layer's `pattern` to the folder name used by your project.\n\n```js\nimport fsdPlugin from \"eslint-plugin-fsd-lint\";\n\nconst fsdOptions = {\n  rootPath: \"/src/\",\n  alias: {\n    value: \"@\",\n    withSlash: true,\n  },\n  layers: {\n    app: {\n      pattern: \"app\",\n    },\n    pages: {\n      pattern: \"screens\",\n    },\n    widgets: {\n      pattern: \"blocks\",\n    },\n    features: {\n      pattern: \"actions\",\n    },\n    entities: {\n      pattern: \"domain\",\n    },\n    shared: {\n      pattern: \"common\",\n    },\n  },\n  ignoreImportPatterns: [\"\\\\.css$\"],\n};\n\nexport default [\n  {\n    files: [\"src/**/*.{js,jsx,ts,tsx}\"],\n    plugins: {\n      fsd: fsdPlugin,\n    },\n    rules: {\n      \"fsd/forbidden-imports\": [\"error\", fsdOptions],\n      \"fsd/no-cross-slice-dependency\": [\"error\", fsdOptions],\n      \"fsd/no-public-api-sidestep\": [\"error\", fsdOptions],\n      \"fsd/no-relative-imports\": [\n        \"error\",\n        {\n          ...fsdOptions,\n          allowSameSlice: true,\n        },\n      ],\n      \"fsd/no-global-store-imports\": \"error\",\n      \"fsd/ordered-imports\": [\"warn\", fsdOptions],\n    },\n  },\n];\n```\n\n```text\nsrc/\n├── app/\n│   ├── layout.tsx\n│   ├── page.tsx\n│   └── api/health/route.ts\n├── screens/\n│   └── dashboard/\n├── blocks/\n├── actions/\n├── domain/\n└── common/\n```\n\nOptions such as `allowedToImport`, `excludeLayers`, `publicApi.enforceForLayers`, and `ordered-imports.customOrder` still use the canonical layer keys (`app`, `pages`, `widgets`, `features`, `entities`, `shared`). The `pattern` value is the folder/import segment used on disk.\nFor new projects, prefer the standard layer folder names unless there is a clear reason to do otherwise.\n\n---\n\n## Advanced Configuration\n\n```js\nimport fsdPlugin from \"eslint-plugin-fsd-lint\";\n\nexport default [\n  {\n    plugins: {\n      fsd: fsdPlugin,\n    },\n    rules: {\n      \"fsd/forbidden-imports\": [\n        \"error\",\n        {\n          rootPath: \"/apps/web/src/\",\n          alias: {\n            value: \"@\",\n            withSlash: false,\n          },\n          folderPattern: {\n            enabled: true,\n            regex: \"^(\\\\d+_)?(.*)\",\n            extractionGroup: 2,\n          },\n        },\n      ],\n      \"fsd/no-cross-slice-dependency\": [\n        \"error\",\n        {\n          rootPath: \"/apps/web/src/\",\n          featuresOnly: false,\n          allowTypeImports: true,\n        },\n      ],\n      \"fsd/no-ui-in-business-logic\": [\n        \"error\",\n        {\n          rootPath: \"/apps/web/src/\",\n          businessLogicLayers: [\"model\", \"api\", \"lib\"],\n          uiLayers: [\"ui\", \"widgets\", \"features\"],\n        },\n      ],\n      \"fsd/no-relative-imports\": [\n        \"error\",\n        {\n          allowSameSlice: true,\n          allowTypeImports: false,\n        },\n      ],\n    },\n  },\n];\n```\n\n---\n\n## Example Project Structure\n\n```text\nsrc/\n├── app/\n│   ├── providers/\n│   ├── store/\n│   └── index.ts\n├── processes/\n├── pages/\n│   └── login/\n│       ├── ui/\n│       └── index.ts\n├── widgets/\n│   └── header/\n│       ├── ui/\n│       └── index.ts\n├── features/\n│   └── auth/\n│       ├── api/\n│       ├── lib/\n│       ├── model/\n│       ├── ui/\n│       └── index.ts\n├── entities/\n│   └── user/\n│       ├── model/\n│       ├── ui/\n│       └── index.ts\n└── shared/\n    ├── api/\n    ├── config/\n    ├── lib/\n    └── ui/\n```\n\nNumbered folders also work when `folderPattern` is enabled:\n\n```text\nsrc/\n├── 1_app/\n├── 2_pages/\n├── 3_widgets/\n├── 4_features/\n├── 5_entities/\n└── 6_shared/\n```\n\n---\n\n## Rules\n\n| Rule                            | What it protects                                     | Key options                                                       |\n| ------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------- |\n| `fsd/forbidden-imports`         | Layer direction and invalid layer-to-layer imports   | `alias`, `rootPath`, `folderPattern`, `ignoreImportPatterns`      |\n| `fsd/no-relative-imports`       | Relative imports across slices or layers             | `allowSameSlice`, `allowTypeImports`, `ignoreImportPatterns`      |\n| `fsd/no-public-api-sidestep`    | Direct access to internal modules                    | `publicApi`, `ignoreImportPatterns`                               |\n| `fsd/no-cross-slice-dependency` | Direct dependencies between slices in the same layer | `rootPath`, `featuresOnly`, `allowTypeImports`, `excludeLayers`   |\n| `fsd/no-ui-in-business-logic`   | UI imports inside model/api/lib code                 | `rootPath`, `uiLayers`, `businessLogicLayers`, `allowTypeImports` |\n| `fsd/no-global-store-imports`   | Direct store imports                                 | `ignoreImportPatterns`                                            |\n| `fsd/ordered-imports`           | Stable FSD import ordering                           | no options                                                        |\n\n---\n\n## Rule Examples\n\n### `fsd/forbidden-imports`\n\n```js\n// features/auth/model/service.ts\n\n// ✅ allowed\nimport { getUser } from \"@entities/user\";\nimport { Button } from \"@shared/ui/Button\";\n\n// ❌ forbidden\nimport { LoginPage } from \"@pages/login\";\n```\n\n### `fsd/no-relative-imports`\n\n```js\n// features/auth/ui/LoginForm.tsx\n\n// ✅ same-slice relative import\nimport { validateCredentials } from \"../lib/validation\";\n\n// ❌ cross-layer relative import\nimport { store } from \"../../../app/store\";\n\n// ✅ cross-layer alias import\nimport { store } from \"@app/store\";\n```\n\n### `fsd/no-public-api-sidestep`\n\n```js\n// ✅ public API import\nimport { authModel } from \"@features/auth\";\n\n// ✅ segment-level public import\nimport { userModel } from \"@entities/user/model\";\n\n// ❌ deep internal file import\nimport { authSlice } from \"@features/auth/model/slice\";\n```\n\nFor stricter projects, segment-level public API imports can be disabled and the\n`shared` layer can be included in public API enforcement:\n\n```js\nexport default [\n  {\n    rules: {\n      \"fsd/no-public-api-sidestep\": [\n        \"error\",\n        {\n          publicApi: {\n            allowSegmentImports: false,\n            enforceShared: true,\n          },\n        },\n      ],\n    },\n  },\n];\n```\n\n### `fsd/no-cross-slice-dependency`\n\n```js\n// features/auth/model/service.ts\n\n// ❌ direct dependency on another feature slice\nimport { profileService } from \"@features/profile/model/service\";\n\n// ✅ dependency through lower layer\nimport { getProfile } from \"@entities/profile\";\n```\n\n### `fsd/no-ui-in-business-logic`\n\n```js\n// entities/user/model/user.ts\n\n// ❌ business logic importing UI\nimport { Header } from \"@widgets/header\";\n\n// ✅ business logic importing data or helpers\nimport { formatDate } from \"@shared/lib/date\";\n```\n\n### `fsd/no-global-store-imports`\n\n```js\n// ❌ direct store import\nimport { store } from \"@app/store\";\n\n// ✅ use app wiring, hooks, or selectors instead\nimport { useSelector } from \"react-redux\";\n```\n\n### `fsd/ordered-imports`\n\n```js\n// Before\nimport { processPayment } from \"@features/payment\";\nimport { getUser } from \"@entities/user\";\nimport { formatCurrency } from \"@shared/lib/currency\";\nimport { useStore } from \"@app/store\";\n\n// After --fix\nimport { useStore } from \"@app/store\";\n\nimport { processPayment } from \"@features/payment\";\n\nimport { getUser } from \"@entities/user\";\n\nimport { formatCurrency } from \"@shared/lib/currency\";\n```\n\n---\n\n## Auto-fix Support\n\n`fsd/ordered-imports` supports ESLint auto-fix.\n\n```shell\nnpx eslint --fix .\n```\n\n---\n\n## Troubleshooting\n\n### My app lives inside a monorepo package\n\nUse `rootPath` on rules that rely on the current file path:\n\n```js\n'fsd/forbidden-imports': ['error', { rootPath: '/packages/web/src/' }],\n'fsd/no-cross-slice-dependency': ['error', { rootPath: '/packages/web/src/' }],\n'fsd/no-ui-in-business-logic': ['error', { rootPath: '/packages/web/src/' }],\n```\n\n### I use `@/shared/...` instead of `@shared/...`\n\n```js\n'fsd/forbidden-imports': ['error', {\n  alias: {\n    value: '@',\n    withSlash: true,\n  },\n}]\n```\n\n### I use numbered layer directories\n\n```js\n'fsd/forbidden-imports': ['error', {\n  folderPattern: {\n    enabled: true,\n    regex: '^(\\\\d+_)?(.*)',\n    extractionGroup: 2,\n  },\n}]\n```\n\n---\n\n## Development\n\n```shell\nnpm run lint\nnpm test\n```\n\n---\n\n## Contributing\n\nIssues and pull requests are welcome. Please include tests and documentation updates for any new rule or behavior change.\n","readmeFilename":"README.md"}