{"_id":"@async/hygiene","_rev":"2-b9767a8dd1dcef3199e46329260613d8","name":"@async/hygiene","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@async/hygiene","version":"0.1.0","license":"MIT","_id":"@async/hygiene@0.1.0","maintainers":[{"name":"async-npm","email":"async.npm@gdi2290.com"},{"name":"patrickjs","email":"npm.patrickjs@gdi2290.com"}],"homepage":"https://github.com/async/hygiene#readme","bugs":{"url":"https://github.com/async/hygiene/issues"},"bin":{"async-hygiene":"dist/cli.js"},"dist":{"shasum":"fa3a90b6379e605eec55463f87f77203c90be700","tarball":"https://registry.npmjs.org/@async/hygiene/-/hygiene-0.1.0.tgz","fileCount":15,"integrity":"sha512-rfPPpwumq4zSlivvSsPQHj8hCjDQ1+kuNSFLrRBoBjtaaEnU/qaU2RYvJh/UXrw+ZZIlAFaypPBCVRyJwfbu6A==","signatures":[{"sig":"MEYCIQDq/idwrtn77I/NzDj7b87ibEEzyLX0CAbK25UTuPMEQAIhANHRpc8n7b9l9GsrtDbJb2T/7BJEIWYZAdiG35dc3MEh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@async%2fhygiene@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":66393},"type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./pipeline":{"types":"./dist/pipeline.d.ts","import":"./dist/pipeline.js","default":"./dist/pipeline.js"}},"gitHead":"146c2ed66dc92766d34dad3e41178cccc4cd956a","scripts":{"test":"pnpm run build && node --test tests/*.test.js","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","typecheck":"tsc --noEmit -p tsconfig.json","pack:check":"npm --cache .async/npm-cache pack --dry-run","hygiene:check":"pnpm run build && node dist/cli.js check","release:check":"pnpm run build && node --test tests/*.test.js && node dist/cli.js check && pnpm run pack:check"},"_npmUser":{"name":"patrickjs","email":"npm.patrickjs@gdi2290.com"},"repository":{"url":"git+https://github.com/async/hygiene.git","type":"git"},"_npmVersion":"11.16.0","description":"Hidden hygiene gates for Async apps, packages, and mixed monorepos.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"knip":"6.16.1","publint":"0.3.21","github-actionlint":"1.7.12","dependency-cruiser":"17.4.3","@arethetypeswrong/cli":"0.18.3","@arethetypeswrong/core":"0.18.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.20.0","devDependencies":{"typescript":"6.0.3","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/hygiene_0.1.0_1781568186865_0.4588743345362367","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-06-16T00:03:06.569Z","modified":"2026-06-17T04:42:00.551Z","0.1.0":"2026-06-16T00:03:07.003Z"},"bugs":{"url":"https://github.com/async/hygiene/issues"},"license":"MIT","homepage":"https://github.com/async/hygiene#readme","repository":{"url":"git+https://github.com/async/hygiene.git","type":"git"},"description":"Hidden hygiene gates for Async apps, packages, and mixed monorepos.","maintainers":[{"email":"me@jackshelton.com","name":"jackshelton"},{"email":"async.npm@gdi2290.com","name":"async-npm"},{"email":"npm.patrickjs@gdi2290.com","name":"patrickjs"}],"readme":"# @async/hygiene\n\n`@async/hygiene` hides repository hygiene tooling behind one package, one config file, one CLI command, and one pipeline task.\n\nConsuming repositories should expose a single `hygiene` gate. The underlying tools are implementation details of this package.\n\n## Install\n\n```sh\npnpm add -D @async/hygiene\n```\n\nThe package is ESM TypeScript, requires Node `>=24`, and ships the `async-hygiene` binary.\n\n## Config\n\nCreate `hygiene.config.ts`:\n\n```ts\nimport { defineConfig } from \"@async/hygiene\";\n\nexport default defineConfig({\n  mode: \"auto\",\n  targets: {\n    packages: [{ path: \"packages/pipeline\" }]\n  }\n});\n```\n\nModes:\n\n- `app`: repo-level hygiene only.\n- `package`: repo-level hygiene plus package publish/type/metadata checks.\n- `mixed`: repo-level hygiene once, package checks for explicit package targets.\n- `auto`: explicit targets select mixed mode; otherwise a publishable root package selects package mode; private roots fall back to app mode.\n\n## CLI\n\n```sh\nasync-hygiene list\nasync-hygiene check\nasync-hygiene check --mode app\nasync-hygiene check --mode package\nasync-hygiene check --mode mixed\n```\n\n`check` prints one combined report and exits non-zero when any hygiene gate fails.\n\n## Pipeline\n\nExpose one task:\n\n```ts\nimport { hygieneTask } from \"@async/hygiene/pipeline\";\nimport hygieneConfig from \"./hygiene.config.ts\";\n\nexport default definePipeline({\n  // ...\n  tasks: {\n    hygiene: hygieneTask(hygieneConfig),\n    pack: task({\n      dependsOn: [\"test\", \"hygiene\"],\n      run: sh`npm --cache .async/npm-cache pack --dry-run`\n    })\n  }\n});\n```\n\nDo not expose tool-specific task ids in the consuming repo.\n\n","readmeFilename":"README.md"}