{"_id":"@artshllaku/gapix","_rev":"15-7934f9640c31251adf1a00b994730b22","name":"@artshllaku/gapix","dist-tags":{"latest":"2.2.3"},"versions":{"1.0.0":{"name":"@artshllaku/gapix","version":"1.0.0","keywords":["test","testing","coverage","test-quality","ai","typescript","cli","static-analysis","jest","assertions"],"author":"","license":"MIT","_id":"@artshllaku/gapix@1.0.0","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"d39f916068d8dd18800bfb221cb3e5d0df0d4177","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-1.0.0.tgz","fileCount":62,"integrity":"sha512-DpwfkGg2TURWraMlXbby/P1Nh+s1TSxoE3+udUkCajik0U5M2MC3boLYDqhIIT/3Ur9GnJ1zm0MmwPJbfk4+9w==","signatures":[{"sig":"MEYCIQDi05aBhza63ZLCMf/mi/NF2YYBl6osYmw9JO/1An5tlwIhAPC4rcCxjBVQrrW6DifpE7nqRSzR6Yl7IARXmwcu6rTT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228667},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"f6905e04b0b097d4e6bceba0e53d23130b7685f2","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc","start":"node dist/cli/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"AI-powered test gap analyzer — find untested code and evaluate test quality in TypeScript projects","directories":{},"_nodeVersion":"23.11.0","dependencies":{"ora":"^8.0.0","glob":"^10.3.10","chalk":"^5.4.0","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_1.0.0_1773419957918_0.09533875793016566","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@artshllaku/gapix","version":"1.1.0","keywords":["test","testing","coverage","test-quality","ai","typescript","cli","static-analysis","jest","assertions"],"author":"","license":"MIT","_id":"@artshllaku/gapix@1.1.0","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"1a6aa18d82df6022297d23b1666296ef80fe39f8","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-1.1.0.tgz","fileCount":62,"integrity":"sha512-S8FHtQWsGYXcCosA1L94xqq6OniC7st4aj8kAMkAlmCmTWh4E7z6kHsxsq9nDkyM19tbfO5DcLu2gPog8WQD7w==","signatures":[{"sig":"MEUCIE9NKfd+Mv7ha8tuXmsVUiqYw5fdziW+t7uCl/YUwWIjAiEA4Ku04/17OAegW4rHs3YKd+jaTmGOc8thhYYpwsCqMMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228667},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d245e891e1022339bca7f364a1f82b340e2a61bc","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc","start":"node dist/cli/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"AI-powered test gap analyzer — find untested code and evaluate test quality in TypeScript projects","directories":{},"_nodeVersion":"23.11.0","dependencies":{"ora":"^8.0.0","glob":"^10.3.10","chalk":"^5.4.0","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_1.1.0_1773420105970_0.39042849058535123","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@artshllaku/gapix","version":"1.1.1","keywords":["test","testing","coverage","test-quality","ai","typescript","cli","static-analysis","jest","assertions"],"author":"","license":"MIT","_id":"@artshllaku/gapix@1.1.1","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"d865bb003f9b98fc24988fefb08c9553dd07cfc2","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-1.1.1.tgz","fileCount":62,"integrity":"sha512-XAu8YB6W0Pq1W9KsbAEsuMBAuNh70Zky4UKWBUTit/7uKOOLFkp/2XnRvVChijzkXB1s+hGAWlU8rBcrQ9GQRw==","signatures":[{"sig":"MEQCIFCxdboejIZKuyFXru4OdUSUQE+UC5d2i7eRI74yMdDGAiAoktm6Ohmq9BEAJqPuSA3pZ04kL+4mxpBoR1h7cQkT3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228697},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0ab951513e311f94fd19a6dd692fb5d79785ad7b","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"AI-powered test gap analyzer — find untested code and evaluate test quality in TypeScript projects","directories":{},"_nodeVersion":"23.11.0","dependencies":{"ora":"^8.0.0","glob":"^10.3.10","chalk":"^5.4.0","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_1.1.1_1773444960307_0.3394713312888613","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@artshllaku/gapix","version":"1.1.2","keywords":["test","testing","coverage","test-quality","ai","typescript","cli","static-analysis","jest","assertions"],"author":"","license":"MIT","_id":"@artshllaku/gapix@1.1.2","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"c1d56ec72714b34c6e85216523436d382c5ade91","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-1.1.2.tgz","fileCount":62,"integrity":"sha512-lwqaThNkNDbaK2nzfWAMgcUq/tXCKhKaKiUUyFSIpyDyqbegWkzz1/qNl9Gkw23CXHWepWCkm5yIdnvVHKeGyA==","signatures":[{"sig":"MEQCIC7tDLIHBNh3mzM6KjFn5Qx9tPOpAO8fRcihfooE2CeUAiAlLAJvjniN8rnpiOjOYxdQqjaq9Kgtfqa0QcdMMuKgPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228900},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b7dea9f8f6e4eb10cca9fd532a49750c7982c42f","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"AI-powered test gap analyzer — find untested code and evaluate test quality in TypeScript projects","directories":{},"_nodeVersion":"23.11.0","dependencies":{"ora":"^8.0.0","glob":"^10.3.10","chalk":"^5.4.0","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_1.1.2_1773445223652_0.6759506737954881","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@artshllaku/gapix","version":"1.1.3","keywords":["test","testing","coverage","test-quality","ai","typescript","cli","static-analysis","jest","assertions"],"author":"","license":"MIT","_id":"@artshllaku/gapix@1.1.3","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"418ab969c0df4e2bf48af5e1bacd613682a9da10","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-1.1.3.tgz","fileCount":62,"integrity":"sha512-etjii5dktG+rqNzmFcfSwzvXAaITIfCSUYO0t2E507iSs6NjSJAd0an3PdfM7N+1K+Wzp7Znk6vhTOdqAA0BLA==","signatures":[{"sig":"MEYCIQDXRuCoPovP2nKnY1DLwGwslrfgynvLgbnm5VMyJ2QIbQIhAMvmCeVtFhINRYBCNab3mVmRULyBJhVeRfbVfff5fXHD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227745},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"fd2c84c32308018359797bb21ff6070ba7ef8919","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"AI-powered test gap analyzer — find untested code and evaluate test quality in TypeScript projects","directories":{},"_nodeVersion":"23.11.0","dependencies":{"ora":"^8.0.0","glob":"^10.3.10","chalk":"^5.4.0","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_1.1.3_1773969226018_0.25966331299783185","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@artshllaku/gapix","version":"1.1.4","keywords":["test","testing","coverage","test-quality","ai","typescript","cli","static-analysis","jest","assertions"],"author":"","license":"MIT","_id":"@artshllaku/gapix@1.1.4","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"2b3f10c9e41717961b594692f066682b3e2b202e","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-1.1.4.tgz","fileCount":62,"integrity":"sha512-/ATwUgkKR1iEKRtNCO43e2A9fXpkKmpBQT+ToMzTG5wpVjW9fEoTiT/lKS2mJB5pvPLkAwC7dCc0uy+9KLx7Dw==","signatures":[{"sig":"MEYCIQDN4PG8EnPht+7KESSkwVZChMJwkYWK9/olFtWGwNzu2gIhAOchyoY6YmMacFDi4z2P4jgEHe2A949Fs99+LYmsCH1w","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223200},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"28450d56015944272cc774bf8c43cf8c41982ff1","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"AI-powered test gap analyzer — find untested code and evaluate test quality in TypeScript projects","directories":{},"_nodeVersion":"23.11.0","dependencies":{"ora":"^8.0.0","glob":"^10.3.10","chalk":"^5.4.0","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_1.1.4_1774107391641_0.7141794047458969","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@artshllaku/gapix","version":"2.0.0","keywords":["test","testing","test-quality","test-coverage","assertions","static-analysis","typescript","cli","jest","vitest","playwright","cypress","mocha","ci"],"author":{"name":"Art Shllaku"},"license":"MIT","_id":"@artshllaku/gapix@2.0.0","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"f76b32851dba937dd5d46af8ecacb5d1102463c8","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-2.0.0.tgz","fileCount":104,"integrity":"sha512-6Wq3TUDUFgSAnBdPYQUMoVOyJYru1+7c24RYTcE9HEILxg8+FOamETNdPIuJZ3jCk8K9LHyMiZ33HaicopvErw==","signatures":[{"sig":"MEUCIEQBYO/n/lsaYC0a7ydiA4xaINIbiBRBLslHQmjcaogVAiEAzNa8+eIlk4RAu8n7haZo3C1IOFKqnuzsLqyhSyRIFfA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":376676},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"2d6ebc9e9e20f1269c59c055da2b7ed481081919","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"Static test-gap and test-quality analysis for TypeScript — finds untested error paths, unasserted symbols, and broken tests in seconds","directories":{},"_nodeVersion":"23.11.0","dependencies":{"glob":"^10.3.10","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_2.0.0_1786017913468_0.6266056351830169","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@artshllaku/gapix","version":"2.0.1","keywords":["test","testing","test-quality","test-coverage","assertions","static-analysis","typescript","cli","jest","vitest","playwright","cypress","mocha","ci"],"author":{"name":"Art Shllaku"},"license":"MIT","_id":"@artshllaku/gapix@2.0.1","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"91bc7f78f15810450a2d27f675f4e1f505b075b2","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-2.0.1.tgz","fileCount":104,"integrity":"sha512-HgmipHkBXbhRk8/4u/kjN/OBBV2sAkXIc6jUeeu7m3fSX5GuIEDSkuhbF6erBdjpQM/1mflS17357OfwBGkbIA==","signatures":[{"sig":"MEYCIQDOU/68B5zcUq1p74eQFq56H33zrcp0DIyMayaHvC44kQIhAN9SR6s5nN0/phfbUP9zZk0O44sWxYSlRnKdiRDk/eFK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378125},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"431067d0acc5e4b792275e5c90aab27ff89d011c","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"Static test-gap and test-quality analysis for TypeScript — finds untested error paths, unasserted symbols, and broken tests in seconds","directories":{},"_nodeVersion":"23.11.0","dependencies":{"glob":"^13.0.6","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_2.0.1_1786018574903_0.2130454662605492","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@artshllaku/gapix","version":"2.0.2","keywords":["test","testing","test-quality","test-coverage","assertions","static-analysis","typescript","cli","jest","vitest","playwright","cypress","mocha","ci"],"author":{"name":"Art Shllaku"},"license":"MIT","_id":"@artshllaku/gapix@2.0.2","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"1a6b948e7914d5b4b56ec0ec36487636c085b5bd","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-2.0.2.tgz","fileCount":104,"integrity":"sha512-HwcjdxygFDqOUpiLTMX9aAb8dCkTPQ/1ztwW5FOpgBUqOGstsEPnxIJrc5qyulFosxfizg6e5oUADgXH8GKQTQ==","signatures":[{"sig":"MEUCIQCcoBWqOzw1ELYGUkl34GbN0otZ1eOoiK9dsuvLJkqZ8QIgQKU1P5Ev9h5IlYtTPcQkbNTDDfZPWLS4eqMOJnxN7zE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378647},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"fe5d7a186fec34abf1357d54d24a165febf1f1c5","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"Static test-gap and test-quality analysis for TypeScript — finds untested error paths, unasserted symbols, and broken tests in seconds","directories":{},"_nodeVersion":"23.11.0","dependencies":{"glob":"^13.0.6","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_2.0.2_1786018994503_0.8895361465708971","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"@artshllaku/gapix","version":"2.0.4","keywords":["test","testing","test-quality","test-coverage","assertions","static-analysis","typescript","cli","jest","vitest","playwright","cypress","mocha","ci"],"author":{"name":"Art Shllaku"},"license":"MIT","_id":"@artshllaku/gapix@2.0.4","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"2da42397ca06dcd7c7352b75e0ec14b4edd0866c","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-2.0.4.tgz","fileCount":104,"integrity":"sha512-BxBDsmhoLfW3t+1Xz2busil0KGUIyuelCGg9PJ5OdyJ2YcuspDELkUk8bWF+MrfDjtvWqdo2w3P7IuWWrKLTtQ==","signatures":[{"sig":"MEUCIC7dSembyhdZGJaffIErw8RTXAgGQLKZB52Z2FaHRWFFAiEAuwgbyvd/ce08GS0XDqBHsRN1av+IpJfUDDTWhi7cp8c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":403910},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"010f899ab85d626414a34d6e8473e5675bd9e0ac","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"Static test-gap and test-quality analysis for TypeScript — finds untested error paths, unasserted symbols, and broken tests in seconds","directories":{},"_nodeVersion":"23.11.0","dependencies":{"glob":"^13.0.6","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_2.0.4_1786022157061_0.4332906068756852","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@artshllaku/gapix","version":"2.2.0","keywords":["test","testing","test-quality","test-coverage","assertions","static-analysis","typescript","cli","jest","vitest","playwright","cypress","mocha","ci"],"author":{"name":"Art Shllaku"},"license":"MIT","_id":"@artshllaku/gapix@2.2.0","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"dc17ae16d91ccd40107808d86114f1a2978d5d92","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-2.2.0.tgz","fileCount":112,"integrity":"sha512-MT0JPTf1CrK3N54xDqlIIWcOTeTpjywTSZL8ZQc1QWbKtUCA001ikXq/r3EvgbA6sTmB2ZWcPYMmvmXEJvugvA==","signatures":[{"sig":"MEQCICUmLJItUx+505u7lVclRptJXCZf/0UTNeS+IzDVVzcgAiBYnb55pjR71XerStHMwV4EGY85JEKKV/GtaASvdQhG2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":436742},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"e729ea868d78d382ca6947b1cf9ccf50c479bfbe","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"deprecated":"Windows: assertions inside fixture-provided page objects were not traced. Use 2.2.1.","repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"Static test-gap and test-quality analysis for TypeScript — finds untested error paths, unasserted symbols, and broken tests in seconds","directories":{},"_nodeVersion":"23.11.0","dependencies":{"glob":"^13.0.6","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_2.2.0_1786029800785_0.20265891578782314","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@artshllaku/gapix","version":"2.2.1","keywords":["test","testing","test-quality","test-coverage","assertions","static-analysis","typescript","cli","jest","vitest","playwright","cypress","mocha","ci"],"author":{"name":"Art Shllaku"},"license":"MIT","_id":"@artshllaku/gapix@2.2.1","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"e59eaa6acb6f41f9c0cd0130d65f6d18c15dc557","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-2.2.1.tgz","fileCount":112,"integrity":"sha512-y3PDpG6Diyxzn7HXKzw1l44NAQAAHEzevGTrpfO18cjKwRMr5rxhV0igdIZt6iIrlfFAtYlKXm8ugnRcWtU86Q==","signatures":[{"sig":"MEQCIBynPF5XzAVnUYOAGxfMYzQtva8XLdC/Y0IQqtilQPEKAiBuoxL6IUecaL83OOsC5ZhIQsLMtoyWJ8idkonCN67tOw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":438267},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"cb755e7d63bb6e5aca69c0577b193dc3a7d7c212","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"rm -rf dist && tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","preflight":"node scripts/preflight.mjs","typecheck":"tsc --noEmit","prepublishOnly":"npm run preflight && npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.9.2","description":"Static test-gap and test-quality analysis for TypeScript — finds untested error paths, unasserted symbols, and broken tests in seconds","directories":{},"_nodeVersion":"23.11.0","dependencies":{"glob":"^13.0.6","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_2.2.1_1786091184547_0.7346965397931886","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@artshllaku/gapix","version":"2.2.2","keywords":["test","testing","test-quality","test-coverage","assertions","static-analysis","typescript","cli","jest","vitest","playwright","cypress","mocha","ci"],"author":{"name":"Art Shllaku"},"license":"MIT","_id":"@artshllaku/gapix@2.2.2","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"bin":{"gapix":"dist/cli/index.js"},"dist":{"shasum":"b01e1cc1c5ca7953d9957b10f92417abe937dfa7","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-2.2.2.tgz","fileCount":114,"integrity":"sha512-ig+h6Xpq3lCEzDgmwifm9cgJhg3V9vt2bOXVC/g6IBmMJ07vVdD5eUjURWOR4o5G/jnoaML1hckFsF/5fF4I1g==","signatures":[{"sig":"MEQCICJUxzCLw+C5ToFf97U+1XpB3uQuHtNA52LP+oOdYFkzAiBTSaVNUdCkHuu8SnbSa/rO1optoToFrsvpWcHi3FIh1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@artshllaku%2fgapix@2.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":442055},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"e8d236937ec5a66386fdd2ca83eb7ef00580ec79","scripts":{"dev":"ts-node src/cli/index.ts","test":"jest","build":"rm -rf dist && tsc && chmod +x dist/cli/index.js","start":"node dist/cli/index.js","version":"node scripts/changelog-stub.mjs","preflight":"node scripts/preflight.mjs","typecheck":"tsc --noEmit","prepublishOnly":"npm run preflight && npm run typecheck && npm run build && npm test"},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"repository":{"url":"git+https://github.com/artshllk/gapix.git","type":"git"},"_npmVersion":"10.8.2","description":"Static test-gap and test-quality analysis for TypeScript — finds untested error paths, unasserted symbols, and broken tests in seconds","directories":{},"_nodeVersion":"20.20.2","dependencies":{"glob":"^13.0.6","ollama":"^0.6.3","commander":"^12.0.0","@babel/types":"^7.24.0","@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0","@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gapix_2.2.2_1786095820815_0.1605417015820907","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"@artshllaku/gapix","version":"2.2.3","description":"Static test-gap and test-quality analysis for TypeScript — finds untested error paths, unasserted symbols, and broken tests in seconds","main":"dist/index.js","types":"dist/index.d.ts","bin":{"gapix":"dist/cli/index.js"},"scripts":{"build":"rm -rf dist && tsc && chmod +x dist/cli/index.js","dev":"ts-node src/cli/index.ts","start":"node dist/cli/index.js","test":"jest","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm run preflight && npm run typecheck && npm run build && npm test","typecheck":"tsc --noEmit","version":"node scripts/changelog-stub.mjs"},"keywords":["test","testing","test-quality","test-coverage","assertions","static-analysis","typescript","cli","jest","vitest","playwright","cypress","mocha","ci"],"author":{"name":"Art Shllaku"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/artshllk/gapix.git"},"homepage":"https://github.com/artshllk/gapix#readme","bugs":{"url":"https://github.com/artshllk/gapix/issues"},"engines":{"node":">=20.0.0"},"dependencies":{"@babel/parser":"^7.24.0","@babel/traverse":"^7.24.0","@babel/types":"^7.24.0","commander":"^12.0.0","glob":"^13.0.6","ollama":"^0.6.3"},"devDependencies":{"@types/glob":"^8.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","jest":"^29.5.0","ts-jest":"^29.1.0","ts-node":"^10.9.0","typescript":"^5.2.0"},"_id":"@artshllaku/gapix@2.2.3","gitHead":"87b7a956b6aa8dfd10136af41c52bbdc1040d8d2","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-yb6aHikaTQ2Iz22RcbHOtWVIknwjVIZ4FHOnTz97NhznUZpv3UOdrhgQCwxvg6UzE6SCVN/FI0cvo1Fq8NqTag==","shasum":"dedc150b4524c52e9e3c4691a104d46ee20f8076","tarball":"https://registry.npmjs.org/@artshllaku/gapix/-/gapix-2.2.3.tgz","fileCount":114,"unpackedSize":442955,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@artshllaku%2fgapix@2.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD4Nwb/MxkRgN7BCuYzST1jbmkRhboofryAWJanttGjZQIhAITQtUOXtG8Wvsd4O4gMuxHReki5i7hUSSamaJukXM34"}]},"_npmUser":{"name":"artshllaku","email":"artshllaku48@gmail.com"},"directories":{},"maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gapix_2.2.3_1786096548006_0.9903098246342215"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-13T16:39:17.782Z","modified":"2026-08-07T09:55:48.530Z","1.0.0":"2026-03-13T16:39:18.088Z","1.1.0":"2026-03-13T16:41:46.179Z","1.1.1":"2026-03-13T23:36:00.460Z","1.1.2":"2026-03-13T23:40:23.798Z","1.1.3":"2026-03-20T01:13:46.261Z","1.1.4":"2026-03-21T15:36:31.793Z","2.0.0":"2026-08-06T12:05:13.623Z","2.0.1":"2026-08-06T12:16:15.084Z","2.0.2":"2026-08-06T12:23:14.650Z","2.0.4":"2026-08-06T13:15:57.229Z","2.2.0":"2026-08-06T15:23:20.987Z","2.2.1":"2026-08-07T08:26:24.701Z","2.2.2":"2026-08-07T09:43:40.977Z","2.2.3":"2026-08-07T09:55:48.168Z"},"bugs":{"url":"https://github.com/artshllk/gapix/issues"},"author":{"name":"Art Shllaku"},"license":"MIT","homepage":"https://github.com/artshllk/gapix#readme","keywords":["test","testing","test-quality","test-coverage","assertions","static-analysis","typescript","cli","jest","vitest","playwright","cypress","mocha","ci"],"repository":{"type":"git","url":"git+https://github.com/artshllk/gapix.git"},"description":"Static test-gap and test-quality analysis for TypeScript — finds untested error paths, unasserted symbols, and broken tests in seconds","maintainers":[{"name":"artshllaku","email":"artshllaku48@gmail.com"}],"readme":"# gapix\n\n[![npm](https://img.shields.io/npm/v/@artshllaku/gapix)](https://www.npmjs.com/package/@artshllaku/gapix)\n[![CI](https://github.com/artshllk/gapix/actions/workflows/ci.yml/badge.svg)](https://github.com/artshllk/gapix/actions/workflows/ci.yml)\n[![license](https://img.shields.io/npm/l/@artshllaku/gapix)](LICENSE)\n\n**Your tests pass. But do they check anything?**\n\n```ts\ntest('adds', () => {\n  add(1, 2);        // runs every line. Checks nothing. Passes forever.\n});\n```\n\nCoverage tools call that covered. It would still pass if `add` returned\ngarbage tomorrow.\n\ngapix reads your source and your tests, works out which functions a test\nactually checks, and reports the ones it doesn't:\n\n- error paths no test ever triggers\n- functions your tests call but never check\n- tests that pass no matter what the code does\n\nNo config. No test run. About a second.\n\n---\n\n## Try it\n\nIn any TypeScript project:\n\n```bash\nnpx @artshllaku/gapix check\n```\n\nOn a shopping cart with a single test:\n\n```\n  assertion coverage  50%   1/2 symbols\n  defects             1 critical   0 warn   0 info\n  0 run, never checked · 1 never run · 1 test file\n\n  critical  src/cart.ts:2  untested-throw-path\n            total throws 'empty cart' at line 2, but no test reaching it asserts that it throws.\n            → expect(() => total(…)).toThrow('empty cart')\n\n  Biggest gaps\n    applyDiscount                   src/cart.ts:5\n```\n\n## Fix the first finding\n\n`total()` throws when the cart is empty. A test calls `total()`, so line\ncoverage is satisfied. Nothing checks that the error ever fires.\n\nAdd the test gapix wrote for you:\n\n```ts\ntest('rejects an empty cart', () => {\n  expect(() => total([])).toThrow('empty cart');\n});\n```\n\nRun it again and the critical is gone.\n\nFind a gap, write the test, run again. That loop is the tool.\n\n## Install\n\n```bash\nnpm install -D @artshllaku/gapix\n```\n\nA dev dependency lands in `node_modules/.bin`, which is **not** on your shell's\nPATH, so a bare `gapix` will not resolve. Use `npx`:\n\n```bash\nnpx gapix check\n```\n\nOr run it from a script, where npm puts `node_modules/.bin` on the PATH for you:\n\n```jsonc\n// package.json\n\"scripts\": {\n  \"test:gaps\": \"gapix check\"\n}\n```\n\n```bash\nnpm run test:gaps\n```\n\n> **Avoid installing globally as well.** With both installed, a bare `gapix`\n> resolves to the global copy, which may be older. You then get\n> `unknown command` for flags your local version supports. Pick one. When in\n> doubt, `which gapix` and `gapix --version`.\n\n## Use it in CI\n\nFail the build on anything critical:\n\n```bash\ngapix check --fail-on critical\n```\n\n`gapix init --ci` writes the config and a GitHub Actions workflow for you.\n\n### Adopting it on an existing codebase\n\nAny established project has findings on day one. zod has 352. Turn on\n`--fail-on` cold and the build goes red immediately, so you turn it back off.\n\nAccept the backlog once, then fail only on what is **new**:\n\n```bash\ngapix check --update-baseline      # writes .gapix/baseline.json\ngit add .gapix/baseline.json\n```\n\n```bash\ngapix check --baseline .gapix/baseline.json --fail-on warn\n```\n\nBaselined findings are still reported. They just never break the build.\nAnything outside the baseline does. Delete entries as you fix them.\n\nThe file is sorted and deduplicated, so it stays quiet in git. Entries match on\na fingerprint that ignores line numbers, so a finding survives edits above it.\n\n### Scope a run to the pull request\n\n```bash\ngapix check --since main\n```\n\nReports what the branch touched instead of the whole backlog.\n\n### GitHub code scanning\n\nSARIF puts findings in the Security tab and inline on the pull request. No bot,\nno custom action:\n\n```yaml\n- run: npx gapix check --format sarif -o gapix.sarif.json\n- uses: github/codeql-action/upload-sarif@v3\n  with:\n    sarif_file: gapix.sarif.json\n```\n\nGitHub tracks alerts across commits on the same fingerprint the baseline uses,\nso a finding is not raised again every time a line moves above it.\n\n### Exit codes\n\n| exit | meaning |\n|---|---|\n| `0` | clean, or no gate configured |\n| `1` | gate failed |\n| `2` | usage error, such as an unknown flag |\n| `3` | bad config |\n| `4` | internal error |\n\nThese are stable. Pin against them.\n\n## Output formats\n\n```bash\ngapix check --format html            # interactive report, opens in your browser\ngapix check --format markdown        # for a pull request comment\ngapix check --format sarif           # GitHub code scanning\ngapix check --format json -o - | jq  # pipe it anywhere\n```\n\n---\n\n## How it differs from coverage\n\nLine coverage measures what **ran**. gapix measures what was **checked**.\n\nEvery exported function lands in one of four states. The gap between the first\ntwo is the entire point:\n\n| state | meaning |\n|---|---|\n| `asserted` | a test checks a value that came from calling it |\n| `exercised` | a test calls it, but no check traces back to the result |\n| `referenced` | imported, never called |\n| `untested` | no test reaches it |\n\n**Assertion coverage** is the share of your public functions that are\n`asserted` — how much of your code is verified, not how much of it executed.\n\nMocking a module demotes it to `exercised`. Driving a fake is not testing the\nreal thing.\n\nOnly your public API counts. Constructors, private methods and `.d.ts` files\nare excluded, each with a recorded reason in the JSON report, so you can audit\nthe denominator yourself.\n\n## What it catches\n\n`gapix rules` lists all of them. `gapix explain <rule>` gives the reasoning\nbehind one. The rules that earn their place:\n\n| rule | what it catches |\n|---|---|\n| `untested-throw-path` | A function that throws, reached only by happy-path tests. Nothing else in the ecosystem checks this. |\n| `await-async-assertion` | `expect(locator).toBeVisible()` with no `await`. The promise floats, so the test passes whatever the page does. |\n| `no-tests-without-assertions` | A test with no checks. Critical when it never calls your code either, because then it cannot fail at all. A warning when it calls without checking, since a crash still surfaces. Checks inside page objects count, so Page Object suites are not flagged wrongly. |\n| `assertion-shape-mismatch` | A function returns an object, but the only check is `not.toBeNull()`. Read from the declared return type, so terse-but-adequate checks are left alone. |\n| `no-focused-tests` | A stray `.only`, silently disabling the rest of the file. |\n| `no-tautological-assertion` | `expect(1).toBe(1)`. Inflates the count, verifies nothing. |\n| `snapshot-only-test` | A snapshot records what the code does today, not what it should do. |\n\n## Works with\n\nEvery row is backed by a fixture in [tests/fixtures/](tests/fixtures/). If it\nis listed, a test proves it.\n\n| | checks | test structure |\n|---|---|---|\n| **Jest**, **Vitest** | `expect().toBe()`, `.not`, `.resolves`, `expect.soft` | `.only` / `.skip` / `.each`, `xit` / `fit` |\n| **Playwright** | web-first matchers, `expect.poll`, await tracking | `test.describe`, fixtures via `test.extend` |\n| **Chai**, **Mocha** | `to.equal()`, `to.be.true`, `should` | `describe` / `context` / `suite` |\n| **node:test** | `assert.*`, `assert.strict.*` | `test()`, subtests |\n| **Type tests** | `expectTypeOf<T>()`, `assertType<T>()`, `@ts-expect-error`, your own typed helpers | — |\n| **Cypress** | `cy...should()`, `.and()` | `describe` / `it` |\n| **supertest** | `await request(app).get('/x').expect(200)` | — |\n\nPage objects and helpers are traced across files. If your spec calls\n`checkout.submit()` and the check lives inside the page object, it counts —\nincluding Playwright's fixture-based page objects.\n\nNot supported: `.vue`, `.svelte` and `.astro` single-file components.\n\ngapix runs against real repositories nightly, not just fixtures. zod, NestJS\nand tRPC are analysed every night, with parse failures and critical counts held\nto measured ceilings, so a new false positive fails the build.\n\n## Configuration\n\nOptional. Drop a `gapix.config.json` anywhere above the directory you analyse:\n\n```jsonc\n{\n  \"include\": [\"src/**/*.ts\"],\n  \"exclude\": [\"**/*.d.ts\"],\n  \"rules\": { \"no-skipped-tests\": \"off\" },\n  \"thresholds\": { \"failOn\": \"critical\", \"minAssertionCoverage\": 60 }\n}\n```\n\nLater layers win: defaults, user config, project config, `GAPIX_*` environment\nvariables, command-line flags.\n\n`gapix config path` shows which file was used. `gapix doctor` reports the\nresolved environment.\n\n## Commands\n\n```\ngapix check [path]         analyse (the default — bare `gapix` works too)\n  --fail-on <severity>       exit 1 on critical|warn|info (default: never)\n  --min-assertion-coverage <n>  exit 1 below n% (only when symbols exist)\n  --baseline <path>          accept known findings; fail only on new ones\n  --update-baseline          write the current findings as the baseline\n  --since <ref>              only files changed since a git ref\n  --format <fmt>             terminal|json|html|markdown|sarif\n  -o, --output <path>        write there instead of the default (- is stdout)\ngapix init [--ci]          create a config, optionally a CI workflow\ngapix rules                list every rule\ngapix explain <rule-id>    the reasoning behind a rule\ngapix report               reopen the last HTML report\ngapix config path|get|set  inspect and change settings\ngapix doctor               report the resolved environment\n```\n\n`gapix check --help` lists every flag.\n\n## AI suggestions\n\nOff by default. `--ai` adds written suggestions through OpenAI or a local\nOllama.\n\n**AI never moves a number and never raises a finding.** That is enforced in the\narchitecture, not by convention. A CI gate that answers differently on\nidentical input is broken. With AI off, two runs over the same tree are\nbyte-identical.\n\n## Compared to mutation testing\n\ngapix is a fast first pass, not a replacement for\n[Stryker](https://stryker-mutator.io). Stryker mutates your code, reruns your\nsuite, and measures empirically what your tests catch. That is ground truth,\nand it costs minutes to hours.\n\ngapix reads the AST in about a second and finds the gaps that need no\nexecution. Run gapix on every commit. Run Stryker on what it flags.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\nAdding support for a test framework is the highest-value contribution. Each one\nis a single file in [src/dialects/](src/dialects/) with its own fixture, and\nthe guide walks you through it.\n\nRequires Node 20 or newer. MIT © Art Shllaku.\n","readmeFilename":"README.md"}