{"_id":"@conarti/eslint-plugin-feature-sliced","_rev":"32-2d95b74200ac656f8ae090ecfbd182c0","name":"@conarti/eslint-plugin-feature-sliced","dist-tags":{"next":"2.0.0","latest":"2.0.1"},"versions":{"1.0.3":{"name":"@conarti/eslint-plugin-feature-sliced","version":"1.0.3","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"conarti"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@1.0.3","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-fsd#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-fsd/issues"},"dist":{"shasum":"890da35f51da55f1e459c1e282e52a3e8cc13ee2","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-1.0.3.tgz","fileCount":68,"integrity":"sha512-6MlAdU86uExnGxjtOGtLJvIp0B9OwoiJ1yDtvpDOcwtHO2H3q+4qdTkAxB1KKSn9yIIP0DGtEQ1skcE15BH97w==","signatures":[{"sig":"MEUCIBmuEokZP+NMMrApbMnaWsulyiriXfYgLziAQVZgIzSiAiEAitAGtF5zoz9ur1yCMgBBdi4wA1n/bwHRdLSS9LqNqmk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77699},"main":"./dist/index.js","engines":{"node":"^14.17.0 || ^16.0.0 || >= 18.0.0"},"exports":{".":"./dist/index.js","./import-order":"./dist/configs/import-order/index.js"},"gitHead":"aa345e7a7685710c7ee9c5e071081c7fc9f8691d","scripts":{"lint":"npm-run-all \"lint:*\"","test":"vitest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf ./dist","lint:js":"eslint .","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-fsd.git","type":"git"},"_npmVersion":"8.19.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"16.20.0","dependencies":{"picomatch":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"execa":"5.1.1","eslint":"^8.42.0","rimraf":"^5.0.1","semver":"^7.3.8","vitest":"^0.32.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.32.0","picocolors":"^1.0.0","typescript":"^4.9.5","@types/node":"^20.2.5","npm-run-all":"^4.1.5","@types/eslint":"^8.40.2","@tsconfig/node14":"^1.0.3","@types/picomatch":"^2.3.0","eslint-plugin-node":"^11.1.0","@vitest/coverage-v8":"^0.32.0","eslint-plugin-import":"^2.27.5","eslint-plugin-vitest":"^0.2.6","@typescript-eslint/utils":"^5.59.9","@typescript-eslint/parser":"^5.53.0","eslint-config-airbnb-base":"^15.0.0","@total-typescript/ts-reset":"^0.4.2","conventional-changelog-cli":"^2.2.2","eslint-plugin-eslint-plugin":"^5.0.0","eslint-plugin-unused-imports":"^2.0.0","eslint-plugin-filenames-simple":"^0.8.0","@typescript-eslint/eslint-plugin":"^5.59.9","eslint-import-resolver-typescript":"^3.5.5"},"peerDependencies":{"eslint":">=7","eslint-plugin-import":">=2.26"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_1.0.3_1687888898544_0.7039705239736171","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@conarti/eslint-plugin-feature-sliced","version":"1.0.4","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"conarti"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@1.0.4","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-fsd#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-fsd/issues"},"dist":{"shasum":"ebf86af55f2d2e9a78d7c7dbfd666c2bc5b7b507","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-1.0.4.tgz","fileCount":68,"integrity":"sha512-YG5VKp8g4NhpiJrSXTlyfiFDx2bj8IcYPX1r3Iyt0BmRD6JdEGpdVZ2d7knRRwYO0t3JfWkTbrC12oAs9uq6RQ==","signatures":[{"sig":"MEQCIHsV0Sd1dzPtN7eh7XgnnSnMjZiCUlTJJKC9my4l6HnKAiAZaxJpajm5HuSEX9+whBJmpikf/snwfiF/fWKOlOKBHg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":78155},"main":"./dist/index.js","engines":{"node":"^14.17.0 || ^16.0.0 || >= 18.0.0"},"exports":{".":"./dist/index.js","./import-order":"./dist/configs/import-order/index.js"},"gitHead":"436de747a5c4a4e89da888005b236c415e0e63a5","scripts":{"lint":"npm-run-all \"lint:*\"","test":"vitest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf ./dist","lint:js":"eslint .","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-fsd.git","type":"git"},"_npmVersion":"8.19.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"16.20.0","dependencies":{"picomatch":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"execa":"5.1.1","eslint":"^8.42.0","rimraf":"^5.0.1","semver":"^7.3.8","vitest":"^0.32.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.32.0","picocolors":"^1.0.0","typescript":"^4.9.5","@types/node":"^20.2.5","npm-run-all":"^4.1.5","@types/eslint":"^8.40.2","@tsconfig/node14":"^1.0.3","@types/picomatch":"^2.3.0","eslint-plugin-node":"^11.1.0","@vitest/coverage-v8":"^0.32.0","eslint-plugin-import":"^2.27.5","eslint-plugin-vitest":"^0.2.6","@typescript-eslint/utils":"^5.59.9","@typescript-eslint/parser":"^5.53.0","eslint-config-airbnb-base":"^15.0.0","@total-typescript/ts-reset":"^0.4.2","conventional-changelog-cli":"^2.2.2","eslint-plugin-eslint-plugin":"^5.0.0","eslint-plugin-unused-imports":"^2.0.0","eslint-plugin-filenames-simple":"^0.8.0","@typescript-eslint/eslint-plugin":"^5.59.9","eslint-import-resolver-typescript":"^3.5.5"},"peerDependencies":{"eslint":">=7","eslint-plugin-import":">=2.26"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_1.0.4_1688406175784_0.4945369748954651","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@conarti/eslint-plugin-feature-sliced","version":"1.0.5","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"conarti"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@1.0.5","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-fsd#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-fsd/issues"},"dist":{"shasum":"7f177b673256f066221a73363f2f1b6a5a8612bc","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-1.0.5.tgz","fileCount":76,"integrity":"sha512-Gx90Zupi8nv6cCP3O6cYWE9GT4RIw0D9JBHWeUwXEv7qmjCd3dXSqDEmQchN7k41hhCPupZvMevH4JrSORcVjQ==","signatures":[{"sig":"MEQCIBk1ALDf+3mbRTEq0df4I4E3fGkcsgcTjHdnm+tO/0rvAiBPo9oenHXR+6KK+bAqbgpFmR8zyfunlPp2BEpCH/fuNQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":82830},"main":"./dist/index.js","engines":{"node":"^14.17.0 || ^16.0.0 || >= 18.0.0"},"exports":{".":"./dist/index.js","./import-order":"./dist/configs/import-order/index.js"},"gitHead":"45e0aa4428f42d7ac9fd4d9eb74ca159bdc9ce63","scripts":{"lint":"npm-run-all \"lint:*\"","test":"vitest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf ./dist","lint:js":"eslint .","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-fsd.git","type":"git"},"_npmVersion":"8.19.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"16.20.0","dependencies":{"picomatch":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"execa":"5.1.1","eslint":"^8.45.0","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^4.9.5","@types/node":"^20.4.2","npm-run-all":"^4.1.5","@types/eslint":"^8.44.0","@tsconfig/node14":"^14.1.0","@types/picomatch":"^2.3.0","eslint-plugin-node":"^11.1.0","@vitest/coverage-v8":"^0.33.0","eslint-plugin-import":"^2.27.5","eslint-plugin-vitest":"^0.2.6","@typescript-eslint/utils":"^6.1.0","@typescript-eslint/parser":"^6.1.0","eslint-config-airbnb-base":"^15.0.0","@total-typescript/ts-reset":"^0.4.2","conventional-changelog-cli":"^2.2.2","eslint-plugin-eslint-plugin":"^5.1.1","eslint-plugin-unused-imports":"^3.0.0","eslint-plugin-filenames-simple":"^0.8.0","eslint-plugin-modules-newlines":"^0.0.7","@typescript-eslint/eslint-plugin":"^6.1.0","eslint-import-resolver-typescript":"^3.5.5"},"peerDependencies":{"eslint":">=7","eslint-plugin-import":">=2.26"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_1.0.5_1691524825035_0.2478345175616219","host":"s3://npm-registry-packages"}},"2.0.0-rc.1":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.1","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.1","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-fsd#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-fsd/issues"},"dist":{"shasum":"6ab365c0661101471c6622956633881026fc4f88","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.1.tgz","fileCount":7,"integrity":"sha512-kGZaroz5/mfW7xngpth/do6OQNhT71Xg9syudMtFwlQcE+mjm4RnNUcY/x678Ggl3QcvnabEu4CkKT0fwz+GkQ==","signatures":[{"sig":"MEQCIDMzDGWO00RYQJybrRpmhQgoBZYOkK6oKyRvsnYkei2HAiB64G3yQ1GCc1GO2jO8FISU77UsD6TIC9O1e23zeL5bHQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97459},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"cd1f39ac411ff05a26744e7444afcf8f9cd2da5b","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","typecheck":"tsc --noEmit","docs:build":"vitepress build docs","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-fsd.git","type":"git"},"_npmVersion":"10.8.2","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"20.18.0","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.3.1","@typescript-eslint/utils":"^8.8.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.3.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@typescript-eslint/parser":"^8.8.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.1_1733605577791_0.7104517494232574","host":"s3://npm-registry-packages"}},"2.0.0-rc.2":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.2","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.2","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-fsd#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-fsd/issues"},"dist":{"shasum":"b31141bf3a6871a9c42faf58a93b6fa1dc21be08","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.2.tgz","fileCount":7,"integrity":"sha512-t+ZUC7HBaxywS/4/3hZzB1XxvnVG6jMOrlkEMKfLyOFiXUDMZnwSAsTJ01PYxLhCJIhbDsbulmSI82jsY0YtDA==","signatures":[{"sig":"MEUCIAe3KjEHFIOI+3P1yU00RP27OB4tfTZuFiS3gPVNq6yrAiEA7LQqwcDta6pgm98xaScn1pn2VmQTUcWqmQvWF/GX0oo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93455},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"dd9d2aa5b73626e6dd2d67857388e9bba36de5a9","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","typecheck":"tsc --noEmit","docs:build":"vitepress build docs","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-fsd.git","type":"git"},"_npmVersion":"10.9.3","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.18.0","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.3.1","@typescript-eslint/utils":"^8.8.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@typescript-eslint/parser":"^8.8.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.2_1758108742250_0.15731344604354525","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.3":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.3","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.3","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-fsd#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-fsd/issues"},"dist":{"shasum":"a11ddf286c8019a5723ddd0eb4c4c67baff69a09","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.3.tgz","fileCount":7,"integrity":"sha512-k+IfysuKELhwFz6SAnJJqFjj1jCxn1BpNoZl2a+mSi/xsTJvBfVTcXAsmblHZuZn58N+cuFPHuaXgwCEBdebLw==","signatures":[{"sig":"MEQCIEdqrIVfDWBiGHztM/Msi5EQyS3Zew+VgeRZvf2JMxIKAiAsHoQ53Jp4IUYOzE1uxxP49RqX9EzwrpfIVPaeN+fldw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93648},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"037052ec2a4272dd5a6647ab8f4aaf857643173c","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-fsd.git","type":"git"},"_npmVersion":"10.9.3","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.18.0","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.3_1761644059699_0.7740532176665742","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.4":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.4","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.4","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-fsd#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-fsd/issues"},"dist":{"shasum":"17a592b9ec96557a77cdd77640d0b9a7bba2f877","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.4.tgz","fileCount":7,"integrity":"sha512-Y7DkLFRKPUvuKf0M2pmVP6GVAYnHdvFKKly2tip5LxsSsxeBie+NlacBo+/INmRalFILYsSQkhwNfxgrkqdeSg==","signatures":[{"sig":"MEYCIQCYj6J6xUA+Pd7CqkEXxgC4mSADZBa4zVSSdbZj5383yQIhAO26qAedc272D7v2HEz44YtddDN+zzEfKLG09jEyw2sd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95160},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"1430c9a4c74f571e343c85d44a01e3bb334514dc","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-fsd.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.21.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.4_1766592993601_0.584963041643678","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.5":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.5","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.5","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"9c6f8fb7345baf6f87814e6d76bbb2b1746eb54e","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.5.tgz","fileCount":7,"integrity":"sha512-m/s+H+vr/zfh1Id8usVXXTztg2qUyjXeMrGXRig6ti62vS40nu7MELWRJrnQZfkvNDmyXvEJDbsduUMnfXCGdA==","signatures":[{"sig":"MEUCIQDAfTHVUTC5pASabXnj/RYJxzpz7fR6zrY9dwaClPQ/rgIgAb1wdWVPP5hCKL9SuAyz+nfw9t+c085Xs6FkbVrC2UA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117580},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b1f08f8426863780752c881c06b372a6037717ee","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.21.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.5_1768565263206_0.5156126502401888","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.6":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.6","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.6","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"cfb969e48dcf2106eb0bacf6ad1aad152b1b6ba1","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.6.tgz","fileCount":7,"integrity":"sha512-BC8uZ35/nKqjmMZNuVW4PJbLq1w+f/V9LGYq6kEA4vCn3+0kbDoyCxT06knF2qoZM9+xpYZ9BmhGrNWBrAlGBQ==","signatures":[{"sig":"MEUCIG2QgKBtGkGUsAqjwPJFdA1g+Z/pqg4LE3VPOELz0+nwAiEAjG51x7gGWiAhSb6LfoV307VAAxqpkhVlRPZKD+YcX/0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":119184},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9e883d5ef8017cf02900c4ccc344be9f904186f4","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.21.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.6_1768568768260_0.12992377647802655","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.7":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.7","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.7","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"982a63ec1f531fafb6d0d263ce3a4b0ab8dd1c30","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.7.tgz","fileCount":7,"integrity":"sha512-7JsOz6R1ijBANqeGSZ7w2Xjk+tyThLZE2x9Z2Axgh+oYNju6QLdWm3kLnQmA8Av1CpT3lQpGFAm1Ls5uGgSwsQ==","signatures":[{"sig":"MEUCIQDk98Bx/2rY5K9vttpSLw6tZ2MDfX8r5fOac8Uk83p5ugIgE3D3Ofe0pAKvMaDJN2Hx+hezxcjUjttiA9HlkAGo/nI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136038},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"8eec7f2ab1060cbe0505df6cf162ddb0d2555f45","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.7_1774510221187_0.5190725841996024","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.8":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.8","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.8","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"d7f522c4440f07b884483025ebe5ce4cb83407b5","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.8.tgz","fileCount":7,"integrity":"sha512-u4nt9tMAbevVJPs5s6wJy9RKNB4Re3AkuZcfLd+7KlkvULwgjYumg3rmY+CMJT+5oM+cH36kqNia/LIXLY2uyw==","signatures":[{"sig":"MEUCIQDv9E2AEi5l4LDZoBCaXQ+6SutGbIEKjVR9CWPnF8wqnQIgdDiGK279aIwSqYq9pwWi20Jaua1GR1uaKq0g2jWKReI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136038},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"90470a3a073bf19ca42677633460e59980a48b0c","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.8_1774518421031_0.801233186236856","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.9":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.9","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.9","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"9ce64fdde99c39fd24e8443aa7d854d29fd6d1ed","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.9.tgz","fileCount":7,"integrity":"sha512-46pFgmrpJPOXBvN977dTTprvx3sZtQsyIRqe/OAx0B1Z0+5diyurdIWeBsn+Re+jwHFTOFglXox+W4Tqhynayw==","signatures":[{"sig":"MEUCIQCV1DJXZSs0DW4iFKOXK+y5uVWJBwkhk4aikyMDS9jQ4wIgGEk6XNRpHbpcrDBb6ayoHhUy4RnQGnAuP6fR5I53o5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146069},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"7d5203264191c5d75ef893fd854461667c2b9f2a","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.9_1774598087680_0.9069070043743954","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.10":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.10","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.10","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"61a2741a901aae07ec48ff60969e75d6907defcb","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.10.tgz","fileCount":7,"integrity":"sha512-qR98xBd8twhmDOrb/7uN4BNNc9g+XZL/+JgsWq++5TqJVOjTmUnLKMU9YnFrThRw9Vs1rzlIA7ZvxTjlXSO4CA==","signatures":[{"sig":"MEYCIQDkuthtPv2BKCEKUbMMv8FOTGjoW1DpkKFUPJKYidLlOAIhAOs2nHcWcPEYUXIqgn5JZOGmelbnEWR0+fz+VpkXkdwo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147286},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"986c4df053796cb075eecda0cad6044e94f260f3","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.10_1774601210781_0.6723147461336321","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.11":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.11","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.11","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"2797c227c5bf215bfec2242224df9defad7a7118","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.11.tgz","fileCount":7,"integrity":"sha512-o/u+mFisTpVnC/W8v06kDmZdQmaYQNBlJesgWABuJRIMneL3lqnO0vW4znmnu2USmSrvLigyM1tIj5BUwrRUyw==","signatures":[{"sig":"MEYCIQCmVf+oyNcJLGuj5+B2ZdHyWiLrouyKRob7suF/ia6gxQIhAPIyPNCzP9Gi/KOYoOQ0IC2sXl7hgIxrcysfdcxMAKCI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147560},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0aa4553007cb93108ef3b417c25a157a59ca0658","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.11_1774858388415_0.7938067388586425","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.12":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.12","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.12","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"4d0e2e6d67196cfe331278cfc8ee1a3ffb5f32d6","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.12.tgz","fileCount":7,"integrity":"sha512-sZvadKiDN5zmGvmFNP8xL7WEhiFtnrtynz6wwlXUzqQ62c6b2PQ4nXJL0qH5Vk+PmguwzqoQGoh1aZ4ZOxmnwg==","signatures":[{"sig":"MEQCIDTxWbQGygg0aZ/wpcPUDjxAAtmf8jRRr2tpe6JaW3XiAiB0fC2rpX3xwI3BdXSNmEhAW25q/2assaIHoTY+xqRylQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147560},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ec8622eca8e065ec7b006c0759975eb4d46a65bc","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.12_1774859913881_0.1912411318830456","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.13":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.13","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.13","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"b1309e784aa65c962ccb59da3a2fb97b58933534","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.13.tgz","fileCount":7,"integrity":"sha512-vwLtH7mZp7aDrsT96EG6LAxd8lzqCtqkDAZBxPkYJ/exV4BhoOQeEJpt58q2MpCihgBW2kr9vyntyFHxREZsDg==","signatures":[{"sig":"MEQCIDnHchtwKaWPKqk2H9KYebD+zloHCdSpbVxMIjHdNe6TAiA10AVmrt6bof7T1UZ5f2YwXWzXNba1IMS3Xn7ZUoLtfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147844},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"229aee7b005f1c72517627d20e2d8ae059b7d2ac","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.13_1774861783346_0.5915884495862136","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.14":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.14","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.14","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"25f9bb00a1aa6d989065ef606141206fa5d23ae0","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.14.tgz","fileCount":7,"integrity":"sha512-MSc5I/HFC+CZ6Rl3O54JGw7c7GNRg4lb0zdO+RrXolS95u7fFC+/TCZacd2qFV6SXNV0nJHrYXi5GCgMeWVHFQ==","signatures":[{"sig":"MEUCIQC7gjka5f90QYmJAeUITTS6NZQ8sH4r05t+TyVhIQ46qQIgLWxlNTHC3+1L0DtQyqihVuVWsORLgQh9T+mYLxxruPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148188},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b04f4669a4640bed31b278b39a012460c9807650","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.14_1775202652788_0.1433936842258483","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.15":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.15","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.15","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"dd4bef59cab1a77573eb7794d0ebe9fd46cd2aa5","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.15.tgz","fileCount":7,"integrity":"sha512-f9nPZIJOVanpO6+UaDn2M2oHb14QWmEIU1gRB047Ahdm25IAduw0YW/+HMq9pUe8yOp8sNLPGvEB786gJnt1FA==","signatures":[{"sig":"MEUCIQCD5jsg7m6jVzZOfzch3TEkj4FjoU3jrCX+HDqf7YEgGgIgWIJzYrsOBHFGvpRiJsswF2CyD3KZRyRrHsIgs1G6xIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148552},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 18.0.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"1fd73f311a98ef251eeef4affa8d292fd795c113","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","watch":"tsup --format esm,cjs --watch","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"10.9.4","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@semantic-release/git":"^10.0.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@semantic-release/changelog":"^6.0.3","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.15_1775203259021_0.9798449893225905","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.16":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0-rc.16","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0-rc.16","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"1d6e4188d60df0d4a88ce5616937683849a91fc9","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0-rc.16.tgz","fileCount":7,"integrity":"sha512-dTQ1wT0IzLg/95kQsAtbcv5tBfwKhOmtm9teAcW/7T9ebsBeMJZ+uSjDfZIVNMaTPzLZIaOkAsYXqT5Fn0DI5g==","signatures":[{"sig":"MEYCIQD+zZxurBsJrNFQlKdQng3BBNFQn1qSREWYEVPUJW+vHgIhANOGRsmw4gg/0Wqi9AvOL12r64hQlW8y+9jpt3rePxNe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG+6LSA0mcVKw3b+32CrGIQRIz2tlpSD3BOMV5ufNoEQAiEAkwzRmcdbnIcBnrE8bMkomjho7uhc9Uyq5AFD+pYs0Y8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150492},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"957f478c93bc9eaa539613a109c2672efb380a86","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","smoke":"node scripts/smoke.mjs","watch":"tsup --format esm,cjs --watch","prepack":"npm run build","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"conarti","email":"abelous2009@gmail.com"},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"11.17.0","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"24.19.0","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0","eslint-flat-config-utils":"^0.4.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^0.33.0","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^0.33.0","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^20.4.2","@types/eslint":"^9.6.1","@types/picomatch":"^2.3.0","semantic-release":"^24.2.0","@vitest/coverage-v8":"^0.33.0","@antfu/eslint-config":"^3.7.3","eslint-plugin-vitest":"^0.5.4","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@typescript-eslint/rule-tester":"^8.45.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0-rc.16_1789488450396_0.3794776645617848","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@conarti/eslint-plugin-feature-sliced","version":"2.0.0","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","_id":"@conarti/eslint-plugin-feature-sliced@2.0.0","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"87128851a14eb30ea50c9b14285bf20a62c7f6d8","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.0.tgz","fileCount":7,"integrity":"sha512-p5kx6qljQv3KMK4o1koqlv558xgg2HE5M/2XEa0yCho8klMoyK1tFVye16uc7sSeYW20zihdUefzo4+tMm27yg==","signatures":[{"sig":"MEUCIQDGrgW5nIMBWObl0yqqumten/1HGHjsihFeZydXsQZ1uQIgIMZ+FNeaZTQzaX9QJ8VXHG9gKN3FunwBxow5+9m2iGk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDYW/hz2scHQReA3Ha3EmhF8E9A2zxiylvCW/vCmYatKAiEA97NfCH6HRiHhZzK8+ciTc+tqxLoHdaomzul9hI1jdRk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@conarti%2feslint-plugin-feature-sliced@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":171308},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"dad1089ed3daa903b400e74968a91ef336afa32f","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","knip":"knip","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","smoke":"node scripts/smoke.mjs","watch":"tsup --format esm,cjs --watch","prepack":"npm run build","prepare":"patch-package","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","verify:tests":"node scripts/verify/check-t.cjs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage","test:mutation":"stryker run --incremental","verify:coverage":"node scripts/verify/check-c.cjs","verify:mutation":"node scripts/verify/check-m.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11e74041-7e68-4aa8-beb0-2387a71faf2a"}},"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"11.19.1","description":"Feature-sliced design methodology plugin","directories":{},"_nodeVersion":"24.20.0","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^6.36.0","tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^5.0.1","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^5.0.1","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^22.20.2","patch-package":"^8.0.1","@types/picomatch":"^2.3.0","semantic-release":"^25.0.9","@vitest/coverage-v8":"^5.0.1","@antfu/eslint-config":"^3.7.3","@stryker-mutator/core":"^10.0.0","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@stryker-mutator/vitest-runner":"^10.0.0","@typescript-eslint/rule-tester":"^8.45.0","@semantic-release/release-notes-generator":"^14.1.0"},"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-feature-sliced_2.0.0_1789652813994_0.6389901814234935","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"_id":"@conarti/eslint-plugin-feature-sliced@2.0.1","bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"dist":{"shasum":"66b0d06e70c2dcdd9bd34eeabb9eaa1b76a764ae","tarball":"https://registry.npmjs.org/@conarti/eslint-plugin-feature-sliced/-/eslint-plugin-feature-sliced-2.0.1.tgz","fileCount":7,"integrity":"sha512-mekanK9sbKs2ddzpFqfYjmgPSojEW1zUdmkK8jKpsa65liHa//ygq10qfcliM561/OFBZcf6LLzGK1er/BT1Rg==","signatures":[{"sig":"MEUCIQCcxOp5zqTQK67Oso5H1zE5gaJJVwt48DtAt5/IIngU6wIgKdq13bEr5BKFMx/BvdE4/0jsK50aahvDGe2fZbBEe5Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCewayVW+kGa8Mkn5EMa8EQFeOfPSyzgTAl/8gihIKiRQIhAL2Z2Qs5v8ngYV0rp2fWEwaQvgUk/7G1BZIdYGc0apLd"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@conarti%2feslint-plugin-feature-sliced@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":179667},"main":"./dist/index.js","name":"@conarti/eslint-plugin-feature-sliced","type":"module","types":"./dist/index.d.ts","author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"8ea337cac32b10ac3579c1c4cddebc5d9a61b519","license":"ISC","scripts":{"dev":"npx @eslint/config-inspector --config eslint.config.ts","knip":"knip","lint":"eslint .","stub":"tsup --format esm","test":"vitest","build":"tsup --format esm,cjs --clean --dts","clean":"rimraf ./dist","smoke":"node scripts/smoke.mjs","watch":"tsup --format esm,cjs --watch","prepack":"npm run build","prepare":"patch-package && simple-git-hooks","release":"node scripts/release.js","test:ui":"vitest --ui --api 9527","docs:dev":"vitepress dev docs","test:run":"vitest run","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","docs:build":"vitepress build docs","type-check":"tsc --noEmit","local-build":"node scripts/local-build.js","docs:preview":"vitepress preview docs","verify:tests":"node scripts/verify/check-t.cjs","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest run --coverage","test:mutation":"stryker run --incremental","verify:coverage":"node scripts/verify/check-c.cjs","verify:mutation":"node scripts/verify/check-m.cjs"},"version":"2.0.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:11e74041-7e68-4aa8-beb0-2387a71faf2a"}},"homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"_npmVersion":"11.19.1","description":"Feature-sliced design methodology plugin","directories":{},"maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"_nodeVersion":"24.20.0","dependencies":{"picomatch":"^2.3.1","eslint-plugin-import-x":"^4.16.1","@typescript-eslint/utils":"^8.45.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^6.36.0","tsup":"^8.5.0","execa":"5.1.1","eslint":"^9.11.1","rimraf":"^5.0.1","semver":"^7.5.4","vitest":"^5.0.1","prompts":"^2.4.2","vitepress":"^1.0.0-alpha.64","@vitest/ui":"^5.0.1","picocolors":"^1.0.0","typescript":"^5.6.2","@types/node":"^22.20.2","patch-package":"^8.0.1","@commitlint/cli":"^19.8.1","@types/picomatch":"^2.3.0","semantic-release":"^25.0.9","simple-git-hooks":"^2.14.0","@vitest/coverage-v8":"^5.0.1","@antfu/eslint-config":"^3.7.3","@stryker-mutator/core":"^10.0.0","@commitlint/is-ignored":"^19.8.1","@typescript-eslint/parser":"^8.45.0","@total-typescript/ts-reset":"^0.6.1","conventional-changelog-cli":"^2.2.2","@stryker-mutator/vitest-runner":"^10.0.0","@typescript-eslint/rule-tester":"^8.45.0","@commitlint/config-conventional":"^19.8.1","@semantic-release/release-notes-generator":"^14.1.0"},"peerDependencies":{"eslint":">=9"},"simple-git-hooks":{"commit-msg":"npx --no -- commitlint --edit \"$1\""},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-plugin-feature-sliced_2.0.1_1789722331645_0.8533381505515854"}}},"time":{"created":"2023-06-27T17:45:38.981Z","modified":"2026-09-18T09:05:32.040Z","1.0.0":"2023-06-27T17:24:04.749Z","1.0.1":"2023-06-27T17:45:39.249Z","1.0.2":"2023-06-27T17:57:18.948Z","1.0.3":"2023-06-27T18:01:38.706Z","1.0.4":"2023-07-03T17:42:55.971Z","1.0.5":"2023-08-08T20:00:25.216Z","2.0.0-rc.1":"2024-12-07T21:06:17.981Z","2.0.0-rc.2":"2025-09-17T11:32:22.437Z","2.0.0-rc.3":"2025-10-28T09:34:19.891Z","2.0.0-rc.4":"2025-12-24T16:16:33.766Z","2.0.0-rc.5":"2026-01-16T12:07:43.356Z","2.0.0-rc.6":"2026-01-16T13:06:08.426Z","2.0.0-rc.7":"2026-03-26T07:30:21.331Z","2.0.0-rc.8":"2026-03-26T09:47:01.179Z","2.0.0-rc.9":"2026-03-27T07:54:47.824Z","2.0.0-rc.10":"2026-03-27T08:46:50.942Z","2.0.0-rc.11":"2026-03-30T08:13:08.555Z","2.0.0-rc.12":"2026-03-30T08:38:34.019Z","2.0.0-rc.13":"2026-03-30T09:09:43.504Z","2.0.0-rc.14":"2026-04-03T07:50:52.939Z","2.0.0-rc.15":"2026-04-03T08:00:59.174Z","2.0.0-rc.16":"2026-09-15T16:07:30.470Z","2.0.0":"2026-09-17T13:46:54.081Z","2.0.1":"2026-09-18T09:05:31.745Z"},"bugs":{"url":"https://github.com/conarti/eslint-plugin-feature-sliced/issues"},"author":{"name":"Aleksandr Belous","email":"abelous2009@gmail.com"},"license":"ISC","homepage":"https://github.com/conarti/eslint-plugin-feature-sliced#readme","keywords":["eslint","eslintplugin","eslint-plugin","feature-sliced","feature-slices","feature-driven","feature-based"],"repository":{"url":"git+https://github.com/conarti/eslint-plugin-feature-sliced.git","type":"git"},"description":"Feature-sliced design methodology plugin","maintainers":[{"name":"conarti","email":"abelous2009@gmail.com"}],"readme":"# @conarti/eslint-plugin-feature-sliced\n\nESLint rules that keep a codebase inside the boundaries of Feature-Sliced Design.\n\n[![npm version](https://img.shields.io/npm/v/@conarti/eslint-plugin-feature-sliced.svg)](https://www.npmjs.com/package/@conarti/eslint-plugin-feature-sliced)\n[![npm downloads](https://img.shields.io/npm/dm/@conarti/eslint-plugin-feature-sliced.svg)](https://www.npmjs.com/package/@conarti/eslint-plugin-feature-sliced)\n[![CI](https://github.com/conarti/eslint-plugin-feature-sliced/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/conarti/eslint-plugin-feature-sliced/actions/workflows/ci.yml)\n[![license](https://img.shields.io/npm/l/@conarti/eslint-plugin-feature-sliced.svg)](https://www.npmjs.com/package/@conarti/eslint-plugin-feature-sliced)\n\n[Feature-Sliced Design](https://fsd.how/) splits a frontend into layers, slices and\nsegments, and most of the methodology comes down to rules about which file may import which other\nfile. This plugin enforces those rules.\n\nThe four FSD rules only read import and export paths. They never resolve a module and never need\ntype information, so they work with any framework, any bundler and any alias scheme: `~/shared/ui`,\n`@/shared/ui`, `@shared/ui`, `$shared/ui` and `src/shared/ui` are all understood out of the box.\nThe bundled import sorting preset is a different matter: it is the `order` rule of\n`eslint-plugin-import-x`, which does resolve modules and follows your `import-x/resolver` settings.\n\nVersion 2 is a flat-config plugin. The default export is a factory that returns one ready config\nobject, so a whole FSD setup is a single call.\n\n## Requirements\n\n| Requirement | Value |\n| - | - |\n| ESLint | 9 or newer, flat config only (`eslint.config.js`) |\n| Node.js | `^18.18.0 \\|\\| ^20.9.0 \\|\\| >=21.1.0` |\n\nStill on ESLint 8 or on a legacy `.eslintrc` file? Stay on the 1.x line, which is unchanged and\nstill published:\n\n```sh\nnpm i -D @conarti/eslint-plugin-feature-sliced@1\n```\n\n## Installation\n\n```sh\nnpm i -D eslint @conarti/eslint-plugin-feature-sliced\n```\n\nNothing else is needed for a JavaScript project. The import sorting preset is built on the `order`\nrule of [`eslint-plugin-import-x`](https://github.com/un-ts/eslint-plugin-import-x), which ships as\na dependency of this package. A TypeScript project needs a TypeScript-aware parser on top, as it\nwould for any other rule; see the next section.\n\n## Quick start\n\n`eslint.config.js` (ESM, the default when `package.json` has `\"type\": \"module\"`):\n\n```js\nimport featureSliced from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  featureSliced(),\n];\n```\n\n`eslint.config.cjs` (CommonJS). `require` of this package returns the factory itself:\n\n```js\nconst featureSliced = require('@conarti/eslint-plugin-feature-sliced');\n\nmodule.exports = [\n  featureSliced(),\n];\n```\n\nA TypeScript project. The plugin needs no type information, but TypeScript files still need a\nTypeScript-aware parser, exactly as they would for any other rule. That parser is part of your\nnormal setup, not a requirement of this plugin, so the helper you already use works too, including\nthe `tseslint.config` helper from the `typescript-eslint` package. The example below uses the\nparser on its own, so install it first:\n\n```sh\nnpm i -D @typescript-eslint/parser\n```\n\n```js\nimport tsParser from '@typescript-eslint/parser';\nimport featureSliced from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  {\n    files: ['**/*.{ts,tsx}'],\n    languageOptions: {\n      parser: tsParser,\n      sourceType: 'module',\n      ecmaVersion: 'latest',\n    },\n  },\n  featureSliced(),\n];\n```\n\n`featureSliced()` returns a plain flat-config object with `name`, `plugins`, `settings` and\n`rules`, and no `files` key, so it applies to everything ESLint lints. Spread it to add `files` or\nany other key and scope it to your source tree:\n\n```js\nimport featureSliced from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  {\n    ...featureSliced(),\n    files: ['src/**/*.{ts,tsx}'],\n  },\n];\n```\n\n## What the plugin checks\n\nEvery example below is taken from `tests/fixtures/basic-project`, the FSD tree the test suite lints\nend to end on every run. Its layout:\n\n```text\nsrc/\n  shared/\n    lib/format-date.ts\n  entities/\n    product/\n      model/\n    session/\n      model/\n      index.ts\n    user/\n      api/\n      model/\n      ui/\n      index.ts\n    index.ts\n  features/\n    auth/\n      model/\n      index.ts\n    profile/\n      model/\n  widgets/\n    header/\n      ui/\n      index.ts\n  pages/\n    home/\n      ui/\n      index.ts\n  app/\n    providers/router.ts\nsrc2/\n  entities/\n    basket/model/\n    cart/\n      services/\n      ui/\n  features/\n    checkout/ui/\n```\n\n`src/` is linted with the plain defaults. `src2/` is a second tree, linted with\n`publicApi: { level: 'segments' }` and `segments: ['services']`, and it covers the segment-level\nchecks and the custom segment name. `src/entities/index.ts` is there on purpose: it is the\nviolation quoted under [Public API](#public-api).\n\n### Layers and slices\n\nA file may import only from layers below its own. Imports between two slices of one layer are\nreported as well, unless they use the `@x` notation described further down. Imports inside a single\nslice, and imports inside a layer that has no slices, are left alone.\n\nIncorrect, `src/entities/user/model/imports-features-upward.ts`:\n\n```ts\nimport { loginUser } from 'src/features/auth';\n```\n\n> You cannot import layer \"features\" into \"entities\" (shared -> entities -> features -> widgets -> pages -> processes -> app)\n\nCorrect, `src/features/auth/model/uses-entities-public-api.ts`:\n\n```ts\nimport { createUser } from 'src/entities/user';\n```\n\nType-only imports are exempt by default, so an upward `import type` stays valid,\n`src/entities/user/model/type-only-upward-import.ts`:\n\n```ts\nimport type { AuthState } from 'src/features/auth';\n```\n\nDynamic `import()` expressions are checked too.\n\n### Absolute and relative paths\n\nInside one slice, or inside a layer without slices, imports have to be relative. Across layers they\nhave to be absolute.\n\nIncorrect, `src/entities/user/ui/absolute-inside-slice.ts`:\n\n```ts\nimport { createUser } from 'src/entities/user/model/create-user';\n```\n\n> There must be relative paths\n\nIncorrect, `src/widgets/header/ui/relative-cross-layer-import.ts`:\n\n```ts\nimport { createUser } from '../../../entities/user';\n```\n\n> There must be absolute paths\n\nCorrect, `src/entities/user/ui/user-card.ts` and `src/pages/home/ui/home-page.ts`:\n\n```ts\nimport { createUser } from '../model/create-user';\n```\n\n```ts\nimport { Header } from 'src/widgets/header';\n```\n\n### Public API\n\nAnother slice may only be reached through its own `index` file. How deep the check goes depends on\n`level`. At the default `'slices'` the rule reports an import that reaches into a known segment of\nanother slice. A file sitting directly in the slice root, outside any segment (an import of\n`src/entities/user/helper`, say, which the fixture does not contain), is not reported at that\nlevel; at `level: 'segments'` it is, as an `unknown-segment`.\n\nIncorrect, `src/pages/home/ui/deep-import-into-slice.ts`:\n\n```ts\nimport { UserCard } from 'src/entities/user/ui/user-card';\n```\n\n> Absolute imports are only allowed from public api (\"src/entities/user\")\n\nThe rule attaches a suggestion, `Remove the \"ui/user-card\"`, that rewrites the path to\n`src/entities/user`.\n\nA layer itself must not have a public API, so an `index` file sitting directly on a layer is\nreported whatever it contains. Incorrect, `src/entities/index.ts`:\n\n```ts\nexport { createUser } from './user';\n```\n\n> The layer public API is not allowed. It harms both architecturally and practically (code splitting)\n\n### Cross-segment re-exports\n\nOne segment of a slice must not re-export from a sibling segment. Only re-export statements\n(`export { x } from '...'`, `export type { x } from '...'`, `export * from '...'`) are looked at.\n\nIncorrect, `src/entities/user/model/index.ts`:\n\n```ts\nexport { fetchUser } from '../api';\n```\n\n> Segment \"model\" should not re-export from sibling segment \"api\". Move the re-export to the slice public API.\n\nThe suggestion rewrites `'../api'` to `'..'`, the slice public API.\n\nCorrect, `src/entities/session/index.ts` and `src/entities/session/model/index.ts`:\n\n```ts\nexport { sessionToken } from './model';\n```\n\n```ts\nexport { sessionToken } from './session-token';\n```\n\n### Import order\n\nExternal packages come before layer imports, and layers are sorted from the top of the hierarchy\ndown to `shared`.\n\nIncorrect, `src/widgets/header/ui/wrong-import-order.ts`:\n\n```ts\nimport { createUser } from 'src/entities/user';\nimport axios from 'axios';\n```\n\n> `axios` import should occur before import of `src/entities/user`\n\nCorrect:\n\n```ts\nimport axios from 'axios';\nimport { createUser } from 'src/entities/user';\n```\n\n## Configuration\n\n### Factory options\n\n```js\nfeatureSliced(options);\n```\n\n| Option | Type | Default | What it does |\n| - | - | - | - |\n| `severity` | `'error'` or `'warn'` | `'error'` | Severity for the four FSD rules. Each rule can override it. The import sorting preset is not affected: it always carries `error`. |\n| `layers` | array of `string` or `{ name, hasSlices }` | `shared` (no slices), `entities`, `features`, `widgets`, `pages`, `processes`, `app` (no slices). `processes` is kept for compatibility although the FSD spec deprecates it. | The layer hierarchy, lowest first. |\n| `segments` | `string[]` or `{ replace: string[] }` | `ui`, `model`, `lib`, `api`, `config`, `assets` | Segment names. An array extends the defaults, `{ replace }` replaces them. |\n| `layersSlices` | `false` or options object | `{}` (rule on) | Options for `layers-slices`. |\n| `absoluteRelative` | `false` or options object | `{}` (rule on) | Options for `absolute-relative`. |\n| `publicApi` | `false` or options object | `{}` (rule on) | Options for `public-api`. |\n| `noCrossSegmentReexport` | `false` or options object | `{}` (rule on) | Options for `no-cross-segment-reexport`. |\n| `sortImports` | `false`, `'recommended'`, `'with-newlines'`, `'with-type-group'`, `'with-newlines-and-type-group'` | `'recommended'` | Which import sorting preset to enable, or `false` to leave the entry out entirely. |\n\nLayer and segment names are compared case-insensitively.\n\n### Per-rule options\n\nEach rule accepts the keys marked for it below. A key a rule does not know is a type error in\nTypeScript, and silently ignored in JavaScript, because the rule schemas do not close themselves\noff with `additionalProperties: false`.\n\n| Option | Rules | Type | Default | What it does |\n| - | - | - | - | - |\n| `severity` | all four | `'error'` or `'warn'` | the factory `severity` | Severity for this rule only. |\n| `ignoreImports` | all four | `string[]` | `[]` | Skip imports whose specifier matches one of these globs. |\n| `ignoreFiles` | all four | `string[]` | `[]` | Skip files whose path matches one of these globs. |\n| `allowTypeImports` | `layers-slices` | `boolean` | `true` | Exempt type-only imports from the layer check. |\n| `level` | `public-api` | `'slices'` or `'segments'` | `'slices'` | How deep the public API check goes. |\n\nA worked example:\n\n```js\nimport featureSliced from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  featureSliced({\n    severity: 'warn',\n    publicApi: {\n      severity: 'error',\n      level: 'segments',\n    },\n    layersSlices: {\n      allowTypeImports: false,\n    },\n  }),\n];\n```\n\n### Severity\n\n`severity` sets the level of `layers-slices`, `absolute-relative`, `public-api` and\n`no-cross-segment-reexport` at once; a rule's own `severity` wins over it. While migrating an\nexisting codebase, `'warn'` keeps the build green and still surfaces every violation.\n\nThe import sorting preset always carries `error`, because the preset is a complete rule entry\nrather than a set of options. To change its level, add a later config object that overrides only\nthe severity. ESLint flat config keeps the options of the earlier entry in that case, so the preset\nstays intact:\n\n```js\nimport featureSliced from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  featureSliced(),\n  {\n    rules: {\n      '@conarti/feature-sliced/import-order': 'warn',\n    },\n  },\n];\n```\n\n### Disabling rules\n\nPassing `false` for a rule sets it to `off`. Passing `sortImports: false` removes the import-order\nentry from the config altogether, which is what you want when another sorter owns import order.\n\n```js\nimport featureSliced from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  featureSliced({\n    absoluteRelative: false,\n    noCrossSegmentReexport: false,\n    sortImports: false,\n  }),\n];\n```\n\nThe bundled sorting conflicts with other import sorters. If your config already runs `import-x/order`,\n`import/order`, `simple-import-sort` or `perfectionist/sort-imports`, turn one of the two sides off,\notherwise the two will fight over the same lines.\n\n### Ignoring imports and files\n\nBoth options take [picomatch](https://github.com/micromatch/picomatch) globs, but they are matched\nagainst different strings:\n\n- `ignoreImports` is matched against the import specifier exactly as it is written in the code, so\n  the pattern looks like the import.\n- `ignoreFiles` is matched against the absolute path of the file being linted, which starts at the\n  root of the filesystem and not at your project. That is why these patterns have to start with\n  `**/`.\n\n```js\nimport featureSliced from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  featureSliced({\n    layersSlices: {\n      ignoreImports: ['@/entities/legacy', '**/vendor/**'],\n      ignoreFiles: ['**/src/legacy/**/*'],\n    },\n    publicApi: {\n      ignoreFiles: ['**/*.stories.tsx'],\n    },\n  }),\n];\n```\n\n### Custom layers\n\n`layers` is the whole hierarchy, written from the lowest layer to the highest. A plain string means\na layer that has slices; an object lets you say otherwise. The array replaces the defaults, so list\nevery layer your project uses, including the ones you keep from FSD.\n\n```js\nimport featureSliced from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  featureSliced({\n    layers: [\n      { name: 'shared', hasSlices: false },\n      'entities',\n      'domain',\n      'features',\n      'widgets',\n      'pages',\n      { name: 'app', hasSlices: false },\n    ],\n  }),\n];\n```\n\nWhat each rule does with the list:\n\n- `layers-slices` derives the hierarchy from the order, and names the full order in its message.\n  A layer with `hasSlices: false` never triggers the slice-to-slice check.\n- `absolute-relative` uses `hasSlices` to decide whether a path stays inside one unit: in a layer\n  without slices the whole layer counts as one unit, so imports inside it must be relative.\n- `public-api` uses the names to find the layer and the slice in a path, and to spot an `index`\n  file placed directly on a layer.\n- `no-cross-segment-reexport` only looks at layers that have slices.\n- The import sorting preset builds one path group per layer, in reverse order, so the topmost layer\n  is sorted first.\n- The `@x` cross-import notation is matched on the literal name `entities` and ignores this list\n  entirely. Rename that layer and every cross-import inside it turns into an ordinary violation.\n\nA name the list does not contain is not a layer at all. A path with no known layer in it is left\nalone by all four FSD rules, which is how imports of npm packages stay silent; the import sorting\npreset still sees them and files them under `external`.\n\n### Custom segments\n\nAn array adds names to the defaults (`ui`, `model`, `lib`, `api`, `config`, `assets`), while\n`{ replace: [...] }` throws the defaults away and uses only what you list.\n\n```js\nimport featureSliced from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  featureSliced({\n    segments: ['services', 'hooks', 'i18n'],\n    publicApi: { level: 'segments' },\n  }),\n];\n```\n\n```js\nimport featureSliced from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  featureSliced({\n    segments: { replace: ['ui', 'model', 'services'] },\n  }),\n];\n```\n\nThe segment list is used by `public-api`, where at `level: 'segments'` a folder standing in segment\nposition that is not on the list is reported as `unknown-segment`, and by the path parsing that\n`layers-slices` relies on to tell a slice from a segment. Teaching the plugin about a custom\nsegment therefore removes false positives from `public-api` and from `layers-slices`.\n\nKnown limitations. Two rules never read the `segments` option and match segment names against a\nbuilt-in list instead, so in a project with custom segment names their idea of where a segment\nstarts differs from the other rules:\n\n- `absolute-relative` resolves the slice of a path with the built-in list, so an absolute import\n  that stays inside a single slice is not reported when that slice uses a custom segment name. See\n  [issue #37](https://github.com/conarti/eslint-plugin-feature-sliced/issues/37).\n- `no-cross-segment-reexport` matches sibling segment names against the same built-in list. See\n  [issue #35](https://github.com/conarti/eslint-plugin-feature-sliced/issues/35).\n\n### Import sorting presets\n\nAll four presets share the same alphabetical sort (ascending, case insensitive) and the same layer\npath groups. They differ only in blank lines and in whether type imports get a group of their own:\n\n| Preset | Blank line between groups | Separate group for type imports |\n| - | - | - |\n| `'recommended'` | no | no |\n| `'with-newlines'` | yes | no |\n| `'with-type-group'` | no | yes |\n| `'with-newlines-and-type-group'` | yes | yes |\n\nThe group order is `builtin`, `external`, `internal`, then `parent`, `sibling` and `index`. The\n`internal` group holds the FSD layers, sorted from the top of the hierarchy down: `app`,\n`processes`, `pages`, `widgets`, `features`, `entities`, `shared`. The two type-group presets\ninsert a `type` group between `internal` and `parent`.\n\nA sorted file under the default `'recommended'` preset. It is not part of the fixture, but it\nhas the shape of an `src/app/providers/router.ts`: it sits on the topmost layer, so it may reach\nevery layer below it, and the two relative imports stay inside `app`, which has no slices:\n\n```ts\nimport path from 'node:path';\nimport axios from 'axios';\nimport { HomePage } from 'src/pages/home';\nimport { Header } from 'src/widgets/header';\nimport { loginUser } from 'src/features/auth';\nimport { createUser } from 'src/entities/user';\nimport { formatDate } from 'src/shared/lib/format-date';\nimport { routes } from '../routes';\nimport { withAuth } from './with-auth';\n```\n\nPick a preset with `sortImports`, change its level as shown under [Severity](#severity), or drop it\nwith `sortImports: false`.\n\n### Advanced: using the plugin object directly\n\nThe factory is a convenience. If you would rather write the three pieces yourself, import the\nplugin object and the rule names and wire them up by hand.\n\nThe `settings['@conarti/feature-sliced']` key is optional: leave it out and the rules fall back to\nthe default layers and segments. Supply `layers` there and it has to be in its normalized form, an\nobject with `name` and `hasSlices` for every entry, because the rules take that array as it is and\nskip the normalization the factory performs. A plain string in it is not understood, and the layer\nlist silently degrades.\n\n```js\nimport { plugin, RULE_NAMES } from '@conarti/eslint-plugin-feature-sliced';\n\nexport default [\n  {\n    name: 'feature-sliced/manual',\n    plugins: {\n      '@conarti/feature-sliced': plugin,\n    },\n    settings: {\n      '@conarti/feature-sliced': {\n        layers: [\n          { name: 'shared', hasSlices: false },\n          { name: 'entities', hasSlices: true },\n          { name: 'features', hasSlices: true },\n          { name: 'widgets', hasSlices: true },\n          { name: 'pages', hasSlices: true },\n          { name: 'processes', hasSlices: true },\n          { name: 'app', hasSlices: false },\n        ],\n        segments: ['services'],\n      },\n    },\n    rules: {\n      [RULE_NAMES.LAYERS_SLICES]: ['error', { allowTypeImports: true }],\n      [RULE_NAMES.ABSOLUTE_RELATIVE]: ['error', {}],\n      [RULE_NAMES.PUBLIC_API]: ['error', { level: 'segments' }],\n      [RULE_NAMES.NO_CROSS_SEGMENT_REEXPORT]: ['warn', {}],\n    },\n  },\n];\n```\n\nThe full list of exports:\n\n| Export | Kind | What it is |\n| - | - | - |\n| `default` | function | The factory, the same value as `createPlugin`. |\n| `createPlugin` | function | Builds the flat-config object from the options above. |\n| `plugin` | object | The raw ESLint plugin: `meta` plus `rules`. |\n| `PLUGIN_NAME` | string | `'@conarti/feature-sliced'`, the key used in `plugins`, `settings` and rule ids. |\n| `RULE_NAMES` | object | The five fully qualified rule ids. |\n| `layers` | array | Deprecated. The FSD layer names, kept for compatibility. |\n| `segments` | array | Deprecated. The FSD segment names, kept for compatibility. |\n| `Severity`, `Layer`, `Segment`, `ImportOrderConfigName`, `TypedFlatConfigItem` | types | TypeScript types for the options and the returned config. |\n\n`layers` and `segments` are constants only. The rules take their lists from the settings the\nfactory writes, so reading or reassigning these exports changes nothing.\n\n## Cross-imports with `@x`\n\nFSD allows one entity to depend on another through an explicit, one-directional cross-import, the\n[public API for cross-imports](https://fsd.how/docs/reference/public-api/#public-api-for-cross-imports).\nThe importing slice is named in the path, so the dependency is visible from the import alone.\n\nThe plugin recognizes the notation only on paths that contain a layer literally named `entities`,\nwhatever the `layers` option says, written as `entities/<source>/@x/<target>`, and accepts it only\nwhen `<target>` is the slice of the file doing the importing. `absolute-relative` treats such a\npath as absolute and leaves it alone, and `public-api` at `level: 'segments'` exempts it from the\nunknown-segment check.\n\nValid, `src/entities/user/model/valid-cross-import.ts`. The importing file lives in the `user`\nslice and the path ends in `@x/user`:\n\n```ts\nimport { sessionId } from 'src/entities/session/@x/user';\n```\n\nInvalid, `src/entities/product/model/invalid-cross-import.ts`. The same path read from the\n`product` slice:\n\n```ts\nimport { userRef } from 'src/entities/session/@x/user';\n```\n\n> Cross-import \"session/@x/user\" is only allowed from slice \"user\"\n\nNothing may follow the target slice. A path such as `src/entities/session/@x/user/types` is not a\ncross-import at all, and falls back to the ordinary slice-to-slice and public API checks.\n\n## Rules\n\n🔧 fixable with ESLint's fix mode, see the\n[ESLint command line interface](https://eslint.org/docs/latest/use/command-line-interface)\n\n💡 offers an editor suggestion, applied one at a time and never in bulk\n\n| Rule | Description | 🔧 | 💡 |\n| - | - | - | - |\n| [`@conarti/feature-sliced/layers-slices`](src/rules/layers-slices/README.md) | Checks layer imports | | |\n| [`@conarti/feature-sliced/absolute-relative`](src/rules/absolute-relative/README.md) | Checks for absolute and relative paths | | |\n| [`@conarti/feature-sliced/public-api`](src/rules/public-api/README.md) | Check for module imports from public api | | 💡 |\n| [`@conarti/feature-sliced/no-cross-segment-reexport`](src/rules/no-cross-segment-reexport/README.md) | Checks for cross-segment re-exports within the same slice | | 💡 |\n| [`@conarti/feature-sliced/import-order`](https://github.com/un-ts/eslint-plugin-import-x/blob/master/docs/rules/order.md) | Sorts imports, the `order` rule of `eslint-plugin-import-x` preconfigured for FSD layers | 🔧 | |\n\nKnown limitation: the `public-api` check for an `index` file placed directly on a layer does not\nfire when the project sits under a directory whose name begins with a dot. See\n[issue #34](https://github.com/conarti/eslint-plugin-feature-sliced/issues/34).\n\n## Migrating from 1.x\n\n| 1.x | 2.x |\n| - | - |\n| `.eslintrc`, ESLint 8 | `eslint.config.js`, ESLint 9 flat config only |\n| `\"extends\": [\"plugin:@conarti/feature-sliced/recommended\"]` | `featureSliced()` |\n| `\"extends\": [\"plugin:@conarti/feature-sliced/rules\"]` | `featureSliced({ sortImports: false })` |\n| `\"plugins\": [\"@conarti/feature-sliced\"]` plus hand written `rules` | spread `featureSliced()`, or use `plugin` and `RULE_NAMES` as shown under Advanced |\n| `eslint-plugin-import` installed alongside the plugin | nothing extra to install, `eslint-plugin-import-x` ships as a dependency |\n| `@conarti/eslint-plugin-feature-sliced/import-order` subpath with its four configs | the `sortImports` option with the same four preset names |\n| `import/order` rule id | `@conarti/feature-sliced/import-order` rule id |\n| `ignorePatterns` rule option | `ignoreImports` |\n| `ignoreInFilesPatterns` rule option | `ignoreFiles` |\n| severity written out per rule | the `severity` option, plus a per-rule `severity` |\n| fixed FSD layer names | the `layers` option, with `hasSlices` per layer |\n| fixed FSD segment names | the `segments` option, extend or replace |\n| three rules | four FSD rules plus the bundled `import-order`, and the new `no-cross-segment-reexport` is on by default at `error` |\n| no cross-import notation | `@x` cross-imports understood by `layers-slices`, `absolute-relative` and `public-api` |\n\nNode 18.18 or newer is required as well. The 1.x line stays on npm as\n`@conarti/eslint-plugin-feature-sliced@1` for projects that cannot move yet.\n\n## Development\n\n```sh\nnpm ci\nnpm run test:run      # vitest, unit suites plus the fixture integration test\nnpm run lint          # eslint on the repo itself\nnpm run type-check    # tsc, no emit\nnpm run knip          # unused files, exports and dependencies\nnpm run build         # tsup, writes dist\nnpm run smoke         # asserts the built ESM and CJS entries expose the expected API\nnpm run test:mutation # stryker, incremental\n```\n\nCI runs the type check, the lint, knip, the tests, the build and the smoke test on Node 22 and\n24, repeats the build and the smoke test on Node 18 and 20, and, on every pull request targeting\n`master` or `main`, lints the commit messages of that pull request.\n\n`tests/fixtures/basic-project` is the end-to-end anchor. It is a real, deliberately broken FSD tree\nthat carries at least one violation per message id plus a set of files that have to stay silent,\nand the integration test runs ESLint over it with the plugin built from `src` and compares the whole report\nwith a committed snapshot. A refactor that breaks the plumbing without breaking any unit test gets\ncaught there, so read `tests/fixtures/basic-project/README.md` before touching it.\n\n### Commit messages\n\nCommits follow [Conventional Commits](https://www.conventionalcommits.org/):\n`type(scope): description`, header of at most 100 characters, and a subject written in neither\nsentence, start, pascal nor upper case. The allowed types are `build`, `chore`, `ci`, `docs`,\n`feat`, `fix`, `perf`, `refactor`, `revert`, `style` and `test`.\n\nTwo extra rules apply to the whole message, header, body and footer alike. It has to stay ASCII, so\nno typographic dashes, arrows, emoji or non latin text. And it must not carry attribution lines: no\n`Co-authored-by:` trailer, no line starting with `Generated with`. Messages git writes itself, such\nas a merge, a revert or a `fixup!`, skip the conventional rules as long as they pass these two. One\nthat breaks them is linted in full, so the report also lists conventional errors next to the real\none, and they go away once the offending line is removed.\n\n`npm ci` and `npm install` install a `commit-msg` hook through the `prepare` script, so the check\nruns before the commit is written, on every Node version this package supports. The hook reads the\nfile git is about to commit, where comment lines and the diff below the scissors line are not part\nof the message; CI reads the stored commit, where a line starting with a hash counts too. CI lints\nevery commit of a pull request, because pull requests are rebased onto master and each commit lands\nthere as is. To check a range by hand:\n\n```sh\nnpx --no -- commitlint --from origin/master --to HEAD --verbose\n```\n\n## License\n\nISC.\n\nFound a bug or a false positive?\n[Open an issue](https://github.com/conarti/eslint-plugin-feature-sliced/issues). Pull requests are\nwelcome.\n","readmeFilename":"README.md"}