{"_id":"@cevek/screentest","_rev":"17-744b19f6587c1fed4f017769138aaf0b","name":"@cevek/screentest","dist-tags":{"latest":"0.5.0"},"versions":{"0.1.0":{"name":"@cevek/screentest","version":"0.1.0","license":"MIT","_id":"@cevek/screentest@0.1.0","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"083c4f41ca7530cdc5ca1b7e7906482c3fb368e9","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.1.0.tgz","fileCount":7,"integrity":"sha512-De+kswEZO98OjVOk5+yG7tuj9ygYKdt9uTHlcGDn6mWcokwgSJdg4XO04dTuM1Qyo7JpsLJkIeb4dxbJEC9tWg==","signatures":[{"sig":"MEUCICJWQGJfJB1g/o1+TpEo2BAEz4Fq9izsM1km6/V3fzaaAiEAqKObTbQlqtzI9ITeoYRH4LlOtgD8beP8Jjb2o4NzkCY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1005747},"type":"module","gitHead":"9d00bfadd30b510284bff4f68703c1aa0cfd1420","scripts":{"build":"tsup && node scripts/copy-web.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — Express + React UI shipped as a single CLI.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.1.0_1780571472703_0.5588845808716929","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cevek/screentest","version":"0.2.0","license":"MIT","_id":"@cevek/screentest@0.2.0","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"bfbad523cab2794a693eff499b350d33388eada9","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.2.0.tgz","fileCount":14,"integrity":"sha512-89NL+nG99APOe2vQsdluQak/JCptH3gDje1eyjSGlcXlP/iuFVQTMZh+tQDAXt9GQPMpPBJyo0DxqVSz1sA93w==","signatures":[{"sig":"MEUCIQCcdaLwRE2iU87g/wpHqGAETIkcZhcxxY+V4LGk+79jVwIgA2l1G/mRFLhrWy1iiaUfIhWOc9tkW2xfXKtAcCtO6T0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1024055},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"9d00bfadd30b510284bff4f68703c1aa0cfd1420","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.2.0_1780572693449_0.9098076907650174","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@cevek/screentest","version":"0.2.1","license":"MIT","_id":"@cevek/screentest@0.2.1","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"70d4b4d25767ba81f71544dc666e21d0fef6a025","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.2.1.tgz","fileCount":14,"integrity":"sha512-gFUzBUFdSa67KbkTN0CEGs8zKjrBAwd6mVfcNJzCj9g62zbJFV0SIS4sTnIXIA2fxa5arKydW9q3TfLHAzoFQA==","signatures":[{"sig":"MEQCIEcdfyLAB0AVAWN+BCE8UH1+xsWCsXNp2uwlZBqOaLY2AiBJrNQo8G5tuZ3d+Z3q5oLOzXElq8ATemCLklVobb4MuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1024107},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"9d00bfadd30b510284bff4f68703c1aa0cfd1420","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.2.1_1780572925481_0.26268467748427504","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@cevek/screentest","version":"0.2.2","license":"MIT","_id":"@cevek/screentest@0.2.2","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"f6df6a9dc00ed759bdf8320dd3a0a5c8277618fb","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.2.2.tgz","fileCount":16,"integrity":"sha512-a+SEiaQRzqMt9+eyN6w7ySm3zgK1BVsNaev77jBAEWwWLrfNeNTfGVNAcjeSILkh16kBk7w7nug7CsNt0I4ekA==","signatures":[{"sig":"MEYCIQDJqpeVnIpwcqpdR+HHhaqiJt5zB2q+HaptdzO++Bc3ewIhAIJhKaqUwLCb9H3muSTCMBGjA3QjYUhM3AqdiKQTrQxy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1027474},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"9d00bfadd30b510284bff4f68703c1aa0cfd1420","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.2.2_1780574527584_0.6835250036650828","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@cevek/screentest","version":"0.2.3","license":"MIT","_id":"@cevek/screentest@0.2.3","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"8e5c8a84b5aa465943c2319c5435a6b2395f700b","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.2.3.tgz","fileCount":16,"integrity":"sha512-R6K22/w5BndTI07RfrwYQIzVoIlB0Z5OqAbyPjyJijPwH5onN1GQ7VAzA6WwYQTM9G8kIwaMSpABqJm+OVf7Kw==","signatures":[{"sig":"MEUCIQDoyPIOXSExU0FY47KJajJxFRQM7yA0cwOLkTS817EFqQIge22doQmRsYUyDxCDIRRhQqOBrsGUm/KWVfm5Ozv5eE4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1028130},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"9d00bfadd30b510284bff4f68703c1aa0cfd1420","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.2.3_1780576694373_0.49814078343803603","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@cevek/screentest","version":"0.2.4","license":"MIT","_id":"@cevek/screentest@0.2.4","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"114964869f94d87fc6ee41770cc58e23d073e170","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.2.4.tgz","fileCount":16,"integrity":"sha512-ud92bSn/0/wQvC18w+tEl7Na9Gin/SYIJ+aKPaRccyGeLGTh9ppABrdpyNfyNy2sTCKxOvFVMJRpFpQ90KoXkA==","signatures":[{"sig":"MEUCIQDKn3/uSkDYodhZd64lolbD7+EqjHV/XsilAp7ktTbXJgIgZsAsLsaekNe3YF2Bowhta+Nn6NLaYd+SGPog+MN2Uv8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1030175},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"c4f67f314882ee0604577c188a53e133cdd8ce3b","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.2.4_1780744552885_0.5002581064723444","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@cevek/screentest","version":"0.2.5","license":"MIT","_id":"@cevek/screentest@0.2.5","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"5e8205ef54951c83c2b15915c890f347ae7ce67d","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.2.5.tgz","fileCount":16,"integrity":"sha512-Lictsx2cgZQiOEyLobCu4OuuaOp1v9glg8BIwloYQ4YYKKhXdr1TI9LXwjFKbI3adVsmjhqjNk5jcbE6ArJ2PQ==","signatures":[{"sig":"MEUCIQDjnU1otoWuhpKBBY0GjA2gac714fHiGdHPOU4AxIl5iwIgTkXPC91Rky/LkBsYiAq+1UZ6Q9DQ82k8YlcRJxLhEe0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1032892},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"c4f67f314882ee0604577c188a53e133cdd8ce3b","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.2.5_1780745851998_0.22457170287974004","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cevek/screentest","version":"0.3.0","license":"MIT","_id":"@cevek/screentest@0.3.0","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"e4dbabd00667f20062ed455c3eca281ad278ab4b","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.3.0.tgz","fileCount":15,"integrity":"sha512-JDHhW6j3+iqCu8vMooR5f+MWvTFQRAgNP4V95Rbbv0JxycrLXYMDjBvflgwxtwP8ibCDJ6OMY6r947N9CgyjJg==","signatures":[{"sig":"MEUCIQDa2/MeZa/fbtMudshQ8WohmwCwrvJPyUqqskvBUUU7jAIgJOQF2IeIwcFtStEsWl9Ae8Zz00mDc73v/pmD4oG06jk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1037217},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"c4f67f314882ee0604577c188a53e133cdd8ce3b","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.3.0_1780747315987_0.333938115203366","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@cevek/screentest","version":"0.3.1","license":"MIT","_id":"@cevek/screentest@0.3.1","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"3eeaa2decfc01ac87b3dc3e89065b7707f85b3aa","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.3.1.tgz","fileCount":15,"integrity":"sha512-g15kmTdkAGuhdMrNLyDa64cRHJuf+4JLeNh1k/lrxmxdtdPU+Ue1kymoDdNM6ptN9fwZ3iCUhgZ8Q/ni7mzXrw==","signatures":[{"sig":"MEUCIH3coSJuD/s8IhaWp9QY4mITHRr1Z92UKUR/FjDSKHSrAiEA6ZDnhUBdJyl6TTIPL3zjQgTjGUshiuzryx/faqWiQso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1039988},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"c4f67f314882ee0604577c188a53e133cdd8ce3b","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"pnpm -w typecheck && pnpm -w build"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.3.1_1780748027144_0.9076654658265066","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@cevek/screentest","version":"0.3.2","license":"MIT","_id":"@cevek/screentest@0.3.2","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"5f584590e2a5988432c044e420513e076d679891","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.3.2.tgz","fileCount":15,"integrity":"sha512-9eLAKSA4E/uzA9eRcJKRGJRsksbQoz3xxgikKgOfhANyaXVFmmbOCYVjNtfDHVyRyIPETS7xQGzdabpt/EOgaQ==","signatures":[{"sig":"MEUCIC9NuWnzA2HtH3OJZ9sTwowL0fZNouV+TIbhRwRl4MUyAiEApf5bGYiO5pzN2I3IhwtA0Xdg9xhttEREyBgNM1nYka0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1048168},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"c4f67f314882ee0604577c188a53e133cdd8ce3b","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"pnpm -w typecheck && pnpm -w build"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.3.2_1780749669476_0.6220970520317408","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@cevek/screentest","version":"0.3.3","license":"MIT","_id":"@cevek/screentest@0.3.3","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"ce25901792c486eb169a74fa664e233eb7fec67e","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.3.3.tgz","fileCount":15,"integrity":"sha512-AETvXaNxTvI/lKcPnaPStSJBUxlJBmMxr8iJ1tu+Ga+NzHAmXdWOJbu8kYk22whM6EQQqLA1xORX1iFb9G0r5A==","signatures":[{"sig":"MEYCIQCWsHsltPBBERAZSHT39/kKyoisgYqtGPdf7rUvDfTbTgIhAImdeDYowlaykhMNVhzNeoJix5SbzlOwrHRl5V3nNyhu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1050302},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"24f5d88c5ccd64321c866a552a99947c958a279d","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"pnpm -w typecheck && pnpm -w build"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.3.3_1780757798834_0.6177990582835178","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@cevek/screentest","version":"0.3.4","license":"MIT","_id":"@cevek/screentest@0.3.4","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"62acb1b84a695d2c2c8718e08a9eb052b3d0e3b8","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.3.4.tgz","fileCount":15,"integrity":"sha512-DrbM5Px4PGvbD3P/Oh5tTO4NiJkF+kLemSAhUcfSpLvQ4uaWOfZdZRj4ZUS1VJ050dwZQs+P+eTbVZIlHoYOoQ==","signatures":[{"sig":"MEQCIHiZ3x6FxMYyo2TwXAyxRwUghxsrDcMPV81v1aIrd8G9AiBKXl3OkJLG83M79tWtLBBKBJqB4h/cp0My4DWDWgPsGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1050419},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"24f5d88c5ccd64321c866a552a99947c958a279d","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"pnpm -w typecheck && pnpm -w build"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.3.4_1780764035843_0.46747697719712833","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@cevek/screentest","version":"0.3.5","license":"MIT","_id":"@cevek/screentest@0.3.5","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"f1b23c49f5263afe1eddaac59fbec0110ef3d80e","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.3.5.tgz","fileCount":15,"integrity":"sha512-+me3S3pfcz/a+Pj4bYWAWAFtNE+hllqFgtAoV6pUQ78GpySIsFq0rMfsqGCqjIAXmz9aj4xYS1MdfAziG3/rGA==","signatures":[{"sig":"MEQCIFC0HjpcECqwILtjXxV3TN4I8tQ1khKiIWCdVoCRuneyAiBwKEvt/7p6+d/7lEDKDZiYgMOauMHP5Iwy4J7sNOYzhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1050368},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"24f5d88c5ccd64321c866a552a99947c958a279d","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"pnpm -w typecheck && pnpm -w build"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.3.5_1780764665142_0.0032297512639574144","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@cevek/screentest","version":"0.3.6","license":"MIT","_id":"@cevek/screentest@0.3.6","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"2fe0473cde62c6ad7e2d8fc83907db4cb6f6e25d","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.3.6.tgz","fileCount":15,"integrity":"sha512-lPRKg5GQEtZ/0A+Ife62kOu7xmLu0Vp0LJqbana5ScVLfCuAlPIC4trIkYRu7FjZA/Hu6vk8m0sVaIn9xa5eSg==","signatures":[{"sig":"MEUCIQCqC92EaoSXi/POda84CGznMJhgqgzc4MU9F8qXrpEDbwIgGP5rpGxQw9w2ILJHrvHKPqPr+Xn1spUvEdYGU58luic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1054522},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"scripts":{"test":"vitest run","build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"pnpm -w typecheck && pnpm -w build"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.3.6_1788913442511_0.5635252826587236","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@cevek/screentest","version":"0.3.7","license":"MIT","_id":"@cevek/screentest@0.3.7","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"99494407a693049b3d9502ebbd9a16f6cf5bebe1","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.3.7.tgz","fileCount":15,"integrity":"sha512-VcgT3j3VcvMjN2rqSqCvf1nj+M122feW2ZrlVRVwx0ciS4bkuMapuGGYDa+pLAJHeFgwq30tDIo6nj4IsqRCOA==","signatures":[{"sig":"MEYCIQCBL4C3SixsmsFKZBJ99cRW/hA+4KhmBn5Rky4LErcM+gIhAPU60ymlzy9T7TOmNcygTtiTXUUV3mcA/raAELcLrRtm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDNCz6E1eKCfWdptkKUWw8TIK8tqfh8/u+z9M4VAFTGJQIgNO94CINPp80z5alfEoX3bas1o8OzHq+kTeMvjxCEzQY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1050195},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"e1fc6a78664a6fd277fd33432d6b79e54d3b73e6","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"pnpm -w typecheck && pnpm -w build"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.3.7_1789135324310_0.34896916198368944","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@cevek/screentest","version":"0.4.0","license":"MIT","_id":"@cevek/screentest@0.4.0","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"bin":{"screentest":"dist/index.js"},"dist":{"shasum":"4471e39a1292e60700f96ccb8e9478f0aa900e23","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.4.0.tgz","fileCount":15,"integrity":"sha512-TUFgm4kn8ezam9nWToXIw2tMOTDofjz9Ir88yLkYJhttbZBUZNPr+HY25JLiGj9Ovm13iO/J+Dt/xfSZP3pZhg==","signatures":[{"sig":"MEUCIFWDVWqen5KXRTO8F+JvG9HER3pZ/Fngp7iEdSbdUu91AiEAq12SIgZywfN18aw5ng3sJ5spNpQFLbZjotGqj6JLHro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD6C+gHtnpJrjc5wP2BwjnCA+xuTS3dJw/gXIjzgMefAgIgPpXKBQdkaIYGECpLBj7/D/J+UAQFwTVS8Jh7WQ/Tlhg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1062565},"type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"10b48b62c9003c11410c7299a8564dd717897c24","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"pnpm -w typecheck && pnpm -w build"},"_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"tmp":"tmp/screentest_0.4.0_1789142979944_0.5162688453828574","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"_id":"@cevek/screentest@0.5.0","bin":{"screentest":"dist/index.js"},"dist":{"shasum":"a358daf878a0952dc4c7cdffcf968cd3d290e8cf","tarball":"https://registry.npmjs.org/@cevek/screentest/-/screentest-0.5.0.tgz","fileCount":15,"integrity":"sha512-rsezSXOljLSxylPTokoTqih0yF6UMox/Byy1ZAPy3IC3IV+V4SGOJFJtU+jkPdUffB+eq2zro1Wf9A9KpKMOnQ==","signatures":[{"sig":"MEYCIQDz1YsIewZjriZofMFY6wAruvHDUJZNKwFqJOhImW5ZhAIhAP89H0a+vcdT4sTFOTp0146/ULn5nvFBLI89rDuarQcy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFS8aEWCTnJpVIul6I/b1U2pQ2fdiSYUl+ew6WkgwizgAiAbyGJTMWydbX+SI7Z1jzQypuo7CYdkDCOaQgT5iMVlAg=="}],"unpackedSize":1628503},"name":"@cevek/screentest","type":"module","exports":{"./runner":{"types":"./dist/runner.d.ts","import":"./dist/runner.js"},"./global-setup":{"types":"./dist/global-setup.d.ts","import":"./dist/global-setup.js"}},"gitHead":"465059e6fb8f59866b0ae928f901c3370484a6be","license":"MIT","scripts":{"build":"tsup && node scripts/postbuild.mjs","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"pnpm -w typecheck && pnpm -w build"},"version":"0.5.0","_npmUser":{"name":"cevek","email":"x.cevek@gmail.com"},"_npmVersion":"10.9.4","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","directories":{},"maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"_nodeVersion":"22.21.1","dependencies":{"open":"^11.0.0","express":"^5.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.5.1","vitest":"^4.0.0","playwright":"^1.50.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6","@screentest/shared":"workspace:*"},"peerDependencies":{"vitest":"^3.0.0 || ^4.0.0","playwright":"^1.50.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/screentest_0.5.0_1790190474836_0.7362364983218113"}}},"time":{"created":"2026-06-04T11:11:12.491Z","modified":"2026-09-23T19:07:55.138Z","0.1.0":"2026-06-04T11:11:12.862Z","0.2.0":"2026-06-04T11:31:33.677Z","0.2.1":"2026-06-04T11:35:25.632Z","0.2.2":"2026-06-04T12:02:07.825Z","0.2.3":"2026-06-04T12:38:14.618Z","0.2.4":"2026-06-06T11:15:53.064Z","0.2.5":"2026-06-06T11:37:32.164Z","0.3.0":"2026-06-06T12:01:56.148Z","0.3.1":"2026-06-06T12:13:47.312Z","0.3.2":"2026-06-06T12:41:09.681Z","0.3.3":"2026-06-06T14:56:38.986Z","0.3.4":"2026-06-06T16:40:35.986Z","0.3.5":"2026-06-06T16:51:05.299Z","0.3.6":"2026-09-09T00:24:02.667Z","0.3.7":"2026-09-11T14:02:04.392Z","0.4.0":"2026-09-11T16:09:40.046Z","0.5.0":"2026-09-23T19:07:54.992Z"},"license":"MIT","description":"Local desktop tool for visual screenshot-test review — CLI, runner helpers, and review UI shipped as a single package.","maintainers":[{"name":"cevek","email":"x.cevek@gmail.com"}],"readme":"# @cevek/screentest\n\nLocal desktop tool for visual screenshot-test review **plus** the runner\nhelpers and Docker-based browser harness needed to capture the\nscreenshots. Everything ships in one npm package — no copy-paste.\n\n## Install\n\n```bash\nnpm  i -D @cevek/screentest playwright vitest\n# pnpm add -D @cevek/screentest playwright vitest\n# yarn add -D @cevek/screentest playwright vitest\n```\n\nNo host browser install — every frame is rendered by the pinned Firefox in\nthe Docker daemon, so Docker is required. `snapshot.json` also records a\nfingerprint of the renderer its hashes came from; when a run's renderer\ndiffers and most screenshots changed, the log and the review UI say so.\n\n`playwright` and `vitest` are peer-deps — keep them in your devDependencies.\n\n## Quick start\n\n```bash\n# 1. Scaffold vitest.screentest.config.ts + tests/example.test.ts\nnpx screentest init\n\n# 2. Run. The first run builds the shared Firefox daemon image (~2 min,\n#    cached forever after) and starts the daemon; later runs reuse it.\nAPP_URL=http://localhost:5050 npx vitest run --config vitest.screentest.config.ts\n```\n\n> Add `\"screentest\": \"vitest run --config vitest.screentest.config.ts\"`\n> to your package.json scripts so you can just `npm run screentest`.\n\nThe daemon lives outside your project — one container serves every\nproject on your machine. It listens on `ws://localhost:5180`, holds\n~300MB RAM at idle, and stays up across reboots-of-your-app until you\n`screentest stop` it.\n\nYour **tests run natively on the host** (your normal vitest + TS + path\naliases + watch mode); only the Firefox rendering happens in the\ncontainer, over a WebSocket. Editing tests never needs an image rebuild.\n\n`screentest init` creates:\n\n- `vitest.screentest.config.ts` — separate vitest config wired with the\n  package's globalSetup. Kept under its own name so your normal\n  `vitest.config.ts` (unit tests) is untouched.\n- `tests/example.test.ts` — minimal Playwright test using the runner helpers\n\nExisting files are not overwritten — re-run `init` safely.\n\nPass `--config vitest.screentest.config.ts` to keep the screenshot run\nseparate from your normal `vitest run`. The screenshot config wires up\nour globalSetup; plain `vitest run` skips it entirely — no Firefox launch.\n\n## Commands\n\n```bash\nscreentest serve    # start the shared Firefox daemon up front (test runs start it on their own)\nscreentest stop     # stop it\nscreentest status   # is it running?\n```\n\n```bash\nnpx vitest run --config vitest.screentest.config.ts\n```\n\nThat's the test run — vitest on the host, our globalSetup connects to\nthe daemon. On failure (or new snapshots) the UI auto-launches in your\nbrowser. Set `CI=1` to skip the auto-UI and just propagate the exit\ncode; `SCREENTEST_NO_UI=1` does the same locally.\n\n```bash\nscreentest review\n```\n\nSkip vitest, regenerate `doc.json` from cached actuals, open the UI.\n\n```bash\nscreentest init\n```\n\nScaffold vitest config + example test (see above).\n\n```bash\nscreentest <doc-json-path> [--port N] [--no-open]\n                           [--worker-url URL] [--token TOKEN]\n```\n\nOpen the review UI on a pre-built `doc.json`. Used internally by the\nglobalSetup hook and by `screentest review`. With no `--port`, picks a\nrandom free port in `[40000, 50000)` so parallel test runs don't clash.\nThe UI also beacons a shutdown back to the server on tab close, so you\ndon't need Ctrl+C in the terminal.\n\n## Writing tests\n\n```ts\nimport { afterAll, beforeAll, describe, it } from 'vitest';\nimport type { Page } from 'playwright';\nimport { compareSnapshot, freezeDate, newPage } from '@cevek/screentest/runner';\n\nconst APP_URL = (process.env.APP_URL || 'http://localhost:5050').replace(/\\/+$/, '');\n\nlet page: Page;\nlet cleanup: () => Promise<void>;\n\nbeforeAll(async () => {\n  const r = await newPage();\n  await freezeDate(r.ctx, '2024-01-15T12:00:00Z'); // optional\n  page = r.page;\n  cleanup = r.cleanup;\n});\nafterAll(() => cleanup?.());\n\ndescribe('team', () => {\n  it('login flow', async () => {\n    await page.goto(`${APP_URL}/team`);\n    await page.locator('input[name=\"username\"]').waitFor({ state: 'visible' });\n    await compareSnapshot(page, 'login'); // → team / login flow / login\n\n    // Snapshot just one element instead of the whole page:\n    await compareSnapshot(page.locator('header'), 'header');\n  });\n});\n```\n\nSnapshot paths are auto-derived from `describe(...)` + `it(...)` plus the\n`compareSnapshot` leaf name. Hashes go into `tests/snapshot.json` by\ndefault; override with `SCREENTEST_SNAPSHOT_FILE=path/to/snapshot.json`.\nActuals + the generated `doc.json` go to\n`node_modules/.cache/screentest/` (gitignored by convention).\n\n> **Upgrading from < 0.3:** an existing `<projectRoot>/snapshot.json` keeps\n> working — the runner picks it up if `tests/snapshot.json` isn't there yet.\n\n## Docker Desktop host networking\n\nThe daemon container uses `--network=host` so its Firefox can reach\nyour app at `localhost:*`. On macOS / Windows Docker Desktop enable it\nonce: `Settings → Resources → Network → Enable host networking`. On\nLinux Docker (CI) it works out of the box.\n\n## Cloudflare Worker (blob store)\n\nAccepted screenshots are stored in your Cloudflare Worker (R2-backed).\nSee the [worker template](https://github.com/x-cevek/screentest/tree/main/cloudflare-worker)\nfor a 100-line implementation + `wrangler deploy` instructions.\n\nOnce deployed:\n\n```bash\nexport CLOUDFLARE_WORKER_URL=\"https://screentests.your-account.workers.dev\"\nexport CLOUDFLARE_TOKEN=\"<UPLOAD_TOKEN secret you set with wrangler>\"\n```\n\nOr pass `--worker-url` / `--token` to `screentest` directly.\n\n## CI\n\n```yaml\n- run: npx screentest serve # build image + start daemon\n- run: CI=1 npx vitest run --config vitest.screentest.config.ts\n```\n\nIn `CI=1` the globalSetup exits with vitest's code and never tries to\nopen the UI. Full recipe (GitHub Actions example, docker layer caching\nto skip the ~2 min cold-start build, downloading actuals for offline\nreview, pnpm/yarn variants) is in the [CI guide on\nGitHub](https://github.com/x-cevek/screentest/blob/main/docs/ci.md).\n\n## Input format reference\n\nIf you need to construct your own `doc.json` for the UI (instead of going\nthrough `vitest run` / `screentest review`), see\n[the format documentation in the source repo](https://github.com/x-cevek/screentest#input-format-docjson).\n\n## Security\n\n- The UI server listens only on `127.0.0.1`. Never on `0.0.0.0`.\n- `actual` files are served strictly from a whitelist computed from\n  `doc.json` at startup — no path traversal possible.\n","readmeFilename":"README.md"}