{"_id":"@021.is/spine-quality","_rev":"2-9326427b0d53a6a57cc0dcc542e62ca1","name":"@021.is/spine-quality","dist-tags":{"latest":"0.4.3"},"versions":{"0.4.0":{"name":"@021.is/spine-quality","version":"0.4.0","license":"MIT","_id":"@021.is/spine-quality@0.4.0","maintainers":[{"name":"edvone","email":"edvard@edvone.dev"}],"homepage":"https://github.com/021is/spine-ts#readme","bugs":{"url":"https://github.com/021is/spine-ts/issues"},"dist":{"shasum":"b14d0897c90158c783c0748f9ff134092fc58792","tarball":"https://registry.npmjs.org/@021.is/spine-quality/-/spine-quality-0.4.0.tgz","fileCount":12,"integrity":"sha512-50aF0NV0XPUZx3FMyuGIHyoxOQVbid+rErm2T00Xg8lbMx2sZdqZC9qEWPk1DVFrc12Q1Vc7ljXssot3nItlzw==","signatures":[{"sig":"MEQCHw6UQG7rOLFE2LtXY7rzRrtPcJWI3NViIgrxgMhmu7QCIQCWJXWAjDmF3tRoXyGKlM+4rttCi4gzrOUDKY20Kk5nHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19439},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./knip":"./configs/knip.json","./biome":"./configs/biome.json","./vitest":"./configs/vitest.config.ts","./semgrep":"./configs/semgrep.yml","./tsconfig":"./configs/tsconfig.json","./size-limit":"./configs/size-limit.json","./tsconfig-next":"./configs/tsconfig-next.json","./dependency-cruiser":"./configs/dependency-cruiser.cjs"},"gitHead":"e4434c6f59db8f586e0f05ffdb3b88a96e68e67b","scripts":{"build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"edvone","email":"edvard@edvone.dev"},"repository":{"url":"git+https://github.com/021is/spine-ts.git","type":"git","directory":"packages/quality"},"_npmVersion":"10.9.4","description":"Shipping configs for the Spine quality gate: biome, tsc, knip, dependency-cruiser (hexagonal layer rules), semgrep OWASP, vitest coverage, size-limit, lighthouse-ci. One install gives your app the same gate.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spine-quality_0.4.0_1779981961330_0.8618910130042303","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@021.is/spine-quality","version":"0.4.3","license":"MIT","description":"Shipping configs for the Spine quality gate: biome, tsc, knip, dependency-cruiser (hexagonal layer rules), semgrep OWASP, vitest coverage, size-limit, lighthouse-ci. One install gives your app the same gate.","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./biome":"./configs/biome.json","./tsconfig":"./configs/tsconfig.json","./tsconfig-next":"./configs/tsconfig-next.json","./knip":"./configs/knip.json","./dependency-cruiser":"./configs/dependency-cruiser.cjs","./semgrep":"./configs/semgrep.yml","./size-limit":"./configs/size-limit.json","./vitest":"./configs/vitest.config.ts"},"scripts":{"build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"repository":{"type":"git","url":"git+https://github.com/021is/spine-ts.git","directory":"packages/quality"},"publishConfig":{"access":"public"},"_id":"@021.is/spine-quality@0.4.3","gitHead":"b9f9333776fa55686cc2feb05f851aa6000b0e05","bugs":{"url":"https://github.com/021is/spine-ts/issues"},"homepage":"https://github.com/021is/spine-ts#readme","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-a7fhbVA58/ahmTOrj0xijcU12bfqIRtceA0dA4pyIrEMAcMGrRnStrpe2F1ij44fz683oQdoEWu3bHSc7iOugg==","shasum":"84dc896c348ac2ac49ca7cc5099d7c7894510a36","tarball":"https://registry.npmjs.org/@021.is/spine-quality/-/spine-quality-0.4.3.tgz","fileCount":13,"unpackedSize":21000,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB2tISGiAyk4ijNJm/BdfvG29ddOwpIt6fiBshUCWVKAAiEAp3hdX9VETL1m+gl4UHkqMmV/+dX1D3tI7ILipMEBI0o="}]},"_npmUser":{"name":"edvone","email":"edvard@edvone.dev"},"directories":{},"maintainers":[{"name":"edvone","email":"edvard@edvone.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spine-quality_0.4.3_1779995249037_0.9072366695109335"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-28T15:26:01.204Z","modified":"2026-05-28T19:07:29.340Z","0.4.0":"2026-05-28T15:26:01.484Z","0.4.3":"2026-05-28T19:07:29.193Z"},"bugs":{"url":"https://github.com/021is/spine-ts/issues"},"license":"MIT","homepage":"https://github.com/021is/spine-ts#readme","repository":{"type":"git","url":"git+https://github.com/021is/spine-ts.git","directory":"packages/quality"},"description":"Shipping configs for the Spine quality gate: biome, tsc, knip, dependency-cruiser (hexagonal layer rules), semgrep OWASP, vitest coverage, size-limit, lighthouse-ci. One install gives your app the same gate.","maintainers":[{"name":"edvone","email":"edvard@edvone.dev"}],"readme":"# @021.is/spine-quality\n\nShipping configs for the Spine quality gate. Every product consumes the same set.\n\n## Use\n\n```json\n// biome.json\n{ \"extends\": \"@021.is/spine-quality/biome\" }\n```\n\n```json\n// tsconfig.json (Next app)\n{ \"extends\": \"@021.is/spine-quality/tsconfig-next\" }\n```\n\n```json\n// knip.json\n{ \"extends\": \"@021.is/spine-quality/knip\" }\n```\n\n```js\n// .dependency-cruiser.cjs\nmodule.exports = require(\"@021.is/spine-quality/dependency-cruiser\");\n```\n\n```json\n// size-limit\n{ \"extends\": \"@021.is/spine-quality/size-limit\" }\n```\n\n```sh\n# semgrep\nsemgrep ci --config \"$(node -p \"require.resolve('@021.is/spine-quality/semgrep')\")\"\n```\n\n## What's enforced\n\n| | Check | Tool | Blocking |\n|---|---|---|---|\n| 🎨 | Biome lint (no `any`, no console, no unused imports) | biome | yes |\n| 🎨 | Format | biome | yes |\n| 🔍 | tsc --strict --noEmit | tsc | yes |\n| 🔍 | Type coverage ≥ 99% | type-coverage | yes |\n| 🧹 | Dead exports + dead deps | knip | yes |\n| 🧹 | No circular deps | madge | yes |\n| 🏛️ | Hexagonal layer rules (domain can't import adapters, etc.) | dependency-cruiser | yes |\n| 🔒 | OWASP top-10 + Spine custom rules | semgrep | yes |\n| 🏛️ | Spine custom AST (ResponseDto, enum-over-string, OpenAPI, i18n) | spine-lint | yes |\n| 🔒 | High + critical vulns | npm audit | yes |\n| 🧪 | Tests pass | vitest | yes |\n| 🧪 | Coverage ≥ 70% lines / 60% branches | vitest | yes |\n| 📦 | Bundle size ≤ 200 KB gzipped per route | size-limit | yes |\n\n## Tweaking\n\nIf a check is genuinely wrong for your repo, override in your local config — but **document why in AGENTS.md**. Don't disable checks silently.\n","readmeFilename":"README.md"}