{"_id":"eslint-plugin-lookin-tavrus-fsd","_rev":"34-3c08592fe3b3d5deb1007d14856febef","name":"eslint-plugin-lookin-tavrus-fsd","dist-tags":{"latest":"0.1.22"},"versions":{"0.1.3":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.3","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.3","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"8cec53b5bf24b30cffbe659fd33a12fa28c264aa","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.3.tgz","fileCount":6,"integrity":"sha512-AWRJbsN19f+TnZlBQMr4ZW3yMIq8XyoZB/QEGtfWaKUujqJgpaT4IFS94W/kkMT5i5PemFPcTvsumsvqib+yfQ==","signatures":[{"sig":"MEQCIGR2esRjxkg106qXprfFKUA/tBODvpnHsKKlx/9Op33gAiBRaoa5fMaOlWmLX/Rk1Ly1KuDcGQ7TAe8InlwUXVfNjg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11226},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.3_1749919561446_0.362980192534498","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.4","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.4","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"58adde89dbdaadfc62ba09031393c95c74e1d270","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.4.tgz","fileCount":6,"integrity":"sha512-ljHLOPl6Tm6epItJA8CGazwIPTQ4nCochwqOURgl7/02PEhLcvHCH1cR1o0nvBoOrUsbt4j9NGamSVPM3vbLyw==","signatures":[{"sig":"MEUCIQCHUVldVmRMio88mh/MSAol9iRUAw5Ap+o+hRX6ETzcaAIgdqa0wQpVLReehxTHDsS5u1QAppXHA0AaEFeIhtoDfK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11211},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.4_1749919854936_0.779077875279826","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.5","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.5","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"dd32215914a70a36580bea802c03597af155eb01","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.5.tgz","fileCount":6,"integrity":"sha512-f2gfmxtvJNzYutZYNHz+7coZDbk3b8fbfD2E92+/PBjxQU1+9B5ylVCHSXyQicfUM5IHBd+NClAoyy7hRXEfIA==","signatures":[{"sig":"MEQCIGy7TcW4rr4dkEXc2RUNQAqRPtm7uqx5DDXxFsO0cZXZAiAkQe0v+z55J9+8DSwtw36eUZBimWpzsZDO/5wr5jEpcQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11211},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.5_1749921204563_0.16690582085889316","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.6","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.6","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"e94cceda258e21776c0ed907d8c32ddbfd98d021","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.6.tgz","fileCount":7,"integrity":"sha512-WpB1hqWL0U98JqU2VDB8STIyBWL/eHOPovWp/LPheqc9P1WvHA4gt+4lSw1J7Dfx07g2/F1GpeVHRivIOSvxzw==","signatures":[{"sig":"MEYCIQC2tQ39WSQXYiv23api3ofYnPwLZBIZcPBhe+yf/VxHIQIhAIY8A9BucPprBoOzV6Fu0JuXf5Qq0tk4JvDhEi8UXq68","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14978},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.6_1749927456081_0.2812554217554897","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.7","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.7","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"04945d19efba755fe3d73627916a57d017a8e3ec","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.7.tgz","fileCount":7,"integrity":"sha512-xbQeKMa5VwtPy5ohZpWipjh/EDp0ezS8kTRKgPe3vaRm/7BDRo12NQ11HHwTFBF+hpAYXMiZiaCmODq1nIpCFQ==","signatures":[{"sig":"MEYCIQDLxoevItJFjb1iwlDWzylgcRPL/orTYX05INrs0fflTwIhAKI3mLdQJqn46kkXbu9OeJXGWyrs8C+qB/pwx/u+S9xF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15005},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.7_1749927736282_0.520557378008718","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.8","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.8","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"36365c9e006a79a93a388af6f8a8adfda7635798","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.8.tgz","fileCount":7,"integrity":"sha512-Nvgbzl6ZXP+4HoOzCOWnMwvDPSZlckOxgPuiH7JzNH7mW36VU5eDK/1/pDKKYZRxpaPIo5d8E4m4owc+yDtKag==","signatures":[{"sig":"MEQCIBkomJCoXrmP2fiLxZ365mzSUa5peUg6tMAvJua0X3wJAiAZD5zQJlS5eGb8WQqpWrwBVcfzYrlYHBMOk0XlN6cSGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14476},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.8_1749927878391_0.8433717402030858","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.9","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.9","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"5cc3617a767a930dc0f9476967940b5ecfe01db8","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.9.tgz","fileCount":7,"integrity":"sha512-N0OeCTxMtTd7vTfbz6pFmVfvks25ic6sqRzcaUQFojx6+pRj7a/0mRCyBs7s1Dze+rUe2Qq2NiiXwPDrYxj4aQ==","signatures":[{"sig":"MEUCIQD8GoajRH3f6aJgjTZmerRofId1nctLu21zAwqgOySZpgIgSIC/UwiG+5Mw2vGbexPAoZpfWayR8ku788Moh3EaCrY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16203},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.9_1749927923269_0.9925093686713031","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.11","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.11","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"bc871cff2a6d1e445c42501a049ae386d00c9f73","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.11.tgz","fileCount":7,"integrity":"sha512-97fUjq4k76osE1bC9y4uGA5/f/RZenVS3J1WeRaNbpcQxv7vN1IY1PlZUovBKpp/eFVRjYCtiTEFSsbC6uHgtw==","signatures":[{"sig":"MEYCIQD4Wx95wWxpm1d8mVwxxO6jwTdfVbDrjT9eHOth9KRRwwIhAPwIHlqx+5NxMvkHkJ59x24/PmZuR/2efMxbDHf65KHe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16097},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.11_1749928050878_0.3754233179622726","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.13","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.13","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"7f044e23a3fdabf59aa6ca418ddd741926275a5b","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.13.tgz","fileCount":7,"integrity":"sha512-M5X08oxvXsfMLzPLhkeGYUMplGDoWKk1aydrwmhuWAcuC3B7v9oR00A8XuY/A5iqHvyXyqKpFXbR8tB9MHzSnQ==","signatures":[{"sig":"MEYCIQCYHJImHIAcG5dpkcKd+ifZK6bVbyf+ggr9D1vqllJ1RQIhAK/7W0OREEDQCCsY9gNQwrTeh7VWqLmUYg/CO8O16wXs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16099},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.13_1749928359663_0.9755189352609059","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.14","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.14","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"bceb77c4878a50c429e932cc2c9d9828e7cce994","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.14.tgz","fileCount":7,"integrity":"sha512-SrrKd5hlJ7k/0wKmrXWBX8zZHNPGEdTVkWqnHU+RNA0Lm5/6+Ir8ZRG7eoYmQprZDSHLG8JxxENOsPRXsd0yUA==","signatures":[{"sig":"MEUCICCA+mqU/LzPkCyFVzJwaZQI4gaxhy8cjnzdfhnwvf4wAiEA9mUPvgIQjtBDsEoCMg8ZHQ4Wn4cCYNoYha8vf+7SGGA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17612},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.14_1749935962089_0.08491018767246206","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.15","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.15","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"2fc6faf6515d598ed00e9683ccbf03b7c82fd33e","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.15.tgz","fileCount":7,"integrity":"sha512-d2HAV/aAS88Qh9Gb9ImI61ZhBH68zMzQrzJ+9FaUo0s3KbhozC4HK1Dswj5JGVTDmDExUfHoignJdklHAbDJOw==","signatures":[{"sig":"MEUCIQDeMcPuvdZbi6nI2yTdT2rF9DD8m8t+Ih/pfX6NavOxYAIgY0MFnZMEER0Y/9eMmZfueo3uxj3Hd9LRjopa52dLAHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20807},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.15_1750033584171_0.4136943781140636","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.16","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.16","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"04c6ca4fdd5ceedd051643985e0a41081b330ea4","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.16.tgz","fileCount":9,"integrity":"sha512-YGsl6LcRETKef7CaMUC5dndEks8fQPohclrvjr2c0IlH3/iYAbUZ/1V+6FI1POtDymfMQtSaUUeZ8vxEYDQVkw==","signatures":[{"sig":"MEQCIDEyH0GfinaSadtgUREsUIX/LzO0Wi6Onuj6OkzVUMK/AiA9OBTankYTW6r1VhSiZOyzBDJzXOOG++zzq/rn/K4atQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57605},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.16_1750042636541_0.5657793744010282","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.17","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.17","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"02b8ff0ea17295999433169fca3d108165d5b1e4","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.17.tgz","fileCount":9,"integrity":"sha512-Cv9dBFQxV6MnNudLFVTDQGw1uRZhV8eBwCQmzu6DG3U31kb0DVHYt7bc8vRlKPm+YN922fxd9SCL9f3aCOKy+A==","signatures":[{"sig":"MEYCIQD89m+RB+fCpAh3rp8VeIATn2VpOV01vpgL+BEPtSPTuAIhAMrjqVChibTqVlqGOlQZVkz5DIVjNQccaYD9ZfaxRB9T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54772},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.17_1750048100330_0.8379160118742683","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.18","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.18","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"91368514961d65296d9d0a7aaa7cd0666882373a","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.18.tgz","fileCount":9,"integrity":"sha512-INHx581Fl+cvonF5jHYJ6ENcTffSb0cqI1bKv7EWlThaFCVG6lAjxzMe0/vvzaqHEvNSUPT2FJAi1D99NFAuTw==","signatures":[{"sig":"MEQCIGFDVPAhZO93FZPf1eaKBnZsoSUw2U2A+n+xKrvpxz1GAiBm0LJTNFunQPKs2eDn57xnBLEzHMpmxmqvYI6mEygzwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57849},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.18_1750049280977_0.4374756049610067","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.19","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.19","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"5481c5252d9ac7b278fcb4206152447753cbf717","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.19.tgz","fileCount":9,"integrity":"sha512-XNRBm64xhW8VM3HwlmwyG0BvFROHXb7walOup49SCZ2iWWhRLwPFUg/mM/ewxW7nWy7zRg7Sxcko5jiS8fnjmA==","signatures":[{"sig":"MEQCIDSYxxGdplXiAZEuf19W67J3q90vCaIkic/s9aQlTh5eAiAwA4qFtZXsnDB4eX9WNkbqIy6XDpZ6dHKCDtU3qm4gVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57849},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated due to bugs. Use 0.1.20 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.19_1750049530934_0.06707427502102004","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.20","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.20","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"431b14ea26b56195b7d85bef535b526876185d62","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.20.tgz","fileCount":9,"integrity":"sha512-LkE48MoIViJS0vcXuNvLVxed2jbgPeYxGimUsWRN7eJO090cLFodXRIc9Gq7jBXDqhebJsRJMWefs5veZTxTLg==","signatures":[{"sig":"MEQCID1gaqKDjQj5fiHwvMqbNyfUwiVlxv7O3GFmqeEVJ6roAiAhk4Vte2H9wW/6/precpOG4Wo6/35SwPDhXIqmAHpjyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57590},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"},"deprecated":"⚠️ Deprecated. Use 0.1.21 instead.","_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.20_1750049637908_0.5052077423785586","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.21","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"license":"MIT","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.21","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"dist":{"shasum":"d451c118d4ecc403f0f00fcfc48f43835dbed43a","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.21.tgz","fileCount":10,"integrity":"sha512-Vg2HL9jkGLPfj80pdh/mMdYB42EbBgZQdR9Rch/xmUHYNJ7pXCNw/Uji4aVU+fD57OLxC7z3wwbTVzuVyBB3rA==","signatures":[{"sig":"MEQCIFhRdWpRR26KlsAC17VW3ORXDDxBSKOw/86nA0aR5bqXAiB5AGZFLYf/qUCPVY/Dn4GanHRTEPAzfy/uswGncAhZPg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57904},"main":"./lib/index.js","engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"exports":"./lib/index.js","gitHead":"758e4bf0253757aacbfe14263d0efa1fd4dfc8d0","scripts":{"lint":"npm-run-all \"lint:*\"","test":"mocha tests --recursive","lint:js":"eslint .","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","update:eslint-docs":"eslint-doc-generator"},"_npmUser":{"name":"lookin-tavrus","actor":{"name":"lookin-tavrus","type":"user","email":"aleksandr.lukin12@proton.me"},"email":"aleksandr.lukin12@proton.me"},"_npmVersion":"9.6.2","description":"plugin for my production plugin","directories":{},"_nodeVersion":"20.3.1","dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","eslint":"^9.0.0","@eslint/js":"^9.0.0","npm-run-all2":"^6.1.2","eslint-plugin-n":"^17.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0"},"peerDependencies":{"eslint":">=8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.21_1750218380863_0.4889484957870798","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"eslint-plugin-lookin-tavrus-fsd","version":"0.1.22","description":"An ESLint plugin to enforce FSD architectural rules","keywords":["eslint","eslintplugin","eslint-plugin"],"author":{"name":"Aleksandr"},"main":"./lib/index.js","exports":"./lib/index.js","scripts":{"lint":"npm-run-all \"lint:*\"","lint:eslint-docs":"npm-run-all \"update:eslint-docs -- --check\"","lint:js":"eslint .","test":"mocha tests --recursive","update:eslint-docs":"eslint-doc-generator"},"dependencies":{"micromatch":"^4.0.8","requireindex":"^1.2.0"},"devDependencies":{"@eslint/js":"^9.0.0","eslint":"^9.0.0","eslint-doc-generator":"^2.0.0","eslint-plugin-eslint-plugin":"^6.0.0","eslint-plugin-n":"^17.0.0","mocha":"^11.0.0","npm-run-all2":"^6.1.2"},"engines":{"node":"^18.18.0 || ^20.9.0 || >=21.1.0"},"peerDependencies":{"eslint":">=8.57.0"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Lookin-Tavrus/eslint-plugin-lookin-tavrus-fsd.git"},"bugs":{"url":"https://github.com/Lookin-Tavrus/eslint-plugin-lookin-tavrus-fsd/issues"},"homepage":"https://github.com/Lookin-Tavrus/eslint-plugin-lookin-tavrus-fsd#readme","gitHead":"e5f5086843683e7d9b964545447a14f1beac9d0e","_id":"eslint-plugin-lookin-tavrus-fsd@0.1.22","_nodeVersion":"20.3.1","_npmVersion":"9.6.2","dist":{"integrity":"sha512-T5+4d7uKJ68Qu9k2D/Bj9LYCFP/dg+VnEL2aPmyxZXjQetAy8j0N4FIc73hONeUBW125jwZ6Gn+3irrGVZCYYg==","shasum":"fca4a5ea3dd3c13c2ff685b85720b8cc2d6fa206","tarball":"https://registry.npmjs.org/eslint-plugin-lookin-tavrus-fsd/-/eslint-plugin-lookin-tavrus-fsd-0.1.22.tgz","fileCount":10,"unpackedSize":58239,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDdD3if4lKOZ8mKKiHPaZXV8Gm/zzeZGjI7qBAGa4wrQwIgFbC0GoqiPFwf/MXIBXvqBmn0Re4BJvXe22qYabgdWG4="}]},"_npmUser":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me","actor":{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me","type":"user"}},"directories":{},"maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-plugin-lookin-tavrus-fsd_0.1.22_1750218857230_0.4817774504953969"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-14T16:46:01.445Z","modified":"2025-06-18T03:54:17.618Z","0.1.3":"2025-06-14T16:46:01.647Z","0.1.4":"2025-06-14T16:50:55.146Z","0.1.5":"2025-06-14T17:13:24.751Z","0.1.6":"2025-06-14T18:57:36.260Z","0.1.7":"2025-06-14T19:02:16.467Z","0.1.8":"2025-06-14T19:04:38.556Z","0.1.9":"2025-06-14T19:05:23.512Z","0.1.11":"2025-06-14T19:07:31.063Z","0.1.13":"2025-06-14T19:12:39.841Z","0.1.14":"2025-06-14T21:19:22.277Z","0.1.15":"2025-06-16T00:26:24.334Z","0.1.16":"2025-06-16T02:57:16.719Z","0.1.17":"2025-06-16T04:28:20.532Z","0.1.18":"2025-06-16T04:48:01.175Z","0.1.19":"2025-06-16T04:52:11.096Z","0.1.20":"2025-06-16T04:53:58.113Z","0.1.21":"2025-06-18T03:46:21.043Z","0.1.22":"2025-06-18T03:54:17.408Z"},"author":{"name":"Aleksandr"},"license":"MIT","keywords":["eslint","eslintplugin","eslint-plugin"],"description":"An ESLint plugin to enforce FSD architectural rules","maintainers":[{"name":"lookin-tavrus","email":"aleksandr.lukin12@proton.me"}],"readme":"# eslint-plugin-lookin-tavrus-fsd\n\n**An ESLint plugin to enforce strict architectural boundaries in [Feature-Sliced Design (FSD)](https://feature-sliced.design/).**\n\n-----\n\nThis plugin ensures clean, modular, and consistent import practices in scalable frontend projects adhering to Feature-Sliced Design principles. It promotes architectural discipline by enforcing rules for import paths, layer dependencies, and segment hierarchies, with support for auto-fixing violations where possible.\n\n-----\n\n**⭐ Found this plugin helpful? Give it a star on [GitHub](https://github.com/Lookin-Tavrus/eslint-plugin-lookin-tavrus-fsd.git)\\! Your support and feedback are highly appreciated.**\n\n-----\n\n## ✨ Key Features\n\n  * **Relative Imports Within Slices**: Enforces relative imports within the same FSD slice for modularity, with **auto-fix** support.\n  * **Public API Enforcement**: Restricts absolute imports to public API files (e.g., `index.ts`, `testing.ts`) for layers and shared segments, with **auto-fix** support.\n  * **Layer Import Directionality**: Ensures imports follow FSD layer hierarchy to prevent invalid dependencies and detects **slice-level circular dependencies within the same file's context**, with options to ignore specific patterns. For broader, project-wide cycle detection, consider tools like `dependency-cruiser`.\n  * **Segment Import Hierarchy**: Controls imports between segments (e.g., `ui`, `model`, `lib`) within a slice based on a custom hierarchy, allowing flexible configurations like `api` segments importing `model` types.\n  * **Test-Specific Imports**: Allows test-only imports (e.g., `testing.ts`) in designated test files and provides options to **ignore layer/circularity checks for test utility files**.\n  * **Custom Alias Support**: Supports project path aliases (e.g., `@`) for flexible path resolution.\n  * **Next.js App Router Compatibility**: Recognizes `app/**/page.tsx` and `app/**/layout.tsx` as part of the `pages` layer.\n  * **Configurable Rules**: Offers robust options for ignoring patterns, customizing layers, and defining public API files.\n\n-----\n\n## 📦 Installation\n\nInstall the plugin via npm:\n\n```bash\nnpm install eslint-plugin-lookin-tavrus-fsd --save-dev\n```\n\nEnsure ESLint is installed in your project:\n\n```bash\nnpm install eslint --save-dev\n```\n\n-----\n\n## ⚙️ Quick Start Configuration\n\nTo get started with minimal setup, configure the plugin in your ESLint configuration file (e.g., `.eslintrc.js`) with the most essential rules: `public-api-imports` and `path-checker`. These rules enforce public API usage and relative imports within slices, respectively, and are suitable for most FSD projects.\n\n### Minimal Configuration (Recommended for Beginners)\n\n```javascript\n// .eslintrc.js\nexport default {\n  plugins: ['lookin-tavrus-fsd'],\n  rules: {\n    'lookin-tavrus-fsd/public-api-imports': ['error', {\n      alias: '@', // Replace with your project's alias, if any\n      testFilesPatterns: ['**/*.test.ts', '**/*.spec.ts'], // Adjust to match your test file patterns\n    }],\n    'lookin-tavrus-fsd/path-checker': ['error', {\n      alias: '@', // Replace with your project's alias, if any\n    }],\n  },\n};\n```\n\n### Extended Minimal Configuration (With Layer Imports)\n\nFor projects requiring stricter layer dependency control, add the `layer-imports` rule to enforce FSD layer directionality and detect circular dependencies. This is particularly useful for larger projects or those using Next.js App Router.\n\n```javascript\n// .eslintrc.js\nexport default {\n  plugins: ['lookin-tavrus-fsd'],\n  rules: {\n    'lookin-tavrus-fsd/public-api-imports': ['error', {\n      alias: '@',\n      testFilesPatterns: ['**/*.test.ts', '**/*.spec.ts'],\n    }],\n    'lookin-tavrus-fsd/path-checker': ['error', {\n      alias: '@',\n    }],\n    'lookin-tavrus-fsd/layer-imports': ['error', {\n      alias: '@',\n      pagesLayerPatterns: ['pages', 'app/**/page.tsx', 'app/**/layout.tsx'], // Support for Next.js App Router\n    }],\n  },\n};\n```\n\n### Full Configuration (With All Rules)\n\nFor advanced users who want to enforce segment hierarchies and barrel file imports, include all rules. This configuration is ideal for mature projects with complex slice structures, providing the highest level of architectural discipline.\n\n```javascript\n// .eslintrc.js\nexport default {\n  plugins: ['lookin-tavrus-fsd'],\n  rules: {\n    'lookin-tavrus-fsd/public-api-imports': [\n      'error',\n      {\n        alias: '@',\n        testFilesPatterns: ['**/*.test.*', '**/*.stories.*', '**/StoreDecorator.tsx'],\n        sharedSegmentsToEnforce: ['ui', 'lib', 'api', 'config', 'consts'],\n      },\n    ],\n    'lookin-tavrus-fsd/path-checker': [\n      'error', { alias: '@' },\n    ],\n    'lookin-tavrus-fsd/layer-imports': [\n      'error',\n      {\n        alias: '@',\n        ignoreImportPatterns: ['**/StoreProvider', '**/ThemeProvider', '**/testing', '**/shared/lib/tests/**',],\n        ignoreCircularDependencyPatterns: ['**/*.stories.*', '**/shared/lib/tests/**',],\n        pagesLayerPatterns: ['pages', 'app/**/page.tsx', 'app/**/layout.tsx'],\n      },\n    ],\n    'lookin-tavrus-fsd/slice-segment-imports': ['error', {\n      alias: '@',\n      segmentHierarchy: {\n        ui: ['model', 'lib', 'api'],\n        model: ['lib', 'api'],\n        lib: ['api'],\n        api: ['model'], // Adjusted to allow API segments to import from 'model' (e.g., for types)\n      },\n      allowSameSegmentImports: true,\n    }],\n    'lookin-tavrus-fsd/force-public-api-barrel-imports': ['error', {\n      alias: '@',\n      layersToEnforce: ['entities', 'features', 'widgets', 'pages'],\n      publicApiFileNames: ['index.ts', 'index.js', 'testing.ts', 'testing.js'],\n      ignorePatterns: ['**/api/*'],\n    }],\n  },\n};\n```\n\n-----\n\n## 🔍 Rules Overview\n\nBelow is a detailed description of each rule, including its purpose, options, examples, and limitations.\n\n### 🔹 `path-checker`\n\n**Purpose**: Enforces **relative imports** within the same FSD slice to maintain modularity. Automatically converts absolute imports to relative paths when applicable.\n\n**Options**:\n\n| Option | Type | Description | Default |\n|--------|------|-------------|---------|\n| `alias` | `string` | Project path alias (e.g., `@`). | `''` |\n\n**Examples**:\n\n```javascript\n// ❌ Incorrect (absolute import within same slice)\nimport { helper } from '@/features/user/model/slice/helper';\n\n// ✅ Correct (auto-fixed by rule)\nimport { helper } from '../../model/slice/helper';\n```\n\n**Limitations**:\n\n  * Only applies to imports within the same slice.\n  * Requires accurate `alias` configuration for projects using path aliases.\n\n**Error Message**:\n\n> Imports within the same Feature-Sliced Design slice must be relative.\n\n-----\n\n### 🔹 `public-api-imports`\n\n**Purpose**: Restricts **absolute imports** to public API files (`index.ts`) for FSD layers (`entities`, `features`, `pages`, `widgets`, `shared`) and test-only imports (`testing.ts`) in test files. Enforces public API imports for specified `shared` segments (e.g., `ui`, `lib`). Provides auto-fix to correct import paths.\n\n**Options**:\n\n| Option | Type | Description | Default |\n|--------|------|-------------|---------|\n| `alias` | `string` | Project path alias (e.g., `@`). | `''` |\n| `testFilesPatterns` | `string[]` | Glob patterns for test-related files (e.g., `['**/*.test.ts', '**/*.stories.*', '**/StoreDecorator.tsx']`). | `[]` |\n| `enforceSharedSegmentPublicApi` | `boolean` | Enforce public API for shared segments. | `true` |\n| `sharedSegmentsToEnforce` | `string[]` | Shared segments to enforce public API (e.g., `['ui', 'lib', 'api', 'config', 'consts']`). | `['ui', 'lib', 'api', 'config', 'consts', 'utils']` |\n\n**Examples**:\n\n```javascript\n// ✅ Correct\nimport { UserCard } from '@/features/user'; // Public API\nimport { mockUser } => '@/entities/user/testing'; // In test file\nimport { Button } from '@/shared/ui'; // Shared public API\n\n// ❌ Incorrect\nimport { something } from '@/features/user/model/slice'; // Deep import\nimport { mockUser } from '@/entities/user/testing'; // In non-test file\nimport { styles } from '@/shared/ui/Button/Button.module.css'; // Deep shared import\n```\n\n**Limitations**:\n\n  * Assumes public API files are named `index.ts` or `testing.ts`.\n  * Shared segment enforcement requires careful configuration of `sharedSegmentsToEnforce`.\n\n**Error Messages**:\n\n> Import '{{importPath}}' must be from the public API (e.g., '{{publicApiPath}}').\n> Testing import '{{importPath}}' is only allowed in test files.\n> Import '{{importPath}}' from shared layer must be from its public API (e.g., '{{publicApiPath}}').\n\n-----\n\n### 🔹 `layer-imports`\n\n**Purpose**: Enforces **FSD layer import directionality** to prevent higher layers from importing lower layers. Supports Next.js App Router patterns for the `pages` layer. Includes **slice-level circular dependency detection within the current file's context**, with configurable ignore patterns. This helps catch immediate self-referential cycles and short-chain cycles within a single linting pass, serving as a useful preliminary check.\n\n**Options**:\n\n| Option | Type | Description | Default |\n|--------|------|-------------|---------|\n| `alias` | `string` | Project path alias (e.g., `@`). | `''` |\n| `ignoreImportPatterns` | `string[]` | Glob patterns for imports to completely ignore from all layer-related checks (e.g., `['**/StoreProvider', '**/ThemeProvider', '**/testing', '**/shared/lib/tests/**']`). | `[]` |\n| `ignoreCircularDependencyPatterns` | `string[]` | Glob patterns for files or paths for which circular dependency checks should be skipped (e.g., `['**/*.stories.*', '**/shared/lib/tests/**']`). | `[]` |\n| `pagesLayerPatterns` | `string[]` | Glob patterns for `pages` layer files (e.g., `['app/**/page.tsx', 'app/**/layout.tsx']`). | `['pages', 'app/**/page.tsx', 'app/**/layout.tsx']` |\n\n**Default Layer Hierarchy**:\n\n| Layer | Can Import From |\n|-------|-----------------|\n| `app` | `entities`, `features`, `pages`, `widgets`, `shared` |\n| `pages` | `entities`, `features`, `widgets`, `shared` |\n| `widgets` | `entities`, `features`, `shared` |\n| `features` | `entities`, `shared` |\n| `entities` | `entities`, `shared` |\n| `shared` | `shared` |\n\n**Examples**:\n\n```javascript\n// ✅ Correct\nimport { Article } from '@/entities/article'; // features → entities\nimport { SharedHeader } from '@/shared/ui/SharedHeader'; // app/dashboard/page.tsx → shared\nimport { StarRating } from '@/shared/ui/StarRating'; // In a story file, circularity ignored\n\n// ❌ Incorrect\nimport { Layout } from '@/pages/layout'; // features → pages\nimport { AppConfig } from '@/app/config'; // app/profile/page.tsx → app\n// Assuming entities/user and entities/profile have a mutual dependency not ignored,\n// and this specific import completes a cycle within the current file's context or established graph.\nimport { User } from '@/entities/user'; // Circular dependency if this import closes a User <-> Profile cycle\n```\n\n**Limitations**:\n\n  * Circular dependency detection within this rule is effective for **cycles that are completable within the scope of a single file's imports**, or direct back-and-forth dependencies between two slices that are both processed and detected by the rule's internal graph during the linting run.\n  * For **complex, multi-file, or deep circular dependencies across your entire project**, a dedicated tool like [**`dependency-cruiser`**](https://www.google.com/search?q=%5Bhttps://www.google.com/search%3Fq%3D%255Bhttps://github.com/sverweij/dependency-cruiser%255D%5D\\(https://www.google.com/search%3Fq%3D%255Bhttps://github.com/sverweij/dependency-cruiser%255D\\)\\(%5Bhttps://github.com/sverweij/dependency-cruiser%5D\\(https://github.com/sverweij/dependency-cruiser\\)\\)) is recommended for a holistic analysis.\n  * Static analysis only; does not handle dynamic imports.\n\n**Error Messages**:\n\n> Import violates Feature-Sliced Design: '{{currentLayer}}' layer cannot import from '{{importLayer}}'.\n> Circular dependency detected: '{{currentSlice}}' slice imports '{{importSlice}}', which creates a cycle.\n\n-----\n\n### 🔹 `slice-segment-imports`\n\n**Purpose**: Enforces a strict **import hierarchy between segments** (e.g., `ui`, `model`, `lib`, `api`) within the same FSD slice, based on a user-defined `segmentHierarchy`. This allows fine-grained control over internal slice dependencies, including scenarios where `api` segments might import `model` for types.\n\n**Options**:\n\n| Option | Type | Description | Default |\n|--------|------|-------------|---------|\n| `alias` | `string` | Project path alias (e.g., `@`). | `''` |\n| `segmentHierarchy` | `{ [segment: string]: string[] }` | Defines allowed import directions (e.g., `{ ui: ['model', 'lib'] }`). | **Required** |\n| `allowSameSegmentImports` | `boolean` | Allow imports within the same segment. | `true` |\n\n**Example Configuration**:\n\n```javascript\nsegmentHierarchy: {\n  ui: ['model', 'lib', 'api'],\n  model: ['lib', 'api'],\n  lib: ['api'],\n  api: ['model'], // Example: Allows 'api' to import from 'model' (e.g., for types)\n}\n```\n\n**Examples**:\n\n```javascript\n// ✅ Correct\nimport { getUserData } from '../lib/utils'; // model → lib\nimport { getUserName } from '../model/selectors'; // ui → model\nimport { Notification } from '../model/types/notifications'; // api → model (with `api: ['model']` config)\n\n// ❌ Incorrect\nimport { UserAvatar } from '../ui/UserAvatar'; // model → ui\nimport { selectUserData } from '../model/selectors'; // api → model (if `api: []` config)\n```\n\n**Limitations**:\n\n  * Only applies to relative imports within the same slice.\n  * No enforcement for segments not defined in `segmentHierarchy`.\n\n**Error Messages**:\n\n> Segment '{{currentSegment}}' in slice '{{currentLayer}}/{{currentSlice}}' cannot import from segment '{{importedSegment}}'. Allowed: {{allowedImports}}.\n> Imports from the same segment '{{currentSegment}}' are not allowed within slice '{{currentLayer}}/{{currentSlice}}'.\n\n-----\n\n### 🔹 `force-public-api-barrel-imports`\n\n**Purpose**: Enforces **absolute imports** to FSD layers through public API barrel files (e.g., `index.ts`, `testing.ts`), with auto-fix support. This prevents deep absolute imports into layers and segments.\n\n**Options**:\n\n| Option | Type | Description | Default |\n|--------|------|-------------|---------|\n| `alias` | `string` | Project path alias (e.g., `@`). | `''` |\n| `layersToEnforce` | `string[]` | Layers to enforce barrel imports (e.g., `['entities', 'features']`). | `['entities', 'features', 'widgets', 'pages']` |\n| `publicApiFileNames` | `string[]` | Public API file names (e.g., `['index.ts', 'testing.ts']`). | `['index.ts', 'index.tsx', 'index.js', 'index.jsx']` |\n| `ignorePatterns` | `string[]` | Glob patterns for imports to ignore (e.g., `['**/api/*']`). | `[]` |\n\n**Examples**:\n\n```javascript\n// ✅ Correct\nimport { UserCard } from '@/entities/User'; // Public API\nimport { Button } from '@/shared/ui'; // Shared segment (if enforced)\n\n// ❌ Incorrect\nimport { LoginForm } from '@/features/Auth/ui/LoginForm'; // Deep import\nimport { Config } from '@/shared/config/index.ts'; // Deep shared import (if enforced)\n```\n\n**Limitations**:\n\n  * Only applies to absolute imports.\n  * Requires careful configuration of `ignorePatterns` for edge cases (e.g., direct API client imports).\n\n**Error Message**:\n\n> Import '{{originalImportPath}}' should go through the public API barrel file: '{{suggestedImportPath}}'.\n\n-----\n\n## 📁 Supported FSD Layers\n\n  * `app`\n  * `entities`\n  * `features`\n  * `widgets`\n  * `shared`\n  * `pages`\n\nOther directories are ignored by default.\n\n-----\n\n## 🏗️ Example Project Structure\n\n```\n/src/\n├── app/\n│   └── config/\n├── entities/\n│   └── comment/\n│       ├── model/\n│       ├── ui/\n│       ├── index.ts\n│       └── testing.ts\n├── features/\n│   └── user/\n│       ├── model/\n│       └── index.ts\n├── pages/\n│   └── dashboard/\n│       ├── page.tsx\n│       └── index.ts\n├── shared/\n│   ├── api/\n│   ├── config/\n│   ├── lib/\n│   │   └── tests/ # Your test utilities folder\n│   └── ui/\n│       └── index.tsx\n├── widgets/\n```\n\n-----\n\n## ✅ Valid vs ❌ Invalid Examples\n\n### ✅ Valid\n\n```javascript\n// Relative within slice\nimport { reducer } from '../model/slice.js';\n\n// Public API\nimport { UserCard } from '@/entities/user';\n\n// Test import in test file\nimport { mockUser } from '@entities/user/testing';\n\n// Allowed layer direction\nimport { Article } from '@entities/article';\n\n// Allowed segment import (ui → model)\nimport { getUserData } from '../model/selectors';\n\n// Allowed segment import (api → model, with custom hierarchy)\nimport { Notification } from '../model/types/notifications';\n\n// Barrel import\nimport { UserData } from '@entities/User';\n\n// Ignored import for layer/circularity (e.g., StoreProvider, a story file, or shared/lib/tests utility)\nimport { StoreProvider } from '@/app/providers/StoreProvider';\nimport { StarRating } from '@/shared/ui/StarRating'; // If this is a .stories.tsx file\nimport { componentRender } from '@/shared/lib/tests/componentRender/componentRender';\n```\n\n### ❌ Invalid\n\n```javascript\n// Deep import bypassing public API\nimport { helper } from '@features/user/model/helper';\n\n// Absolute import within same slice\nimport { helper } from '@features/user/model/helper';\n\n// Test import in non-test file\nimport { mockUser } from '@entities/user/testing';\n\n// Disallowed layer direction\nimport { Layout } from '@pages/layout';\n\n// Disallowed segment import (model → ui)\nimport { UserAvatar } from '../ui/UserAvatar';\n\n// Non-barrel import\nimport { LoginForm } from '@features/Auth/ui/LoginForm';\n\n// Circular dependency (if not ignored by config, and completes a cycle within the current file's processing context)\nimport { User } from '@/entities/User'; // E.g., if this specific import forms a User <-> Profile cycle\n```\n\n-----\n\n## 📄 Rule Summary\n\n| Rule | Description |\n|------|-------------|\n| `path-checker` | Enforces relative imports within the same FSD slice, with auto-fix. |\n| `public-api-imports` | Restricts absolute imports to public/test APIs, with auto-fix for layers and shared segments. |\n| `layer-imports` | Enforces FSD layer import directionality and detects slice-level circular dependencies within a file's context. |\n| `slice-segment-imports` | Enforces segment import hierarchy within a slice, allowing flexible configurations like `api` importing `model` types. |\n| `force-public-api-barrel-imports` | Enforces absolute imports through public API barrel files, with auto-fix. |\n\n-----\n\n## 🧠 Example Error Messages\n\n  * **path-checker**: \"Imports within the same Feature-Sliced Design slice must be relative.\"\n  * **public-api-imports**:\n      * \"Import 'entities/comment/model/slice' must be from the public API (e.g., 'entities/comment').\"\n      * \"Testing import 'entities/user/testing' is only allowed in test files.\"\n      * \"Shared segment import 'shared/ui/Button/Button.module.tsx' must be from the public API (e.g., 'shared/ui/Button').\"\n  * **layer-imports**:\n      * \"Import violates Feature-Sliced Design: 'features' layer cannot import from 'pages'.\"\n      * \"Circular dependency detected: 'user' slice imports 'profile', which creates a cycle.\"\n  * **slice-segment-imports**:\n      * \"Segment 'model' in slice 'features/user' cannot import from 'ui'. Allowed: lib, api.\"\n      * \"Imports from the same segment 'model' are not allowed within slice 'features/user'.\"\n  * **force-public-api-barrel-imports**:\n      * \"Import '@/features/Auth/ui/LoginForm' should go through the public API barrel file: '@/features/Auth'.\"\n\n-----\n\n## 👨‍💻 Author\n\nDeveloped by **Lookin-Tavrus**, inspired by the [Ulbi TV](https://www.youtube.com/@UlbiTV) frontend course. This plugin aims to empower frontend developers to build scalable, maintainable applications using Feature-Sliced Design.","readmeFilename":"README.md","homepage":"https://github.com/Lookin-Tavrus/eslint-plugin-lookin-tavrus-fsd#readme","repository":{"type":"git","url":"git+https://github.com/Lookin-Tavrus/eslint-plugin-lookin-tavrus-fsd.git"},"bugs":{"url":"https://github.com/Lookin-Tavrus/eslint-plugin-lookin-tavrus-fsd/issues"}}