{"_id":"@37bytes/code-style","_rev":"9-9e7c52296fd4474bb0edb405b24ab4b3","name":"@37bytes/code-style","dist-tags":{"dev":"0.0.3-dev.3","latest":"0.0.5"},"versions":{"0.0.1":{"name":"@37bytes/code-style","version":"0.0.1","keywords":["eslint","stylelint","prettier","typescript","config","37bytes","linting","formatting"],"author":{"name":"37bytes"},"license":"ISC","_id":"@37bytes/code-style@0.0.1","maintainers":[{"name":"rteslenko","email":"rteslenko@37bytes.com"},{"name":"mgarmash","email":"ops@37bytes.com"},{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},{"name":"tnikolaeva","email":"tnikolaeva@37bytes.com"},{"name":"arhonist-37b","email":"naushev@37bytes.com"},{"name":"yar_vav","email":"yavavilin@37bytes.com"},{"name":"rispaev","email":"rispaev@37bytes.com"}],"homepage":"https://github.com/37bytes/public-packages/tree/master/packages/code-style#readme","bugs":{"url":"https://github.com/37bytes/public-packages/issues"},"dist":{"shasum":"76bc88d765929b58027d0ec0e0153f5a775a5746","tarball":"https://registry.npmjs.org/@37bytes/code-style/-/code-style-0.0.1.tgz","fileCount":60,"integrity":"sha512-LxWfF7fRzSpOLOFE7colrdde1rKf1FHcq3qdJX1NkyZxtE2+aCIElZkSIoszDqPaLBanK77/IuqfereulL0gmg==","signatures":[{"sig":"MEUCIHDDV0kLgI/hMwSG22fUtQHhNOz8h5Spr43ZdGO+IYuxAiEAlCykSrHGETdViV+fGEg4j/25HzRdNHKrdKqt3PNpD1o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218358},"type":"module","_from":"file:37bytes-code-style-0.0.1.tgz","engines":{"node":">=24.0.0"},"exports":{"./biome":"./biome/index.js","./eslint":"./eslint/index.js","./oxlint":"./oxlint/index.js","./prettier":"./prettier/index.js","./stylelint":"./stylelint/index.js","./eslint/fsd":"./eslint/fsd.js","./biome/config":"./biome/config.json","./browserslist":"./browserslist/index.cjs","./editorconfig":"./editorconfig/.editorconfig","./eslint/rules":"./eslint/rules/index.js","./oxlint/config":"./oxlint/config.json","./eslint/plugins":"./eslint/plugins/index.js","./eslint/rules/*":"./eslint/rules/*.js","./typescript/base":"./typescript/base.json","./typescript/node":"./typescript/node.json","./typescript/react":"./typescript/react.json","./oxlint/perfectionist":"./oxlint/perfectionist.json","./biome/eslint-overrides":"./biome/eslint-overrides.js","./eslint/browser-features":"./eslint/browser-features.js","./eslint/restricted-imports":"./eslint/restricted-imports.js","./oxlint/type-aware-overrides":"./oxlint/type-aware-overrides.js"},"imports":{"#fsd":"./eslint/fsd.js","#rules":"./eslint/rules/index.js","#config":"./eslint/config.js","#plugins":"./eslint/plugins/index.js","#rules/*":"./eslint/rules/*.js","#plugins/*":"./eslint/plugins/*/index.js","#restricted-imports":"./eslint/restricted-imports.js"},"scripts":{"lint":"pnpm lint:typescript && pnpm lint:eslint","test":"node --test","format":"prettier --write .","build:biome":"node biome/build.js && prettier --write biome/config.json","lint:eslint":"eslint --fix --max-warnings 0 .","build:oxlint":"node oxlint/build.js && prettier --write oxlint/*.json","format:check":"prettier --check .","npm-packlist":"npx -y npm-packlist@6.0.1","test:plugins":"node --test eslint/plugins/*/__tests__/*.test.js","lint:typescript":"tsc --noEmit","test:integration":"node --test __tests__/*.test.js"},"_npmUser":{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},"prettier":"./prettier/config.js","_resolved":"/private/var/folders/5t/b72kl4gn5fs7rnfrhvh9l6sc0000gn/T/df955ed2e81e2588bd105af84a30a489/37bytes-code-style-0.0.1.tgz","_integrity":"sha512-LxWfF7fRzSpOLOFE7colrdde1rKf1FHcq3qdJX1NkyZxtE2+aCIElZkSIoszDqPaLBanK77/IuqfereulL0gmg==","repository":{"url":"git+https://github.com/37bytes/public-packages.git","type":"git","directory":"packages/code-style"},"_npmVersion":"11.6.2","description":"Unified linting and formatting configs for 37bytes projects","directories":{},"_nodeVersion":"24.13.0","dependencies":{"globals":"17.3.0","@eslint/js":"9.39.2","eslint-plugin-n":"17.24.0","stylelint-order":"7.0.1","eslint-plugin-react":"7.37.5","eslint-plugin-compat":"7.0.1","eslint-plugin-regexp":"3.0.0","@vitest/eslint-plugin":"1.6.9","eslint-plugin-promise":"7.2.1","eslint-plugin-sonarjs":"4.0.0","eslint-plugin-unicorn":"63.0.0","eslint-plugin-import-x":"4.16.1","eslint-plugin-jest-dom":"5.5.0","eslint-plugin-security":"4.0.0","eslint-plugin-storybook":"10.2.13","@next/eslint-plugin-next":"16.1.6","@typescript-eslint/utils":"8.56.0","@typescript-eslint/parser":"8.56.0","confusing-browser-globals":"1.0.11","eslint-plugin-react-hooks":"7.0.1","eslint-plugin-perfectionist":"5.6.0","eslint-plugin-testing-library":"7.16.0","stylelint-config-standard-scss":"17.0.0","@typescript-eslint/eslint-plugin":"8.56.0","eslint-import-resolver-typescript":"4.4.4","stylelint-declaration-strict-value":"1.11.1","eslint-plugin-prefer-arrow-functions":"3.9.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.39.2","oxlint":"1.50.0","prettier":"3.8.1","stylelint":"17.4.0","typescript":"5.9.3","@types/react":"19.2.14","@biomejs/biome":"2.4.4","oxlint-tsgolint":"0.15.0","eslint-config-biome":"2.1.3","eslint-plugin-oxlint":"1.50.0"},"peerDependencies":{"eslint":"9.39.2","oxlint":"1.50.0","prettier":"3.8.1","stylelint":"17.4.0","typescript":"5.9.3","@biomejs/biome":"2.4.4"},"peerDependenciesMeta":{"prettier":{"optional":true},"stylelint":{"optional":true},"typescript":{"optional":true},"@biomejs/biome":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/code-style_0.0.1_1773170988767_0.2603356981674494","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@37bytes/code-style","version":"0.0.2","keywords":["eslint","stylelint","prettier","typescript","config","37bytes","linting","formatting"],"author":{"name":"37bytes"},"license":"ISC","_id":"@37bytes/code-style@0.0.2","maintainers":[{"name":"rteslenko","email":"rteslenko@37bytes.com"},{"name":"mgarmash","email":"ops@37bytes.com"},{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},{"name":"tnikolaeva","email":"tnikolaeva@37bytes.com"},{"name":"arhonist-37b","email":"naushev@37bytes.com"},{"name":"yar_vav","email":"yavavilin@37bytes.com"},{"name":"rispaev","email":"rispaev@37bytes.com"}],"homepage":"https://github.com/37bytes/public-packages/tree/master/packages/code-style#readme","bugs":{"url":"https://github.com/37bytes/public-packages/issues"},"dist":{"shasum":"1bcbe2ce345d82745de70cd9029110c09a9d9ff1","tarball":"https://registry.npmjs.org/@37bytes/code-style/-/code-style-0.0.2.tgz","fileCount":60,"integrity":"sha512-QmuiGiXrgwqJ+kg8AuOQGk/FjTT433naqN4KbVRAx+Fx+DqnGiGDLc9YA8lz1joONoUldL/X1mkSBe2JmL5txw==","signatures":[{"sig":"MEYCIQCgJhp1cCBu34RWf674eK7ri7xoEuYjKhOJnLeJquaYVAIhAKSqfo83yycgDRtOB5snM3WpasmeOWaZuYq0U+JIUnd7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219094},"type":"module","engines":{"node":">=24.0.0"},"exports":{"./biome":"./biome/index.js","./eslint":"./eslint/index.js","./oxlint":"./oxlint/index.js","./prettier":"./prettier/index.js","./stylelint":"./stylelint/index.js","./eslint/fsd":"./eslint/fsd.js","./biome/config":"./biome/config.json","./browserslist":"./browserslist/index.cjs","./editorconfig":"./editorconfig/.editorconfig","./eslint/rules":"./eslint/rules/index.js","./oxlint/config":"./oxlint/config.json","./eslint/plugins":"./eslint/plugins/index.js","./eslint/rules/*":"./eslint/rules/*.js","./typescript/base":"./typescript/base.json","./typescript/node":"./typescript/node.json","./typescript/react":"./typescript/react.json","./oxlint/perfectionist":"./oxlint/perfectionist.json","./biome/eslint-overrides":"./biome/eslint-overrides.js","./eslint/browser-features":"./eslint/browser-features.js","./eslint/restricted-imports":"./eslint/restricted-imports.js","./oxlint/type-aware-overrides":"./oxlint/type-aware-overrides.js"},"gitHead":"88da2b72aa7297e0a2e5e47b37306826c4290840","imports":{"#fsd":"./eslint/fsd.js","#rules":"./eslint/rules/index.js","#config":"./eslint/config.js","#plugins":"./eslint/plugins/index.js","#rules/*":"./eslint/rules/*.js","#plugins/*":"./eslint/plugins/*/index.js","#restricted-imports":"./eslint/restricted-imports.js"},"scripts":{"lint":"pnpm lint:typescript && pnpm lint:eslint","test":"node --test","format":"prettier --write .","build:biome":"node biome/build.js && prettier --write biome/config.json","lint:eslint":"eslint --fix --max-warnings 0 .","build:oxlint":"node oxlint/build.js && prettier --write oxlint/*.json","format:check":"prettier --check .","npm-packlist":"npx -y npm-packlist@6.0.1","test:plugins":"node --test eslint/plugins/*/__tests__/*.test.js","prepublishOnly":"pnpm run build:oxlint && pnpm run build:biome && pnpm run lint && pnpm test && echo 'Use npm publish --dry-run first!'","lint:typescript":"tsc --noEmit","test:integration":"node --test __tests__/*.test.js"},"_npmUser":{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},"prettier":"./prettier/config.js","repository":{"url":"git+https://github.com/37bytes/public-packages.git","type":"git","directory":"packages/code-style"},"_npmVersion":"11.6.2","description":"Unified linting and formatting configs for 37bytes projects","directories":{},"_nodeVersion":"24.13.0","dependencies":{"globals":"17.4.0","@eslint/js":"9.39.4","eslint-plugin-n":"17.24.0","stylelint-order":"7.0.1","eslint-plugin-react":"7.37.5","eslint-plugin-compat":"7.0.1","eslint-plugin-regexp":"3.1.0","@vitest/eslint-plugin":"1.6.14","eslint-plugin-promise":"7.2.1","eslint-plugin-sonarjs":"4.0.2","eslint-plugin-unicorn":"64.0.0","eslint-plugin-import-x":"4.16.2","eslint-plugin-jest-dom":"5.5.0","eslint-plugin-security":"4.0.0","eslint-plugin-storybook":"10.3.4","@next/eslint-plugin-next":"16.2.2","@typescript-eslint/utils":"8.58.0","@typescript-eslint/parser":"8.58.0","confusing-browser-globals":"1.0.11","eslint-plugin-react-hooks":"7.0.1","eslint-plugin-perfectionist":"5.8.0","eslint-plugin-testing-library":"7.16.2","stylelint-config-standard-scss":"17.0.0","@typescript-eslint/eslint-plugin":"8.58.0","eslint-import-resolver-typescript":"4.4.4","stylelint-declaration-strict-value":"1.11.1","eslint-plugin-prefer-arrow-functions":"3.9.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.39.4","oxlint":"1.58.0","prettier":"3.8.1","stylelint":"17.6.0","typescript":"6.0.2","@types/react":"19.2.14","@biomejs/biome":"2.4.10","oxlint-tsgolint":"0.19.0","eslint-config-biome":"2.1.3","eslint-plugin-oxlint":"1.58.0"},"peerDependencies":{"eslint":"9.39.4","oxlint":"1.58.0","prettier":"3.8.1","stylelint":"17.6.0","typescript":"6.0.2","@biomejs/biome":"2.4.10"},"peerDependenciesMeta":{"prettier":{"optional":true},"stylelint":{"optional":true},"typescript":{"optional":true},"@biomejs/biome":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/code-style_0.0.2_1775457506209_0.7457421689172337","host":"s3://npm-registry-packages-npm-production"}},"0.0.3-dev.0":{"name":"@37bytes/code-style","version":"0.0.3-dev.0","keywords":["eslint","stylelint","prettier","typescript","config","37bytes","linting","formatting"],"author":{"name":"37bytes"},"license":"ISC","_id":"@37bytes/code-style@0.0.3-dev.0","maintainers":[{"name":"rteslenko","email":"rteslenko@37bytes.com"},{"name":"mgarmash","email":"ops@37bytes.com"},{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},{"name":"tnikolaeva","email":"tnikolaeva@37bytes.com"},{"name":"arhonist-37b","email":"naushev@37bytes.com"},{"name":"yar_vav","email":"yavavilin@37bytes.com"},{"name":"rispaev","email":"rispaev@37bytes.com"}],"homepage":"https://github.com/37bytes/public-packages/tree/master/packages/code-style#readme","bugs":{"url":"https://github.com/37bytes/public-packages/issues"},"dist":{"shasum":"388876cd665c5aa2010f60afe41d9f4ded90aa4d","tarball":"https://registry.npmjs.org/@37bytes/code-style/-/code-style-0.0.3-dev.0.tgz","fileCount":69,"integrity":"sha512-ldFLrVIwr+AUDS6fx9lThQj2ab+zGJPLbP3u3eklwkcE9/2IKbuvH3NeFY0pDrdpdGQMBbP6wULqSlxivU8dMQ==","signatures":[{"sig":"MEQCICBJlVHLEKMmVcbWV/pYY4aaVHtOnQBGmHHlNbA0F4kBAiAKsbzeSbPVQYiYq2ANbW/LPLRV86hpY3qkM2m6Se746w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":274980},"type":"module","_from":"file:37bytes-code-style-0.0.3-dev.0.tgz","engines":{"node":">=24.0.0"},"exports":{"./biome":"./biome/index.js","./eslint":"./eslint/index.js","./oxlint":"./oxlint/index.js","./prettier":"./prettier/index.js","./stylelint":"./stylelint/index.js","./eslint/fsd":"./eslint/fsd.js","./biome/config":"./biome/config.json","./browserslist":"./browserslist/index.cjs","./editorconfig":"./editorconfig/.editorconfig","./eslint/rules":"./eslint/rules/index.js","./oxlint/config":"./oxlint/config.json","./eslint/plugins":"./eslint/plugins/index.js","./eslint/rules/*":"./eslint/rules/*.js","./typescript/base":"./typescript/base.json","./typescript/node":"./typescript/node.json","./typescript/react":"./typescript/react.json","./dependency-cruiser":"./dependency-cruiser/index.js","./oxlint/perfectionist":"./oxlint/perfectionist.json","./biome/eslint-overrides":"./biome/eslint-overrides.js","./eslint/browser-features":"./eslint/browser-features.js","./eslint/restricted-imports":"./eslint/restricted-imports.js","./oxlint/type-aware-overrides":"./oxlint/type-aware-overrides.js"},"imports":{"#fsd":"./eslint/fsd.js","#biome":"./biome/index.js","#rules":"./eslint/rules/index.js","#config":"./eslint/config.js","#eslint":"./eslint/index.js","#oxlint":"./oxlint/index.js","#biome/*":"./biome/*.js","#plugins":"./eslint/plugins/index.js","#rules/*":"./eslint/rules/*.js","#tests/*":"./__tests__/*.js","#eslint/*":"./eslint/*.js","#oxlint/*":"./oxlint/*.js","#prettier":"./prettier/index.js","#plugins/*":"./eslint/plugins/*/index.js","#stylelint":"./stylelint/index.js","#prettier/*":"./prettier/*.js","#biome/rules":"./biome/rules/index.js","#stylelint/*":"./stylelint/*.js","#oxlint/rules":"./oxlint/rules/index.js","#dependency-cruiser":"./dependency-cruiser/index.js","#restricted-imports":"./eslint/restricted-imports.js","#dependency-cruiser/*":"./dependency-cruiser/*.js"},"scripts":{"lint":"pnpm lint:typescript && pnpm lint:eslint","test":"node --test __tests__/*.test.js eslint/__tests__/*.test.js eslint/plugins/*/__tests__/*.test.js __tests__/parity/*.check.js __tests__/*.check.js","format":"prettier --write .","build:biome":"node biome/build.js && prettier --write biome/config.json","lint:eslint":"eslint --fix --max-warnings 0 .","test:parity":"node --test __tests__/parity/*.check.js __tests__/*.check.js","build:oxlint":"node oxlint/build.js && prettier --write oxlint/*.json .oxlintrc.json","format:check":"prettier --check .","npm-packlist":"npx -y npm-packlist@6.0.1","test:plugins":"node --test eslint/plugins/*/__tests__/*.test.js","lint:typescript":"tsc --noEmit","test:integration":"node --test __tests__/*.test.js","build:parity-domains":"node __tests__/parity/generate-biome-domain-rules.js && prettier --write __tests__/parity/biome-domain-rules.json"},"_npmUser":{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},"prettier":"./prettier/config.js","_resolved":"/private/tmp/c1f5cbdebe9df1c367af86b7b329d2f7/37bytes-code-style-0.0.3-dev.0.tgz","_integrity":"sha512-ldFLrVIwr+AUDS6fx9lThQj2ab+zGJPLbP3u3eklwkcE9/2IKbuvH3NeFY0pDrdpdGQMBbP6wULqSlxivU8dMQ==","repository":{"url":"git+https://github.com/37bytes/public-packages.git","type":"git","directory":"packages/code-style"},"_npmVersion":"11.16.0","description":"Unified linting and formatting configs for 37bytes projects","directories":{},"_nodeVersion":"26.3.1","dependencies":{"globals":"17.7.0","@eslint/js":"10.0.1","eslint-plugin-n":"18.2.2","stylelint-order":"8.1.1","eslint-plugin-compat":"7.0.2","eslint-plugin-regexp":"3.1.1","@vitest/eslint-plugin":"1.6.23","eslint-plugin-promise":"7.3.0","eslint-plugin-sonarjs":"4.2.0","eslint-plugin-unicorn":"72.0.0","eslint-plugin-import-x":"4.17.1","eslint-plugin-security":"4.0.1","eslint-plugin-storybook":"10.5.2","@next/eslint-plugin-next":"16.2.10","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.64.0","@typescript-eslint/parser":"8.64.0","confusing-browser-globals":"1.0.11","eslint-plugin-react-hooks":"7.1.1","@eslint-react/eslint-plugin":"5.16.1","eslint-plugin-perfectionist":"5.10.0","eslint-plugin-testing-library":"7.16.2","stylelint-config-standard-scss":"17.0.0","@typescript-eslint/eslint-plugin":"8.64.0","eslint-import-resolver-typescript":"4.4.5","stylelint-declaration-strict-value":"1.11.1","eslint-plugin-prefer-arrow-functions":"3.10.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"10.7.0","oxlint":"1.73.0","prettier":"3.9.5","storybook":"10.5.2","stylelint":"17.14.0","typescript":"6.0.3","@types/react":"19.2.17","@biomejs/biome":"2.5.4","oxlint-tsgolint":"0.25.0","dependency-cruiser":"17.4.3","eslint-config-biome":"2.1.3","eslint-plugin-oxlint":"1.73.0"},"peerDependencies":{"eslint":"^10.4.0","oxlint":"1.73.0","prettier":"3.9.5","stylelint":"17.14.0","typescript":"6.0.3","@biomejs/biome":"2.5.4","dependency-cruiser":"17.4.3"},"peerDependenciesMeta":{"prettier":{"optional":true},"stylelint":{"optional":true},"typescript":{"optional":true},"@biomejs/biome":{"optional":true},"dependency-cruiser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/code-style_0.0.3-dev.0_1784570305722_0.31278742258338754","host":"s3://npm-registry-packages-npm-production"}},"0.0.3-dev.1":{"name":"@37bytes/code-style","version":"0.0.3-dev.1","keywords":["eslint","stylelint","prettier","typescript","config","37bytes","linting","formatting"],"author":{"name":"37bytes"},"license":"ISC","_id":"@37bytes/code-style@0.0.3-dev.1","maintainers":[{"name":"rteslenko","email":"rteslenko@37bytes.com"},{"name":"mgarmash","email":"ops@37bytes.com"},{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},{"name":"tnikolaeva","email":"tnikolaeva@37bytes.com"},{"name":"arhonist-37b","email":"naushev@37bytes.com"},{"name":"yar_vav","email":"yavavilin@37bytes.com"},{"name":"rispaev","email":"rispaev@37bytes.com"}],"homepage":"https://github.com/37bytes/public-packages/tree/master/packages/code-style#readme","bugs":{"url":"https://github.com/37bytes/public-packages/issues"},"dist":{"shasum":"3d0d9f7c80272afd4f15f858edf4858905032610","tarball":"https://registry.npmjs.org/@37bytes/code-style/-/code-style-0.0.3-dev.1.tgz","fileCount":69,"integrity":"sha512-QYor5dp142p7FOZSM77PCUX/s4Ww0D2qh1x/7ZQr1nRjFltxhu+bLQK7/bzRtqzdrf93J1C0A48dvmcYChu91g==","signatures":[{"sig":"MEUCIHNxgryip4PljSKXTPTtt7WtHM+MXiPA64V59AX4uDluAiEAmzBjU+eN2FYwU7hOgj+xtMAm2swdm0B9wO3lZEgY5a8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282525},"type":"module","_from":"file:37bytes-code-style-0.0.3-dev.1.tgz","engines":{"node":">=24.0.0"},"exports":{"./biome":"./biome/index.js","./eslint":"./eslint/index.js","./oxlint":"./oxlint/index.js","./prettier":"./prettier/index.js","./stylelint":"./stylelint/index.js","./eslint/fsd":"./eslint/fsd.js","./biome/config":"./biome/config.json","./browserslist":"./browserslist/index.cjs","./editorconfig":"./editorconfig/.editorconfig","./eslint/rules":"./eslint/rules/index.js","./oxlint/config":"./oxlint/config.json","./eslint/plugins":"./eslint/plugins/index.js","./eslint/rules/*":"./eslint/rules/*.js","./typescript/base":"./typescript/base.json","./typescript/node":"./typescript/node.json","./typescript/react":"./typescript/react.json","./dependency-cruiser":"./dependency-cruiser/index.js","./oxlint/perfectionist":"./oxlint/perfectionist.json","./biome/eslint-overrides":"./biome/eslint-overrides.js","./eslint/browser-features":"./eslint/browser-features.js","./eslint/restricted-imports":"./eslint/restricted-imports.js","./oxlint/type-aware-overrides":"./oxlint/type-aware-overrides.js"},"imports":{"#fsd":"./eslint/fsd.js","#biome":"./biome/index.js","#rules":"./eslint/rules/index.js","#config":"./eslint/config.js","#eslint":"./eslint/index.js","#oxlint":"./oxlint/index.js","#biome/*":"./biome/*.js","#plugins":"./eslint/plugins/index.js","#rules/*":"./eslint/rules/*.js","#tests/*":"./__tests__/*.js","#eslint/*":"./eslint/*.js","#oxlint/*":"./oxlint/*.js","#prettier":"./prettier/index.js","#plugins/*":"./eslint/plugins/*/index.js","#stylelint":"./stylelint/index.js","#prettier/*":"./prettier/*.js","#biome/rules":"./biome/rules/index.js","#stylelint/*":"./stylelint/*.js","#oxlint/rules":"./oxlint/rules/index.js","#dependency-cruiser":"./dependency-cruiser/index.js","#restricted-imports":"./eslint/restricted-imports.js","#dependency-cruiser/*":"./dependency-cruiser/*.js"},"scripts":{"lint":"npm run lint:typescript && npm run lint:eslint","test":"node --test __tests__/*.test.js eslint/__tests__/*.test.js eslint/plugins/*/__tests__/*.test.js __tests__/parity/*.check.js __tests__/*.check.js","format":"prettier --write .","build:biome":"node biome/build.js && prettier --write biome/config.json","lint:eslint":"eslint --fix --max-warnings 0 .","test:parity":"node --test __tests__/parity/*.check.js __tests__/*.check.js","build:oxlint":"node oxlint/build.js && prettier --write oxlint/*.json .oxlintrc.json","format:check":"prettier --check .","npm-packlist":"npx -y npm-packlist@6.0.1","test:plugins":"node --test eslint/plugins/*/__tests__/*.test.js","lint:typescript":"tsc --noEmit","test:integration":"node --test __tests__/*.test.js","build:parity-domains":"node __tests__/parity/generate-biome-domain-rules.js && prettier --write __tests__/parity/biome-domain-rules.json"},"_npmUser":{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},"prettier":"./prettier/config.js","_resolved":"/private/tmp/ba66a7380b4384691c9962fce56a1a38/37bytes-code-style-0.0.3-dev.1.tgz","_integrity":"sha512-QYor5dp142p7FOZSM77PCUX/s4Ww0D2qh1x/7ZQr1nRjFltxhu+bLQK7/bzRtqzdrf93J1C0A48dvmcYChu91g==","repository":{"url":"git+https://github.com/37bytes/public-packages.git","type":"git","directory":"packages/code-style"},"_npmVersion":"11.16.0","description":"Unified linting and formatting configs for 37bytes projects","directories":{},"_nodeVersion":"26.3.1","dependencies":{"globals":"17.7.0","@eslint/js":"10.0.1","eslint-plugin-n":"18.2.2","stylelint-order":"8.1.1","eslint-plugin-compat":"7.0.2","eslint-plugin-regexp":"3.1.1","@vitest/eslint-plugin":"1.6.23","eslint-plugin-promise":"7.3.0","eslint-plugin-sonarjs":"4.2.0","eslint-plugin-unicorn":"72.0.0","eslint-plugin-import-x":"4.17.1","eslint-plugin-security":"4.0.1","eslint-plugin-storybook":"10.5.2","@next/eslint-plugin-next":"16.2.10","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.64.0","@typescript-eslint/parser":"8.64.0","confusing-browser-globals":"1.0.11","eslint-plugin-react-hooks":"7.1.1","@eslint-react/eslint-plugin":"5.16.1","eslint-plugin-perfectionist":"5.10.0","eslint-plugin-testing-library":"7.16.2","stylelint-config-standard-scss":"17.0.0","@typescript-eslint/eslint-plugin":"8.64.0","eslint-import-resolver-typescript":"4.4.5","stylelint-declaration-strict-value":"1.11.1","eslint-plugin-prefer-arrow-functions":"3.10.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"10.7.0","oxlint":"1.73.0","prettier":"3.9.5","storybook":"10.5.2","stylelint":"17.14.0","typescript":"6.0.3","@types/react":"19.2.17","@biomejs/biome":"2.5.4","oxlint-tsgolint":"0.25.0","dependency-cruiser":"17.4.3","eslint-config-biome":"2.1.3","eslint-plugin-oxlint":"1.73.0"},"peerDependencies":{"eslint":"^10.4.0","oxlint":"1.73.0","prettier":"3.9.5","stylelint":"17.14.0","typescript":"6.0.3","@biomejs/biome":"2.5.4","dependency-cruiser":"17.4.3"},"peerDependenciesMeta":{"prettier":{"optional":true},"stylelint":{"optional":true},"typescript":{"optional":true},"@biomejs/biome":{"optional":true},"dependency-cruiser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/code-style_0.0.3-dev.1_1784630470941_0.733637646123994","host":"s3://npm-registry-packages-npm-production"}},"0.0.3-dev.2":{"name":"@37bytes/code-style","version":"0.0.3-dev.2","keywords":["eslint","stylelint","prettier","typescript","config","37bytes","linting","formatting"],"author":{"name":"37bytes"},"license":"ISC","_id":"@37bytes/code-style@0.0.3-dev.2","maintainers":[{"name":"rteslenko","email":"rteslenko@37bytes.com"},{"name":"mgarmash","email":"ops@37bytes.com"},{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},{"name":"tnikolaeva","email":"tnikolaeva@37bytes.com"},{"name":"arhonist-37b","email":"naushev@37bytes.com"},{"name":"yar_vav","email":"yavavilin@37bytes.com"},{"name":"rispaev","email":"rispaev@37bytes.com"}],"homepage":"https://github.com/37bytes/public-packages/tree/master/packages/code-style#readme","bugs":{"url":"https://github.com/37bytes/public-packages/issues"},"dist":{"shasum":"406cba928c34642ac7dd3f391d2244d630401c13","tarball":"https://registry.npmjs.org/@37bytes/code-style/-/code-style-0.0.3-dev.2.tgz","fileCount":69,"integrity":"sha512-6QaamFeMwaE61ZJjC/ngr+gqTeYAp2dvkliXdSvWXHBdffvzGxE6rDhL550JHArZHaW3Icf9aWcAzu787VOysQ==","signatures":[{"sig":"MEUCIQCsV2GfUj2NNQHKsyBk3wayiIbxSCNGv13oL1iS3zkKTAIgLFCutob2gk2p7nqdcdUIBGxcXe7QvUFI+J5O1kiRt74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286829},"type":"module","_from":"file:37bytes-code-style-0.0.3-dev.2.tgz","engines":{"node":">=24.0.0"},"exports":{"./biome":"./biome/index.js","./eslint":"./eslint/index.js","./oxlint":"./oxlint/index.js","./prettier":"./prettier/index.js","./stylelint":"./stylelint/index.js","./eslint/fsd":"./eslint/fsd.js","./biome/config":"./biome/config.json","./browserslist":"./browserslist/index.cjs","./editorconfig":"./editorconfig/.editorconfig","./eslint/rules":"./eslint/rules/index.js","./oxlint/config":"./oxlint/config.json","./eslint/plugins":"./eslint/plugins/index.js","./eslint/rules/*":"./eslint/rules/*.js","./typescript/base":"./typescript/base.json","./typescript/node":"./typescript/node.json","./typescript/react":"./typescript/react.json","./dependency-cruiser":"./dependency-cruiser/index.js","./oxlint/perfectionist":"./oxlint/perfectionist.json","./biome/eslint-overrides":"./biome/eslint-overrides.js","./eslint/browser-features":"./eslint/browser-features.js","./eslint/restricted-imports":"./eslint/restricted-imports.js","./oxlint/type-aware-overrides":"./oxlint/type-aware-overrides.js"},"imports":{"#fsd":"./eslint/fsd.js","#biome":"./biome/index.js","#rules":"./eslint/rules/index.js","#config":"./eslint/config.js","#eslint":"./eslint/index.js","#oxlint":"./oxlint/index.js","#biome/*":"./biome/*.js","#plugins":"./eslint/plugins/index.js","#rules/*":"./eslint/rules/*.js","#tests/*":"./__tests__/*.js","#eslint/*":"./eslint/*.js","#oxlint/*":"./oxlint/*.js","#prettier":"./prettier/index.js","#plugins/*":"./eslint/plugins/*/index.js","#stylelint":"./stylelint/index.js","#prettier/*":"./prettier/*.js","#biome/rules":"./biome/rules/index.js","#stylelint/*":"./stylelint/*.js","#oxlint/rules":"./oxlint/rules/index.js","#dependency-cruiser":"./dependency-cruiser/index.js","#restricted-imports":"./eslint/restricted-imports.js","#dependency-cruiser/*":"./dependency-cruiser/*.js"},"scripts":{"lint":"npm run lint:typescript && npm run lint:eslint","test":"node --test __tests__/*.test.js eslint/__tests__/*.test.js eslint/plugins/*/__tests__/*.test.js __tests__/parity/*.check.js __tests__/*.check.js","format":"prettier --write .","build:biome":"node biome/build.js && prettier --write biome/config.json","lint:eslint":"eslint --fix --max-warnings 0 .","test:parity":"node --test __tests__/parity/*.check.js __tests__/*.check.js","build:oxlint":"node oxlint/build.js && prettier --write oxlint/*.json .oxlintrc.json","format:check":"prettier --check .","npm-packlist":"npx -y npm-packlist@6.0.1","test:plugins":"node --test eslint/plugins/*/__tests__/*.test.js","lint:typescript":"tsc --noEmit","test:integration":"node --test __tests__/*.test.js","build:parity-domains":"node __tests__/parity/generate-biome-domain-rules.js && prettier --write __tests__/parity/biome-domain-rules.json"},"_npmUser":{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},"prettier":"./prettier/config.js","_resolved":"/private/tmp/f59836f39ecd08c8cd6776610f7e7945/37bytes-code-style-0.0.3-dev.2.tgz","_integrity":"sha512-6QaamFeMwaE61ZJjC/ngr+gqTeYAp2dvkliXdSvWXHBdffvzGxE6rDhL550JHArZHaW3Icf9aWcAzu787VOysQ==","repository":{"url":"git+https://github.com/37bytes/public-packages.git","type":"git","directory":"packages/code-style"},"_npmVersion":"11.16.0","description":"Unified linting and formatting configs for 37bytes projects","directories":{},"_nodeVersion":"26.3.1","dependencies":{"globals":"17.7.0","@eslint/js":"10.0.1","eslint-plugin-n":"18.2.2","stylelint-order":"8.1.1","eslint-plugin-compat":"7.0.2","eslint-plugin-regexp":"3.1.1","@vitest/eslint-plugin":"1.6.23","eslint-plugin-promise":"7.3.0","eslint-plugin-sonarjs":"4.2.0","eslint-plugin-unicorn":"72.0.0","eslint-plugin-import-x":"4.17.1","eslint-plugin-security":"4.0.1","eslint-plugin-storybook":"10.5.2","@next/eslint-plugin-next":"16.2.10","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.64.0","@typescript-eslint/parser":"8.64.0","confusing-browser-globals":"1.0.11","eslint-plugin-react-hooks":"7.1.1","@eslint-react/eslint-plugin":"5.16.1","eslint-plugin-perfectionist":"5.10.0","eslint-plugin-testing-library":"7.16.2","stylelint-config-standard-scss":"17.0.0","@typescript-eslint/eslint-plugin":"8.64.0","eslint-import-resolver-typescript":"4.4.5","stylelint-declaration-strict-value":"1.11.1","eslint-plugin-prefer-arrow-functions":"3.10.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"10.7.0","oxlint":"1.73.0","prettier":"3.9.5","storybook":"10.5.2","stylelint":"17.14.0","typescript":"6.0.3","@types/react":"19.2.17","@biomejs/biome":"2.5.4","oxlint-tsgolint":"0.25.0","dependency-cruiser":"17.4.3","eslint-config-biome":"2.1.3","eslint-plugin-oxlint":"1.73.0"},"peerDependencies":{"eslint":"^10.4.0","oxlint":"1.73.0","prettier":"3.9.5","stylelint":"17.14.0","typescript":"6.0.3","@biomejs/biome":"2.5.4","dependency-cruiser":"17.4.3"},"peerDependenciesMeta":{"prettier":{"optional":true},"stylelint":{"optional":true},"typescript":{"optional":true},"@biomejs/biome":{"optional":true},"dependency-cruiser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/code-style_0.0.3-dev.2_1784633621445_0.13211490287852312","host":"s3://npm-registry-packages-npm-production"}},"0.0.3-dev.3":{"name":"@37bytes/code-style","version":"0.0.3-dev.3","keywords":["eslint","stylelint","prettier","typescript","config","37bytes","linting","formatting"],"author":{"name":"37bytes"},"license":"ISC","_id":"@37bytes/code-style@0.0.3-dev.3","maintainers":[{"name":"rteslenko","email":"rteslenko@37bytes.com"},{"name":"mgarmash","email":"ops@37bytes.com"},{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},{"name":"tnikolaeva","email":"tnikolaeva@37bytes.com"},{"name":"arhonist-37b","email":"naushev@37bytes.com"},{"name":"yar_vav","email":"yavavilin@37bytes.com"},{"name":"rispaev","email":"rispaev@37bytes.com"}],"homepage":"https://github.com/37bytes/public-packages/tree/master/packages/code-style#readme","bugs":{"url":"https://github.com/37bytes/public-packages/issues"},"dist":{"shasum":"ca5fe0674451ea3eba1835c63781690564ba426c","tarball":"https://registry.npmjs.org/@37bytes/code-style/-/code-style-0.0.3-dev.3.tgz","fileCount":69,"integrity":"sha512-rDozyR54NRSxlqJ+Xoc3YPyP8iPwWDJIfaGmnbmOjoSFzaSnOfWQ/veV8WLs0ySclIHboXPlFsplgkWZjrxFqQ==","signatures":[{"sig":"MEUCIF/GX5ywFNM9vVSZLnZ8oCsfGX180IBwyGxO3MsBOpJdAiEAtGrX2n3F2jXYZyLQ0iAZomXELKkH8ZdIxARmWHiUG3U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288892},"type":"module","_from":"file:37bytes-code-style-0.0.3-dev.3.tgz","engines":{"node":">=24.0.0"},"exports":{"./biome":"./biome/index.js","./eslint":"./eslint/index.js","./oxlint":"./oxlint/index.js","./prettier":"./prettier/index.js","./stylelint":"./stylelint/index.js","./eslint/fsd":"./eslint/fsd.js","./biome/config":"./biome/config.json","./browserslist":"./browserslist/index.cjs","./editorconfig":"./editorconfig/.editorconfig","./eslint/rules":"./eslint/rules/index.js","./oxlint/config":"./oxlint/config.json","./eslint/plugins":"./eslint/plugins/index.js","./eslint/rules/*":"./eslint/rules/*.js","./typescript/base":"./typescript/base.json","./typescript/node":"./typescript/node.json","./typescript/react":"./typescript/react.json","./dependency-cruiser":"./dependency-cruiser/index.js","./oxlint/perfectionist":"./oxlint/perfectionist.json","./biome/eslint-overrides":"./biome/eslint-overrides.js","./eslint/browser-features":"./eslint/browser-features.js","./eslint/restricted-imports":"./eslint/restricted-imports.js","./oxlint/type-aware-overrides":"./oxlint/type-aware-overrides.js"},"imports":{"#fsd":"./eslint/fsd.js","#biome":"./biome/index.js","#rules":"./eslint/rules/index.js","#config":"./eslint/config.js","#eslint":"./eslint/index.js","#oxlint":"./oxlint/index.js","#biome/*":"./biome/*.js","#plugins":"./eslint/plugins/index.js","#rules/*":"./eslint/rules/*.js","#tests/*":"./__tests__/*.js","#eslint/*":"./eslint/*.js","#oxlint/*":"./oxlint/*.js","#prettier":"./prettier/index.js","#plugins/*":"./eslint/plugins/*/index.js","#stylelint":"./stylelint/index.js","#prettier/*":"./prettier/*.js","#biome/rules":"./biome/rules/index.js","#stylelint/*":"./stylelint/*.js","#oxlint/rules":"./oxlint/rules/index.js","#dependency-cruiser":"./dependency-cruiser/index.js","#restricted-imports":"./eslint/restricted-imports.js","#dependency-cruiser/*":"./dependency-cruiser/*.js"},"scripts":{"lint":"npm run lint:typescript && npm run lint:eslint","test":"node --test __tests__/*.test.js eslint/__tests__/*.test.js eslint/plugins/*/__tests__/*.test.js __tests__/parity/*.check.js __tests__/*.check.js","format":"prettier --write .","build:biome":"node biome/build.js && prettier --write biome/config.json","lint:eslint":"eslint --fix --max-warnings 0 .","test:parity":"node --test __tests__/parity/*.check.js __tests__/*.check.js","build:oxlint":"node oxlint/build.js && prettier --write oxlint/*.json .oxlintrc.json","format:check":"prettier --check .","npm-packlist":"npx -y npm-packlist@6.0.1","test:plugins":"node --test eslint/plugins/*/__tests__/*.test.js","lint:typescript":"tsc --noEmit","test:integration":"node --test __tests__/*.test.js","build:parity-domains":"node __tests__/parity/generate-biome-domain-rules.js && prettier --write __tests__/parity/biome-domain-rules.json"},"_npmUser":{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},"prettier":"./prettier/config.js","_resolved":"/private/var/folders/5t/b72kl4gn5fs7rnfrhvh9l6sc0000gn/T/d311bc33d6163e1ffa8802add5094451/37bytes-code-style-0.0.3-dev.3.tgz","_integrity":"sha512-rDozyR54NRSxlqJ+Xoc3YPyP8iPwWDJIfaGmnbmOjoSFzaSnOfWQ/veV8WLs0ySclIHboXPlFsplgkWZjrxFqQ==","repository":{"url":"git+https://github.com/37bytes/public-packages.git","type":"git","directory":"packages/code-style"},"_npmVersion":"11.16.0","description":"Unified linting and formatting configs for 37bytes projects","directories":{},"_nodeVersion":"26.3.1","dependencies":{"globals":"17.7.0","@eslint/js":"10.0.1","eslint-plugin-n":"18.2.2","stylelint-order":"8.1.1","eslint-plugin-compat":"7.0.2","eslint-plugin-regexp":"3.1.1","@vitest/eslint-plugin":"1.6.23","eslint-plugin-promise":"7.3.0","eslint-plugin-sonarjs":"4.2.0","eslint-plugin-unicorn":"72.0.0","eslint-plugin-import-x":"4.17.1","eslint-plugin-security":"4.0.1","eslint-plugin-storybook":"10.5.2","@next/eslint-plugin-next":"16.2.10","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.64.0","@typescript-eslint/parser":"8.64.0","confusing-browser-globals":"1.0.11","eslint-plugin-react-hooks":"7.1.1","@eslint-react/eslint-plugin":"5.16.1","eslint-plugin-perfectionist":"5.10.0","eslint-plugin-testing-library":"7.16.2","stylelint-config-standard-scss":"17.0.0","@typescript-eslint/eslint-plugin":"8.64.0","eslint-import-resolver-typescript":"4.4.5","stylelint-declaration-strict-value":"1.11.1","eslint-plugin-prefer-arrow-functions":"3.10.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"10.7.0","oxlint":"1.73.0","prettier":"3.9.5","storybook":"10.5.2","stylelint":"17.14.0","typescript":"6.0.3","@types/react":"19.2.17","@biomejs/biome":"2.5.4","oxlint-tsgolint":"0.25.0","dependency-cruiser":"17.4.3","eslint-config-biome":"2.1.3","eslint-plugin-oxlint":"1.73.0"},"peerDependencies":{"eslint":"^10.4.0","oxlint":"1.73.0","prettier":"3.9.5","stylelint":"17.14.0","typescript":"6.0.3","@biomejs/biome":"2.5.4","dependency-cruiser":"17.4.3"},"peerDependenciesMeta":{"prettier":{"optional":true},"stylelint":{"optional":true},"typescript":{"optional":true},"@biomejs/biome":{"optional":true},"dependency-cruiser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/code-style_0.0.3-dev.3_1784920078367_0.9058920338561254","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@37bytes/code-style","version":"0.0.3","keywords":["eslint","stylelint","prettier","typescript","config","37bytes","linting","formatting"],"author":{"name":"37bytes"},"license":"ISC","_id":"@37bytes/code-style@0.0.3","maintainers":[{"name":"rteslenko","email":"rteslenko@37bytes.com"},{"name":"mgarmash","email":"ops@37bytes.com"},{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},{"name":"tnikolaeva","email":"tnikolaeva@37bytes.com"},{"name":"arhonist-37b","email":"naushev@37bytes.com"},{"name":"yar_vav","email":"yavavilin@37bytes.com"},{"name":"rispaev","email":"rispaev@37bytes.com"}],"homepage":"https://github.com/37bytes/public-packages/tree/master/packages/code-style#readme","bugs":{"url":"https://github.com/37bytes/public-packages/issues"},"dist":{"shasum":"ced73e55e9ba7385625ed6c960364e5226f87c96","tarball":"https://registry.npmjs.org/@37bytes/code-style/-/code-style-0.0.3.tgz","fileCount":69,"integrity":"sha512-GMLD2OD+3ktO9cDl76gFIos4C5BIS9Zf6yfLR9+Ip41hLW232TYMp/srKl1PO2OFcsC8nlKkfiBp+xnucBEErA==","signatures":[{"sig":"MEQCICh26vkhiqGt5mnaplIwqmWb/z/RxdKMXvO/lyqlhrO8AiBBXBKHeMLZfIbUmK5ypeg/t7wawRbrmwNHgYCm1wCd1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292904},"type":"module","_from":"file:37bytes-code-style-0.0.3.tgz","engines":{"node":">=24.0.0"},"exports":{"./biome":"./biome/index.js","./eslint":"./eslint/index.js","./oxlint":"./oxlint/index.js","./prettier":"./prettier/index.js","./stylelint":"./stylelint/index.js","./eslint/fsd":"./eslint/fsd.js","./biome/config":"./biome/config.json","./browserslist":"./browserslist/index.cjs","./editorconfig":"./editorconfig/.editorconfig","./eslint/rules":"./eslint/rules/index.js","./oxlint/config":"./oxlint/config.json","./eslint/plugins":"./eslint/plugins/index.js","./eslint/rules/*":"./eslint/rules/*.js","./typescript/base":"./typescript/base.json","./typescript/node":"./typescript/node.json","./typescript/react":"./typescript/react.json","./dependency-cruiser":"./dependency-cruiser/index.js","./oxlint/perfectionist":"./oxlint/perfectionist.json","./biome/eslint-overrides":"./biome/eslint-overrides.js","./eslint/browser-features":"./eslint/browser-features.js","./eslint/restricted-imports":"./eslint/restricted-imports.js","./oxlint/type-aware-overrides":"./oxlint/type-aware-overrides.js"},"imports":{"#fsd":"./eslint/fsd.js","#biome":"./biome/index.js","#rules":"./eslint/rules/index.js","#config":"./eslint/config.js","#eslint":"./eslint/index.js","#oxlint":"./oxlint/index.js","#biome/*":"./biome/*.js","#plugins":"./eslint/plugins/index.js","#rules/*":"./eslint/rules/*.js","#tests/*":"./__tests__/*.js","#eslint/*":"./eslint/*.js","#oxlint/*":"./oxlint/*.js","#prettier":"./prettier/index.js","#plugins/*":"./eslint/plugins/*/index.js","#stylelint":"./stylelint/index.js","#prettier/*":"./prettier/*.js","#biome/rules":"./biome/rules/index.js","#stylelint/*":"./stylelint/*.js","#oxlint/rules":"./oxlint/rules/index.js","#dependency-cruiser":"./dependency-cruiser/index.js","#restricted-imports":"./eslint/restricted-imports.js","#dependency-cruiser/*":"./dependency-cruiser/*.js"},"scripts":{"lint":"pnpm run lint:typescript && pnpm run lint:eslint","test":"node --test __tests__/*.test.js eslint/__tests__/*.test.js eslint/plugins/*/__tests__/*.test.js __tests__/parity/*.check.js __tests__/*.check.js","format":"prettier --write .","build:biome":"node biome/build.js && prettier --write biome/config.json","lint:eslint":"eslint --fix --max-warnings 0 .","test:parity":"node --test __tests__/parity/*.check.js __tests__/*.check.js","build:oxlint":"node oxlint/build.js && prettier --write oxlint/*.json .oxlintrc.json","format:check":"prettier --check .","npm-packlist":"npx -y npm-packlist@6.0.1","test:plugins":"node --test eslint/plugins/*/__tests__/*.test.js","lint:typescript":"tsc --noEmit","test:integration":"node --test __tests__/*.test.js","build:parity-domains":"node __tests__/parity/generate-biome-domain-rules.js && prettier --write __tests__/parity/biome-domain-rules.json"},"_npmUser":{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},"prettier":"./prettier/config.js","_resolved":"/private/var/folders/5t/b72kl4gn5fs7rnfrhvh9l6sc0000gn/T/e9a545c908d2c9084b4db29dddfaa298/37bytes-code-style-0.0.3.tgz","_integrity":"sha512-GMLD2OD+3ktO9cDl76gFIos4C5BIS9Zf6yfLR9+Ip41hLW232TYMp/srKl1PO2OFcsC8nlKkfiBp+xnucBEErA==","repository":{"url":"git+https://github.com/37bytes/public-packages.git","type":"git","directory":"packages/code-style"},"_npmVersion":"11.16.0","description":"Unified linting and formatting configs for 37bytes projects","directories":{},"_nodeVersion":"26.3.1","dependencies":{"globals":"17.7.0","@eslint/js":"10.0.1","eslint-plugin-n":"18.2.2","stylelint-order":"8.1.1","eslint-plugin-compat":"7.0.2","eslint-plugin-regexp":"3.1.1","@vitest/eslint-plugin":"1.6.23","eslint-plugin-promise":"7.3.0","eslint-plugin-sonarjs":"4.2.0","eslint-plugin-unicorn":"72.0.0","eslint-plugin-import-x":"4.17.1","eslint-plugin-security":"4.0.1","eslint-plugin-storybook":"10.5.2","@next/eslint-plugin-next":"16.2.10","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.64.0","@typescript-eslint/parser":"8.64.0","confusing-browser-globals":"1.0.11","eslint-plugin-react-hooks":"7.1.1","@eslint-react/eslint-plugin":"5.16.1","eslint-plugin-perfectionist":"5.10.0","eslint-plugin-testing-library":"7.16.2","stylelint-config-standard-scss":"17.0.0","@typescript-eslint/eslint-plugin":"8.64.0","eslint-import-resolver-typescript":"4.4.5","stylelint-declaration-strict-value":"1.11.1","eslint-plugin-prefer-arrow-functions":"3.10.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"10.7.0","oxlint":"1.73.0","prettier":"3.9.5","storybook":"10.5.2","stylelint":"17.14.0","typescript":"6.0.3","@types/react":"19.2.17","@biomejs/biome":"2.5.4","oxlint-tsgolint":"0.25.0","dependency-cruiser":"17.4.3","eslint-config-biome":"2.1.3","eslint-plugin-oxlint":"1.73.0"},"peerDependencies":{"eslint":"^10.4.0","oxlint":"1.73.0","prettier":"3.9.5","stylelint":"17.14.0","typescript":"6.0.3","@biomejs/biome":"2.5.4","dependency-cruiser":"17.4.3"},"peerDependenciesMeta":{"prettier":{"optional":true},"stylelint":{"optional":true},"typescript":{"optional":true},"@biomejs/biome":{"optional":true},"dependency-cruiser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/code-style_0.0.3_1786965993566_0.2583435360833719","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@37bytes/code-style","version":"0.0.4","keywords":["eslint","stylelint","prettier","typescript","config","37bytes","linting","formatting"],"author":{"name":"37bytes"},"license":"ISC","_id":"@37bytes/code-style@0.0.4","maintainers":[{"name":"rteslenko","email":"rteslenko@37bytes.com"},{"name":"mgarmash","email":"ops@37bytes.com"},{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},{"name":"tnikolaeva","email":"tnikolaeva@37bytes.com"},{"name":"arhonist-37b","email":"naushev@37bytes.com"},{"name":"yar_vav","email":"yavavilin@37bytes.com"},{"name":"rispaev","email":"rispaev@37bytes.com"}],"homepage":"https://github.com/37bytes/public-packages/tree/master/packages/code-style#readme","bugs":{"url":"https://github.com/37bytes/public-packages/issues"},"dist":{"shasum":"3d67200967aa371ec5afe96a2648be604a3cbde1","tarball":"https://registry.npmjs.org/@37bytes/code-style/-/code-style-0.0.4.tgz","fileCount":69,"integrity":"sha512-RvL8pWZGB+13DzKloSa6cTaCeoxYvP18Y8ysTQdgNZ+mA6nnHPGAqJL1pwFT/hc3IX5+ApqxhjOTKoTdAROlAQ==","signatures":[{"sig":"MEUCIQDiI4F/MNED2pbjjWNUjF/x3nMnRjCvzPqKg7eB/TaoRQIgQqweCX3P4JfW04Uk2IDEw3cXjVq9dp1a3fNCDKX5dCU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298549},"type":"module","_from":"file:37bytes-code-style-0.0.4.tgz","engines":{"node":">=24.0.0"},"exports":{"./biome":"./biome/index.js","./eslint":"./eslint/index.js","./oxlint":"./oxlint/index.js","./prettier":"./prettier/index.js","./stylelint":"./stylelint/index.js","./eslint/fsd":"./eslint/fsd.js","./biome/config":"./biome/config.json","./browserslist":"./browserslist/index.cjs","./editorconfig":"./editorconfig/.editorconfig","./eslint/rules":"./eslint/rules/index.js","./oxlint/config":"./oxlint/config.json","./eslint/plugins":"./eslint/plugins/index.js","./eslint/rules/*":"./eslint/rules/*.js","./typescript/base":"./typescript/base.json","./typescript/node":"./typescript/node.json","./typescript/react":"./typescript/react.json","./dependency-cruiser":"./dependency-cruiser/index.js","./oxlint/perfectionist":"./oxlint/perfectionist.json","./biome/eslint-overrides":"./biome/eslint-overrides.js","./eslint/browser-features":"./eslint/browser-features.js","./eslint/restricted-imports":"./eslint/restricted-imports.js","./oxlint/type-aware-overrides":"./oxlint/type-aware-overrides.js"},"imports":{"#fsd":"./eslint/fsd.js","#biome":"./biome/index.js","#rules":"./eslint/rules/index.js","#config":"./eslint/config.js","#eslint":"./eslint/index.js","#oxlint":"./oxlint/index.js","#biome/*":"./biome/*.js","#plugins":"./eslint/plugins/index.js","#rules/*":"./eslint/rules/*.js","#tests/*":"./__tests__/*.js","#eslint/*":"./eslint/*.js","#oxlint/*":"./oxlint/*.js","#prettier":"./prettier/index.js","#plugins/*":"./eslint/plugins/*/index.js","#stylelint":"./stylelint/index.js","#prettier/*":"./prettier/*.js","#biome/rules":"./biome/rules/index.js","#stylelint/*":"./stylelint/*.js","#oxlint/rules":"./oxlint/rules/index.js","#dependency-cruiser":"./dependency-cruiser/index.js","#restricted-imports":"./eslint/restricted-imports.js","#dependency-cruiser/*":"./dependency-cruiser/*.js"},"scripts":{"lint":"pnpm run lint:typescript && pnpm run lint:eslint","test":"node --test __tests__/*.test.js eslint/__tests__/*.test.js eslint/plugins/*/__tests__/*.test.js __tests__/parity/*.check.js __tests__/*.check.js","format":"prettier --write .","build:biome":"node biome/build.js && prettier --write biome/config.json","lint:eslint":"eslint --fix --max-warnings 0 .","test:parity":"node --test __tests__/parity/*.check.js __tests__/*.check.js","build:oxlint":"node oxlint/build.js && prettier --write oxlint/*.json .oxlintrc.json","format:check":"prettier --check .","npm-packlist":"npx -y npm-packlist@6.0.1","test:plugins":"node --test eslint/plugins/*/__tests__/*.test.js","lint:typescript":"tsc --noEmit","test:integration":"node --test __tests__/*.test.js","build:parity-domains":"node __tests__/parity/generate-biome-domain-rules.js && prettier --write __tests__/parity/biome-domain-rules.json"},"_npmUser":{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},"prettier":"./prettier/config.js","_resolved":"/private/var/folders/5t/b72kl4gn5fs7rnfrhvh9l6sc0000gn/T/9c46279a49cbd52e1534fb88ed2cca35/37bytes-code-style-0.0.4.tgz","_integrity":"sha512-RvL8pWZGB+13DzKloSa6cTaCeoxYvP18Y8ysTQdgNZ+mA6nnHPGAqJL1pwFT/hc3IX5+ApqxhjOTKoTdAROlAQ==","repository":{"url":"git+https://github.com/37bytes/public-packages.git","type":"git","directory":"packages/code-style"},"_npmVersion":"11.17.0","description":"Unified linting and formatting configs for 37bytes projects","directories":{},"_nodeVersion":"26.5.0","dependencies":{"globals":"17.7.0","@eslint/js":"10.0.1","eslint-plugin-n":"18.2.2","stylelint-order":"8.1.1","eslint-plugin-compat":"7.0.2","eslint-plugin-regexp":"3.1.1","@vitest/eslint-plugin":"1.6.23","eslint-plugin-promise":"7.3.0","eslint-plugin-sonarjs":"4.2.0","eslint-plugin-unicorn":"72.0.0","eslint-plugin-import-x":"4.17.1","eslint-plugin-security":"4.0.1","eslint-plugin-storybook":"10.5.2","@next/eslint-plugin-next":"16.2.10","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.64.0","@typescript-eslint/parser":"8.64.0","confusing-browser-globals":"1.0.11","eslint-plugin-react-hooks":"7.1.1","@eslint-react/eslint-plugin":"5.16.1","eslint-plugin-perfectionist":"5.10.0","eslint-plugin-testing-library":"7.16.2","stylelint-config-standard-scss":"17.0.0","@typescript-eslint/eslint-plugin":"8.64.0","eslint-import-resolver-typescript":"4.4.5","stylelint-declaration-strict-value":"1.11.1","eslint-plugin-prefer-arrow-functions":"3.10.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"10.7.0","oxlint":"1.73.0","prettier":"3.9.5","storybook":"10.5.2","stylelint":"17.14.0","typescript":"6.0.3","@types/react":"19.2.17","@biomejs/biome":"2.5.4","oxlint-tsgolint":"0.25.0","dependency-cruiser":"17.4.3","eslint-config-biome":"2.1.3","eslint-plugin-oxlint":"1.73.0"},"peerDependencies":{"eslint":"^10.4.0","oxlint":"1.73.0","prettier":"3.9.5","stylelint":"17.14.0","typescript":"6.0.3","@biomejs/biome":"2.5.4","dependency-cruiser":"17.4.3"},"peerDependenciesMeta":{"prettier":{"optional":true},"stylelint":{"optional":true},"typescript":{"optional":true},"@biomejs/biome":{"optional":true},"dependency-cruiser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/code-style_0.0.4_1787149652113_0.8954261500256531","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@37bytes/code-style","version":"0.0.5","description":"Unified linting and formatting configs for 37bytes projects","license":"ISC","type":"module","imports":{"#biome":"./biome/index.js","#biome/rules":"./biome/rules/index.js","#biome/*":"./biome/*.js","#config":"./eslint/config.js","#dependency-cruiser":"./dependency-cruiser/index.js","#dependency-cruiser/*":"./dependency-cruiser/*.js","#eslint":"./eslint/index.js","#eslint/*":"./eslint/*.js","#fsd":"./eslint/fsd.js","#oxlint":"./oxlint/index.js","#oxlint/rules":"./oxlint/rules/index.js","#oxlint/*":"./oxlint/*.js","#plugins":"./eslint/plugins/index.js","#plugins/*":"./eslint/plugins/*/index.js","#prettier":"./prettier/index.js","#prettier/*":"./prettier/*.js","#restricted-imports":"./eslint/restricted-imports.js","#rules":"./eslint/rules/index.js","#rules/*":"./eslint/rules/*.js","#stylelint":"./stylelint/index.js","#stylelint/*":"./stylelint/*.js","#tests/*":"./__tests__/*.js"},"exports":{"./oxlint":"./oxlint/index.js","./oxlint/config":"./oxlint/config.json","./oxlint/perfectionist":"./oxlint/perfectionist.json","./oxlint/type-aware-overrides":"./oxlint/type-aware-overrides.js","./biome":"./biome/index.js","./biome/config":"./biome/config.json","./biome/eslint-overrides":"./biome/eslint-overrides.js","./eslint":"./eslint/index.js","./eslint/rules":"./eslint/rules/index.js","./eslint/rules/*":"./eslint/rules/*.js","./eslint/plugins":"./eslint/plugins/index.js","./eslint/fsd":"./eslint/fsd.js","./eslint/restricted-imports":"./eslint/restricted-imports.js","./eslint/browser-features":"./eslint/browser-features.js","./browserslist":"./browserslist/index.cjs","./dependency-cruiser":"./dependency-cruiser/index.js","./prettier":"./prettier/index.js","./typescript/base":"./typescript/base.json","./typescript/react":"./typescript/react.json","./typescript/node":"./typescript/node.json","./stylelint":"./stylelint/index.js","./editorconfig":"./editorconfig/.editorconfig"},"keywords":["eslint","stylelint","prettier","typescript","config","37bytes","linting","formatting"],"prettier":"./prettier/config.js","author":{"name":"37bytes"},"repository":{"type":"git","url":"git+https://github.com/37bytes/public-packages.git","directory":"packages/code-style"},"homepage":"https://github.com/37bytes/public-packages/tree/master/packages/code-style#readme","bugs":{"url":"https://github.com/37bytes/public-packages/issues"},"engines":{"node":">=24.0.0"},"peerDependencies":{"@biomejs/biome":"2.5.4","dependency-cruiser":"17.4.3","eslint":"^10.4.0","oxlint":"1.73.0","prettier":"3.9.5","stylelint":"17.14.0","typescript":"6.0.3"},"peerDependenciesMeta":{"prettier":{"optional":true},"stylelint":{"optional":true},"typescript":{"optional":true},"@biomejs/biome":{"optional":true},"dependency-cruiser":{"optional":true}},"dependencies":{"@eslint-react/eslint-plugin":"5.16.1","@eslint/js":"10.0.1","@next/eslint-plugin-next":"16.2.10","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/eslint-plugin":"8.64.0","@typescript-eslint/parser":"8.64.0","@typescript-eslint/utils":"8.64.0","@vitest/eslint-plugin":"1.6.23","confusing-browser-globals":"1.0.11","eslint-import-resolver-typescript":"4.4.5","eslint-plugin-compat":"7.0.2","eslint-plugin-import-x":"4.17.1","eslint-plugin-n":"18.2.2","eslint-plugin-perfectionist":"5.10.0","eslint-plugin-prefer-arrow-functions":"3.10.1","eslint-plugin-promise":"7.3.0","eslint-plugin-react-hooks":"7.1.1","eslint-plugin-regexp":"3.1.1","eslint-plugin-security":"4.0.1","eslint-plugin-sonarjs":"4.2.0","eslint-plugin-storybook":"10.5.2","eslint-plugin-testing-library":"7.16.2","eslint-plugin-unicorn":"72.0.0","globals":"17.7.0","stylelint-config-standard-scss":"17.0.0","stylelint-declaration-strict-value":"1.11.1","stylelint-order":"8.1.1"},"devDependencies":{"@biomejs/biome":"2.5.4","@types/react":"19.2.17","dependency-cruiser":"17.4.3","eslint":"10.7.0","eslint-config-biome":"2.1.3","eslint-plugin-oxlint":"1.73.0","oxlint":"1.73.0","oxlint-tsgolint":"0.25.0","prettier":"3.9.5","storybook":"10.5.2","stylelint":"17.14.0","typescript":"6.0.3"},"scripts":{"test":"node --test __tests__/*.test.js eslint/__tests__/*.test.js eslint/plugins/*/__tests__/*.test.js __tests__/parity/*.check.js __tests__/*.check.js","test:plugins":"node --test eslint/plugins/*/__tests__/*.test.js","test:integration":"node --test __tests__/*.test.js","test:parity":"node --test __tests__/parity/*.check.js __tests__/*.check.js","lint:typescript":"tsc --noEmit","lint:eslint":"eslint --fix --max-warnings 0 .","lint":"pnpm run lint:typescript && pnpm run lint:eslint","format":"prettier --write .","format:check":"prettier --check .","build:oxlint":"node oxlint/build.js && prettier --write oxlint/*.json .oxlintrc.json","build:biome":"node biome/build.js && prettier --write biome/config.json","build:parity-domains":"node __tests__/parity/generate-biome-domain-rules.js && prettier --write __tests__/parity/biome-domain-rules.json","npm-packlist":"npx -y npm-packlist@6.0.1"},"_id":"@37bytes/code-style@0.0.5","_integrity":"sha512-+2/cBuNoEQpwvOgLZsyLYfAXWIDj+wt7QarCV187g4lUYA2gyZMFEsdHLx+1a3ylijT9HhhlxsH8Ln/NCU6ITw==","_resolved":"/private/var/folders/5t/b72kl4gn5fs7rnfrhvh9l6sc0000gn/T/06a87d54fdf5f1e0bffed2c15be252d2/37bytes-code-style-0.0.5.tgz","_from":"file:37bytes-code-style-0.0.5.tgz","_nodeVersion":"26.5.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-+2/cBuNoEQpwvOgLZsyLYfAXWIDj+wt7QarCV187g4lUYA2gyZMFEsdHLx+1a3ylijT9HhhlxsH8Ln/NCU6ITw==","shasum":"823cd2e4c0bcfad064eb98f7290897a36b59f7e1","tarball":"https://registry.npmjs.org/@37bytes/code-style/-/code-style-0.0.5.tgz","fileCount":69,"unpackedSize":278297,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEhMxowuytANDMb/9oAlgEWavY0O0L1XMhGVbUvMEYIGAiAZhCZFpNir+o777PePdkDRJr18+mzKWYvxHXw92rX0eQ=="}]},"_npmUser":{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},"directories":{},"maintainers":[{"name":"rteslenko","email":"rteslenko@37bytes.com"},{"name":"mgarmash","email":"ops@37bytes.com"},{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},{"name":"tnikolaeva","email":"tnikolaeva@37bytes.com"},{"name":"arhonist-37b","email":"naushev@37bytes.com"},{"name":"yar_vav","email":"yavavilin@37bytes.com"},{"name":"rispaev","email":"rispaev@37bytes.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/code-style_0.0.5_1787151786401_0.12607402268900958"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-10T19:29:48.688Z","modified":"2026-08-19T15:03:07.246Z","0.0.1":"2026-03-10T19:29:48.934Z","0.0.2":"2026-04-06T06:38:26.407Z","0.0.3-dev.0":"2026-07-20T17:58:25.862Z","0.0.3-dev.1":"2026-07-21T10:41:11.082Z","0.0.3-dev.2":"2026-07-21T11:33:41.598Z","0.0.3-dev.3":"2026-07-24T19:07:58.522Z","0.0.3":"2026-08-17T11:26:33.708Z","0.0.4":"2026-08-19T14:27:32.258Z","0.0.5":"2026-08-19T15:03:06.589Z"},"bugs":{"url":"https://github.com/37bytes/public-packages/issues"},"author":{"name":"37bytes"},"license":"ISC","homepage":"https://github.com/37bytes/public-packages/tree/master/packages/code-style#readme","keywords":["eslint","stylelint","prettier","typescript","config","37bytes","linting","formatting"],"repository":{"type":"git","url":"git+https://github.com/37bytes/public-packages.git","directory":"packages/code-style"},"description":"Unified linting and formatting configs for 37bytes projects","maintainers":[{"name":"rteslenko","email":"rteslenko@37bytes.com"},{"name":"mgarmash","email":"ops@37bytes.com"},{"name":"dc.nikolaev","email":"dnikolaev@37bytes.com"},{"name":"tnikolaeva","email":"tnikolaeva@37bytes.com"},{"name":"arhonist-37b","email":"naushev@37bytes.com"},{"name":"yar_vav","email":"yavavilin@37bytes.com"},{"name":"rispaev","email":"rispaev@37bytes.com"}],"readme":"# @37bytes/code-style\n\n> **0.0.5**: пакет в активной разработке. API может меняться без предупреждения.\n\nТочка входа для инструментов поддержки качества проектов 37bytes\n\n## Установка\n\n```bash\nnpm install @37bytes/code-style --save-dev\n```\n\nОбязательные peer-зависимости (версии фиксированы):\n\n```bash\nnpm install eslint@^10.4.0 prettier@3.9.5 typescript@6.0.3 --save-dev\n```\n\nОпционально:\n\n```bash\nnpm install stylelint@17.14.0 --save-dev     # CSS/SCSS линтинг\nnpm install oxlint@1.73.0 --save-dev         # гибридный режим OxLint\nnpm install @biomejs/biome@2.5.4 --save-dev  # гибридный режим Biome\n```\n\n## ESLint\n\nКонфиги по типу приложения: `spa`, `nextjs`, `nodejsRuntime`, `nodejsTool`.\n\n```js\n// SPA (Vite + React)\nimport { spa } from '@37bytes/code-style/eslint';\n\nexport default [...spa];\n```\n\n```js\n// Next.js\nimport { nextjs, nextjsServerConfig } from '@37bytes/code-style/eslint';\n\n// nextjsServerConfig — pre-configured glob для App Router server-side файлов\n// (page.tsx, layout.tsx, route.ts, pages/api/**, *.server.{ts,tsx} и т.д.)\nexport default [...nextjs, nextjsServerConfig];\n```\n\n```js\n// Node.js production runtime — strict baseline для HTTP handlers,\n// services, бизнес-логики, библиотечного кода.\nimport { nodejsRuntime, nodejsConfig } from '@37bytes/code-style/eslint';\n\nexport default [\n    ...nodejsRuntime,\n    // bootstrap/config-файлы: env-loader, server entry, scripts, migrations\n    {\n        files: ['src/env.ts', 'src/server.ts', 'src/main.ts'],\n        ...nodejsConfig\n    }\n];\n```\n\n```js\n// CLI-утилита / one-shot script — весь код bootstrap-like\nimport { nodejsTool } from '@37bytes/code-style/eslint';\n\nexport default [...nodejsTool];\n```\n\n### Срез по lifecycle\n\n`nodejsConfig` это override-объект который релакс'ит правила для bootstrap-фазы:\n\n- `n/no-process-env` — env-loader как single source of truth\n- `no-console` — логирование до инициализации логгера\n- `n/no-process-exit` — fast-fail на невалидном конфиге\n- `security/detect-non-literal-fs-filename` — динамические `.env.${envName}` пути\n\nПрименяется через flat-config `files`-glob к нужному срезу проекта. Не имеет встроенного glob: каждый проект решает сам что у него bootstrap.\n\n### Дополнительные слои\n\nДобавляются через spread после основного конфига:\n\n```js\nimport { spa, testingConfig, testingReactConfig, storybookConfig } from '@37bytes/code-style/eslint';\n\nexport default [...spa, ...testingConfig, ...testingReactConfig, ...storybookConfig];\n```\n\n| Слой                  | Описание                               |\n| --------------------- | -------------------------------------- |\n| `testingConfig`       | Vitest + смягченные правила для тестов |\n| `testingReactConfig`  | Testing Library + jest-dom             |\n| `storybookConfig`     | Правила Storybook                      |\n| `reactCompilerConfig` | Правила React Compiler                 |\n| `createFSDConfig()`   | Ограничения архитектуры FSD            |\n\n### Perfectionist (опциональная автосортировка)\n\n```js\nimport { perfectionist } from '@37bytes/code-style/eslint';\n\nexport default [\n    ...perfectionist.spa\n    // или perfectionist.nextjs, perfectionist.nodejsRuntime, perfectionist.nodejsTool\n];\n```\n\n### Кастомные плагины @37bytes\n\n| Правило                           | Описание                                                     |\n| --------------------------------- | ------------------------------------------------------------ |\n| `@37bytes/no-browser-storage`     | Запрет прямого доступа к localStorage/sessionStorage         |\n| `@37bytes/no-arrow-props`         | Запрет стрелочных функций в JSX-пропсах                      |\n| `@37bytes/boolean-naming`         | Обязательные префиксы булеанов (is/has/should/...)           |\n| `@37bytes/enum-pattern`           | Запрет enum, `as const` + UPPER_CASE                         |\n| `@37bytes/no-slice-self-import`   | Запрет импорта слайса через собственный public API           |\n| `@37bytes/require-server-only`    | Обязательный импорт `server-only` в серверных FSD-модулях    |\n| `@37bytes/require-client-only`    | Обязательная директива `use client` в клиентских FSD-модулях |\n| `@37bytes/no-legacy-folders`      | Запрет устаревших каталогов-свалок в FSD                     |\n| `@37bytes/no-redundant-undefined` | Запрет лишнего `undefined` в optional-типах                  |\n| `@37bytes/jsx-boolean-value`      | Единый стиль булевых JSX-пропсов                             |\n| `@37bytes/jsx-fragments`          | Единый стиль JSX-фрагментов                                  |\n\n## OxLint (опционально)\n\nГотовый конфиг для гибридного режима OxLint + ESLint:\n\n```js\nimport { config } from '@37bytes/code-style/oxlint';\n```\n\nПодробнее: [docs/oxlint.md](./docs/oxlint.md).\n\n## Biome (опционально)\n\nГотовый конфиг для гибридного режима Biome + ESLint:\n\n```js\nimport { config } from '@37bytes/code-style/biome';\n```\n\n## Stylelint (опционально)\n\nКонфиг для CSS/SCSS модулей: порядок свойств, lowerCamelCase селекторы, запрет type-селекторов, обязательные CSS-переменные для цветов/z-index/шрифтов.\n\n```bash\nnpm install stylelint@17.14.0 --save-dev\n```\n\n```js\n// .stylelintrc.js\nimport { config } from '@37bytes/code-style/stylelint';\n\nexport default config;\n```\n\nОсновано на `stylelint-config-standard-scss`. Включает плагины `stylelint-order` и `stylelint-declaration-strict-value`.\n\n## Dependency Cruiser (опционально)\n\nГраф-уровневые правила: циркулярные зависимости, ненужные пакеты, неразрешимые импорты, dev-зависимости в production-коде, а для FSD-проектов — матрица слоёв, изоляция слайсов с @x cross-imports, обязательное публичное API, изоляция сегментов, маркеры server-only/client-only.\n\nДополняет ESLint-пресеты, не заменяет их: правила уровня спецификатора (порядок импортов, server-only первой строкой, запрет legacy-папок, alias vs relative) остаются в `@37bytes/code-style/eslint`.\n\nЕсли проект гоняет и dependency-cruiser, и eslint-FSD, передай `createFSDConfig({ dependencyCruiser: true })`. Из eslint уберутся два правила, которые dependency-cruiser заменяет полностью: `import-x/no-restricted-paths` (направление слоёв) и `@37bytes/no-slice-self-import`. `import-x/no-internal-modules` остаётся намеренно: dependency-cruiser покрывает только его FSD-половину (public API слайсов), а запрет deep-import в резолвящиеся внешние пакеты (`пакет/lib/внутренний/файл`) не покрывает никто в графе. Также остаются порядок импортов, запрет legacy-папок, server-only/client-only первой строкой. Побочный эффект: нарушения public API FSD будут под двойным контролем (eslint в редакторе + dependency-cruiser в CI), но это редундантный сигнал на реальном нарушении, не шум. Передавай флаг, только если реально запускаешь dependency-cruiser в CI, иначе направление слоёв не проверяет никто.\n\n### Установка\n\n```bash\nnpm install dependency-cruiser@17.4.3 typescript@6.0.3 --save-dev\n```\n\nTypeScript нужен dependency-cruiser для разбора `.ts`-файлов. Без него файлы молча пропускаются. Проверить: `npx depcruise --info`.\n\n### Использование\n\n```js\n// .dependency-cruiser.mjs (.mjs обязателен: пакет ESM, а дефолтный .js в большинстве проектов будет CommonJS)\nimport { createFsdCruiserConfig } from '@37bytes/code-style/dependency-cruiser';\n\nexport default createFsdCruiserConfig();\n```\n\nДля проектов без FSD:\n\n```js\nimport { createBaseCruiserConfig } from '@37bytes/code-style/dependency-cruiser';\n\nexport default createBaseCruiserConfig();\n```\n\nЗапуск:\n\n```bash\nnpx depcruise --config .dependency-cruiser.mjs src\n```\n\n### Опции фабрик\n\n`createFsdCruiserConfig(options?)`:\n\n| Опция                    | По умолчанию      | Описание                                                  |\n| ------------------------ | ----------------- | --------------------------------------------------------- |\n| `sourceRoot`             | `'src'`           | Корневая папка исходников                                 |\n| `tsConfigFileName`       | `'tsconfig.json'` | Путь к tsconfig                                           |\n| `includeBaseRules`       | `true`            | Включить базовые правила гигиены зависимостей             |\n| `extraPublicApiPatterns` | `[]`              | Дополнительные паттерны файлов, считающихся публичным API |\n\n`createBaseCruiserConfig(options?)`:\n\n| Опция              | По умолчанию      | Описание        |\n| ------------------ | ----------------- | --------------- |\n| `tsConfigFileName` | `'tsconfig.json'` | Путь к tsconfig |\n\n### Принятие на существующем проекте\n\nПервый запуск на живом проекте обычно даёт нарушения. Рабочий подход: зафиксировать текущее состояние как baseline и запускать с `--ignore-known`.\n\n```bash\n# Сохранить текущие нарушения как baseline (output-type baseline даёт плоский массив,\n# который и ожидает --ignore-known; output-type json вернёт другой формат-конверт {modules:[...]})\nnpx depcruise --config .dependency-cruiser.mjs --output-type baseline src > .dependency-cruiser-known-violations.json\n\n# Запускать в CI, игнорируя baseline (срабатывает только на новых нарушениях)\n# src идёт ДО --ignore-known: у флага опциональный аргумент, и позиционный src после него\n# будет проглочен как имя baseline-файла, после чего depcruise выведет usage-хелп\nnpx depcruise --config .dependency-cruiser.mjs src --ignore-known\n```\n\nФайл `.dependency-cruiser-known-violations.json` добавить в репозиторий. По мере устранения legacy-нарушений файл уменьшается.\n\n## Prettier\n\n```js\n// prettier.config.js\nimport { config } from '@37bytes/code-style/prettier';\n\nexport default config;\n```\n\n4 пробела, одинарные кавычки, без trailing commas, точки с запятой, 120 символов.\n\n## TypeScript\n\n```json\n{\n    \"extends\": \"@37bytes/code-style/typescript/react\"\n}\n```\n\n| Конфиг             | Описание                          |\n| ------------------ | --------------------------------- |\n| `typescript/base`  | Строгий базовый конфиг (ES2023)   |\n| `typescript/react` | React-приложение (DOM types, JSX) |\n| `typescript/node`  | Node.js (NodeNext modules)        |\n\n### TypeScript 7 (Native Preview)\n\nTypeScript 7.0 это Go-портированный компилятор Microsoft (анонс 2026-04-21), распространяется как `@typescript/native-preview` с бинарём `tsgo`. Семантика проверки типов идентична TS 6.0, скорость в среднем ~10× выше. Стабильный programmatic API ожидается в 7.1.\n\nС нашим preset работает **частично**: tsgo годится для CLI-typecheck, но stable JS Compiler API ещё не выпущен, поэтому `@typescript-eslint` (peer cap `<6.1.0`) и type-aware ESLint правила TS 7 не поддерживают. Microsoft рекомендует side-by-side использование с TS 6.\n\n#### Что работает с tsgo прямо сейчас\n\n| Компонент                                     | Статус | Как                                                         |\n| --------------------------------------------- | ------ | ----------------------------------------------------------- |\n| `tsgo --noEmit` для быстрого pre-flight       | ок     | Локальный typecheck в dev-цикле, см. caveat ниже про CI     |\n| `oxlint-tsgolint` (type-aware lint от oxlint) | ок     | Использует Go-based tsgolint, не зависит от JS Compiler API |\n| Все ESLint правила без type info              | ок     | AST-only, к runtime TS не привязаны                         |\n| Biome, Prettier, Stylelint, oxlint без -tsgo  | ок     | Независимы от TS                                            |\n\n#### Что **не** работает с tsgo до TS 7.1\n\n- `@typescript-eslint/parser` и type-aware правила (`@typescript-eslint/*`, type-aware часть `@eslint-react`).\n\n#### Side-by-side рецепт\n\nПока tsgo в preview, **`tsc --noEmit` остаётся authoritative typecheck в CI**. tsgo даёт ~10× ускорение для локального pre-flight, но Microsoft явно маркирует пакет `0-dev.YYYYMMDD` и шипает новую сборку ежедневно — мелкие расхождения между tsc и tsgo возможны и временами случаются. Полагаться на tsgo как на единственный CI-чек преждевременно.\n\nУстановить оба:\n\n```bash\npnpm add -D typescript@6 @typescript/native-preview@7.0.0-dev.20260427.1\n```\n\nВерсия `@typescript/native-preview` фиксируется датированным dev-релизом, не `@beta` тегом — последний двигается каждый день и сделает рецепт нестабильным. Обновляй pin вручную по мере необходимости, пока не выйдет TS 7.0 stable.\n\nВ `package.json` сценариях:\n\n```json\n{\n    \"scripts\": {\n        \"typecheck\": \"tsc --noEmit\",\n        \"typecheck:fast\": \"tsgo --noEmit\",\n        \"lint:eslint\": \"eslint --max-warnings 0 .\"\n    }\n}\n```\n\n`typecheck` остаётся ground truth для CI и pre-commit. `typecheck:fast` для локальных итераций когда нужна скорость, не корректность последней инстанции. ESLint и редактор продолжают использовать `typescript@6` через `@typescript-eslint`. Конфликтов между `tsc` и `tsgo` бинарями нет; Microsoft также публикует `@typescript/typescript6` с `tsc6` если нужна полная изоляция.\n\n## EditorConfig\n\n```bash\ncp node_modules/@37bytes/code-style/editorconfig/.editorconfig .\n```\n\n## Browserslist\n\nУтилита `browserslist` принимает `extends` только для пакетов с именем `browserslist-config-*` или `@scope/browserslist-config-*`. Имя `@37bytes/code-style` под этот шаблон не подходит, поэтому пресет нельзя подключить через `extends @37bytes/code-style/browserslist` (выдаст `BrowserslistError: Browserslist config needs 'browserslist-config-' prefix`).\n\nРабочий вариант инлайнить массив правил в `package.json`:\n\n```json\n{\n    \"browserslist\": [\n        \"last 2 Chrome versions\",\n        \"last 2 Edge versions\",\n        \"last 2 Opera versions\",\n        \"last 2 Firefox versions\",\n        \"Firefox ESR\",\n        \"Firefox 128\",\n        \"last 3 Safari major versions\",\n        \"last 3 ChromeAndroid versions\",\n        \"last 3 iOS major versions\",\n        \"last 2 Samsung versions\",\n        \"last 1 op_mob version\"\n    ]\n}\n```\n\nИсточник правды массива: [`browserslist/index.cjs`](./browserslist/index.cjs). Если меняется в пресете надо синхронизировать вручную в потребителях. Программный доступ из JS-конфигов:\n\n```js\nconst browserslistConfig = require('@37bytes/code-style/browserslist');\n```\n\n## Naming Conventions\n\nСм. [NAMING_CONVENTIONS.md](./NAMING_CONVENTIONS.md).\n\n## Лицензия\n\nISC\n","readmeFilename":"README.md"}