{"_id":"tuffgal","_rev":"50-620731ebd76e1008e75669bd50a63725","name":"tuffgal","dist-tags":{"alpha":"0.3.1-alpha.1","latest":"0.3.1-alpha.1"},"versions":{"0.1.0-alpha.0":{"name":"tuffgal","version":"0.1.0-alpha.0","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.0","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"bin/tuffgal.mjs"},"dist":{"shasum":"2735e4d10ce98e0fb43409d2844be14cadc6ea69","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.0.tgz","fileCount":42,"integrity":"sha512-3KRVUF8/gwkfVeUgNvzrb9mlQOp9z5mSQqWIas178jGckcOwIMpFkBZwhqFUtp5Kbmy+cBi5WlTMupx9xHFVow==","signatures":[{"sig":"MEYCIQDw2X1QZomPZsfhWzeqQwZP9O4vVNsSiJYnxh4zVeTyEwIhANhp/OGCnaoPlDi9RWHTmk4DpM4/MNr4nFWzb4e1aRN0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126270},"main":"./src/index.ts","type":"module","types":"./src/index.ts","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"d10510bad90f151390fba41f1ef13cac291e0f3a","scripts":{"lint":"eslint \"src/**/*.ts\" \"bin/**/*.mjs\" --max-warnings=0","test":"echo \"no tests yet\" && exit 0","build":"echo \"no build step until v0.1.0-alpha\" && exit 0","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck","install:browsers":"playwright install chromium"},"_npmUser":{"name":"nschneble","email":"nick.schneble@hey.com"},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.12.1","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.0_1780633627771_0.41411706073695465","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.1":{"name":"tuffgal","version":"0.1.0-alpha.1","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.1","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"3b04497400de71af889d740fb89b41c6498f3793","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.1.tgz","fileCount":143,"integrity":"sha512-vVnzkSJCwWx/0Q3mlvhQciyM7ohF7mdxYmcQkISAonAB/q/0zk1X4SbEQYTh8ui1ogxa9b1SYZ0h2VXXPn/Mcg==","signatures":[{"sig":"MEUCIDKWkZ9i1acojaTWVSgapMzM4SgbIKPXZaBLc4cxuwjNAiEA+82TdRSSd9zIFm71DgVY6F1/ikMxQhY9G/FZKLfXETE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251445},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"fc3a8b84cb731bdbddcbaccfd989d4d589ab1eca","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"echo \"no tests yet\" && exit 0","build":"rm -rf dist && tsc -p tsconfig.build.json","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"nschneble","email":"nick.schneble@hey.com"},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.12.1","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.1_1780634061146_0.4813323485340484","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.2":{"name":"tuffgal","version":"0.1.0-alpha.2","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.2","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"6720e5d40dbf4d29d5c7f7004cc10558b1471bc4","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.2.tgz","fileCount":145,"integrity":"sha512-6PxzDxxOl7CVu1w7AH+ZuZThwJy48pps9Ukal5Bri5xK/AugsxhtibFYG2ZNKmB7z1Ph1nxyRNwPlc957q4KIQ==","signatures":[{"sig":"MEYCIQDPsdQNiyIU/xbSaNWhthuLfWRtwVjMkzzYRWAiaeLdYAIhAI3WmCNbWtWX0xUfeEXj0QRWY4gfmbAGEDMPt1X9dIag","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":261706},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"425ff6de11477757ae9dcc6092b1d47684bb7139","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"echo \"no tests yet\" && exit 0","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.16.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.2_1780634521071_0.14488614117776866","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.3":{"name":"tuffgal","version":"0.1.0-alpha.3","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.3","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"6c2b989fa499819763da7c1b23132661ae1f75a8","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.3.tgz","fileCount":145,"integrity":"sha512-lEuZpT9WQmdA0OcSz+5+VucK9RxHytEm77incgtTsS3PzVgoL5yp2bVZ/Pg2q53kUvK/4+PRzXPnWVfujsD2Og==","signatures":[{"sig":"MEUCIQDTs6LzWuktH3ZYUTaXpRnhjY8LJ3esmOLSdcHc77q4AAIgBYgyz/dS5xGFBHAIYGQrlxy4nIe78TaIaX2UqWIp7nY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":261860},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e505bcc2541345cea7cf769452d4fc6d0817ffd5","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"echo \"no tests yet\" && exit 0","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.16.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.3_1780757538850_0.9131467446415904","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.4":{"name":"tuffgal","version":"0.1.0-alpha.4","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.4","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"c9ad70d44f80962981831e42f0f585f621899208","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.4.tgz","fileCount":150,"integrity":"sha512-z+QMxR/exjZXV46TsSf6ToZnCLqU09301uXqwc5VpdTBYwRoFNEaIqJLSt6LwvtiiPzOXLnZIVjV+DpS2JZ+mg==","signatures":[{"sig":"MEUCIQDUPNN0Q02vDICv2qahEiGs0QFDVCAGjrr6OiaD0SiWpwIgBXRfBR4D9MNDO/viSi0/f+E6jKp4yY6Pcdzq0oYxiME=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":268006},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a1ff71feadc7def6346a31a95249e1dda35e2e60","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"echo \"no tests yet\" && exit 0","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.16.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.4_1780803121391_0.0899565323677134","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.5":{"name":"tuffgal","version":"0.1.0-alpha.5","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.5","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"b05ffc9fec652655334853ee07e1c1a5a5a64a5b","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.5.tgz","fileCount":150,"integrity":"sha512-FA3hRFF2nfqvC75h9SGs9DsFc/zHJ0up9aLW/EdUVzlHqA5AhI55Gd98nUOr3l9N39g7ZXbFjr/vpkeiaZnsbw==","signatures":[{"sig":"MEUCIQCYK1LouV+ce2kZJ5EWckZDDLigb1niBSrJwfPLWkztcwIgVNVymJ/FC+YFG+Yw2BN1NPBjBLBT2bQm8xG94+MXdas=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269785},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"436452ff1bf2a0f20e91347af05aff482c154c11","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"echo \"no tests yet\" && exit 0","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.17.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.5_1781206648850_0.04491203916338993","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.6":{"name":"tuffgal","version":"0.1.0-alpha.6","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.6","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"a9093470ebcaf045f1c5e8ccdd089e526fd90b3e","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.6.tgz","fileCount":150,"integrity":"sha512-xVGJ6mTZFqOowFobQbegeauduPhIkoLd+zC/ve6nYMPlbOmhUs9rWlOKLyw2+InBseUX6dAUh7bxkYyysHRRXQ==","signatures":[{"sig":"MEUCIF2j8ZaBIav8IGH9qicYp3+1iFulDvcT7QOgatz0fw10AiEA83TjlW4GV6PrA6AABpCBVo+YVsAEHtBXhjjP9iN6ZAs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":285810},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ae53cafde07f283f0c3a96b79df203e6283d6094","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.17.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.6_1781233151827_0.9508849241010662","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.7":{"name":"tuffgal","version":"0.1.0-alpha.7","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.7","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"32740c4bc723483e59aff80d6d18f5a2efed2e8e","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.7.tgz","fileCount":154,"integrity":"sha512-vfotXliArizrhPWKpwixddANOiaNWCOXpvO3mem3Z6TsRH8aTWJXld7cm4X1DCVfttaALww7DLDQG/2Uv1x6hg==","signatures":[{"sig":"MEUCIFcDFICHFLzqm68li4rgx8NmmGc5oHl7Fa0eRVmU4ZTxAiEArwdAC+KTt8Yezog3HLDUsrHOwG1wcnYmlljkg9w9PCw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":305558},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1310fd06675d105b2b6acfc090257a9951cad7e9","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.17.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.22.3","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.7_1781984809112_0.5056078801461896","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.8":{"name":"tuffgal","version":"0.1.0-alpha.8","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.8","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"9f0407d29b2f9c524564bab701c0afc30452fef1","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.8.tgz","fileCount":154,"integrity":"sha512-ggBladXXLdy3Cj1EIqU8XGWH1Kzmd24SHT+SXqIc90efca9vZkvEdT9Z4h0nz8NoqwxJLqC9+RVQuQN+odXfIw==","signatures":[{"sig":"MEUCIHJHJcdpuNbNpcYvyRzhy8LLEryM1yR1gfPRXmxZVi9vAiEA4J8JGqVvoDrcH/MhFwK/mIN9GN8DqknBksaLpG+ipDc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":306959},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8f38839ab3ff9ec4ac19c9d8919b1996e40b2a08","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.17.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.22.3","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.8_1781987939194_0.80601127166675","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.9":{"name":"tuffgal","version":"0.1.0-alpha.9","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.9","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"16d6ae9233a7dd7630c9efd1d9e1d03688386f6c","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.9.tgz","fileCount":154,"integrity":"sha512-iuGFcaWQ3Vm+jOcD3jIxvzbtCdNqY/p/iInMTMnEBfYzqgqLL50/fOnf5S6urtnX6AEXNZtR7iGqPlsu25pIrA==","signatures":[{"sig":"MEUCIQDEuW63Hetnlu4r2Ab3Bgq1uacYksXVa/z46P/tRy13VAIgWkkiUMR3Dhy+mBHoqJv2FHuKI4PLaJjX4yAAFychZDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":344929},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"79e01d7ae97ebe85498addd90651953ffbb48a73","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.17.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.22.3","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.9_1782095684196_0.8507496102142726","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.10":{"name":"tuffgal","version":"0.1.0-alpha.10","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.10","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"9cb2ab58298d1c897a5b735b93976271536a9207","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.10.tgz","fileCount":154,"integrity":"sha512-i+zwCkgaMTFWnRY5vbkIdC1Pc6toesys/eOBYOp6WL1wE9Kf61q8BIh0kVj4MIsWEAHt4mR/lKw6yVinfBAVKQ==","signatures":[{"sig":"MEQCICehz8I8fjPcr/IkO7AgMlTQx3gN4V0nSS0xxZf3NwprAiAUzPm8RakcacdNhrAAy/oaMBsw31yAAURjoxoI4C3C2A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":348212},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e8f9e35f993acfc4d26f4f544378947c2891a834","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.17.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.22.3","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.10_1782102461309_0.08466766006514548","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.11":{"name":"tuffgal","version":"0.1.0-alpha.11","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.11","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"294799b0ac7f9c15bc615d6193842e52a6cbe15f","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.11.tgz","fileCount":158,"integrity":"sha512-QWPbeeboCKnCCIDW22IZQa/pxV4pGKXu5+xg1trESxD6fHzNyqkOcHkoXxh6rsXh8hveKisktdl7TSsH8QztiQ==","signatures":[{"sig":"MEQCIErQw9LaPnR9yVweeNYZZc2XoPhkzjvPmIGrnSs7fkndAiBW5LIXTLCmaQWJaI98H9kPp0BvIXc4xoC7Z2UQ9DAjiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":400807},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"6e655849988e2d66e4c8f17268c4eaa9b433cd87","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.17.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.11_1782526662045_0.5914881068255258","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.12":{"name":"tuffgal","version":"0.1.0-alpha.12","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.12","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"66bb674f6c05f4d21df7d813774f16deae142e37","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.12.tgz","fileCount":158,"integrity":"sha512-RVhK3Uh/eBHX69km+fHL746pmv5VYSN1Hjl7VnQU+hQ9jLN/050oc2HwvvXpcSXQua8410uSKnxtwyw5b8yCpw==","signatures":[{"sig":"MEQCIFFGNZOMXjxUm6WO/JK3QJUENYu6/2BP2093zudIqbDbAiA1DnSNtW0X9+hhBCo0lN1GBbf0de6LsEY+d9634fuacQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":402524},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"91b333a47ea5ad567864940f51d8073209eacdd4","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.17.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.12_1782569732748_0.7300612515745153","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.13":{"name":"tuffgal","version":"0.1.0-alpha.13","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.13","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"80d51a9bc8f6c38e50694f4c4802a4c8f06a4b25","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.13.tgz","fileCount":158,"integrity":"sha512-aaTjX9mafbSKwIp9ielAFFCpq5FME0aQ/vIIcckeUnmAUK+oKgCYWM/4wQXe3CO4B5I6UMDy4rfcTiTGuBTwbA==","signatures":[{"sig":"MEUCIH2+TyDjSXtrEXACkpFF2tAuVVN6CHG8LovYAzK3kVvWAiEAvKT25E2HVhiTEqOhL/nqQ26VhutDT93TwXm/u/chumg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":415837},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"6f3213661944226237c875a88b546796828733f6","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.18.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.13_1782874148865_0.8496995171598916","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.14":{"name":"tuffgal","version":"0.1.0-alpha.14","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.1.0-alpha.14","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"e6f305c34d1bb505a1826bd2d2163879089813f2","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.1.0-alpha.14.tgz","fileCount":158,"integrity":"sha512-aGSrosHTRNwtC6vMHg2VqRPX4XzHV3ZtlWxld27p2VZYKdEqGrMAN6QWf72YcFosME4G/hKDJQQUlMdB/LbZrg==","signatures":[{"sig":"MEUCIQDxZ/d2Scfpvv/f7nXHIOLHx6GYwqmEDfGGeO4ZAsxbgAIga5SBElJMkPxXA1V3qjX5UcSkTNZxGlrF8rGKafpLW0s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.1.0-alpha.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":416543},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"65606f36a7fba43c397a616c04b06c4542ef1285","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"11.18.0","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.1.0-alpha.14_1783221794215_0.10943049271419492","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-alpha.1":{"name":"tuffgal","version":"0.2.0-alpha.1","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.2.0-alpha.1","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"8b692e1fa88096a1b3b6f83d040624e0921ab0a4","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.2.0-alpha.1.tgz","fileCount":178,"integrity":"sha512-cqMR2EqzV09cFQdG0+I+KyZCETHGAE3b8gMS3nXmFxs9T938v/Ws03u0ktamnIQkP2zpYKNwKxWsQ7b/Bu5+zw==","signatures":[{"sig":"MEUCIQDoBd+lVdMvCPUq+g6Yw8uYxYlnPx7ZBhLWL6pChz/Y2AIgHiH7YhEZxUcEINkTaezP06Nn9S0d6Q716rDlXtN+l8Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.2.0-alpha.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":567369},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e29a0c0488f304a3a6c545af013054ed09dc1dc2","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.1","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.2.0-alpha.1_1783734472484_0.38604524619070957","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-alpha.2":{"name":"tuffgal","version":"0.2.0-alpha.2","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.2.0-alpha.2","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"c9ce9ea55d03904c3028413b9290ea5ea9258787","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.2.0-alpha.2.tgz","fileCount":178,"integrity":"sha512-C6nOJG6LyIYjqGcmFpjIaqjdTFF7l6PJ1qDaVvd2pU4ci3J8LWbf4ixCsIE0fABMjJYg3j1uJJ8gFA7rNzkixA==","signatures":[{"sig":"MEUCIQCu9j+jzNWxyQE43478B0TiZCl8QY1bY7AeoQKK9pinTAIgEp9G7TzA1NYSizy601XszeYoKQocQJdi+ewShNe3Fos=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.2.0-alpha.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":591672},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"79a6aad09bcc183571a0d75b50a15e85c5137248","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.1","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.2.0-alpha.2_1783904969247_0.6746691341039586","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-alpha.3":{"name":"tuffgal","version":"0.2.0-alpha.3","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.2.0-alpha.3","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"a4ae2b8eee24e14fcced00ff4d773ec919f2c6e8","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.2.0-alpha.3.tgz","fileCount":178,"integrity":"sha512-XDL9BeePYK8tt/WZx95Pyzlb6EeBq6GX67yvWOddWth8hQUl/0gUgOKGdw+RZDda23RjNAZRuD5W88H+m7R5gg==","signatures":[{"sig":"MEQCIEQwZHqq9z9OZGVWD4YVkZWYtOOu1N6HqiWLNpvmf5OvAiB7TIGwLyTaLUxKS8kCewe2vYJ8IENRnHI9u4O/3fChPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.2.0-alpha.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":595194},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"53cfa6d7300e2c37e2f9352ad2a923a46aadda0f","scripts":{"lint":"eslint \"src/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.1","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.2.0-alpha.3_1784213054346_0.3876247856040014","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-alpha.4":{"name":"tuffgal","version":"0.2.0-alpha.4","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.2.0-alpha.4","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"11064737613f6a884636f7536faa6adc29369a44","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.2.0-alpha.4.tgz","fileCount":178,"integrity":"sha512-AGm7lOHNZvBXreLMhAoZBjO59lD7wJjTa7xmeWeN+Q843n7McaANa0J/Dgkt8AlbJK3rXMuVx3KoFHaY0ef2pw==","signatures":[{"sig":"MEQCIHwIhtIhinrigFDLw4LidlblL5RPXi3xsFaFeLVKaflXAiA0fKon2nSVWIGKV5lBl8qd8vM/+P578zxeowGBoGGqtQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.2.0-alpha.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":635674},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"6ce8e73642c047d22f1ddf55b18bf8cffdbd4814","scripts":{"lint":"eslint \"src/**/*.ts\" \"test/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","test:dom":"node --import tsx --test \"test/dom/**/*.test.ts\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.1","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.0.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^9.39.1","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.2.0-alpha.4_1784398362081_0.5259937356995483","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-alpha.5":{"name":"tuffgal","version":"0.2.0-alpha.5","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.2.0-alpha.5","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"69303f66a18412171accd8bd770d2b3593c6453f","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.2.0-alpha.5.tgz","fileCount":178,"integrity":"sha512-rRXzXlZggeRDgzXSw/6iBjGkhwLoEWArx8vqbJXchjsCd2FiX/qYsfACoinkzjZOTSth1FyVzZsXGG5mZl3Acw==","signatures":[{"sig":"MEUCIAhmk/URQAjV4DasPG9D/9Wbs1QFYvZDzuSnWW/hOTxrAiEAwbXCX/R65SEfL9hTH8gcao+UM+Mw+ERQ4MGTtZdTha0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.2.0-alpha.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":637819},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b9d873762511cb9eb39b184926d654b43767f6cf","scripts":{"lint":"eslint \"src/**/*.ts\" \"test/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","test:dom":"node --import tsx --test \"test/dom/**/*.test.ts\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.1","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","yaml":"^2.9.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^10.8.0","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^26.1.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.2.0-alpha.5_1785294665635_0.8354788286055339","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-alpha.6":{"name":"tuffgal","version":"0.2.0-alpha.6","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.2.0-alpha.6","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"8c86633d6f1e9d64b218facfe0bc558a7830f41f","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.2.0-alpha.6.tgz","fileCount":182,"integrity":"sha512-DxWITHJhn+zObwM0nS7P/cifimnO+i5jR9PxdVD/T4KsC9rhLRF2PDbzP0Zqr1m6RKLxK+mwoLepa67+G2GD3Q==","signatures":[{"sig":"MEQCIEbR1L9c493o4VlAFvvMDkP6BJfqMjAvc2cv3rGaChNAAiAOgGSc3LAnzrbxz+We/oI+QuYVqZB8bMZw8UCKAqlBBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.2.0-alpha.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":648150},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"616850c372cb455241ebb50c8fc358c2620e9669","scripts":{"lint":"eslint \"src/**/*.ts\" \"test/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","test:dom":"node --import tsx --test \"test/dom/**/*.test.ts\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.2","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","yaml":"^2.9.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^10.8.0","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^26.1.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.2.0-alpha.6_1786283772426_0.6822491831939552","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-alpha.7":{"name":"tuffgal","version":"0.2.0-alpha.7","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.2.0-alpha.7","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"cd32f57c26d9c8ca72ed37c0ceaea2780500d8d3","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.2.0-alpha.7.tgz","fileCount":186,"integrity":"sha512-162l25OjE02RZgKl2kwreIpZr+a3WblAKu5HCH/G84n12fMdtvyI7Byls/ND/QV83TDC0gEkXHODgHIXPQzw5g==","signatures":[{"sig":"MEQCICEAJuF+V9DS+ZdfCj3P1XZNKEkkCLQo/weu5eonjkjIAiBeLvGTMDpkzdn0bMaqXy5cQOZG7SIfIIgNpVV/cAC/oQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.2.0-alpha.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":671392},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c3da576baf3227d43f5dc6845eaee85ec6a1bd66","scripts":{"lint":"eslint \"src/**/*.ts\" \"test/**/*.ts\" \"scripts/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","test:dom":"node --import tsx --test \"test/dom/**/*.test.ts\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.2","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","yaml":"^2.9.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","eslint":"^10.8.0","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^26.1.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.2.0-alpha.7_1787063429998_0.5517823502746304","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-alpha.8":{"name":"tuffgal","version":"0.2.0-alpha.8","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.2.0-alpha.8","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"e084f5075965ac0f3650b36f5381b6649b588a98","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.2.0-alpha.8.tgz","fileCount":186,"integrity":"sha512-KFgFWQ7KLVJm0TYtBO3u7zGSCJQfvtgnjN1qmrEEoHlinZa3oidDrOWGLltompZiPqacDTSdlbVuGOWoY10/SA==","signatures":[{"sig":"MEUCIQCRFZJckNm4gNhagniRU8eWSs25Eh6xavN8ahWnQzO2FQIgWQ+skD8kNl2wOTQukoA5awYXcAifn6WfEbO8voFOEb4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBWS308UQhqBCSn68vH4JlG3Nkjy3RYg1QE93pqRag/3AiEAupVHEfaSuDOk+p4fC7OhvNoCCeCRQ6QzHnqD1kEC/V8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.2.0-alpha.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":677559},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c5d52f62c796750c76a14423a4f647e5c21a8e5a","scripts":{"lint":"eslint \"src/**/*.ts\" \"test/**/*.ts\" \"scripts/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","test:dom":"node --import tsx --test \"test/dom/**/*.test.ts\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.2","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","yaml":"^2.9.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","eslint":"^10.8.0","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^26.1.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.2.0-alpha.8_1787279916487_0.373713882032346","host":"s3://npm-registry-packages-npm-production"}},"0.2.1-alpha.1":{"name":"tuffgal","version":"0.2.1-alpha.1","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.2.1-alpha.1","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"9420248408eae3f28d3a0869adec397dba4db546","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.2.1-alpha.1.tgz","fileCount":186,"integrity":"sha512-ikj5zYTZ0DwJYtFmdnCGhKV1MLObwwnjbLsH1uZy3bRLJBculnvRgkRAH9292NqIrnl3vN9wpokfUoSR1KzWIg==","signatures":[{"sig":"MEUCIAZI9F1Y93Gh0XvG5nS1tU8QZ3kGhuKtvT0kb2cBuKrqAiEApcqHdM6UiPACLtVy+q/iFMf8DBazpvZFiA41V7XHupE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICOqF3yOysLHKYCib8QIDUngkBlIJczDbixv+NfgryTfAiBzXMnwW225yXfnX/V2ooh4315rRQ+t6ZO48syvelL2Cg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.2.1-alpha.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":682485},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"403c26b2440d8d120798a64ff3d2354ff3ca5b67","scripts":{"lint":"eslint \"src/**/*.ts\" \"test/**/*.ts\" \"scripts/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","test:dom":"node --import tsx --test \"test/dom/**/*.test.ts\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.2","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","yaml":"^2.9.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","eslint":"^10.8.0","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^26.1.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.2.1-alpha.1_1787884410866_0.11218099444751473","host":"s3://npm-registry-packages-npm-production"}},"0.2.2-alpha.1":{"name":"tuffgal","version":"0.2.2-alpha.1","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.2.2-alpha.1","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"65bc370a4250b3c6bdcbc358b31433c1ee12592f","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.2.2-alpha.1.tgz","fileCount":190,"integrity":"sha512-Xyh8ggeQVKz6U8TIlzLht366Ps9vsDiWx22H10tiNmZlUJb4O6oTFWVjHDgHWmYoGZZ8lrng8afikw6LE6xLag==","signatures":[{"sig":"MEQCIAdC57jCJ/3tp8T7BP6UcDCGsSk3CpEgLqnBNoBf4fz8AiBGweeRR0XPKWHPR7v/qdkVzZBvD/CBsYsOcxyljH3waQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH5tRyjR1R5EQgpumVvL0BCw41/4sqiDWltZpzX3S3mpAiBNbrO90IvD3OKMYDVpItIx43OB7wocAKv5Gy8jcN1Xgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.2.2-alpha.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":686170},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d4e1cbeae1af6a833223163f387518c855b5bbd8","scripts":{"lint":"eslint \"src/**/*.ts\" \"test/**/*.ts\" \"scripts/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","test:dom":"node --import tsx --test \"test/dom/**/*.test.ts\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.2","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","yaml":"^2.9.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","eslint":"^10.8.0","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^26.1.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.2.2-alpha.1_1788298243661_0.5970907708089572","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-alpha.1":{"name":"tuffgal","version":"0.3.0-alpha.1","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"author":{"name":"Nick Schneble"},"license":"MIT","_id":"tuffgal@0.3.0-alpha.1","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"homepage":"https://github.com/nschneble/tuffgal","bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"bin":{"tuffgal":"dist/cli.js"},"dist":{"shasum":"c0df165f64521d9e1a5fb73e23e588c3e7a2aaca","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.3.0-alpha.1.tgz","fileCount":190,"integrity":"sha512-VvdAloqkXkwT8HGtgs3c6zaGZ5UUvn3oh5IhgHDNYpZK933/OXZJDRF2yAkps8SNz4aYdRxw3DDZL4uPfcwpew==","signatures":[{"sig":"MEUCIQCwTULX9tnXZCrQpoFx7tpxFJGnVYbquoMoa5tv8rttjAIgPCFl5PBsNdzQN57wbXhtRLGhyORRK5UdhpfEW6RIrPM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQComanQX3levHpaT5/9cHSSYL/tLW7ONhG67wZL90BgJQIgHSa9iNCMgb8wqMr7WwTEooXL8F7RPr+nt8O0sA+LVps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.3.0-alpha.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":687973},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1fec44c48002ad31d9ae0fc3ff89a602e10504f3","scripts":{"lint":"eslint \"src/**/*.ts\" \"test/**/*.ts\" \"scripts/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","test:dom":"node --import tsx --test \"test/dom/**/*.test.ts\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","install:browsers":"playwright install chromium"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.2","description":"JSON-driven visual regression for web apps.","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","yaml":"^2.9.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.22.4","eslint":"^10.8.0","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^26.1.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/tuffgal_0.3.0-alpha.1_1788444244399_0.20277370776234838","host":"s3://npm-registry-packages-npm-production"}},"0.3.1-alpha.1":{"_id":"tuffgal@0.3.1-alpha.1","bin":{"tuffgal":"dist/cli.js"},"bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"dist":{"shasum":"6143d1f59b7358c7a21bf99360f4c56e59d2b3e2","tarball":"https://registry.npmjs.org/tuffgal/-/tuffgal-0.3.1-alpha.1.tgz","fileCount":194,"integrity":"sha512-1JYvwzUVNf2laSKn4vzkeCwkYksYpFpNZvia7q5InaM87GXSEoH6oY19cikg4d7QOjnUVSFwCMUiqJjLrZKTng==","signatures":[{"sig":"MEYCIQDqjQwkEveoNAaeiZ65Fbjz0gl7EE+N4XmUKUiF0IXNzwIhALRz4ebF9f3HXn8Ps1+PSWBfrdqGvS+lR+vbmnqmO9YV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCyYDPCK+0VVVrBTiDlI+8nI/YMbAdwJPQF1rT/dkGBSgIgDHwxJS6G+EbyzpzKf7dQIsV5gECwdAO7EOSFwfAh7Wc="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tuffgal@0.3.1-alpha.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":707814},"main":"./dist/index.js","name":"tuffgal","type":"module","types":"./dist/index.d.ts","author":{"name":"Nick Schneble"},"engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b0166778e3ec84dbdfb6b516757b6b64696f80be","license":"MIT","scripts":{"lint":"eslint \"src/**/*.ts\" \"test/**/*.ts\" \"scripts/**/*.ts\" --max-warnings=0","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/reporter/assets && cp src/reporter/assets/report.css src/reporter/assets/report.js dist/reporter/assets/","format":"prettier --write \"**/*.{ts,tsx,json,md}\"","preview":"node --import tsx scripts/preview.ts","test:dom":"node --import tsx --test \"test/dom/**/*.test.ts\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","install:browsers":"playwright install chromium"},"version":"0.3.1-alpha.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd8c348d-1331-4975-b084-d209c3e67540"}},"homepage":"https://github.com/nschneble/tuffgal","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"_npmVersion":"12.0.2","description":"JSON-driven visual regression for web apps.","directories":{},"maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.2":true,"fsevents@2.3.3":true},"dependencies":{"zod":"^4.0.0","yaml":"^2.9.0","pngjs":"^7.0.0","ssim.js":"^3.5.0","pixelmatch":"^7.1.0","playwright":"^1.49.0","monocart-coverage-reports":"^2.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","eslint":"^10.8.0","prettier":"^3.7.4","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^26.1.1","@types/pngjs":"^6.0.5","@types/pixelmatch":"^5.2.6","typescript-eslint":"^8.49.0","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tuffgal_0.3.1-alpha.1_1788467514272_0.16674820925218947"}}},"time":{"created":"2026-06-05T04:27:07.627Z","modified":"2026-09-03T20:31:54.782Z","0.1.0-alpha.0":"2026-06-05T04:27:07.909Z","0.1.0-alpha.1":"2026-06-05T04:34:21.295Z","0.1.0-alpha.2":"2026-06-05T04:42:01.229Z","0.1.0-alpha.3":"2026-06-06T14:52:19.044Z","0.1.0-alpha.4":"2026-06-07T03:32:01.525Z","0.1.0-alpha.5":"2026-06-11T19:37:29.008Z","0.1.0-alpha.6":"2026-06-12T02:59:11.962Z","0.1.0-alpha.7":"2026-06-20T19:46:49.274Z","0.1.0-alpha.8":"2026-06-20T20:38:59.327Z","0.1.0-alpha.9":"2026-06-22T02:34:44.319Z","0.1.0-alpha.10":"2026-06-22T04:27:41.438Z","0.1.0-alpha.11":"2026-06-27T02:17:42.188Z","0.1.0-alpha.12":"2026-06-27T14:15:32.915Z","0.1.0-alpha.13":"2026-07-01T02:49:09.032Z","0.1.0-alpha.14":"2026-07-05T03:23:14.360Z","0.2.0-alpha.1":"2026-07-11T01:47:52.630Z","0.2.0-alpha.2":"2026-07-13T01:09:29.391Z","0.2.0-alpha.3":"2026-07-16T14:44:14.503Z","0.2.0-alpha.4":"2026-07-18T18:12:42.265Z","0.2.0-alpha.5":"2026-07-29T03:11:05.793Z","0.2.0-alpha.6":"2026-08-09T13:56:12.602Z","0.2.0-alpha.7":"2026-08-18T14:30:30.144Z","0.2.0-alpha.8":"2026-08-21T02:38:36.572Z","0.2.1-alpha.1":"2026-08-28T02:33:30.956Z","0.2.2-alpha.1":"2026-09-01T21:30:43.771Z","0.3.0-alpha.1":"2026-09-03T14:04:04.511Z","0.3.1-alpha.1":"2026-09-03T20:31:54.394Z"},"bugs":{"url":"https://github.com/nschneble/tuffgal/issues"},"author":{"name":"Nick Schneble"},"license":"MIT","homepage":"https://github.com/nschneble/tuffgal","keywords":["playwright","screenshots","snapshot-testing","ssim","testing","ui-testing","visual-regression"],"repository":{"url":"git+https://github.com/nschneble/tuffgal.git","type":"git"},"description":"JSON-driven visual regression for web apps.","maintainers":[{"name":"nschneble","email":"nick.schneble@hey.com"}],"readme":"# Tuffgal\n\n[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n\nJSON-driven visual regression testing for web apps.\n\n<img src=\"tuffgal.png\" alt=\"Tuffgal\" />\n\n**Status:** Pre-1.0. Published on npm as `tuffgal@0.2.0-alpha.{n}` with\nprovenance. [Linklater](https://github.com/nschneble/linklater) is the\npilot consumer.\n\nPublic API is unstable until `v1.0.0`.\n\n## The idea\n\nTuffgal sits between component tests (which are fast but mocked) and\nend-to-end tests (which are real but verbose). You write **actions**\n(atomic user steps) and **stories** (chains of actions) as pure JSON. The\nharness runs them in a real browser, captures a screenshot after each\naction, and pixel-diffs against a committed baseline.\n\nWhen a screenshot changes, a human reviews the diff and decides what to do.\n\n## CI owns the baselines\n\nCommitted baselines are the source of truth for what your UI is supposed to look\nlike, and **CI is their only writer**. That makes a visual change a pull-request\nreview gate, exactly like a code change: CI renders the current UI, diffs it\nagainst the committed baselines, and if anything drifted it fails the check and\npublishes the new screenshots as an artifact. A human looks at the diff and,\nif the change is intended, promotes those screenshots into the committed set. No\nlocal run can overwrite the baselines your reviewers rely on.\n\nA `tuffgal run` executes under one of two modes:\n\n- **CI mode** compares against the committed baselines (`paths.baselines`) and\n  never writes them. A missing baseline is `new`, an orphaned one is `deleted`,\n  and drift is `changed`, all of which are written into a self-contained\n  **candidate tree** under `<report>/candidates/` for approval, not committed in\n  place. CI mode gates: pending changes exit `2`.\n- **Local mode** is advisory. It compares against a gitignored, per-machine\n  cache (`paths.localCache`) so you can self-diff while you iterate, seeding a\n  missing entry on first sight. A local run **never reads or writes the\n  committed baselines**, and never fails your build on visual drift. It surfaces\n  the signal in the report and on stdout and **exits `0`**. Only a failed story\n  (a step that threw) exits `1`; the CI-gating codes `2` and `3` never fire\n  locally.\n\nMode resolves from `--ci` / `--local` (an explicit flag always wins). With\nneither, Tuffgal picks CI when `$CI` is truthy and local otherwise, so the same\n`tuffgal run` does the right thing on a laptop and in a workflow.\n\n### Approving a visual change\n\nTwo ways to accept a `changed`/`new` candidate into the committed baselines,\nboth writing through the single `approve --from` promotion path:\n\n- **Download and commit.** Grab the `candidates` artifact CI uploaded, run\n  `tuffgal approve --from <dir>` against it, and commit the resulting baselines.\n  `--from` refuses any candidate that is not a clean CI run (`mode !== 'ci'` or a\n  failed story), so a local or broken run can never be promoted. Add `--prune`\n  to also retire baselines the run flagged as `deleted`.\n- **Comment on the PR.** The intended flow is a `@tuffgal approve` PR comment\n  that runs the same promotion on the CI side. The Action that handles this is a\n  downstream, not-yet-shipped repo, so treat this as the direction of travel\n  rather than a shipped button today.\n\nPlain `tuffgal approve` (no `--from`) targets your **local cache** only. It\naccepts your own self-diff so your next local run is clean. It does not touch the\ncommitted set.\n\n### The environment manifest\n\n`approve --from` also writes `baselines/manifest.json` recording the environment\nthe promoted baselines were captured under. The keys compared for drift are\ncapture schema, browser version, platform, capture mode, color scheme,\nbreakpoints, device scale factor, and frozen time. On the next `run --ci`\nTuffgal checks the live capture environment against it. A pixel-affecting\nmismatch still runs the comparison, but banners the report and exits `3`: the\nsignal is \"expect a full re-approve\", distinct from ordinary pending changes.\n\n### Exit codes\n\n| Code | Mode | Meaning                                                                   |\n| ---- | ---- | ------------------------------------------------------------------------- |\n| `0`  | both | Clean: no failures; in CI, no pending changes and the environment matched |\n| `1`  | both | One or more stories failed (a step threw). Highest precedence             |\n| `3`  | CI   | Committed environment manifest diverged from this run's environment       |\n| `2`  | CI   | Pending baseline changes to approve (`new`, `changed`, or `deleted`)      |\n\nPrecedence is `1` > `3` > `2` > `0`. Local mode only ever exits `1` or `0`.\n\n## What ships in v1\n\n- 9 step primitives composed into actions: `click`, `input`, `intercept`,\n  `navigate`, `read`, `scroll`, `type`, `wait`, `waitFor`\n- An implicit screenshot at the end of every action\n- Named breakpoint modes (`mobile`, `tablet`, `laptop`, `desktop`) keyed to\n  Tailwind widths. Pick which to run per project or per story. Each mode\n  gets its own baseline and a per-mode group in the HTML report\n- DAG scheduler with `needs`/`produces` labels and parallel workers\n- CI-owned baselines: CI is the sole writer, local runs are advisory self-diff,\n  approval flows through a CI candidate tree + environment manifest\n- Visual diff gated on SSIM **and** a differing-pixel budget, plus a pixelmatch\n  overlay and a11y-tree snapshots (in CI an a11y-tree drift also flips a\n  pixel-passing action to `changed`)\n- Trace zip on failure (Playwright trace viewer)\n- Clock freeze (`page.clock.install`)\n- Storage-state persistence across stories\n- Static HTML reporter\n- V8 coverage (optional via `monocart-coverage-reports`)\n- Per-breakpoint-pass DB reset + per-story fixture hooks (consumer-supplied via config),\n  plus a `${breakpoint}` interpolation token for per-mode test data\n- Process supervisor for dev-server hot-reload rot (it happens)\n\n## What's explicitly out of scope (v1)\n\n- AI fuzzy locator matching\n- Hosted SaaS / cloud runs\n- Native mobile (Playwright cannot drive it)\n- WebDriver / Puppeteer substrate\n- Supporting browsers other than Chromium\n\n## Quick start\n\n```bash\nnpm install -D tuffgal@alpha\nnpx tuffgal init  # scaffolds tuffgal.config.ts\nnpx tuffgal run   # runs all stories\n```\n\nFor CI on GitHub Actions, use the companion\n[`nschneble/tuffgal-action`](https://github.com/nschneble/tuffgal-action)\ncomposite action.\n\n## Documentation\n\n- [App contract](docs/app-contract.md)\n- [Authoring guide](docs/authoring.md)\n- [Changelog](CHANGELOG.md)\n- [CI integration](docs/ci.md)\n- [CLI reference](docs/cli.md)\n- [Config reference](docs/config.md)\n- [Migrating from Cypress](docs/migration-cypress.md)\n- [Migrating from Playwright](docs/migration-playwright.md)\n- [Product requirements](docs/prd-v1.md)\n- [Reporting data (results.json)](docs/reporting.md)\n- [Supervisor](docs/supervisor.md)\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n\n## Roadmap\n\n| Milestone                  | Status |\n| -------------------------- | ------ |\n| Repo bootstrap             | ✅     |\n| Core extraction            | ✅     |\n| Bridges                    | ✅     |\n| Linklater migration        | ✅     |\n| GitHub Action              | ✅     |\n| `v0.1.0-alpha` npm publish | ✅     |\n| `v1.0.0` public launch     | ⏳     |\n\n## Acknowledgements\n\nThe Tuffgal logo is an illustration by [Art Attack](https://unsplash.com/@artattackzone) on [Unsplash](https://unsplash.com/illustrations/a-woman-with-two-dumbs-in-her-hands-0GxJHpQzVvs).\n","readmeFilename":"README.md"}