{"_id":"unguard","_rev":"44-5d325dc90eb42db42eb64def82c7b138","name":"unguard","dist-tags":{"latest":"0.18.2"},"versions":{"0.1.0":{"name":"unguard","version":"0.1.0","author":{"name":"TwoAbove"},"license":"MIT","_id":"unguard@0.1.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"fb9c04d13d8db853879ee42ac56cb36cf882a208","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.1.0.tgz","fileCount":7,"integrity":"sha512-CpHAbNf2aByC1CyGQyAWirT9Cw058IP4CjRnpCsvRadfOwCvBvp7uhLDRr6oDBSMoKh9QKeeggRYtbX4aGk4vg==","signatures":[{"sig":"MEUCIQCIVPdX7e/DxsTL6t4Q1GGjNwhge+o+TPMov4td3YqEcQIgIn6qWA9bExwWsgokRzXU8G5ZrENFrpnO3U6bUfwQNNY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3828},"type":"module","engines":{"node":">=18"},"scripts":{"scan":"node ./bin/unguard.mjs scan .","test:rules":"ast-grep test -c sgconfig.yml","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run test:rules","test:rules:update":"ast-grep test -c sgconfig.yml -U"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Prove data-shape guarantees with ast-grep rule packs","directories":{},"_nodeVersion":"22.16.0","dependencies":{"@ast-grep/cli":"^0.39.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unguard_0.1.0_1771811669042_0.8117842984879404","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"unguard","version":"0.2.0","author":{"name":"TwoAbove"},"license":"MIT","_id":"unguard@0.2.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"6750dafb1019036d8891efba6197a861acce7e7c","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.2.0.tgz","fileCount":128,"integrity":"sha512-F94cx9TaluJilrBa3SV9Gz0VbNBelJDw5Ijow+4UPoGDc8LFa8gBvyQJDFXHGScllBY6m/z3Lbkl8U1mi7pTTw==","signatures":[{"sig":"MEUCIFr6NbF83kQkssqKycWZEwDg/gI4bE12aB48071MZMBKAiEA1lYczpGnnMLjICVk5b+2nMtssk1uOTbPYCR/cEPEq18=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51509},"type":"module","engines":{"node":">=18"},"gitHead":"748c759ff35849691b97bced4b9cacc0af1d8950","scripts":{"scan":"node ./bin/unguard.mjs scan .","test:rules":"npm run test:rules:typescript && npm run test:rules:tsx","scan:strict":"node ./bin/unguard.mjs scan . --strict","generate:tsx":"node scripts/generate-tsx-rulepack.mjs","prepublishOnly":"npm run generate:tsx && npm run test:rules","test:rules:tsx":"npm run generate:tsx && ast-grep test -c rulepacks/tsx/sgconfig.yml","test:rules:update":"npm run test:rules:typescript:update && npm run test:rules:tsx:update","test:rules:tsx:update":"npm run generate:tsx && ast-grep test -c rulepacks/tsx/sgconfig.yml -U","test:rules:typescript":"ast-grep test -c rulepacks/ts/sgconfig.yml","test:rules:typescript:update":"ast-grep test -c rulepacks/ts/sgconfig.yml -U"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Prove data-shape guarantees with ast-grep rule packs","directories":{},"_nodeVersion":"22.16.0","dependencies":{"cross-spawn":"^7.0.6","@ast-grep/cli":"^0.39.4"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.8.2"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.2.0_1771821120567_0.4851831538155269","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"unguard","version":"0.4.0","author":{"name":"TwoAbove"},"license":"MIT","_id":"unguard@0.4.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"c93d9c5077619bfb7f6271873279dd97ad6dacff","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.4.0.tgz","fileCount":11,"integrity":"sha512-lZFZv4NxsBTD1MxeJwX80WPNl5wIcDwWHN9z3JhV33R1zPMXhodJrfXyL0zZku3ZbgOe50wlzA97dQqeDLDkyg==","signatures":[{"sig":"MEYCIQD7vQVsuAyln4jXAWCGVszyinKrmbYXbr7D/OAEi0LK2AIhAIk5i3cZt+2hLqC27XDKkx2opCg2MYDQaFaWfRXvLSfM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131979},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"c2dbf481cd3ff3479175844dd24996b2ab971f3e","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Unslop","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.4.0_1771867681371_0.49001159432513597","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"unguard","version":"0.4.1","author":{"name":"TwoAbove"},"license":"MIT","_id":"unguard@0.4.1","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"d287639e240ccccf1ea88f1b9e805d63a813cffc","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.4.1.tgz","fileCount":11,"integrity":"sha512-ji97DEdesQfuudLRR53TmMFPLDErgVRZPelVkEUJnHjS+nw6bEMYkK4zj5M08vx1P1lYJOI9aNfuU393N4ESvw==","signatures":[{"sig":"MEQCIA5oBbbkokxS88hWv58pwGme3xE1qg6YT3xl889pS5j1AiAaTLbu8dP4B9ZLa9iZlZxYkf5XRGTrSx1YtbeEdkMMkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132076},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"4cf1a450fcf257002fac8b97c8db5946d37208e6","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Unslop","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.4.1_1771867862751_0.6411532194818714","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"unguard","version":"0.4.2","author":{"name":"TwoAbove"},"license":"MIT","_id":"unguard@0.4.2","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"49902a09fb04f29aff9563cd0fa156dbc7b47d49","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.4.2.tgz","fileCount":11,"integrity":"sha512-XCkr7U5q5i/8KD/LfqmdDGdaZyEz/6QyCvgfpyHxW2k3aNhM0VF2JMz+jQYzHZpuBdkPQ8+ziaSb48+TFx9Ebw==","signatures":[{"sig":"MEUCIEHyiMyKIhHC3vzn7NYFByRMr6SpLOyAd3JGjb79AUjfAiEA/u0fQJMLZZZ/N5LlbuSzr+KyhBBxqLHOk1rc3GVvPEQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135362},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"b7d1b307037c7c3aabf56a945878cee67855df51","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Unslop","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.4.2_1771870007508_0.5398525558347904","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"unguard","version":"0.4.3","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"name":"TwoAbove"},"license":"MIT","_id":"unguard@0.4.3","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"d88856f0a3278610e5282a68ae55d3f05428103b","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.4.3.tgz","fileCount":11,"integrity":"sha512-1cKxgIQa8DhDbs8g2YfCyujCSpIFI8c5TF8kEbM5odOMEy5MbWlqqwuRHwXT131v0Cpg6qaAfqYtXn5BaNP05A==","signatures":[{"sig":"MEQCIBFIVr1m74EUlfIOnR46Vuy3eJ2a+bU4zHarlx7+liwjAiA+8F8tRG0yarCMjdQqAxMfXZbJ2jEhj3oc8S85wjMvJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136858},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"cb84a02cf420a2b0687656dde69aec6adb334a64","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Unslop","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.4.3_1771871446540_0.04887104083960425","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"unguard","version":"0.4.4","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"name":"TwoAbove"},"license":"MIT","_id":"unguard@0.4.4","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"3083a2ad81a3cae8529a620bf378b43f73b8801a","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.4.4.tgz","fileCount":11,"integrity":"sha512-qEOBzSHg90943rvO/Th9FGooHzA/T/CD63NhBJT/vLB6Rj3EOsnPtKQY3ZKzf9xHjeHTrPZrIRUjXU24VxTxrw==","signatures":[{"sig":"MEUCIQCNCWQOfXHAH5I9BZ0AlSBZ4BsdmMI5SYeC9D+JW+weDgIgZE9JV3MnJRo/bGerfIuR0MyggM0X/mR8zbwplgsmu0o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137892},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"9539aa8673ac90d00f3800d70de36fb90857c31a","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Unslop","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.4.4_1771873405636_0.9943585630395524","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"unguard","version":"0.5.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.5.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"8bddc42ad98a9169cee9e98044a6f1ed51d256ea","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.5.0.tgz","fileCount":12,"integrity":"sha512-LoRIiBVhBHzYcAk9JjID8+/l6ViQPb3msXYglw+xq4x6TCLlyjm6eGrAIsrovwMz2uzZGk0hvl3+dLFx7AEG2g==","signatures":[{"sig":"MEUCIQD2aeIsk+p0Yo3uBUP7uHx4YcMuzigiYS6ePpJu5wa3BAIgMB5ZtODWfxRylJ1lWyimGQJEW274onp/ej2POG2zfQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139750},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"2a7a00512756a90ef510bb85c41e507826b1810a","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.5.0_1771960226717_0.5350539901435132","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"unguard","version":"0.5.1","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.5.1","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"cc20bde7a7db26d3a393a3aac8c23a3b2e230831","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.5.1.tgz","fileCount":12,"integrity":"sha512-5gEI+/4oDAmuiX/ISIAXGMTYXFraNA/UvucWVXDXd3zroM1c9uTWKy4Cf0vzNUGprTdDfbTOowzVV/evOUqDSQ==","signatures":[{"sig":"MEQCIGxVitlFPZ+e4Sr7BPOYdxV/Z/IGfeRRmBhTaHj6e+zhAiAAoehD6jy6cannSqcBZYwZxr/01Yjq39EPqY7a/M3tGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141096},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"d777db4d83382348a7df57fc4174e2f438e585dd","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.5.1_1771962950293_0.4362263927473209","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"unguard","version":"0.5.2","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.5.2","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"dd3e1fbc486577d8bf2c3b9d06a614266955022e","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.5.2.tgz","fileCount":12,"integrity":"sha512-sSkTp3a96oC/wnbZWao7z+msXEaqCKC+pbFpbS8Dd/dn+e+8ve71e/0krEBSJtCl4Aq+6mXOEHv8yh4HcY61Eg==","signatures":[{"sig":"MEYCIQDO6FIJQVDoNkESPFFjeh7yH2cXrGnwCvqtE6vqZgfFFAIhAJx36f0RyJbnRDvSlVUGovIz1lLOOX8TZs6Kh6uXJbO+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141078},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"4a38a06699847e5d60eb9facc47423f88413b8be","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.5.2_1771965000285_0.3752428002641197","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"unguard","version":"0.6.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.6.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"4b5a439f1ae9b3632d86ae734a2fd0b751b2069b","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.6.0.tgz","fileCount":12,"integrity":"sha512-0z54k0DEn84D4fG4zrJB0nDVlJitfUYEWpQ0smdNCDFPSWHNKm49YaDrflWHe2KwfKvEoi/xQ4s9dDX2oaDMFg==","signatures":[{"sig":"MEUCIQC8vInzihaoklNVnmZuSXEjcX6+34o7kdw+CfnKrfMsFwIgYZmXFAtDASJgQd4hbT5GXpavGx91KhLJZkgwXKrLEXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147011},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"227d37dd06aa3b40fb03ae83e1a52df1586889e4","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.6.0_1771979795398_0.5036057750674414","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"unguard","version":"0.7.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.7.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"f670c721e8e4d462f8b2b740d2d233e9a8ed93e0","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.7.0.tgz","fileCount":12,"integrity":"sha512-qcMOfvaOGPXiJMjy1ZLON/eTkwhy3NHvVE3R9Lk87iXI0D5nXv0qC08GcrKhhP6alvTGeXZOIDinnRyydCwvJQ==","signatures":[{"sig":"MEQCIGeI3BMgajSa3wlESvr+9YN0qTdeZUl6U06hY2U13seeAiBEdTRRhHc7cC4nH8d+xGuu0d9SvrRUdrcJGaAsAMf72Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155912},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"cf0faad36883c5bec544c42f47fa827aee606c85","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.7.0_1771981991243_0.17545684569608477","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"unguard","version":"0.7.1","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.7.1","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"be03c18787b30f8df2c2c5c974b2aaf5ae0f9c4f","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.7.1.tgz","fileCount":12,"integrity":"sha512-jKnjccsCx3wixg4i6snIjdhnrxiQFwztnGieKijD+f29ER49+D/asMvsQfaMBM8jTJNnBo/Zk5TZD2ChZOsChQ==","signatures":[{"sig":"MEUCIBeO68Sf1LLQVTojmEZx799hTWrfOk+gUj8zClu5OEbJAiEAmsxkWXeHNm6b0Ce3tcJhRQq9Sh3UWemtxaiIaPCxiEk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158021},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"8cfb437f8b34e2833ea900e1bf099961c94a8fd6","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","oxc-parser":"^0.114.0","oxc-walker":"^0.7.0","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","@oxc-project/types":"^0.114.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.7.1_1771982532877_0.8019153388302218","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"unguard","version":"0.8.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.8.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"4c927b458096a2e5ef5350eef9d0cdb2fe241c3f","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.8.0.tgz","fileCount":12,"integrity":"sha512-IZIlWL8SzTESBmbNo9yv+yXjlD9A6FoA+YB7GNOkfay/1rIy2fWNmL/guQM+n3+zWtGDBf2C636Zr33UOWANcQ==","signatures":[{"sig":"MEYCIQDBDCqdeC+zndWi3l6sWSOQyDnQ0hvAUTaPgy/+xxoLFgIhAMC8ferH/N9t+2yd7hPWl9IAGOQQqZLJxhIOf/5o3z5+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":190129},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"aaf9375829975c0e04b561123966bde5663e8a52","scripts":{"scan":"node ./bin/unguard.mjs scan .","test":"vitest run","build":"tsup","typecheck":"tsc","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan . --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.8.0_1772043642385_0.8463739843892404","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"unguard","version":"0.9.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.9.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"bca9c20ada229522cb87cfd1b281c346347f8e90","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.9.0.tgz","fileCount":12,"integrity":"sha512-T70Nk9jZuuAFpn+fu20PL40q5oEIlCXj4Y5y0OGzRS4csbUt6i+0AK/OEz7b2CFPo++vVHNPkpuI4dPK9v/THQ==","signatures":[{"sig":"MEUCIQCiv3IPJYKUkHlfPtuqobT0oTA+bz/DX9NjUIlTsGg14wIgfdig95s0b3d83C1S4i7HOvSpsPkOEpd/plknCQ6lDHY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233012},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"dd58912b364d71a5812cfb4ee03332ac1d2be79a","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan src \"tests/**/*.test.ts\" tests/harness.ts --fail-on=error","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan src \"tests/**/*.test.ts\" tests/harness.ts --strict --fail-on=error","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.9.0_1772155554076_0.29901686404308125","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"unguard","version":"0.10.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.10.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"c4435af20c98024c3072986a38ca002658cd2c85","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.10.0.tgz","fileCount":12,"integrity":"sha512-xwZM2e36OTG7VuCrbLuDtKMc8K8TVcn9UxKPEv/seBykvT0sWa76Zwas6VGX+D0x5yzMKO4qzVqNo2zhHzVfbw==","signatures":[{"sig":"MEUCIQDepnmn/w9Sg4y8AdnLdg9r+CzPA2595hl7bG+axh/VaAIgW5K9Df4xxl1+HXwv6PzTHVObuFgzW3zsuTvCEwoWyf4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291880},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"ef4244c6442484c4b1fd7269236994b384334205","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.10.0_1772266996860_0.11703345947363508","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"unguard","version":"0.10.1","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.10.1","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"35443f1bb6f6b74f508bf8669b57a11a7f9dd649","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.10.1.tgz","fileCount":12,"integrity":"sha512-SVJa5oZkvhSP2LLejnI+yAsrT/YU1okGhCzuKRNJDnQlceTv2BboDiSXtGD1KtF05utIhMazdbNPpyEIbokPaQ==","signatures":[{"sig":"MEQCIEunLkjccG9VvY+0rSm8jVPfOnPSRXRoAbIBBpf7YxHkAiB3H1iYgBAJOaTpmOqG8lC32aMGzpkR7PEly7Gj/fUNYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292270},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"f1802bf8efa438e21d7b6814474994d6adf00158","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.10.1_1772299025433_0.3154235766989275","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"unguard","version":"0.10.2","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.10.2","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"0385df82559fb5f1e41374dfe37501be8a8b9f60","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.10.2.tgz","fileCount":12,"integrity":"sha512-DF0sYDoAJy5Ckyl8S4Vgfl6eHc4SykUX902hHqEfjU/op4vZs1puW9BloO8edFwvM7HGiY7CkoO8IldauJXkaw==","signatures":[{"sig":"MEUCIChx3nPE3LFvwhq9UPu2sm1ELbKMDWgs4yMBRwuwoqutAiEA74nehWTqFgzD8h+3st2v7hOFLotDvXwFUx64gi2hA8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296775},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"7cef39ba78e0d2b1c105866b246503ff53879785","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.10.2_1772300027691_0.40741570153260565","host":"s3://npm-registry-packages-npm-production"}},"0.10.3":{"name":"unguard","version":"0.10.3","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.10.3","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"8231c9ba6a23b138e33adc367ce84cc1ac59a036","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.10.3.tgz","fileCount":12,"integrity":"sha512-LZCfC15LFoY1i2ZdrRLy+Ld7ucIhK1pFOGn8lFFgQzZccATaUTivfO1FjxOxPGQS+YYW48oc20vqABz/z9TG4w==","signatures":[{"sig":"MEUCIQC6FrJzW4mBCjEksJ0xcWMejiqGI/dMeaTcK69bK6dUPAIgAT7bYzPE2mt0zPBvCNziSPhCM4tX1XPTSooXT4SAWZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299974},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"6b3210de5868119648840f3b61c6a1c3bc7f3e62","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.10.3_1772305706227_0.29631708790391764","host":"s3://npm-registry-packages-npm-production"}},"0.10.4":{"name":"unguard","version":"0.10.4","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.10.4","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"fe1c60972c842d190d43f29d741c94ee38296353","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.10.4.tgz","fileCount":12,"integrity":"sha512-v+F+KDlla1f8BcQPM9EkL1ss7QVbavGcAQNyG+r5ncw5Kfi9/9hIvUshtz4g2x7WLkpvLudc+0VLiU5VlqdPOg==","signatures":[{"sig":"MEUCIQCo2ER41iKPL54D+ewmF216oQsRsltrOe80vc4v/m5gWQIgCP1QeGWJNuRwBVfhTRhWkrAl0+f4MAhUW86uIrkKP8c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300772},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"0131bc5cc691e4c3326439ae3caedfe173071a93","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.10.4_1772374245471_0.41946541835891415","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"unguard","version":"0.11.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.11.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"9e8e4398caa2e9589fdd6db2e5a8843daf681dfd","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.11.0.tgz","fileCount":12,"integrity":"sha512-EbOX9x6cS5cod4w9l0vMyeKusPy1ooZD61Jai7TnBxmx1BxD6uPHZf3BTbxPXp+OZ85zVKWstj7/jHV1ljzHTg==","signatures":[{"sig":"MEUCIGKjpR1O1ZSl+F1Zr7Ssy/UP52A5xFENr7mjzIt1FBJ2AiEAmDqg4oxtmMT1QI/RXQ9O4wQDieyVVD2cTIQ1VekUnL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":303767},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"c281e37fed58635fc01806f6866fd2c27dec438b","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.11.0_1772904003276_0.1777407337557959","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"unguard","version":"0.12.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.12.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"7d4d61ebefefd9c349fe18d520ce547c71d7dc6b","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.12.0.tgz","fileCount":12,"integrity":"sha512-uREHLE6n7VRLkDGrw3mNBga9wZp4use2fS3xcg163GNhsto0D+b8od6NaCRg0BY9UUFe7N9drIr8sQLPfmGuDQ==","signatures":[{"sig":"MEYCIQD3SBRMo946uxY55cETAQVCKDWQ+7j9X84carKE7qW14gIhAPN01oULRcM/me55w0eRV6UXgjt13Tyknc5XPVu3w8Et","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323432},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"dd92928290db6892eaf3617ad0168dc4d9615db3","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.12.0_1772907828184_0.9200556264769744","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"unguard","version":"0.12.1","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.12.1","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"26e94bfe336869a387e96634130ba4bb7c14c202","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.12.1.tgz","fileCount":12,"integrity":"sha512-kS4HL06xqgB+9OtYlN94gIXzxvmCncHPRkvsBIa2VUCx+gHXgPr7U/0Q2pXlNIu9+YaibZLSfzGulITrwm1hfg==","signatures":[{"sig":"MEQCIBjjibzYISJ91ZoESMrGbBGypOwGRahAMML3gwT+RMC/AiALe8QkbhNwAQXlZu3XSTwWF55WkSV58ODnOgMXg7Sa9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348759},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"5567ddcb3f697701e9f69a70568880a26aa10b72","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.12.1_1773397324352_0.31586667135059443","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"unguard","version":"0.13.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.13.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"ca5d5851e3e0dc58fde74ca58ceca1354661dcab","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.13.0.tgz","fileCount":12,"integrity":"sha512-3skqXljSybJGt2GmIi38ykRdV7oUZLS/lNrpI52oDwEIVNQJwxASE3K4/+Ecz8hLAzWeGvq1d3xze1BAQ8mCrw==","signatures":[{"sig":"MEUCIQCpK72y0BGKxK9gLg7/EKiHVBoId5i/H9LoP4vbw2+RLAIgPSCAqu2YxANBIziZCtAUNXfaWeNTa0CDhMFB06cFnVM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":373432},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"50dbb16fa4c6ab7d59b8a3ae538f48d37793457c","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.13.0_1773484061779_0.8712801883911667","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"unguard","version":"0.13.1","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.13.1","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"640bf9e5576c698bfbda7af964bbb20c77953b2c","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.13.1.tgz","fileCount":12,"integrity":"sha512-dlBbqVL7AI/iHZHyDwPH9LUaB0zJGmdBLVsvIBa3dfa8v51sqFe2ISVe7d8QEz2vxPfMVbAvCvLMiGlDpcE0LQ==","signatures":[{"sig":"MEYCIQDYEXjbRgjeohGacLceD7Cb1a62u+Er6lFWU+IW9cBTdQIhAPWEIQhS0zj+hSMsnScV75C4kHEGCNz++s7WKWHgPp/n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372834},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"2f57e47a918d3042f2814d17b177c49ed4834f76","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.13.1_1773484529269_0.5585051640571619","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"unguard","version":"0.13.2","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.13.2","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"4f083e6c5ccedc91cd762458be5a2fe44ecc9ee9","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.13.2.tgz","fileCount":12,"integrity":"sha512-oJTD3c7tK2ej6em+fc5Gr86pKiqSw2ABIYbYE77zflY690v5YiauKuwZlHf8MRaCdTR37+dGMRGNP31RFL28dQ==","signatures":[{"sig":"MEUCIE2Y7YyTDklytXqbbhPrSHakyk/4VMCECGYeHBhctI8sAiEA9kQLAQrxiE8sgn7HGkg1PWdyTomEg6vyuCzc8WdEJU4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":374377},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"3f55ad9ec26b7197e5f14b296cf7d8bc4c07fe78","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.13.2_1773485260797_0.76765583190583","host":"s3://npm-registry-packages-npm-production"}},"0.13.3":{"name":"unguard","version":"0.13.3","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.13.3","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"bbae7f08eb8d8b8229bc05e973b8338b30207da4","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.13.3.tgz","fileCount":12,"integrity":"sha512-p9RGAaEZeWJTs1UgymGifKbbV1pzV9rs9Rb/pAj17OWhV2Sbwo228YHKF9DRcSqSYPJ4XfYbAhpAHHm0o36Kkw==","signatures":[{"sig":"MEUCIQDm2F/vBK2XemYmUZFliD7u7AtqWX/NFv9d/9XVrAlVeAIgVaI/qRlX3oU03lEns27dEgd+/PVCsC1HUsDK0qmth3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":367914},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"46461ee76955401e7a360b0fec0ff67860be35b6","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.13.3_1773699662146_0.8129978488306311","host":"s3://npm-registry-packages-npm-production"}},"0.13.4":{"name":"unguard","version":"0.13.4","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.13.4","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"ed813e28b9c3e17d89c620d37ba83481d9b95131","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.13.4.tgz","fileCount":12,"integrity":"sha512-723LwiShZA2rPmyAjJpvSmlu9TeGjVSp2dBGIJ+sCY2n+Q8Z4EXlWFfuCS0hWbi1vr8MajPYuXvqlo0B/2qg7w==","signatures":[{"sig":"MEUCIEuaiIuZkQaDtftv0YpDkPD1lS4Qm7enKH0BETFw3X5tAiEAtFugTwhBZGORecrH+4n1GAtoiSbOUHNqumIRC4TfyvE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":368358},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"d3279467187d20e91dde3ebce330fdcacb671bd6","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.13.4_1775150610937_0.6803572375978308","host":"s3://npm-registry-packages-npm-production"}},"0.13.5":{"name":"unguard","version":"0.13.5","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.13.5","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"648429263fe8e96a100ca2bf2df89398416ac806","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.13.5.tgz","fileCount":12,"integrity":"sha512-p5S+vPuoIMmlA9MDPQolxcUrh44eZeb2yc0Sa82ZuAfMyTttQHkPY//XLsb/EXvVeONIVBBTwLseeV3GBrweQw==","signatures":[{"sig":"MEUCIQDTEuZR8VtNqgcZQ/lIiyP98Q/Mb6VmdePXNOFmAp12KwIgO99Nvt9QFs7HrH+G4wcranq9ujVu/cwtisaUb5b6QXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":370537},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"7f80ec906da7eb01e1f38c625d88e74c9dad6aeb","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.13.5_1775153653060_0.04155085813409576","host":"s3://npm-registry-packages-npm-production"}},"0.13.6":{"name":"unguard","version":"0.13.6","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.13.6","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"86b7379b10f73a82ce248283b576e70c424bccc0","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.13.6.tgz","fileCount":13,"integrity":"sha512-3ZdiFhwvh/rDh8KuTCdK5mHBqGfKF7dSRc+oo3xnMp/OwwDlGO61ikpB0q3din/UTUB/lwzy1w8kBc5zmhE+sw==","signatures":[{"sig":"MEQCIA9/VCZZWdlDsE/THz4hhRyvXNVPQoqrrjSwiB6ZZ2LBAiACSHWk2GTNZYxhIBN5ybuzBFLx72nPQ37KzxmULUvV9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":371770},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"7f80ec906da7eb01e1f38c625d88e74c9dad6aeb","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.13.6_1775518026207_0.2275667476658889","host":"s3://npm-registry-packages-npm-production"}},"0.13.7":{"name":"unguard","version":"0.13.7","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.13.7","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"23fd15ee8b9e0cdf5152339fca73bbe61856f661","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.13.7.tgz","fileCount":13,"integrity":"sha512-M4CZjyRfsVqfswge+jsdV50mA77rUO3kTQRYsxVu8cW+Xc16Htsapk6brG+eHDvzyUr9yB0Dy/KyHVkdMMHQRw==","signatures":[{"sig":"MEQCIGGgIr2IyOVMN+o7sB54gK4wuyL5Zz5dM4RPZams8v/2AiAG0pwe1Vsu89QOmRLtV/LQhp5qsxWjA2UI/dgEophlBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379169},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"b9d1051dcbb7414155072c5c0b76cb1e22322424","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.13.7_1775527542908_0.7521956610080456","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"unguard","version":"0.14.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.14.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"6d36ae268c56bee34e998e217a38715ad75474a6","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.14.0.tgz","fileCount":13,"integrity":"sha512-t4KgA+gOEf9/WoJlHTJsA4o5gsB12nsCSGCu+yXDSRWdUqycSna/5bUHD7VP3Xw9+um3dxyB0q9XC4HxwSE0aA==","signatures":[{"sig":"MEQCIGfr2wsvHdbOZAKBCgwH1t2RPL+thOiaVOkqlQhqNbb0AiBMy+wI3703P5oYvmzxGJWuAwxsiA6C/iS7lxsFqnzB3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":392762},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"e7a4601b68f0fb87be7cf5c6be10a62b28c70039","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.14.0_1775609179553_0.9987955565277908","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"unguard","version":"0.15.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.15.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"84b386b229367389fd22947b2731d16b0c47be9b","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.15.0.tgz","fileCount":13,"integrity":"sha512-ouBpEMpY1ovhrSwtxLfS0PfEW1T3arTeOLzA5fP8ApEPNAI4kyDEU7aSh83rJwwVcb8VoR9gSy3ZCL0gt2vdEA==","signatures":[{"sig":"MEUCIQCp0TqKaT5NHaX7eQJpf8E6fi/9blQjgddy+825N2c7ugIgRiYcF2mlWm8YtB2DNuLk06MsDPt86L9xVW/Lc8Sfi8k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":430718},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"13d96937b9a33104c395cd8d1c2d9b9805c5e4cb","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.15.0_1777575508138_0.5627206277320087","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"unguard","version":"0.15.1","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.15.1","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"cadfa290eec1ff60c3ab65f86a086f2e62d43ab6","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.15.1.tgz","fileCount":13,"integrity":"sha512-SReMdpU4T6H33/2rbGEFUaPMWbZ26jmux35z8vDslyOllQATaQmzTBWpFylyC/d87+rH2QfZ+W51ekFYUdnfDg==","signatures":[{"sig":"MEUCICBy1X/TIYIj7EcLfMpsoNgdmfh7FQMAsPuEF19eCUYSAiEAgWdHlSbq7w3+WAGCno6FDMJDa0yZEHzlOALrMYeNnIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":496473},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"f461c22f928938c2884b6dab7804704d05971f7d","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.15.1_1777658127609_0.6084256702725281","host":"s3://npm-registry-packages-npm-production"}},"0.15.2":{"name":"unguard","version":"0.15.2","keywords":["typescript","linter","static-analysis","code-quality","type-safety"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.15.2","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"fbbceab5bdafdb92110a0ec225d79b945b431f39","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.15.2.tgz","fileCount":17,"integrity":"sha512-MZY8nytwoZSU+s7KzLQSUQ014o4UzyUXPahvio972qfccvyB/4ZQt3TL/Bva4n+Zw7Hs1G1aogU4VBfD8Cn5UQ==","signatures":[{"sig":"MEYCIQCUmMTaNkuGrOA9kjMfPPFGwtuBs3WCfH/RfMzawrOj7QIhANF480U1Lc2d0H+4Ooin85iu1Z0rraYcaXpRLPJU2tKb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":540715},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"62095f4a7dc9198fcae0953d5cf4a2fdfcf622ef","scripts":{"lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.15.2_1777778946638_0.6556601799355137","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"unguard","version":"0.16.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety","ai","ai-generated-code","code-review","defensive-programming","eslint"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.16.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"de15e3eb81c1117f64dce628ec0a3eccf260a725","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.16.0.tgz","fileCount":17,"integrity":"sha512-FeEXuG8H8IKQKDcDvMiOiREeuPwJB3K28IUuTYeMhDRoo8HrIgQWQyxKYbiVV/gxMtrcuml8nv5VPb+mVtdC/A==","signatures":[{"sig":"MEQCIFSApTH15fzQpSH5d84o5D1818Qg/qoI8ZCUDcmFIYYwAiA5d2sViBQZXg01Jm1z7oaEVlXIYqFwDj+tRST6iwPjRQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":798771},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"fbf2347cf72d5b3dce7fc2b8f94638d6a56f10a4","scripts":{"demo":"vhs demo/demo.tape && ffmpeg -y -loglevel error -sseof -0.5 -i demo/demo.gif -frames:v 1 -update 1 /tmp/unguard-demo-frame.png","lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.16.0_1781136309190_0.19310842943014728","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"unguard","version":"0.16.1","keywords":["typescript","linter","static-analysis","code-quality","type-safety","ai","ai-generated-code","code-review","defensive-programming","eslint"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.16.1","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"cb939bdf6b77e72676de5cbb34ac5ff40c53ac79","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.16.1.tgz","fileCount":17,"integrity":"sha512-gr2FQQzms19lYieJjuYXyd5y9k+zfam13odlJ9cZCljZKhMhyf6qgWqyr+/VFveIxCEuvS2BdoAef9pL1ZVyeA==","signatures":[{"sig":"MEUCIEdUM6zB0AEfHw4/GFII+N018XPWyi4EvU6gF9KZCNf/AiEAxzoThBb+X3SHZKkSqN69/r0PzJXfyqtn0WZijrmcxuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":799878},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"22863d52ceef88b8ab057279ce9fc695807cbf92","scripts":{"demo":"vhs demo/demo.tape && ffmpeg -y -loglevel error -sseof -0.5 -i demo/demo.gif -frames:v 1 -update 1 /tmp/unguard-demo-frame.png","lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsup","typecheck":"tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"10.9.2","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^5.9.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","@types/node":"^25.3.0","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.16.1_1781229657006_0.8054257501598521","host":"s3://npm-registry-packages-npm-production"}},"0.16.2":{"name":"unguard","version":"0.16.2","keywords":["typescript","linter","static-analysis","code-quality","type-safety","ai","ai-generated-code","code-review","defensive-programming","eslint"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.16.2","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"b835a505a66649190ffd421d54551f7392b0a0eb","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.16.2.tgz","fileCount":16,"integrity":"sha512-fd5mQciDjvgVJLVloAVKdm0eDpP1VAluZ1D9oFs5O5h7kwNjmRjjYZmxCFCAnISXmj6SSlsljMSP1c8x8Yv5yQ==","signatures":[{"sig":"MEUCIHZ74UX114o7YV3i57qEeDzc65E/17BI7uc8JLjCq4+KAiEAxaiWI9xO1fvdecSpWR+m08MG7yP8Okrvida5zcHMB5M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":791127},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"f1fd3f8c80f560b32470a5d8476f018febe77389","scripts":{"demo":"vhs demo/demo.tape && ffmpeg -y -loglevel error -sseof -0.5 -i demo/demo.gif -frames:v 1 -update 1 /tmp/unguard-demo-frame.png","lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsdown","typecheck":"node ./node_modules/tsc7/bin/tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"11.17.0","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"26.4.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^6.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsc7":"npm:typescript@^7.0.2","tsdown":"^0.22.4","vitest":"^4.0.18","@types/node":"^22.20.1","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.16.2_1783633460569_0.9841534870269464","host":"s3://npm-registry-packages-npm-production"}},"0.16.3":{"name":"unguard","version":"0.16.3","keywords":["typescript","linter","static-analysis","code-quality","type-safety","ai","ai-generated-code","code-review","defensive-programming","eslint"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.16.3","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"83174bd0908e3b48ea0644a07caa7d9de755e836","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.16.3.tgz","fileCount":16,"integrity":"sha512-2CSbUtVng5/I/4ri3Oy7B0OpKzevLbSoNVQsISlQ+w8ILHu2lWXmAn/SCQMWUf281ZkXRcrArGS5xwae6i0kww==","signatures":[{"sig":"MEUCIDpqyKDATFylmw29HO5QepdLeX2N9PAKFNMVfUD397TyAiEAiRbPuvc0nzd6ipyMkjYJaya0n3ZknScYOvitGcjZyGg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":789341},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"ffda1b2f02ac2de5b7854345e7ad568c22173a65","scripts":{"demo":"vhs demo/demo.tape && ffmpeg -y -loglevel error -sseof -0.5 -i demo/demo.gif -frames:v 1 -update 1 /tmp/unguard-demo-frame.png","lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsdown","typecheck":"node ./node_modules/tsc7/bin/tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"11.17.0","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"26.4.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^6.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsc7":"npm:typescript@^7.0.2","tsdown":"^0.22.4","vitest":"^4.0.18","@types/node":"^22.20.1","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.16.3_1784305912522_0.006209534799747063","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"unguard","version":"0.17.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety","ai","ai-generated-code","code-review","defensive-programming","eslint"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.17.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"e354e7f6d8e08cee0593b9cd2d3dbacc831ee101","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.17.0.tgz","fileCount":16,"integrity":"sha512-U+mEL/EYzTNWXytKzW0D3meWYUBF37yVSOhcsc4MIeDKCocPoP1UkoiSY1z3wrLwKu4e0c4qGb0iCDo2m/HS8Q==","signatures":[{"sig":"MEUCIB17X7wRXTqMY2KRAXyS9whI2CnUa7wlL+zS+UP3Q9sAAiEA7uRpvAX85hSBri1zBUp2C5vAM0euGrWF3wpod0laUWU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":789807},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"2bbb198bec3cd2107fbc754312c61b8756dee1a3","scripts":{"demo":"vhs demo/demo.tape && ffmpeg -y -loglevel error -sseof -0.5 -i demo/demo.gif -frames:v 1 -update 1 /tmp/unguard-demo-frame.png","lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","audit":"node ./bin/unguard.mjs audit --fail-on warning","build":"tsdown","typecheck":"node ./node_modules/tsc7/bin/tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test && npm run scan && npm run audit"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"11.17.0","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"26.4.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^6.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsc7":"npm:typescript@^7.0.2","tsdown":"^0.22.4","vitest":"^4.0.18","@types/node":"^22.20.1","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.17.0_1784997398041_0.23453302478710092","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"name":"unguard","version":"0.17.1","keywords":["typescript","linter","static-analysis","code-quality","type-safety","ai","ai-generated-code","code-review","defensive-programming","eslint"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.17.1","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"58fb76c28faccdd861d9b7eb4db346c32678ecfe","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.17.1.tgz","fileCount":16,"integrity":"sha512-/JvomnsY1wNPSs+Ul8rVueQI9WEkRMEExOtCWMsbrQnh1qiwD1unE2QacTsQAhx3yZP00LswIXf/2+1lbDv/Sg==","signatures":[{"sig":"MEQCIFFrMtdbdw7vvzcutXa/hVQPd88Sis30lLdV77xi+aeCAiBT7FXesHMVEZE5+SA+9P3CuFmGNdpRDhz4epHctkRdjg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":790013},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"b4872f2bb14fbed72e6408225a42f30ab9e31ccb","scripts":{"demo":"vhs demo/demo.tape && ffmpeg -y -loglevel error -sseof -0.5 -i demo/demo.gif -frames:v 1 -update 1 /tmp/unguard-demo-frame.png","lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","audit":"node ./bin/unguard.mjs audit --fail-on warning","build":"tsdown","typecheck":"node ./node_modules/tsc7/bin/tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","scan:strict":"node ./bin/unguard.mjs scan --strict","prepublishOnly":"npm run build && npm run test && npm run scan && npm run audit"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"11.17.0","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"26.4.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^6.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsc7":"npm:typescript@^7.0.2","tsdown":"^0.22.4","vitest":"^4.0.18","@types/node":"^22.20.1","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.17.1_1786388595354_0.4109552011646582","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"unguard","version":"0.18.0","keywords":["typescript","linter","static-analysis","code-quality","type-safety","ai","ai-generated-code","code-review","defensive-programming","eslint"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.18.0","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"ca92165af955726c7dd7d657eb8ba3977a732691","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.18.0.tgz","fileCount":16,"integrity":"sha512-cmJyASeVJtqBEnXwWzKmfLmMVz+dqcJ2Du+L4vKlr1W/oGlkrSnQmJ0n4TGe2kjSAdEEDFRthtWCmK35m4FHqg==","signatures":[{"sig":"MEQCIH/xgy2gsAcI4VgAJWGU7iommUYkF91sz8rIkFZjSUB+AiAVxOATvCCMqBDvjC/5jNtS1VzIilPz5B+6WWzlmSCMpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":867451},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"0ec04f3732ae8597b5594e7ea37cb09bd075cced","scripts":{"demo":"vhs demo/demo.tape && ffmpeg -y -loglevel error -sseof -0.5 -i demo/demo.gif -frames:v 1 -update 1 /tmp/unguard-demo-frame.png","lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsdown","smell":"node ./bin/unguard.mjs smell --fail-on warning","typecheck":"node ./node_modules/tsc7/bin/tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","prepublishOnly":"npm run build && npm run test && npm run scan && npm run smell"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"11.17.0","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"26.4.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^6.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsc7":"npm:typescript@^7.0.2","tsdown":"^0.22.4","vitest":"^4.0.18","@types/node":"^22.20.1","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.18.0_1789100020984_0.7271897791910291","host":"s3://npm-registry-packages-npm-production"}},"0.18.1":{"name":"unguard","version":"0.18.1","keywords":["typescript","linter","static-analysis","code-quality","type-safety","ai","ai-generated-code","code-review","defensive-programming","eslint"],"author":{"url":"https://seva.dev","name":"Seva Maltsev","email":"me@seva.dev"},"license":"MIT","_id":"unguard@0.18.1","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"bin":{"unguard":"bin/unguard.mjs"},"dist":{"shasum":"d98b2aca0873674f7fd1326b15a462dd393d1e95","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.18.1.tgz","fileCount":16,"integrity":"sha512-3LaE2lMD479gH/2HymF7AwxZT33x2ecp3Tv/bOYLApHGq3KWML8aNhmdxyKC46kSw5sryJ5crdc0e82/PlHHUw==","signatures":[{"sig":"MEQCIGUXEpYphukk7s8jaXZckd08No55xTA70HrhLu9Oqkt1AiAsbNAID9GHMvUngOux4y7ckxRFCcXRDWwt1tuC86+QWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":886654},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"b52e2ad14821357138c898a82d17f18678584c56","scripts":{"demo":"vhs demo/demo.tape && ffmpeg -y -loglevel error -sseof -0.5 -i demo/demo.gif -frames:v 1 -update 1 /tmp/unguard-demo-frame.png","lint":"npm run lint:biome","scan":"node ./bin/unguard.mjs scan","test":"vitest run","build":"tsdown","smell":"node ./bin/unguard.mjs smell --fail-on warning","typecheck":"node ./node_modules/tsc7/bin/tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","test:watch":"vitest","prepublishOnly":"npm run build && npm run test && npm run scan && npm run smell"},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"repository":{"url":"git+https://github.com/TwoAbove/unguard.git","type":"git"},"_npmVersion":"11.17.0","description":"Detect overdefensive AI-generated code","directories":{},"_nodeVersion":"26.4.0","dependencies":{"ignore":"^7.0.5","fast-glob":"^3.3.3","picocolors":"^1.1.1","typescript":"^6.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsc7":"npm:typescript@^7.0.2","tsdown":"^0.22.4","vitest":"^4.0.18","@types/node":"^22.20.1","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/unguard_0.18.1_1789139037101_0.38923578239778367","host":"s3://npm-registry-packages-npm-production"}},"0.18.2":{"name":"unguard","version":"0.18.2","description":"Detect overdefensive AI-generated code","author":{"name":"Seva Maltsev","email":"me@seva.dev","url":"https://seva.dev"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/TwoAbove/unguard.git"},"homepage":"https://github.com/TwoAbove/unguard#readme","bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"keywords":["typescript","linter","static-analysis","code-quality","type-safety","ai","ai-generated-code","code-review","defensive-programming","eslint"],"type":"module","bin":{"unguard":"bin/unguard.mjs"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsdown","typecheck":"node ./node_modules/tsc7/bin/tsc","lint:biome":"biome lint src tests/**/*.test.ts tests/harness.ts","lint":"npm run lint:biome","test":"vitest run","test:watch":"vitest","scan":"node ./bin/unguard.mjs scan","smell":"node ./bin/unguard.mjs smell --fail-on warning","demo":"vhs demo/demo.tape && ffmpeg -y -loglevel error -sseof -0.5 -i demo/demo.gif -frames:v 1 -update 1 /tmp/unguard-demo-frame.png","prepublishOnly":"npm run build && npm run test && npm run scan && npm run smell"},"engines":{"node":">=22"},"dependencies":{"fast-glob":"^3.3.3","ignore":"^7.0.5","picocolors":"^1.1.1","typescript":"^6.0.3"},"devDependencies":{"@biomejs/biome":"^1.9.4","@types/node":"^22.20.1","tsc7":"npm:typescript@^7.0.2","tsdown":"^0.22.4","vitest":"^4.0.18"},"gitHead":"e9f0b3d0c18a83e3a09bdb55e3a69d8868b67959","_id":"unguard@0.18.2","_nodeVersion":"26.4.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-zDwO8FjGXbtGGmdcoke9KpQotXgvVrr7IWogYpfMalKT7RWVvEYVPExx8KLhpmDmBGOPUnIVDfTPycyOYlasIQ==","shasum":"d1c4b81431e4385ed47d95c78a838e5ee1a6bafd","tarball":"https://registry.npmjs.org/unguard/-/unguard-0.18.2.tgz","fileCount":16,"unpackedSize":887069,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDc0uukQMvHTKGQYmC4U2xGwIskaNUTklft0CUY38P0bAIhANN4qJGLZ8LRD/hCaV0gLoxE9Ky1up8z5FUzpe2d9qca"}]},"_npmUser":{"name":"twoabove","email":"sevamaltsev@gmail.com"},"directories":{},"maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/unguard_0.18.2_1789314631875_0.0957879507946906"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-23T01:54:28.958Z","modified":"2026-09-13T15:50:32.174Z","0.1.0":"2026-02-23T01:54:29.199Z","0.2.0":"2026-02-23T04:32:00.737Z","0.4.0":"2026-02-23T17:28:01.523Z","0.4.1":"2026-02-23T17:31:02.898Z","0.4.2":"2026-02-23T18:06:47.741Z","0.4.3":"2026-02-23T18:30:46.683Z","0.4.4":"2026-02-23T19:03:25.770Z","0.5.0":"2026-02-24T19:10:26.864Z","0.5.1":"2026-02-24T19:55:50.441Z","0.5.2":"2026-02-24T20:30:00.510Z","0.6.0":"2026-02-25T00:36:35.559Z","0.7.0":"2026-02-25T01:13:11.403Z","0.7.1":"2026-02-25T01:22:13.049Z","0.8.0":"2026-02-25T18:20:42.533Z","0.9.0":"2026-02-27T01:25:54.259Z","0.10.0":"2026-02-28T08:23:16.985Z","0.10.1":"2026-02-28T17:17:05.591Z","0.10.2":"2026-02-28T17:33:47.920Z","0.10.3":"2026-02-28T19:08:26.379Z","0.10.4":"2026-03-01T14:10:45.627Z","0.11.0":"2026-03-07T17:20:03.438Z","0.12.0":"2026-03-07T18:23:48.406Z","0.12.1":"2026-03-13T10:22:04.498Z","0.13.0":"2026-03-14T10:27:41.934Z","0.13.1":"2026-03-14T10:35:29.434Z","0.13.2":"2026-03-14T10:47:40.957Z","0.13.3":"2026-03-16T22:21:02.361Z","0.13.4":"2026-04-02T17:23:31.171Z","0.13.5":"2026-04-02T18:14:13.211Z","0.13.6":"2026-04-06T23:27:06.352Z","0.13.7":"2026-04-07T02:05:43.092Z","0.14.0":"2026-04-08T00:46:19.707Z","0.15.0":"2026-04-30T18:58:28.339Z","0.15.1":"2026-05-01T17:55:27.804Z","0.15.2":"2026-05-03T03:29:06.830Z","0.16.0":"2026-06-11T00:05:09.438Z","0.16.1":"2026-06-12T02:00:57.208Z","0.16.2":"2026-07-09T21:44:20.722Z","0.16.3":"2026-07-17T16:31:52.736Z","0.17.0":"2026-07-25T16:36:38.179Z","0.17.1":"2026-08-10T19:03:15.620Z","0.18.0":"2026-09-11T04:13:41.151Z","0.18.1":"2026-09-11T15:03:57.269Z","0.18.2":"2026-09-13T15:50:32.017Z"},"bugs":{"url":"https://github.com/TwoAbove/unguard/issues"},"author":{"name":"Seva Maltsev","email":"me@seva.dev","url":"https://seva.dev"},"license":"MIT","homepage":"https://github.com/TwoAbove/unguard#readme","keywords":["typescript","linter","static-analysis","code-quality","type-safety","ai","ai-generated-code","code-review","defensive-programming","eslint"],"repository":{"type":"git","url":"git+https://github.com/TwoAbove/unguard.git"},"description":"Detect overdefensive AI-generated code","maintainers":[{"name":"twoabove","email":"sevamaltsev@gmail.com"}],"readme":"# unguard\n\nUnguard your code. Defend against overdefensive AI-generated code.\n\nType-aware static analysis powered by the TypeScript compiler itself.\n\nIf `??` is on a non-nullable type, you don't need it.\n\nIf `?.` is on a guaranteed object, it's noise.\n\nunguard proves it with types, and complains.\n\n![unguard scanning a file and citing the types that prove each guard dead](https://raw.githubusercontent.com/TwoAbove/unguard/main/demo/demo.gif)\n\n## Quick start\n\n```bash\nnpx unguard\n```\n\nNo config, no setup. unguard finds your tsconfig, builds a real TypeScript program, and reports only what the types prove. (`npm install -g unguard` if you prefer a global install.)\n\n## What it catches\n\nAI assistants pad code with guards against states the type system already rules out. Each one reads like caution, and in aggregate, they bury the real contracts. unguard reads the types and proves which guards need to be unguarded.\n\n**Dead fallbacks** - the type says the value is always there:\n\n```typescript\nconst attempts = job.attempts ?? 1; // attempts: number\n```\n\n```txt\n10:20  warning  Nullish coalescing (??) fallback on a non-nullable type is dead\n                code; remove the fallback or fix the type upstream\n```\n\n**Dead narrowing** - the diagnostic cites the type that decides the condition:\n\n```typescript\nif (typeof job.id !== \"string\") {   // id: string\n  throw new Error(\"job is missing an id\");\n}\n```\n\n```txt\n12:7   warning  typeof comparison is always false: `job.id` is `string`, and\n                typeof always yields \"string\" for that type\n```\n\n**Fabricated types** - external data asserted into shape instead of validated:\n\n```typescript\nconst payload = JSON.parse(job.payload) as Payload;\n```\n\n```txt\n17:21  error    Casting `any`/`unknown` to a concrete type without runtime\n                validation fabricates structure; validate first or narrow with\n                a type guard\n```\n\n**Swallowed errors** - failure silently becomes a normal-looking value:\n\n```typescript\ntry {\n  return { id: job.id, attempts, payload };\n} catch {\n  return null;\n}\n```\n\n```txt\n19:5   warning  Catch swallows the error: it neither throws nor returns a value\n                referencing the caught error. Propagate via throw, or model\n                failure into the return type carrying the original error\n```\n\nPlus more type-system evasions (`as any`, `x as unknown as T`, `@ts-ignore`), cross-file analysis (exports nobody imports, optional parameters no call site ever passes, arguments that are the same literal everywhere, dead overloads, copy-pasted functions), and more - the full catalog is in [Current Rules](#current-rules).\n\n## Why not just typescript-eslint?\n\nKeep typescript-eslint - unguard is a complement to it, not a replacement. Its `no-unnecessary-condition` overlaps with a slice of `no-dead-narrowing`, and that's roughly where the overlap ends. Unguard, on the other hand, provides more:\n\n- **Whole-project analysis.** unguard indexes every call site, import, and export across your tsconfig groups (and is monorepo-aware). Lint rules see one file at a time while unguard can prove an optional parameter is never passed, an argument is always the same literal, an export is never imported.\n- **Defensive-pattern focus.** Swallowed catches detected structurally (does any expression in the catch reference the error?), `throw new Error(e.message)` losing the cause, unvalidated casts of external data, defaults that widen interface contracts.\n- **Tiers split by certainty.** `scan` runs finding-tier rules whose reports demand a fix because the checker or graph demonstrates them. Cases with a correct alternative reading live in `smell` for human review.\n- **Zero config.** `npx unguard` on any TypeScript repo.\n\n## For AI coding agents\n\nunguard is built for the verify loop. Findings are proofs with the evidence in the message, which is exactly what an agent needs to fix code instead of arguing with a style warning. Add to your `CLAUDE.md` / `AGENTS.md` / rules file:\n\n```markdown\nAfter changing TypeScript, run `npx unguard` and fix every finding.\nDiagnostics cite the type that proves the defect - fix the code (or the type),\ndon't add suppressions. If a guard is genuinely intentional, annotate it:\n`// @unguard <rule-id> <reason>`.\n```\n\nAnd gate CI:\n\n```yaml\n- name: unguard\n  run: npx unguard --fail-on=error\n```\n\n## Usage\n\n```bash\nunguard                                  # scan files/directories for findings\nunguard smell                            # report smells for human review\nunguard fix                              # apply certified fixes, report what remains\nunguard --config ./unguard.config.json   # load config\nunguard --ignore '**/*.gen.ts'           # add ignore globs\nunguard --only no-any-cast               # run rules matching a selector\nunguard --rule duplicate-*=warning       # override rule severity/policy\nunguard --rule category:cross-file=warning\nunguard --rule tag:safety=error\nunguard --fail-on=error                  # fail only on errors\nunguard --json                           # machine-readable report\nunguard baseline                         # record current findings as the baseline\nunguard --no-baseline                    # ignore unguard.baseline.json for this scan\nunguard --concurrency 1                  # disable worker-thread parallelism, can be slow for large codebases\nunguard --no-cache                       # bypass on-disk diagnostic cache\n```\n\n### Two tiers: findings and smells\n\nEvery rule belongs to one tier:\n\n- **finding** - the checker or graph demonstrates the report, so it demands a fix (or an explicit `@unguard` annotation). `unguard scan` runs finding-tier rules and is meant to gate CI or commits.\n- **smell** - the analysis cannot see enough to choose between a likely problem and a correct alternative reading, such as deliberate duplication, an API surface for external consumers, or an intentionally optional parameter. `unguard smell` reports these for human review and exits 0 unless `--fail-on` is passed explicitly.\n\n`--only <selector>` and explicit `rules` selections bypass the tiers - a matching rule runs in either command.\n\n### Config\n\n`unguard` automatically loads `./unguard.config.json` (or `./.unguardrc.json`). Use `--config <path>` to specify another file.\n\n```json\n{\n  \"$schema\": \"./node_modules/unguard/schema.json\",\n  \"paths\": [\"src\", \"apps/web/src\"],\n  \"ignore\": [\"**/*.gen.ts\", \"**/routeTree.gen.ts\"],\n  \"rules\": {\n    \"duplicate-*\": \"warning\",\n    \"category:cross-file\": \"warning\",\n    \"tag:safety\": \"error\",\n    \"no-ts-ignore\": \"error\",\n    \"prefer-*\": \"off\"\n  },\n  \"overrides\": [\n    {\n      \"files\": [\"tests/**\", \"**/*.test.ts\"],\n      \"rules\": {\n        \"no-non-null-assertion\": \"off\",\n        \"duplicate-*\": \"off\"\n      }\n    }\n  ],\n  \"failOn\": \"error\",\n  \"concurrency\": 4,\n  \"cache\": true\n}\n```\n\n`rules` values can be `off`, `info`, `warning`, or `error`.\nSelectors support:\n\n- exact rule id: `no-ts-ignore`\n- wildcard: `duplicate-*`\n- category: `category:cross-file`\n- tag: `tag:safety`\n- tier: `tier:finding`, `tier:smell`\n\n`overrides` entries apply a rule policy only to diagnostics in files matching the listed globs (gitignore syntax, relative to the working directory). Later entries win; `off` drops the diagnostic. Typical use: relaxing rules in test directories, where non-null assertions and duplication are often deliberate.\n\n### Ignore behavior\n\n`unguard` ignores:\n\n- built-in: `node_modules`, `dist`, `.git`, declaration files (`*.d.ts`, `*.d.cts`, `*.d.mts`)\n- generated files: `*.gen.*`, `*.generated.*`\n- project `.gitignore`\n- anything passed via `--ignore` or config `ignore`\n\n### Exit codes\n\n| Code | Meaning |\n| ---- | ------- |\n| 0 | No issues, or issues below `--fail-on` threshold |\n| 1 | Failing diagnostics without errors |\n| 2 | Failing diagnostics with at least one error |\n\nUse `--fail-on=error` in CI to fail only on errors while still showing all diagnostics:\n\n```bash\nunguard src --fail-on=error\n```\n\n\n`unguard smell` defaults to `--fail-on=none` and exits 0 regardless of smells. Pass `--fail-on` explicitly to make it gate.\n\n### Output formats\n\nGrouped text output is the default, with diagnostics grouped by file:\n\n```txt\nsrc/lib/probe.ts\n  37:4       warning  Catch swallows the error...  no-swallowed-catch\n```\n\nUse `--json` for a machine-readable report. Scan and fix reports use `findings`; smell reports use `smells`:\n\n```json\n{\n  \"findings\": [\n    {\n      \"file\": \"src/lib/probe.ts\",\n      \"line\": 37,\n      \"column\": 4,\n      \"severity\": \"warning\",\n      \"ruleId\": \"no-swallowed-catch\",\n      \"message\": \"Catch swallows the error...\",\n      \"fixable\": false\n    }\n  ],\n  \"fileCount\": 1,\n  \"exitCode\": 1\n}\n```\n\n### Auto-fix\n\n`unguard fix` applies certified fixes for diagnostics with semantics-preserving replacements (dead `??` fallbacks, dead `?.`, no-op `await`, redundant casts, `cond ? true : false`, and similar), then reports what remains. The exit code reflects only the remaining findings.\n\n### Baseline\n\nAdopting unguard in an existing codebase? `unguard baseline src` records every current finding in `unguard.baseline.json`. Subsequent scans suppress a `(file, rule)` group as long as its count stays at or below the recorded number - new findings anywhere still fail, and fixing old ones ratchets the allowance down on the next `unguard baseline`. Use `--no-baseline` to see the full picture.\n\n## Current Rules\n\nThe **Tier** column says which command runs the rule: `scan` for a finding or `smell` for a smell.\n\n### Type system evasion\n\n| Rule | Severity | Tier | What it catches |\n| ---- | -------- | ---- | --------------- |\n| `no-any-cast` | error | finding | `x as any` -- erases type safety for everything downstream of the cast |\n| `no-explicit-any-annotation` | error | finding | `param: any`, `const x: any` -- an `any` annotation where a real type (or `unknown`) belongs |\n| `no-inline-type-assertion` | error | finding | `x as { ... }`, `<{ ... }>x` -- asserting into an anonymous inline shape; name the type or fix it upstream |\n| `no-type-assertion` | error | finding | `x as unknown as T` -- the double assertion that can connect any two types |\n| `no-ts-ignore` | error | finding | `@ts-ignore` -- silences the checker unconditionally |\n| `no-ts-expect-error` | warning | finding | `@ts-expect-error` -- self-expiring, but still an evasion |\n| `no-never-cast` | warning | finding | `x as never` -- silences the checker completely, usually to force past an exhaustiveness error |\n| `no-redundant-cast` | error | finding | `x as T` where `x` already has type `T` |\n| `no-unvalidated-cast` | error | finding | `JSON.parse(...) as T`, `await fetch(...).json() as T` -- casting external data into a shape nothing has checked |\n| `redundant-narrowing-then-cast` | warning | finding | `if (typeof x === \"string\") { (x as string).length }` -- the `if` already narrowed `x`, so the cast adds nothing |\n| `return-type-widens-via-destructure` | warning | finding | `const [x] = await db...returning(); return x;` in a function declared to return `T` -- an array element is really `T \\| undefined`, so the return type hides the empty case |\n\n### Defensive code (type-aware)\n\nThese rules use the TypeScript type checker. Non-nullable types suppress the diagnostic; nullable types are flagged.\n\nNullability-driven rules require `strictNullChecks` (or `strict`). Without it the checker erases `null`/`undefined` from every type, so these rules are skipped with a warning rather than reporting every load-bearing guard as dead code.\n\n| Rule | Severity | Tier | What it catches |\n| ---- | -------- | ---- | --------------- |\n| `no-optional-property-access` | warning | finding | `obj?.prop` on a non-nullable type |\n| `no-optional-element-access` | warning | finding | `obj?.[key]` on a non-nullable type |\n| `no-optional-call` | warning | finding | `fn?.()` on a non-nullable type |\n| `no-nullish-coalescing` | warning | finding | `x ?? fallback` on a non-nullable type |\n| `no-logical-or-fallback` | warning | finding | `map.get(k) \\|\\| fallback`, `count \\|\\| 1` -- `\\|\\|` swallows `0` and `\"\"`; use `??` |\n| `no-null-ternary-normalization` | warning | finding | `x == null ? fallback : x` -- a hand-rolled `??`: dead if the type is non-nullable, and a sign the type needs fixing if it isn't |\n| `no-coalesce-then-guard` | warning | finding | `const x = a ?? null; if (x == null)` -- the `if` re-asks the question the `??` just answered |\n| `no-await-coalesce` | warning | smell | `await fn() ?? fallback` -- defaulting away a call's nullable result hides why it can be empty; check it and branch instead (built-in lookups like `Map.get` and `Array.find` are exempt) |\n| `no-non-null-assertion` | warning | finding | `x!` on a nullable type without a local narrowing guard |\n| `no-double-negation-coercion` | warning | finding | `!!value` inside an `if`/`while`/ternary test -- the construct already coerces (`const flag = !!x` and other places that need an actual boolean are fine) |\n| `no-redundant-existence-guard` | warning | finding | `obj && obj.prop` on a non-nullable type |\n| `no-dead-narrowing` | warning | finding | Conditions statically decided by the operand's declared type: truthiness checks that can never fail, `typeof` comparisons that can never (or must always) match, always-true `instanceof`, type-predicate calls whose argument already has the asserted type. Exempt: ambient globals (`typeof document === \"undefined\"` probes the environment, not the type) and, without `noUncheckedIndexedAccess`, truthiness checks (index reads erase `undefined`, so the guard may be load-bearing) |\n| `no-coalesce-undefined` | warning | finding | `x ?? undefined` where `x` can be `undefined` but never `null` -- an identity no-op |\n| `redundant-boolean-branch` | warning | finding | `cond ? true : false`, `if (cond) return true; return false;` -- the condition is already boolean. The inverted form is flagged only when the replacement is a readable `!cond`; compound conditions are never rewritten into `!(a && b)` |\n| `no-useless-await` | warning | finding | `await x` where `x`'s type has no `then` -- a no-op that suggests asynchrony that isn't there |\n| `redundant-destructure-default` | warning | finding | `const { a = fallback } = obj` where `obj.a` is required and non-undefined -- the default can never apply |\n\n### Error handling\n\n| Rule | Severity | Tier | What it catches |\n| ---- | -------- | ---- | --------------- |\n| `no-swallowed-catch` | warning | finding | `catch (e) {}`, `.catch(() => fallback)` -- error is neither rethrown, returned, nor passed into a handling call |\n| `no-error-rewrap` | error | finding | `throw new Error(e.message)` without `{ cause: e }` |\n\n### Interface design\n\n| Rule | Severity | Tier | What it catches |\n| ---- | -------- | ---- | --------------- |\n| `prefer-type-predicate` | warning | smell | `(x: unknown): boolean` whose body is `typeof`/`instanceof`/`in` checks -- returning `x is T` would let callers narrow |\n| `optional-param-coerced-in-body` | warning | finding | Optional param forced non-optional in the body (`x = x ?? def`, `x ??= def`, or `if (!x) throw`) |\n| `no-defaulted-required-port-arg` | warning | finding | `class C implements I { method(arg = x) }` where `I.method(arg)` is required -- the implementation quietly makes a required argument optional |\n| `repeated-literal-property` | warning | smell | Same literal value repeated across object properties -- likely a missed constant |\n| `repeated-return-shape` | warning | smell | Multiple functions without explicit return type annotations return object literals with the same property names -- extract a shared return type |\n| `trivial-type-alias` | info | smell | `type Foo = Bar;` -- a second name for an existing type with no change (info: an alias marking a domain boundary is often deliberate) |\n\n### Cross-file analysis\n\n| Rule | Severity | Tier | What it catches |\n| ---- | -------- | ---- | --------------- |\n| `duplicate-type-declaration` | warning | smell | Same type shape in multiple files |\n| `duplicate-type-name` | warning | smell | Same exported type name, different shapes |\n| `duplicate-function-declaration` | warning | smell | Same function body in multiple files |\n| `duplicate-function-name` | warning | smell | Same exported function name, different bodies |\n| `duplicate-constant-declaration` | info | smell | Same constant value in multiple files (info: coincidental value equality is common) |\n| `duplicate-inline-type-in-params` | warning | smell | Same inline `{ ... }` param type repeated across signatures |\n| `duplicate-file` | warning | smell | File with identical content to another file |\n| `near-duplicate-function` | warning | smell | Function bodies that match after renaming params and folding literals (strings, numbers, `null`/`undefined`) -- likely a copy-paste |\n| `duplicate-statement-sequence` | warning | smell | Repeated block of statements across functions or files (identical text; lookup tables that vary only by literal data are not flagged) |\n| `trivial-wrapper` | warning | smell | Function that delegates to another without transformation (skipped when the wrapper specializes a type predicate, introduces generics, reorders args, or partially applies) |\n| `unused-export` | warning | smell | Exported function, type, or constant with no usages in the project. Imports resolve through the checker (path aliases, workspace packages) and usage is merged across tsconfig groups, so an export consumed by a sibling monorepo package counts as used. Consumers outside the scanned tree, such as a published package's API surface, are invisible to the analysis - hence smell tier |\n| `optional-arg-always-used` | warning | smell | Optional param provided at every call site -- make it required |\n| `optional-arg-never-used` | warning | smell | Optional param never provided at any call site -- remove it, inline the default |\n| `constant-argument` | warning | smell | Parameter receives the same literal at every call site across scanned tsconfig groups -- inline the value |\n| `explicit-null-arg` | warning | smell | `fn(null)` / `fn(undefined)` passed to a project function -- the parameter invites nullish values; redesign it so callers can omit the argument |\n| `dead-overload` | warning | smell | Overload signature with zero matching call sites across scanned tsconfig groups |\n\n\n### Imports\n\n| Rule | Severity | Tier | What it catches |\n| ---- | -------- | ---- | --------------- |\n| `no-dynamic-import` | warning | smell | `import(\"./module\")` -- breaks static analysis (warning, not error: code-splitting and lazy loading are legitimate) |\n\n## Annotations\n\nComments near flagged lines appear in the output as context:\n\n```typescript\n// intentional escape hatch for untyped AST access\ntype AnyNode = Record<string, any>;\n```\n\n```txt\nfile.ts:2:31 error Explicit `any` annotation ... (intentional escape hatch for untyped AST access)\n```\n\nFor `warning` and `info` diagnostics, you can explicitly mark a finding as intentional with `@unguard <rule-id>` on the same line or immediately above:\n\n```typescript\n// @unguard no-nullish-coalescing intentional default for legacy callers\nconst port = config.port ?? 3000;\n```\n\n`@unguard` never suppresses `error` diagnostics.\n\n## API\n\n```typescript\nimport { executeScan, scan } from \"unguard\";\n\nconst result = await scan({ paths: [\"src/\"] }); // raw diagnostics\nconst execution = await executeScan({\n  paths: [\"src\"],\n  mode: \"scan\", // or \"smell\"\n  ignore: [\"**/*.gen.ts\"],\n  rulePolicy: {\n    \"duplicate-*\": \"warning\",\n    \"category:cross-file\": \"warning\",\n    \"tag:safety\": \"error\",\n    \"prefer-*\": \"off\",\n  },\n  overrides: [{ files: [\"tests/**\"], rules: { \"no-non-null-assertion\": \"off\" } }],\n  failOn: \"error\",\n});\n\nconsole.log(execution.exitCode);\nfor (const d of execution.visibleDiagnostics) {\n  console.log(`${d.file}:${d.line} [${d.ruleId}] ${d.message}`);\n}\n```\n\n### Caching\n\nunguard caches scan results under `node_modules/.cache/unguard/`. Before reusing\nresults, it refreshes project membership and module resolution, then checks\nreportable files, semantic dependency hashes, and scan policy. Cache hits skip\ntype-checker and rule analysis, but still parse project inputs to resolve dependencies.\nThe cache invalidates automatically on:\n\n- content changes in scanned files, project-context files, and imported declarations (mtime-only changes are ignored)\n- added or removed project inputs, including changes to inherited `include` patterns\n- changes to tsconfig, extended configurations, or package-resolution metadata\n- changes to active rules or rule severities\n- changes to reportable files (including `.gitignore` effects), scan paths, ignore globs, or `failOn`\n- unguard version upgrades\n\nDisable with `--no-cache` (CLI), `cache: false` (config), or pass\n`cache: false` to `executeScan({ cache: false })` programmatically.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}