{"_id":"npm-goodjob","_rev":"28-7fedc2d9c931862938eac9059bdbc4e7","name":"npm-goodjob","dist-tags":{"latest":"0.6.4"},"versions":{"0.1.0":{"name":"npm-goodjob","version":"0.1.0","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.1.0","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"51a73d049dc8acc696d580980f4f982836d7ed4f","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.1.0.tgz","fileCount":127,"integrity":"sha512-cEDNa/JWXTjPirehddeh1Qjdx4AgI6Qj6RUnROpSf+xzzQrlFarQVTSNHw6KuOyXjLLu1GSZrk4MJFAc64rx6A==","signatures":[{"sig":"MEUCIEhA9hRCai/DPjtfcnnabbtkvRDBpiNCaKcxim1pruLhAiEA3E82fESeIIvxcK5Yuo0V52RKIMH/WV/9nrSK7dWWSYQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":400695},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"68396fcb850c784d6886eb5f46943d608e695d09","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.1.0_1781360955441_0.4681868578902666","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"npm-goodjob","version":"0.1.1","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.1.1","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"bd3504d33d33e62df63cbac6f738378383631692","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.1.1.tgz","fileCount":127,"integrity":"sha512-FUWjTBBGUqcggrbpffh63PZe101dHg5Mx6wB/lIJNSyYZuE6zvExXblY/+Q1WMBuGR00GZUengPbZAnKPqjZVA==","signatures":[{"sig":"MEYCIQDOp9W+cna6uUfYFkEUebvPHETcIP30cjCfOhK3Li6zDwIhAKuJCKnbqy3znbNwE/jKHIOgDjFLXMPh/WbfKsiJTq6z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":402885},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"99c7acb99128c076c2b3ed83f7d81939af624063","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.1.1_1781362147308_0.8014946730466046","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"npm-goodjob","version":"0.2.0","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.2.0","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"2e40476964fa6792ca8dfd6e3af0069de7ea87e6","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.2.0.tgz","fileCount":139,"integrity":"sha512-xlZCVCq2wA12w+uG62HO8oWwua1kTScs12RPPWB8ZTjo3f4fNXGu3zeOzrRNELBfmY9xS95FWzGi1moW5WugYw==","signatures":[{"sig":"MEUCIF/BE9wYNByK2pxI09KeRXo7cehdQgvAxxrYdhjhW+pBAiEAqIAuvVfJZd9goaO9J15wVoHWuuTMmnKKQhy/eXfKmYw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":447872},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0444a61a99ed40930ce1eacbc386af2a72994ad4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.2.0_1781362475004_0.7665720782803331","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"npm-goodjob","version":"0.3.0","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.3.0","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"0b90043ce7bac35a829c8ccbae4516e813073d0f","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.3.0.tgz","fileCount":143,"integrity":"sha512-Lg2fTqrr8ZjCJpAEIrzH0Z2Wc6OkNmwbyT9c9DoNJsHP/WZxI9z68xiBR6a+ZNwCQNEm7a/63xcEudygoe46eA==","signatures":[{"sig":"MEUCICZUsNg0GR6px9a/2R18fVyKpxXyqTS/ky3kdtGAyHfPAiEA6fqZO1Dpi71zdOwRLSdCSVyezfJ0XdO3NOIr0EQr90g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":466967},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0444a61a99ed40930ce1eacbc386af2a72994ad4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.3.0_1781371225563_0.7791283169275045","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"npm-goodjob","version":"0.4.0","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.4.0","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"7ad35f752a6e06798a28218d8bfd575ce89b3f51","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.4.0.tgz","fileCount":167,"integrity":"sha512-qSPrB5x+L9ZQBqtOZxzWehUB1FCC8Ao7r2XJ+81CfJrSaR1V0Bg4S4LbZDwZP6cRYJLQFJL5+Km0A6RYpteHyg==","signatures":[{"sig":"MEYCIQCsC6nSw8Lqh+zkhI8OXqoO9GJRIegZxy9WqF/s33gITQIhAPLaE52Im698ktNx3RDr4MYBf59uQj7ILAqce2BxhgUS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":532259},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0444a61a99ed40930ce1eacbc386af2a72994ad4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.4.0_1781372839853_0.49303506898051186","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"npm-goodjob","version":"0.4.1","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.4.1","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"914756e4c2bd69f3146f8d2ddbfc4bdb0976cf55","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.4.1.tgz","fileCount":167,"integrity":"sha512-7ZLQUezgZUGmdgCkRtKHShlcd3ODwe/OZy9lXE6ip+ZcqHCJ67wSS3QEsUYy2sPQ8NRP7ueXnZ243uCVYCxLzw==","signatures":[{"sig":"MEUCIQDn3Eaji7nD2NnIXMP1gIas909yfgR5acJm+kVz3BslGQIgXAvM/BVCxC4YOM+ckIECaWL/97fNWLVIym8ZjBQ7WLM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":537992},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0444a61a99ed40930ce1eacbc386af2a72994ad4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.4.1_1781373660405_0.33677622786663086","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"npm-goodjob","version":"0.4.2","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.4.2","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"aee8b341977e0e7114bfc3ce4b66bc60dbb72dad","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.4.2.tgz","fileCount":167,"integrity":"sha512-/czMq3odzz60TJTUa0jh6L9qVPGUO7URSeao5mq4JbdG+06CJ9aVCdW0Vce0gA4/0Jdoz5A0VWW1woT3CrV8dg==","signatures":[{"sig":"MEUCIQCkTjnmkdDqvRlfif+xADICJOIWMrkw23j4Gxv5pawV4wIgP9LRR+kbD6gZLRjMAtHKJ1w0Lxssnuivp/FOwMbKutc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":542867},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0444a61a99ed40930ce1eacbc386af2a72994ad4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.4.2_1781373871661_0.560713582999834","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"npm-goodjob","version":"0.4.3","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.4.3","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"64da0cb29ec47cb12792ddf5dbc562af8ee2da80","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.4.3.tgz","fileCount":167,"integrity":"sha512-rYfKrczouxdiAbSbJaK8s90i9b65Vrmu9kFaGte10bxHox3vSvee8bktdw4HZlOpuGqN9uRV+FVHG9kRt+Kklg==","signatures":[{"sig":"MEUCIQCF5BSiWsu0XaBe39rMr5aqELF0mSLYlpKd0xDsI4PKigIgJgFRnlooa5gqsboD0xnJoY1loK1dgo4zatPjdU2UD74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546789},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0444a61a99ed40930ce1eacbc386af2a72994ad4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.4.3_1781374275114_0.9384042038192641","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"npm-goodjob","version":"0.4.4","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.4.4","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"340127ea20d4cf9b65a21af3eac8e68dd12f0bf8","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.4.4.tgz","fileCount":167,"integrity":"sha512-pQHGHaQ8DwJQAUdy2F55G73kXxB3Y4kbCmOC/7Fjm7E10e80rNn15+PK6wUR9N3zQ0pLObXXaqtNPktrUQnP4A==","signatures":[{"sig":"MEUCIHxiSAtSV1MzuS7PB4X1vxcYauHWQd43bt48uyp1ePz9AiEAumQQAMN6Oqt8Hjte/QeSiG+DikUKg2+0RxQEUvHL4NQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546376},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0444a61a99ed40930ce1eacbc386af2a72994ad4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.4.4_1781374827581_0.042974014030464636","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"npm-goodjob","version":"0.4.5","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.4.5","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"bc3fb35388517730df0485c2ee6310b6b12d7827","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.4.5.tgz","fileCount":167,"integrity":"sha512-dvY6p+mP8cboOOAwKHNZI1SKTREOg8ZrtENn9e1im79TfYSYy1ff6YBV82OYcg1OeB4La+qXCSOABbFhbBunBA==","signatures":[{"sig":"MEUCIQDifiOztOuIe25H6EXkX0sxubfBRDD0EBxiPv1Ca8IZjQIgYd99fPQTwd5vg1FxyWbzig8uBjF6R+Pm19jiX7vNkC8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":550892},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0444a61a99ed40930ce1eacbc386af2a72994ad4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.4.5_1781375968041_0.6735904147295864","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"npm-goodjob","version":"0.4.6","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.4.6","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"62678f5326963fcd91679fe1a5c09f094e20170c","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.4.6.tgz","fileCount":167,"integrity":"sha512-o69VwEiObnKtRfxsHOsvEq/7+NThUNaBmqpiscse1l4ghkKhYXo+oxur6pAtPjNM4qCfDkeAEOhvty2Nvp1WqQ==","signatures":[{"sig":"MEYCIQDo3lDnIE5O0oQMxfOKZXclN2Zpb4rTPH4yF38mgkJqXAIhAO5l8wsyVRQZRO9eq6k/UiT4SwsXe7w6s4fTPx6jeVQu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":554369},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0444a61a99ed40930ce1eacbc386af2a72994ad4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.4.6_1781377455221_0.43692648638369413","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"npm-goodjob","version":"0.4.7","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.4.7","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"dc684396c82391b54dedcad6dc90317b9efac178","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.4.7.tgz","fileCount":167,"integrity":"sha512-XH8cji8BxqmeyM7bgDN7afQE7KTfB8gdNeBl+yWUO9oRiC6+DtZuJIoLJeZH983wsQu3ffpZOgHbFbDktcmXVw==","signatures":[{"sig":"MEYCIQC5cksbf4uZpcXI8jzU5ITS7fS7Pw7foQWzjk+3yY6NYAIhALRxsHibXisNj0muX6t8v346BnoE/ekEkQwG1KjIOXSp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":577662},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0444a61a99ed40930ce1eacbc386af2a72994ad4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.4.7_1781380768299_0.1939831702544501","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"npm-goodjob","version":"0.4.8","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.4.8","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"c2340463211603c7450a288b15ee232986d23f09","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.4.8.tgz","fileCount":167,"integrity":"sha512-hqTFiavbCvWZpKpfOeC/C4LjuTfk+GyGyOLvMkcpdxiI6mPKS18VlEhCR1WuOKq11OJpgPp6Xtxh6XP4bD+LOg==","signatures":[{"sig":"MEYCIQDqLBeQWFk4WacX35GpEkbs0/DMm2CQbRrddxZ4nQq3PQIhAJ+PSEegfXbQLLXIhdMLSYmCYLFJxil6TupTP54eDCsU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":579780},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"aa9e6a6c23f69798f40a49953b36767305d7170c","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.4.8_1781384920410_0.38359601205528393","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"name":"npm-goodjob","version":"0.4.9","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.4.9","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"bbaa79af05bd995a3c813e8a76646421d2d3487b","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.4.9.tgz","fileCount":163,"integrity":"sha512-H7TUUQC9USz4ZPxku7NYooNlu610X+oV4so7tt9V+D/28PbHaM+jNDkP7hmbkiXC0W4oSHBccZBnrNmyMSlQ7Q==","signatures":[{"sig":"MEYCIQC63d2wcg0J1Mv3RYygQX1RVVuyOrHjtJcUxPVQPafD5QIhAMKRTxP0AKwQRV+8VH8n8y6WjPRD1QTUVxZ5AJqcFpGP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":568828},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"7ffa48e78551c6257f36dcc4698f5ada0ab7da64","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.4.9_1781389297662_0.13147632789720887","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"npm-goodjob","version":"0.5.0","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.5.0","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"8c6cb9dcdb3467ceb644416c5af950b4efa32d72","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.5.0.tgz","fileCount":163,"integrity":"sha512-aAV8UFNv2zDv+FrbsfOnvZ366FzyKmNdXtbYslTEwcJWAwR1rdbu6gBIpAslk8lu2DfYMcMutyYqDHPZyuaW0g==","signatures":[{"sig":"MEQCIDBBocVTS32g0G5LgDiHtnu4ZkOFGVw30zfzAqcZyyvwAiBB56xZC0VFEj5xrx9cXWU/WTa+fvJcrXnT+s5VscwhxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":570301},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"d6cbe20bafb3574d93085ca3601f6a4a375dd9e7","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.5.0_1781395484288_0.1790415501168452","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"npm-goodjob","version":"0.5.1","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.5.1","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"bc61308e7127198932485ff5e6f4cc67e1645c66","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.5.1.tgz","fileCount":175,"integrity":"sha512-YwucWRAQXMuiD3K/+BLMt/C7dcy2V4pQMlzLaXmOyzkU9vTEZU28/daovh0UGH7EKo7vYXqGTLnKYIsdOOysig==","signatures":[{"sig":"MEUCIQD30piry2a7dp2NDVcRQHgph8lsKmkVH4q9tR8sNLY8WwIgeHaCUN8HF6Ug/ok0zg1HoKmq4E6LV/stTg55naJvs9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":638859},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0bbde3471a1fc2b6a059d248c117820d323cbe57","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.5.1_1781426654933_0.07927226641456486","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"npm-goodjob","version":"0.5.2","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.5.2","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"6c48f00ac8a5813eaaae8f7e0940a52cddb7b786","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.5.2.tgz","fileCount":175,"integrity":"sha512-LbtVsRBGpD6BmlyPsQqjTSJHgEhcypFymqq05eYqojBNXmT0euk7oB+uJLaJ2iN8I/e+FM/NsbkBxEpJe9g/qw==","signatures":[{"sig":"MEUCIQC4H2PbfNfts6UnC/i7Ju6ZrhLoUBJjqQ/8KWERuMJKrwIgF/059EP99jd48aUWKETkpQmN1cd1jtTUaCAUkEVeyuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":647296},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"1d75698a70178add8fd58d73d6e5e361fd347898","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.5.2_1781429350691_0.4046206724916217","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"npm-goodjob","version":"0.5.4","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.5.4","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"3f55268767dd1820d2275b4354e7e9f6b06710ca","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.5.4.tgz","fileCount":175,"integrity":"sha512-3vbH0yju5r2EO2WQEYQEUiYc4OcwOAepHW/xKDb9us9C8svqNcoOopnLbkjel8uBeiaqYj7t89oqFl8ZzNB36A==","signatures":[{"sig":"MEUCIQDxYx3BsQG9wPyKTRhBqQ2TrprIin34amLeQ38Dqmk6JwIgXEuYGccy/mnUTx+UQSUpRJjOJJp/O01uUY35d+7urRE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":822815},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"1debdb16023669a084bc05863855b37f2b147264","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.5.4_1781506046722_0.10496262074038532","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"npm-goodjob","version":"0.5.5","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.5.5","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"58e1fac254ad8dbb56fe9dbdd0ef4ae92bbc1e0a","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.5.5.tgz","fileCount":175,"integrity":"sha512-+4uUbxzGOxTSa6RCteqU1WOr/OTc0bUTVeGsH2h7MZpU2ed/spktgbrR+mQm8wCx8G6UyVkV3CRyU9e+Bs4SGw==","signatures":[{"sig":"MEQCIBSYHSrzAyfj/Ldm7f67himGHWKkJ3b535JcgY+P7ZA7AiAJVGE/iouTt1nlfcA0YomJ4LEKAbdz+aMGP/IQ/gUoCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":828446},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"71a832de7cfc008f778b56dc03aa63e61e310082","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.5.5_1781510378839_0.47970563642140407","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"npm-goodjob","version":"0.5.6","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.5.6","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"339d31f71c374abae9b014e0c399247508df2513","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.5.6.tgz","fileCount":175,"integrity":"sha512-4zwVNvm0r7VsaYs3MiajX3OTE0sIwqnYv+W37d/hIu9xRhY5FImOb0d8GrnG1FB8aDN07i5g7PMFPqZeIs4chg==","signatures":[{"sig":"MEUCIQDBnm97EbxOEClrsMIg+qQOmpxkBQvzZwXb60J4kT2JogIgZNB9YmzY2H/QSX2tCDqSM52NXmeDJgt1GkxU73n9npM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":828446},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"6a4b156bf33d49fa9b4128408bea0bc07e6f37d4","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.5.6_1781510710178_0.20791880954466357","host":"s3://npm-registry-packages-npm-production"}},"0.5.7":{"name":"npm-goodjob","version":"0.5.7","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.5.7","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"ae86df4e09e64025bd557f133da803f30d48138b","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.5.7.tgz","fileCount":175,"integrity":"sha512-zWH+5EW7P3ntLg2ya/npDDwr+pdKxqaxtGvdSGU9O90cupvU2dxJSmcMXQ27wtKpvlLbOQYgNX55hZXUxtK3ZA==","signatures":[{"sig":"MEQCIFKV6crdUpP+2QN+zEmP+T69NH33s5+s3hGhIZcq6j8PAiBBtTV/iO+9LofJDWFi7tXKewq7VdHD0NM7EIpfN7T84Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":828446},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"1f6b9323f578cd295d0202a3587406ab6d1d27fe","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.5.7_1781513205043_0.2974193343786471","host":"s3://npm-registry-packages-npm-production"}},"0.5.8":{"name":"npm-goodjob","version":"0.5.8","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.5.8","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"0c7b70bd13687f5f91e44a769b74c42b650486c3","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.5.8.tgz","fileCount":175,"integrity":"sha512-H3CkSf6sJ+43AlQyIBDITcjS0OwZtDrd9xptlOmomtp3wFiOoh5q0j8BvnRKtE9K4+pVtF7N9tav/QhYVoodcQ==","signatures":[{"sig":"MEUCIQChlybdKg3jduduufuskqryLY8JpbPViC9vi2C/ylT0OAIgNQBU+ukhbH+mb1s8q6jacubGMTuKiofNJIfIQJ6A+PE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":831655},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"dd25fea28c242bf4c4a4b897c9b32caa2734f07c","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.5.8_1781515110800_0.6908430797536782","host":"s3://npm-registry-packages-npm-production"}},"0.5.9":{"name":"npm-goodjob","version":"0.5.9","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.5.9","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"38794404d13723bb9b63d7ac93d65239c144422d","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.5.9.tgz","fileCount":175,"integrity":"sha512-n1Mp2WFtDKe0kCx/d2ormo9Ht5FnkjFVBDYL2+qFGXDimSMkDZZw/MNJyzqsrL7rffNRZshCtrBG8hC6vjJvzQ==","signatures":[{"sig":"MEQCIBrk0J8vDXuCkWXSLPbgf2gD0spP9two+5T0EnRjl6xCAiAgDbqAAllWmh/AX33xN3UCiXs2TVz9VSp3zPqcgIdI6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":834124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"bc3974ac9e33148a240b6bb7b9d62febe5b4ac57","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.5.9_1781523834048_0.5470483533807347","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"npm-goodjob","version":"0.6.0","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.6.0","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"12dc2586d13e31f428b1ff687c03d4d00f08f7ab","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.6.0.tgz","fileCount":175,"integrity":"sha512-ZcRdpnjradAUoZ0TGes1/kfNAUthwk1NlGRs+E2pTyAo9jYqLT0XVrTkrzf5DxUzv4fS1TzSz5MoIy85W+b3Fw==","signatures":[{"sig":"MEUCIQDe6z5hel8E12uc+1+f0R8Mga9vBRjgMBjCblo50aj1hAIgFC+GOcO7BO8ld8aZPZhYZgG8lwJuj29Iy8aeuNy7Od0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":830513},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"bc3974ac9e33148a240b6bb7b9d62febe5b4ac57","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.6.0_1781553260678_0.44025499881362373","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"npm-goodjob","version":"0.6.1","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.6.1","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"ef5d9df9368ef81d8bfff200ae6ee739cf510ff6","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.6.1.tgz","fileCount":167,"integrity":"sha512-lY3jq+w37RMxmiGlSCw8LJCzLQHvf+2R6Zae2rboa26L22wrnXg15nPSw3/38+YeoHP45aOAL6d6xtx4OJHrpw==","signatures":[{"sig":"MEUCIQDHmVmEwG2fYdHM8kuee697uAP2FfKhxi4rrEAJaaLAJwIgHy6IJdAk6Y7lmqlamDc6nVJ5d4SVscDNTa+UTtlbSzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":809958},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"bc3974ac9e33148a240b6bb7b9d62febe5b4ac57","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.6.1_1781553320890_0.5069767107554712","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"npm-goodjob","version":"0.6.2","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.6.2","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"d83c10e9710ebd48c3e196c439f88d1ca672e39c","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.6.2.tgz","fileCount":167,"integrity":"sha512-wpUKWwIf0THOzHBFZYMYWOhf5Saaf6MvNFcR20GML0LLyNyFQyfG7BKaZE/slDlFKyoxcshq7P8trZsqZxYb2g==","signatures":[{"sig":"MEUCIQCz/Da+aNV8IreHxYaQi7W4a0fqRjXAQrmHftY6tfc2mAIgH2XurkjLunGD5ymyP7llDfH4RTUtxygtMIjTP/CD2bM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":813532},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"bc3974ac9e33148a240b6bb7b9d62febe5b4ac57","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.6.2_1781558439124_0.5800343289528773","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"npm-goodjob","version":"0.6.3","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","osv-scanner","security","dependencies","angular","react"],"author":{"name":"Eric Reboisson"},"license":"MIT","_id":"npm-goodjob@0.6.3","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"homepage":"https://github.com/ericreboisson/npm-goodjob","bin":{"npm-goodjob":"bin/npm-goodjob.js"},"dist":{"shasum":"f66de12ab91214b9ec13c4a547b4dbe1b9e5d917","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.6.3.tgz","fileCount":167,"integrity":"sha512-GXgtHs0A4tzeCDJ+cxeb52JrAdJDwrqPqRULotqUzv5+0GQbW+h7eU/aZ1gnHZR8l76/ieiUlxx9lcUpspzKGA==","signatures":[{"sig":"MEUCID0CnzhuAIkczdwWiZw25GP+4d5HH4hkzT4FtgXQ3SOeAiEAg8nTuYhDGuFDhcJrbhCRfbZRWmY7sZDKeU7MXFpcwKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":812525},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"dbac2854634675aea1e6fe6373c5e6e04f865ea2","scripts":{"test":"vitest run","build":"tsc","watch":"tsc --watch","goodjob":"node bin/npm-goodjob.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"_npmVersion":"10.8.2","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser, OSV-Scanner and more into one actionable report","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-goodjob_0.6.3_1781614297125_0.8652809939784505","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"npm-goodjob","version":"0.6.4","description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser and more into one actionable report","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","security","dependencies","angular","react"],"homepage":"https://github.com/ericreboisson/npm-goodjob","license":"MIT","author":{"name":"Eric Reboisson"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./package.json":"./package.json"},"bin":{"npm-goodjob":"bin/npm-goodjob.js"},"scripts":{"build":"tsc","watch":"tsc --watch","prepublishOnly":"npm run build","goodjob":"node bin/npm-goodjob.js","test":"vitest run","test:watch":"vitest"},"dependencies":{"commander":"^12.0.0"},"devDependencies":{"@types/node":"^20.0.0","typescript":"^5.4.0","vitest":"^4.1.8"},"engines":{"node":">=20"},"publishConfig":{"access":"public"},"_id":"npm-goodjob@0.6.4","gitHead":"45cbf06215190319eb14480b677baa852074b902","_nodeVersion":"20.19.6","_npmVersion":"10.8.2","dist":{"integrity":"sha512-415Bnf2t+QIRlbL5W83hNJZ5MJfREzooMvxTGnd5jKaF9jvAYoVUoPXhHFKouTLec/Po5IJHadMySoC6tI3/yQ==","shasum":"109bf90d78327eeac18aac7950a59f20148288b4","tarball":"https://registry.npmjs.org/npm-goodjob/-/npm-goodjob-0.6.4.tgz","fileCount":167,"unpackedSize":808704,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEF73kDPoidodZx3xHfJrbzTMSrEg2jjeloAPYEUSbNIAiBihXsJN9GSPhSF1WC5rltin+opknHRo+npPsirrIoFuw=="}]},"_npmUser":{"name":"ericreboisson","email":"eric.reboisson@gmail.com"},"directories":{},"maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/npm-goodjob_0.6.4_1781625418824_0.2600134530638152"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-13T14:29:15.276Z","modified":"2026-06-16T15:56:59.153Z","0.1.0":"2026-06-13T14:29:15.582Z","0.1.1":"2026-06-13T14:49:07.465Z","0.2.0":"2026-06-13T14:54:35.145Z","0.3.0":"2026-06-13T17:20:25.701Z","0.4.0":"2026-06-13T17:47:20.013Z","0.4.1":"2026-06-13T18:01:00.542Z","0.4.2":"2026-06-13T18:04:31.828Z","0.4.3":"2026-06-13T18:11:15.297Z","0.4.4":"2026-06-13T18:20:27.775Z","0.4.5":"2026-06-13T18:39:28.181Z","0.4.6":"2026-06-13T19:04:15.374Z","0.4.7":"2026-06-13T19:59:28.440Z","0.4.8":"2026-06-13T21:08:40.551Z","0.4.9":"2026-06-13T22:21:37.805Z","0.5.0":"2026-06-14T00:04:44.483Z","0.5.1":"2026-06-14T08:44:15.084Z","0.5.2":"2026-06-14T09:29:10.835Z","0.5.4":"2026-06-15T06:47:26.900Z","0.5.5":"2026-06-15T07:59:39.044Z","0.5.6":"2026-06-15T08:05:10.426Z","0.5.7":"2026-06-15T08:46:45.220Z","0.5.8":"2026-06-15T09:18:30.993Z","0.5.9":"2026-06-15T11:43:54.207Z","0.6.0":"2026-06-15T19:54:20.962Z","0.6.1":"2026-06-15T19:55:21.203Z","0.6.2":"2026-06-15T21:20:39.360Z","0.6.3":"2026-06-16T12:51:37.301Z","0.6.4":"2026-06-16T15:56:59.009Z"},"author":{"name":"Eric Reboisson"},"license":"MIT","homepage":"https://github.com/ericreboisson/npm-goodjob","keywords":["audit","npm-audit","depcheck","eslint","ts-prune","dependency-cruiser","security","dependencies","angular","react"],"description":"Unified NPM project audit aggregator — combine npm audit, depcheck, ESLint, ts-prune, dependency-cruiser and more into one actionable report","maintainers":[{"name":"ericreboisson","email":"eric.reboisson@gmail.com"}],"readme":"# npm-goodjob\n\n[![CI](https://github.com/ericreboisson/npm-goodjob/actions/workflows/ci.yml/badge.svg)](https://github.com/ericreboisson/npm-goodjob/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/npm-goodjob.svg)](https://www.npmjs.com/package/npm-goodjob)\n[![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org)\n[![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)\n[![Dependabot](https://img.shields.io/badge/dependabot-enabled-025e8c)](https://github.com/ericreboisson/npm-goodjob/network/updates)\n\n**Unified npm project audit aggregator** — run 17 audit tools with one command, get one report with health score, policy enforcement, baseline diff, web dashboard, and interactive TUI.\n\n```bash\nnpx npm-goodjob . --html-output audit.html\n```\n\n---\n\n## Features\n\n| Capability | Description |\n| --- | --- |\n| **15 built-in tools** | npm-audit, npm-outdated, depcheck, ts-prune, ESLint, dependency-cruiser, dependency-check, license-check, lockfile-analysis, secret-scanning, **npm-signatures**, **pkg-lint**, **architect**, **knip** |\n| **5 output formats** | Console (colorized), JSON, HTML, **Dashboard HTML**, **Web Dashboard Server** |\n| **Auto-fix** | `--fix` auto-fixes npm audit vulnerabilities, updates outdated deps, fixes package.json issues, dedupes lockfile |\n| **Monorepo support** | Automatic npm/yarn/pnpm workspace detection — audits root + all packages in one command |\n| **Dependency drift** | Built-in lockfile analysis detects mismatches between package.json and package-lock.json |\n| **Issue exclusions** | Configure per-project exclusions to suppress known false positives |\n| **Multi-project dashboard** | Architect oversight — run audits across all projects in one shot |\n| **Health score** | /20 composite score: security, dependencies, code quality, project health |\n| **Severity-weighted score** | Penalty model (critical=-3, high=-2, medium=-1, low=-0.5) with `--strict` enforcement |\n| **Policy as Code** | Expression-based rules (`severity.critical > 0`) with error/warning levels |\n| **Baseline + Diff** | Store a snapshot, diff against future runs, detect regressions and new CVEs |\n| **Trend tracking** | Auto-saved run history in `.goodjob-data/history/`, `baseline trend` for health evolution |\n| **Team dashboard** | Per-developer git blame, top flops ranking, regressions view in HTML dashboard |\n| **Fast mode** | `--fast` runs only 6 built-in tools — ideal for pre-commit or quick health checks |\n| **Dry-run mode** | `--dry-run` replays recorded snapshots without real tool execution — CI without network |\n| **Interactive TUI** | Keyboard-navigable issue browser (`npx npm-goodjob tui`) |\n| **Pre-commit hook** | Fast checks (secret-scanning + lockfile-analysis) before every commit |\n| **PR/MR comments** | Auto-post health summary to GitHub/GitLab PRs |\n| **Framework detection** | Auto-detects Angular, React, Node.js projects |\n| **CI templates** | GitHub Actions + GitLab CI with baseline |\n| **Zero-effort skip** | Gracefully skips uninstalled tools — no config needed |\n| **Extensible** | `registerTool()` API for custom runners |\n\n---\n\n## Quick start\n\n```bash\n# Run full audit (auto-detects all installed tools)\nnpx npm-goodjob .\n\n# Generate HTML report\nnpx npm-goodjob . --html-output audit.html\n\n# Output JSON\nnpx npm-goodjob . --json\n```\n\n---\n\n## Installation\n\n### Via npx (no install needed)\n\n```bash\nnpx npm-goodjob .\n```\n\n### Global install\n\n```bash\nnpm install -g npm-goodjob\nnpm-goodjob .\n```\n\n### Local dev dependency\n\n```bash\nnpm install --save-dev npm-goodjob\nnpx npm-goodjob .\n```\n\n---\n\n## Built-in tools\n\n| Tool | Name | Category | Activated when | Runs via |\n|---|---|---|---|---|\n| npm audit | `npm-audit` | Security | `npm` available | `npm audit --json` |\n| npm outdated | `npm-outdated` | Dependencies | `npm` available | `npm outdated --json` |\n| npm audit signatures | `npm-signatures` | Security | `npm` + lockfile | `npm audit signatures --json` |\n| depcheck | `depcheck` | Dependencies | `depcheck` in node_modules | npx --yes depcheck |\n| ts-prune | `ts-prune` | Dead code | `ts-prune` in PATH + tsconfig.json | npx ts-prune |\n| ESLint | `eslint` | Code quality | `eslint` in PATH + config file | npx eslint |\n| dependency-cruiser | `depcruise` | Architecture | `depcruise` in PATH | npx depcruise |\n| dependency-check | `dependency-check` | Configuration | Always (built-in) | Internal |\n| license-check | `license-check` | License | Always (built-in) | Internal |\n| lockfile-analysis | `lockfile-analysis` | Dependencies | Always (built-in) | Internal |\n| secret-scanning | `secret-scanning` | Security | Always (built-in) | Internal |\n| pkg-lint | `pkg-lint` | Configuration | Always (built-in) | Internal |\n| architect | `architect` | Architecture | Always (built-in) | Internal |\n| knip | `knip` | Dead code | `knip` in PATH + tsconfig.json | npx knip |\n\n> **Zero-config**: tools not installed are silently skipped. Add `--verbose` to see skip reasons.\n>\n> **No results is normal**: many tools report 0 issues on well-maintained projects. dependency-cruiser (no circular deps) may show \"(via npx)\" with 0 results — this is expected.\n\n---\n\n## CLI reference\n\n### Flags\n\n| Flag | Description |\n| --- | --- |\n| `[project-path]` | Project to audit (default: `.`) |\n| `-t, --tools <tools...>` | Run only these tools (`--tools npm-audit eslint`) |\n| `-s, --skip <tools...>` | Skip these tools (`--skip ts-prune depcruise`) |\n| `-j, --json` | Output JSON to stdout |\n| `-o, --output <file>` | Write JSON report to file |\n| `--html` | Output HTML to stdout |\n| `--html-output <file>` | Write HTML report to file |\n| `-v, --verbose` | Show raw tool output and skip reasons |\n| `--fix` | Auto-fix fixable issues (npm audit fix, npm update, package.json fixes, lockfile dedupe) |\n| `--timeout <ms>` | Per-tool timeout (default: 120000) |\n| `--fast` | Built-in tools only (architect, secret-scanning, lockfile-analysis, dependency-check, license-check, pkg-lint) — no npx, no network |\n| `--strict` | Exit code 1 if severity-weighted health score < 15 (configurable in `.goodjobrc`) |\n| `--dry-run` | Load tool results from pre-recorded snapshots — no real tool execution |\n| `--record` | Run real tools and save results as snapshots for future `--dry-run` |\n\n### Subcommands\n\n| Command | Description |\n|---|---|\n| `init [path]` | Scaffold `.goodjobrc` for a project (detects Angular/React/Node) |\n| `init [path] --ci` | Same + create GitHub Actions + GitLab CI workflows |\n| `clean [path]` | Remove `.goodjob-data/` (history, runs, snapshots) + `.goodjob-cache/` |\n| `clean [path] --all` | Same + remove `.goodjobrc` configuration file |\n| `baseline store [path] [--file]` | Store current audit as baseline snapshot |\n| `baseline diff [path] [--file]` | Diff current audit against stored baseline (includes CVE detection, category regressions, trend) |\n| `baseline trend [path]` | Show health score trend from auto-saved run history |\n| `pre-commit install` | Install git pre-commit hook (secret-scanning + lockfile) |\n| `pre-commit` | Run pre-commit checks manually |\n| `pr-comment [path]` | Generate + post PR comment to GitHub/GitLab |\n| `dashboard [options]` | Multi-project dashboard — run audits across all configured projects |\n| `serve [options]` | Start web dashboard server with live audit and history timeline |\n| `tui [path]` | Interactive terminal UI (arrow keys, Enter for details) |\n\n---\n\n## Auto-fix (`--fix`)\n\nThe `--fix` flag runs an automated fix engine after the audit completes. It can resolve common issues automatically:\n\n| Fixer | What it fixes |\n|---|---|\n| **npm audit fix** | Fixes known vulnerabilities (safe fixes only — semver-compatible updates) |\n| **npm update** | Updates outdated packages within semver range |\n| **package.json** | Adds missing `engines.node`, removes duplicate deps (same dep in both `dependencies` and `devDependencies`), sets `private: true` for workspace roots |\n| **Lockfile** | Regenerates missing `package-lock.json`, runs `npm dedupe` to remove duplicates |\n| **Config files** | Converts JSONC to valid JSON for `tsconfig.json` (strips comments, trailing commas) |\n\n```bash\nnpx npm-goodjob . --fix\n```\n\nOutput includes a fix results section:\n```\n  ── Fix Results ──────────────────────────\n  ✓ npm audit fix: fixed 3 of 5 vulnerabilities\n  ✓ npm update: completed (deps updated within semver range)\n  ✓ package.json: Added \"engines.node\": \">=20\"\n  ✓ lockfile: npm dedupe completed\n  ──────────────────────────────────────────\n```\n\n### Monorepo support\n\nnpm-goodjob auto-detects npm/yarn/pnpm workspaces from `package.json workspaces` or `pnpm-workspace.yaml`. When a monorepo is detected, it audits the root + all workspace packages in a single command:\n\n```bash\nnpx npm-goodjob .\n```\n\nOutput includes a monorepo summary showing per-package results:\n```\n  Monorepo: 4 packages audited\n  Packages: (root) (12 issues), app (5 issues), lib (0 issues), shared (8 issues)\n```\n\nWorkspace package results are prefixed with the package name (e.g. `app/npm-audit`, `shared/eslint`).\n\n### Dependency drift detection\n\nThe built-in `dependency-check` tool compares dependency versions declared in `package.json` against their resolved versions in `package-lock.json`. It detects:\n\n- **Missing dependencies**: dep declared in `package.json` but absent from lockfile (merge conflict residue)\n- **Version mismatches**: exact version in `package.json` doesn't match lockfile (e.g. `\"lodash\": \"4.17.21\"` but lockfile has `4.17.20`)\n\nThis check runs automatically as part of every audit — no config needed.\n\n## Output formats\n\n### Console (default)\n\nColorized terminal output with per-tool sections, severity-colored issues, and health gauge:\n\n```\n╔══════════════════════════════════════════════════╗\n║         npm-goodjob — Audit Report              ║\n╚══════════════════════════════════════════════════╝\n\n  Project: my-app  Path: /Users/me/my-app  Duration: 3.2s\n  Health: 14/20 ████████████░░░░░░ 70%\n\n  Results: 12 issues · 1 error · 4 warnings · 7 info\n\n  ✓ npm audit v10.8.2 (2)\n    ERROR CRITIC  lodash: Prototype Pollution → fix to 4.17.21\n    WARN  HIGH   axios: Server-Side Request Forgery\n\n  ✓ ESLint v8.57.0 (3)\n    WARN  MEDIUM no-eval: eval can be harmful\n```\n\n### JSON\n\nFull structured data for CI pipelines and custom tooling. Fields: `summary`, `tools`, `metadata`, `healthScore`.\n\n```bash\nnpx npm-goodjob . --json | jq '.summary'\n```\n\n### HTML\n\nStandalone HTML report with health circle chart, **SVG donut chart** (severity breakdown), **SVG bar chart** (category breakdown), severity-weighted score, and per-tool expandable issue lists. Generated via `--html-output`.\n\n---\n\n## Health score\n\nTwo scores are computed for every audit:\n\n### Flat score (/20)\n\nComposite /20 score calculated from four dimensions (5 points each):\n\n| Dimension | Default weight | Sources |\n|---|---|---|\n| Security | /5 | npm audit, secret-scanning, npm-signatures |\n| Dependencies | /5 | npm outdated, depcheck, lockfile-analysis |\n| Code quality | /5 | ESLint, ts-prune, dependency-cruiser |\n| Project health | /5 | dependency-check, license-check, config validation |\n\n### Severity-weighted score (/20)\n\nPenalty model that accounts for issue severity: starts at 20, subtracts penalties per issue, floored at 0.\n\n| Severity | Penalty |\n|---|---|\n| Critical | -3 points |\n| High | -2 points |\n| Medium | -1 point |\n| Low | -0.5 point |\n\nExample: a report with 3 critical + 2 high issues → `20 - (3×3 + 2×2) = 20 - 13 = 7/20`.\n\nThe weighted score and top 5 penalties appear in both console and HTML output.\n\n### Strict mode (`--strict`)\n\nExit code 1 if the severity-weighted score falls below a threshold (default: 15/20). Useful for CI gates:\n\n```bash\nnpx npm-goodjob . --strict        # exit 1 if weighted score < 15\nnpx npm-goodjob . --strict --fast # quick CI gate, built-in tools only\n```\n\n### Configuration\n\nConfigurable via `.goodjobrc`:\n\n```json\n{\n  \"healthScore\": {\n    \"weights\": { \"security\": 8, \"dependencies\": 4, \"codeQuality\": 4, \"projectHealth\": 4 },\n    \"thresholds\": {\n      \"good\": 18,\n      \"warning\": 14,\n      \"strict\": 15\n    }\n  }\n}\n```\n\nThe `strict` threshold is only used by `--strict`. The `good` and `warning` thresholds control display coloring only.\n\n---\n\n## Policy as Code\n\nDefine rules that fail (exit 1) or warn when conditions are breached. Rules use the format `<field> <operator> <value>`.\n\n### Supported fields\n\n| Field | Type | Example |\n|---|---|---|\n| `health` | number (0-20) | `health < 14` |\n| `severity.critical` | number | `severity.critical > 0` |\n| `severity.high` | number | `severity.high > 5` |\n| `severity.medium` | number | `severity.medium > 10` |\n| `total` | number | `total > 50` |\n| `<tool-name>.*` | number | `npm-audit.critical > 3` |\n| `<tool-name>.count` | number | `eslint.count > 20` |\n\n### Example `.goodjobrc`\n\n```json\n{\n  \"policy\": {\n    \"error\": [\n      { \"rule\": \"severity.critical > 0\", \"description\": \"No critical issues allowed\" },\n      { \"rule\": \"health < 12\", \"description\": \"Minimum health score\" }\n    ],\n    \"warning\": [\n      { \"rule\": \"severity.high > 5\", \"description\": \"Too many high-severity issues\" },\n      { \"rule\": \"npm-audit.critical > 0\", \"description\": \"Critical npm advisories\" }\n    ]\n  }\n}\n```\n\nPolicy violations appear as a `policy` meta-tool in reports, affecting exit code and summary counts.\n\n---\n\n---\n\n## Baseline & Diff\n\nTrack audit results over time. Detect regressions before they reach production.\n\n```bash\n# Store baseline after a clean audit\nnpx npm-goodjob baseline store . --file project-baseline.json\n\n# Compare current state against baseline\nnpx npm-goodjob baseline diff . --file project-baseline.json\n```\n\nDiff output shows:\n- **Health change**: `14/20 → 12/20 (▼ -2)`\n- **Severity changes**: `4 → 5 critical (▲ +1)`\n- **Tool changes**: new tools, tool errors, issue counts\n- **New CVEs**: CVEs present in current run but absent from baseline\n- **Category regressions**: per-category issue increase (e.g. `security: +3`)\n- **Trend sparkline**: weighted score evolution over last 10 runs: `15 → 16 → 14 → 17`\n- **New issues**: first occurrence since baseline\n\n### Auto-saved run history\n\nEvery audit is automatically saved to `.goodjob-data/history/` (last 30 runs kept).\n\n```bash\n# Show trend from auto-saved history\nnpx npm-goodjob baseline trend .\n\n# Example output:\n#   2026-06-14 12:30  15/20  42 issues\n#   2026-06-14 12:35  17/20  38 issues\n#   2026-06-14 12:40  16/20  41 issues\n#   Direction: ↗ +1\n```\n\n---\n\n## Multi-Project Dashboard\n\nOversee quality across all your projects at once — run audits on every configured project and get a unified view.\n\n```bash\nnpx npm-goodjob dashboard\n```\n\n### Configuration\n\nAdd a `projects` array to your `.goodjobrc`:\n\n```json\n{\n  \"projects\": [\n    { \"name\": \"App Front Office\", \"path\": \"../angular-sandbox\" },\n    { \"name\": \"Back Office\",      \"path\": \"../react-backoffice\" },\n    { \"name\": \"Auth Service\",     \"path\": \"/absolute/path/to/auth\" }\n  ]\n}\n```\n\nRelative paths are resolved from the `.goodjobrc` location.\n\n### Output\n\n**Console** — table with project name, health score, issue count, and status:\n\n```\n┌──────────────────┬───────┬────────┬──────────┐\n│ Project          │ Health│ Issues │ Status   │\n├──────────────────┼───────┼────────┼──────────┤\n│ Auth Service     │ 12/20 │   47   │ ⚠ 5 err  │\n│ App Front Office │ 16/20 │   23   │ ✓ OK     │\n│ Back Office      │ 18/20 │    5   │ ✓ OK     │\n└──────────────────┴───────┴────────┴──────────┘\n```\n\nSorted by worst health first. Failed projects (no `package.json`, audit crash) shown at the top with `✗ ERROR`.\n\n**HTML** — responsive dashboard with project cards, health circles, severity bars, collapsible drill-down per project, and a **Team** tab:\n\n| Team view section | Description |\n|---|---|\n| **Git blame** | Top 10 developers by total issue weight (severity × count) |\n| **Top flops** | Worst offending files ranked by aggregated severity score |\n| **By developer** | Full issue list grouped by committer from git blame |\n| **Regressions** | Issues that appeared or worsened since the last recorded audit |\n\n```bash\nnpx npm-goodjob dashboard --html-output dashboard.html\n```\n\n### Options\n\n| Flag | Description |\n|---|---|\n| `--html-output <file>` | Write HTML dashboard to file |\n| `--timeout <ms>` | Per-project tool timeout (default: 180000) |\n\n---\n\n## Web Dashboard Server\n\nStart a persistent web dashboard with audit history timeline, health gauge, multi-project overview, and auto-refresh:\n\n```bash\nnpx npm-goodjob serve --port 3333 --open\n```\n\nThe dashboard server:\n- Runs the full audit on startup and stores results in `.goodjob-data/history/`\n- Shows a **health gauge** (circular Chart.js doughnut) with current score\n- **Timeline chart** — health score trend over time (last 50 runs)\n- **Run history table** — click \"Run Audit\" to trigger a new audit on demand\n- **Multi-project view** — when configured with the `projects` array in `.goodjob-data/`, shows all projects\n- **Auto-refresh** every 30 seconds\n- **Export PDF** — built-in browser `window.print()` support\n- REST API at `/api/status`, `/api/history`, `/api/run`, `/api/dashboard`\n\n### API endpoints\n\n| Endpoint | Method | Description |\n|---|---|---|\n| `/api/status` | GET | Server info, version, configured projects |\n| `/api/history` | GET | All past audit runs (lightweight index) |\n| `/api/run` | POST | Trigger a new audit, save to history |\n| `/api/dashboard` | GET | Current dashboard state with projects |\n| `/api/history/:id` | GET | Full audit report for a specific run |\n\n### Options\n\n| Flag | Description |\n|---|---|\n| `--port <number>` | Server port (default: 3333) |\n| `--open` | Open browser automatically |\n\n### History storage\n\nAudit runs are stored in `.goodjob-data/`:\n- `history-idx.json` — lightweight index of all runs (timestamps, health score, counts)\n- `runs/{id}.json` — full `AuditReport` per run (max 100 kept)\n\n---\n\n## Interactive TUI\n\nBrowse issues with keyboard navigation — zero external dependencies:\n\n```bash\nnpx npm-goodjob tui .\n```\n\n| Key | Action |\n|---|---|\n| ↑ / k | Scroll up |\n| ↓ / j | Scroll down |\n| Enter | Show issue detail |\n| Page Up | Page up |\n| Page Down | Page down |\n| Home | Jump to top |\n| End | Jump to bottom |\n| q / Esc | Quit |\n\nDetail panel shows severity, category, tool, package, fix version, file path, CVE, and full description.\n\n---\n\n## Pre-commit hook\n\nInstall a git pre-commit hook that runs secret-scanning + lockfile-analysis before every commit:\n\n```bash\nnpx npm-goodjob pre-commit install\n```\n\nFast checks (< 1s typical) that block commits with:\n- Hardcoded secrets (API keys, tokens, passwords)\n- Invalid lockfiles (corrupt package-lock.json, missing integrity hashes)\n- Duplicate dependencies in lockfile\n\nSkip with `git commit --no-verify`.\n\n---\n\n## PR / MR comments\n\nGenerate formatted audit summaries for pull requests. Auto-posted via `gh` CLI (GitHub) or `curl` (GitLab):\n\n```bash\nnpx npm-goodjob pr-comment .\n```\n\nOutput includes:\n- Health score with color badge\n- Severity breakdown table\n- Top 5 most critical issues\n- Per-tool summary\n\nIn GitHub Actions, set `GITHUB_TOKEN` environment variable for automatic posting.\n\n---\n\n## CI integration\n\n### GitHub Actions (`npx npm-goodjob init --ci`)\n\n```yaml\nname: npm-goodjob Audit\non: [pull_request]\njobs:\n  audit:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      security-events: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n      - run: npm ci\n      - name: Store baseline\n        continue-on-error: true\n        run: npx npm-goodjob baseline store --file baseline.json\n      - name: Run npm-goodjob audit\n        run: npx npm-goodjob . --html-output report.html\n      - name: Compare with baseline\n        if: success()\n        run: npx npm-goodjob baseline diff --file baseline.json\n```\n\n### GitLab CI\n\n```yaml\ngoodjob-audit:\n  stage: test\n  script:\n    - npm ci\n    - npx npm-goodjob . --html-output report.html\n  rules:\n    - if: '$CI_PIPELINE_SOURCE == \"merge_request_event\"'\n```\n\n---\n\n## Configuration (`.goodjobrc`)\n\nCreate a `.goodjobrc`, `.goodjobrc.json`, or `goodjob.config.json` in your project root. Or use `npx npm-goodjob init` to scaffold one.\n\n### Full reference\n\n```jsonc\n{\n  // Policy rules (optional — uncomment to enforce)\n  // \"policy\": {\n  //   \"error\": [\n  //     { \"rule\": \"severity.critical > 0\", \"description\": \"No critical issues\" },\n  //     { \"rule\": \"health < 12\", \"description\": \"Health must be ≥12/20\" }\n  //   ],\n  //   \"warning\": [\n  //     { \"rule\": \"health < 16\", \"description\": \"Health should be ≥16/20\" }\n  //   ]\n  // },\n\n  // Disable specific tools\n  \"tools\": {\n    \"disabled\": [\"ts-prune\", \"depcruise\"]\n  },\n\n  // License blocklist/whitelist\n  \"license\": {\n    \"blocklist\": [\"gpl\", \"agpl\", \"proprietary\", \"sspl\"]\n  },\n\n  // Health score configuration\n  \"healthScore\": {\n    \"weights\": {\n      \"security\": 5,\n      \"dependencies\": 5,\n      \"codeQuality\": 5,\n      \"projectHealth\": 5\n    },\n    \"thresholds\": {\n      \"good\": 16,\n      \"warning\": 12\n    }\n  },\n\n  // Secret scanning customization\n  \"secretScanning\": {\n    \"excludePaths\": [\"dist\", \"coverage\", \".angular\", \".next\"],\n    \"extraPatterns\": [\n      {\n        \"name\": \"My Internal API Key\",\n        \"pattern\": \"my-internal-api-key-[A-Za-z0-9]+\",\n        \"severity\": \"high\"\n      }\n    ]\n  },\n\n  // Issue exclusions — suppress known false positives by tool, package, message, severity, or category\n  \"issues\": {\n    \"ignored\": [\n      // Suppress depcheck's \"unused tslib\" (used by Angular compiler, not directly imported)\n      { \"tool\": \"depcheck\", \"message\": \"tslib\", \"reason\": \"Used by Angular compiler internally\" },\n      // Suppress a specific npm audit advisory by package name\n      { \"tool\": \"npm-audit\", \"package\": \"@angular-devkit/build-angular\", \"reason\": \"Dev-only, not exploitable in our context\" },\n      // Suppress all low-severity issues from a tool\n      { \"tool\": \"depcheck\", \"severity\": \"low\", \"reason\": \"Depcheck low severity are devDependency hints\" }\n    ]\n  }\n}\n```\n\n### Issue exclusions\n\nThe `issues.ignored` array lets you suppress known false positives. Each exclusion can match by:\n\n| Field | Description |\n|---|---|\n| `tool` | Tool name (e.g. `\"depcheck\"`, `\"npm-audit\"`) |\n| `package` | Package name (exact match) |\n| `message` | Text match (case-insensitive substring) |\n| `severity` | Severity level (`\"critical\"`, `\"high\"`, `\"medium\"`, `\"low\"`) |\n| `category` | Issue category (e.g. `\"security\"`, `\"unused-dependency\"`) |\n| `reason` | Human-readable reason (optional, appears in verbose mode) |\n\nExample — suppress Angular-specific false positives:\n```json\n{\n  \"issues\": {\n    \"ignored\": [\n      { \"tool\": \"depcheck\", \"package\": \"tslib\", \"reason\": \"Used by Angular compiler\" },\n      { \"tool\": \"depcheck\", \"package\": \"@angular/compiler-cli\", \"reason\": \"Build tool, not a runtime dep\" },\n      { \"tool\": \"depcheck\", \"severity\": \"low\", \"reason\": \"Only info-level hints\" }\n    ]\n  }\n}\n```\n\nConfig is **cached** per project path. Call `clearConfigCache()` programmatically to reload.\n\n---\n\n## Programmatic API\n\n```typescript\nimport {\n  runAudit,\n  loadConfig,\n  getDefaultConfig,\n  clearConfigCache,\n  registerTool,\n  getTool,\n  getAllTools,\n  evaluatePolicy,\n  consoleReporter,\n  jsonReporter,\n  htmlReporter,\n  writeJsonFile,\n  writeHtmlFile,\n} from 'npm-goodjob';\n\n// Run full audit\nconst report = await runAudit({\n  projectPath: './my-project',\n  tools: ['npm-audit', 'eslint'],   // optional filter\n  skipTools: ['ts-prune'],           // optional skip\n  verbose: false,\n  toolTimeoutMs: 120_000,\n  onToolStart(name, label) { console.log(`Starting ${label}...`); },\n  onToolComplete(name, label, status, ms, count) { console.log(`${label}: ${status} (${count} issues)`); },\n});\n\n// Use report\nconsole.log(report.summary);         // { total, errors, warnings, info, bySeverity, byCategory }\nconsole.log(report.healthScore);     // { total, max, security, dependencies, codeQuality, projectHealth }\nconsole.log(report.tools['npm-audit']); // ToolResult with issues[]\n\n// Generate output\nconsoleReporter.write(report);       // colorized terminal\nawait writeHtmlFile(report, 'audit.html');\n\n// Config\nconst config = loadConfig('./my-project');\n```\n\n### Types\n\n```typescript\ninterface AuditReport {\n  summary: {\n    total: number;\n    errors: number;\n    warnings: number;\n    info: number;\n    bySeverity: Record<Severity, number>;\n    byCategory: Record<IssueCategory, number>;\n  };\n  tools: Record<string, ToolResult>;\n  metadata: {\n    projectName: string;\n    projectPath: string;\n    timestamp: string;\n    durationMs: number;\n    nodeVersion: string;\n    npmVersion: string;\n    goodjobVersion: string;\n  };\n  healthScore?: HealthScore;\n}\n\ninterface Issue {\n  level: 'error' | 'warning' | 'info';\n  tool: string;\n  category: IssueCategory;\n  severity: 'critical' | 'high' | 'medium' | 'low';\n  message: string;\n  detail?: string;\n  file?: string;\n  line?: number;\n  column?: number;\n  package?: string;\n  version?: string;\n  fixVersion?: string;\n  cve?: string;\n  cvss?: number;\n  advisory?: string;\n}\n```\n\n---\n\n## Extensibility\n\nAdd custom audit tools via `registerTool()`:\n\n```typescript\nimport { registerTool, type ToolRunner, type ToolOptions, type ToolResult } from 'npm-goodjob';\n\nconst myCustomTool: ToolRunner = {\n  name: 'my-checker',\n  label: 'My Custom Checker',\n  version: '1.0.0',\n  isAvailable(cwd: string) {\n    // Check if prerequisites exist\n    return true;\n  },\n  async run(options: ToolOptions): Promise<ToolResult> {\n    const issues = [];\n    // ... your audit logic\n    return {\n      tool: 'my-checker',\n      label: 'My Custom Checker',\n      version: '1.0.0',\n      status: 'success',\n      durationMs: 42,\n      issues,\n    };\n  },\n};\n\nregisterTool(myCustomTool);\n```\n\nYour tool is now auto-discovered by `runAudit()` and appears in all output formats.\n\n---\n\n## Comparison: why npm-goodjob?\n\n| Feature | npm audit | **npm-goodjob** |\n|---|---|---|---|\n| npm audit | ✓ | ✓ |\n| OSA vulnerabilities | — | ✓ |\n| Unused dependencies | | ✓ (depcheck) |\n| Dead TypeScript exports | | ✓ (ts-prune) |\n| ESLint integration | | ✓ |\n| Circular dependencies | | ✓ (depcruise) |\n| License compliance | | ✓ |\n| Secret scanning | | ✓ |\n| Lockfile integrity | | ✓ |\n| Health score | | ✓ |\n| Baseline / Diff | | ✓ |\n| Interactive TUI | | ✓ |\n| PR comments | | ✓ |\n| Pre-commit hook | | ✓ |\n| CI templates | | ✓ |\n| Offline / no phone-home | ✓ | ✓ |\n| Open source | | ✓ MIT |\n| **npm audit signatures** | ✓ | ✓ |\n| **Web dashboard server** | | ✓ |\n| **Audit history** | | ✓ |\n| **Single command** | ✓ | ✓ (14 tools) |\n\n---\n\n## Framework support\n\nnpm-goodjob auto-detects your framework and adjusts tool defaults:\n\n| Framework | Detection | Smart defaults |\n|---|---|---|\n| Angular | `@angular/core` dependency | Disables depcruise by default (Angular module system), keeps ts-prune on |\n| React / Next.js | `react` or `next` dependency | All tools enabled |\n| Node.js | No framework detected | All tools enabled |\n\n---\n\n## Requirements\n\n- **Node.js >= 20**\n- npm (for audit tools)\n- Optional tools (depcheck, eslint, ts-prune, depcruise) — auto-skipped if missing, fall back to npx when possible\n\n---\n\n## Migrating from existing tools\n\n| From | To npm-goodjob |\n|---|---|\n| `npm audit` | `npx npm-goodjob . --tools npm-audit` |\n| `npx depcheck` | `npx npm-goodjob . --tools depcheck` |\n| `npx ts-prune` | `npx npm-goodjob . --tools ts-prune` |\n| `npx eslint .` | `npx npm-goodjob . --tools eslint` |\n| `npm audit signatures` | `npx npm-goodjob .` (includes npm-signatures runner) |\n| Web dashboard | `npx npm-goodjob serve --open` |\n| All combined | `npx npm-goodjob . --html-output report.html` |\n\n---\n\n## Performance\n\n| Project size | Tools run | Typical time |\n|---|---|---|\n| Small (< 50 deps) | All 15 | 2-8s |\n| Medium (50-200 deps) | All 15 | 5-20s |\n| Large (200+ deps) | All 15 | 10-40s |\n\nTimeouts: per-tool timeout is 120s by default. Use `--timeout 300000` for very large projects. npm audit can be slow on slow networks — tools run in parallel so total time = slowest single tool.\n\n---\n\n## License\n\nMIT\n\n---\n\n## Author\n\nEric Reboisson — Developer Architect in a bank, auditing Angular and React applications for production readiness.\n","readmeFilename":"README.md"}