{"_id":"@firsttx/prepaint","_rev":"31-a21b73dc4dcf880af6ca3a5b20e9c849","name":"@firsttx/prepaint","dist-tags":{"latest":"0.13.1"},"versions":{"0.0.0":{"name":"@firsttx/prepaint","version":"0.0.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.0.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"a7d2cabdf4163ffe678110a8fdc639be07d00f4c","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.0.0.tgz","fileCount":2,"integrity":"sha512-5IvG6YdMW6IcLUQon8KbkyAGYaqARHN+N5DqDY3W9KGNTUo366WH3I4C/uibI61kFTCc5GhykzS5zLX0Yyh+Zg==","signatures":[{"sig":"MEUCIQDbyXYfBTmpXlRpu5LdPlVP493HbTMyRYuLL7siJ2kPVAIgD5lJ0X/ty6RZ67S/Gvum20NO+kdX6U2jG2CUHjKO/oQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2929},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"echo \"(no tests yet)\" && exit 0","build":"tsup src/index.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/private/var/folders/11/31xd6czx4s7c8gjpjrxr477r0000gn/T/d7af5006224a2158c92ff0a8f7bcbc2d/firsttx-prepaint-0.0.0.tgz","_integrity":"sha512-5IvG6YdMW6IcLUQon8KbkyAGYaqARHN+N5DqDY3W9KGNTUo366WH3I4C/uibI61kFTCc5GhykzS5zLX0Yyh+Zg==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.3","description":"Prepaint CSR runtime and build plugins for FirstTx. Renders snapshot-based HTML before the main bundle, then hands off via hydrate-match or view transitions.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.0.0_1759663545291_0.662753635174137","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@firsttx/prepaint","version":"0.1.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.1.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"b1c67bb1a4e92422ccd74b2f776f114ef2555664","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.1.0.tgz","fileCount":9,"integrity":"sha512-GtmDuGCqzAnG9P8lpH+1e3ogRyVZd5ijcTsMTzIS2EO6JSY9xgZA+Zlu1ApQD6kyb94XZjyEAoOYgtXu3tPE8g==","signatures":[{"sig":"MEUCIFnIMsLLFXcbT9jGrgupK8/zlUVSMgwaKBxLaIdd+Rs1AiEA3q9MK8Hg1eBqPGRycGeoaN8EOxbQQ8Z21lGlqvbYQ6o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47122},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/76b2b2a87e75be82e22289391b09eb67/firsttx-prepaint-0.1.0.tgz","_integrity":"sha512-GtmDuGCqzAnG9P8lpH+1e3ogRyVZd5ijcTsMTzIS2EO6JSY9xgZA+Zlu1ApQD6kyb94XZjyEAoOYgtXu3tPE8g==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.3","description":"Prepaint’s tiny boot script (<2KB gzip target) replays the last snapshot before the main bundle arrives, yielding a 0ms blank screen on return visits. It attempts hydration to reuse the DOM or cleanly replaces it, and shows a clear stale→fresh handoff onc","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.1.0_1759996150552_0.48750860602481105","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@firsttx/prepaint","version":"0.1.1","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.1.1","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"7e9e0d55d7f918268333e5b14110ffa8abe68c65","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.1.1.tgz","fileCount":9,"integrity":"sha512-94ETAXRqxq/CJPibu8WMseKKaL782c/mktgLpDR9xjue6mRKfr/5v9ol0whY4rYGQM56n04uTr3iqioksoq/qw==","signatures":[{"sig":"MEUCIGdgyfhJBC2aCHTOg+zoM36ZXgSOjoUh94CFKrAgIa38AiEApkgJp81S3PXTdfS1EGXUEpn73cDWazMZvjEL29w/SsQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47131},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/8abbc5fd81b81aa524a8c3e4625d3e72/firsttx-prepaint-0.1.1.tgz","_integrity":"sha512-94ETAXRqxq/CJPibu8WMseKKaL782c/mktgLpDR9xjue6mRKfr/5v9ol0whY4rYGQM56n04uTr3iqioksoq/qw==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.3","description":"Prepaint’s tiny boot script (<2KB gzip target) replays the last snapshot before the main bundle arrives, yielding a 0ms blank screen on return visits. It attempts hydration to reuse the DOM or cleanly replaces it, and shows a clear stale→fresh handoff onc","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.1.1_1759996662228_0.6214688542133069","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@firsttx/prepaint","version":"0.1.2","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.1.2","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"bcac2ab7f1948456d2a0ca5cc1526f8b8ad6bfcd","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.1.2.tgz","fileCount":12,"integrity":"sha512-5sMH34zuPQ1C4z1cit2gjthdcgJXjHgFoRLEI93dVXRzOFf6X9WUG5PE8KzW5NZUUpj2RZfSvDvd9yx13juFdw==","signatures":[{"sig":"MEYCIQCLCxBuPCSCHN3h0cfCjrxfk+9tinYjvP2/QCTNpzMJFgIhANivmpIbVEi43GiV9hboalZKPar0mFV9lzYXmFjUIuST","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55488},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.1.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/a82265d2b80daf496ec29f3b17510bcd/firsttx-prepaint-0.1.2.tgz","_integrity":"sha512-5sMH34zuPQ1C4z1cit2gjthdcgJXjHgFoRLEI93dVXRzOFf6X9WUG5PE8KzW5NZUUpj2RZfSvDvd9yx13juFdw==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.3","description":"Prepaint’s tiny boot script (<2KB gzip target) replays the last snapshot before the main bundle arrives, yielding a 0ms blank screen on return visits. It attempts hydration to reuse the DOM or cleanly replaces it, and shows a clear stale→fresh handoff onc","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.1.2_1760049089657_0.39451057556335756","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@firsttx/prepaint","version":"0.1.3","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.1.3","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"dcca38f1c396204e7b572f1d86ddaa60098a112e","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.1.3.tgz","fileCount":12,"integrity":"sha512-O6piq8CQ7eo2ddnMz3knmoTf6/gf42e/4ZMzmakNqtUavT5u3KDGnDXKmlr2reuDTit9D0WgNy7zMMYv4exmHw==","signatures":[{"sig":"MEQCIHgIb99aBQQIaoGVhWX9iEtXN/C0No8IOyfBcaIgPErfAiAw5fKUGq6/mporXpyR1OVuwo8NcoGqy/uAGlZ2jhS0Ug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55538},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.1.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/4809cd58742c0d84b05f3ad6d724881a/firsttx-prepaint-0.1.3.tgz","_integrity":"sha512-O6piq8CQ7eo2ddnMz3knmoTf6/gf42e/4ZMzmakNqtUavT5u3KDGnDXKmlr2reuDTit9D0WgNy7zMMYv4exmHw==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.3","description":"Prepaint’s tiny boot script (<2KB gzip target) replays the last snapshot before the main bundle arrives, yielding a 0ms blank screen on return visits. It attempts hydration to reuse the DOM or cleanly replaces it, and shows a clear stale→fresh handoff onc","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.1.3_1760061441407_0.2949999923221578","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@firsttx/prepaint","version":"0.2.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.2.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"5d2c38a309dab4c98f947d697dec8dd69495e8ec","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.2.0.tgz","fileCount":12,"integrity":"sha512-0RZCy6J3oYoBg9o7hINfy4xjbPWuGo6a4fEJAsAL1pnrbY8lcnFxi1HO073CZ7P1GzWoUI7tSe0Koy0M4iBB4A==","signatures":[{"sig":"MEYCIQD5gglTGP/N5NC8J8tuYT1SMwKRrfnAYN2r0NcSVkNoQQIhAKNvGGCR+g33UR+Zk5LjnwZ5fpZ4H8nV6kJyLVMCCCRz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52411},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/9f82df16eb949dcc427f2387ac993181/firsttx-prepaint-0.2.0.tgz","_integrity":"sha512-0RZCy6J3oYoBg9o7hINfy4xjbPWuGo6a4fEJAsAL1pnrbY8lcnFxi1HO073CZ7P1GzWoUI7tSe0Koy0M4iBB4A==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.3","description":"Prepaint’s tiny boot script (<2KB gzip target) replays the last snapshot before the main bundle arrives, yielding a 0ms blank screen on return visits. It attempts hydration to reuse the DOM or cleanly replaces it, and shows a clear stale→fresh handoff onc","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.2.0_1760137814973_0.44260418145378155","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@firsttx/prepaint","version":"0.3.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.3.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"3a83242a0fdea093db03dec374bd332c458c3c76","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.3.0.tgz","fileCount":12,"integrity":"sha512-3CFl2cUxwQvFqIIujiJaiCveJI0z/vFXLKVxj2VPu9zCylLfx+K3TvGZnr7n2DBPCKFLCVZkL05BXfPrKPlgFg==","signatures":[{"sig":"MEUCIQDlxkxMfEY/rRo38mkGom3QIal4FXC51kjaR3bIBaf5EgIgJRjaitFsxhdEkfGUhMFWf+08lJmYZJSDaU0ndIZm3co=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81609},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/ddda91c2747199756c06a4e3c950c714/firsttx-prepaint-0.3.0.tgz","_integrity":"sha512-3CFl2cUxwQvFqIIujiJaiCveJI0z/vFXLKVxj2VPu9zCylLfx+K3TvGZnr7n2DBPCKFLCVZkL05BXfPrKPlgFg==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.3","description":"Prepaint’s tiny boot script (<2KB gzip target) replays the last snapshot before the main bundle arrives, yielding a 0ms blank screen on return visits. It attempts hydration to reuse the DOM or cleanly replaces it, and shows a clear stale→fresh handoff onc","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.3.0_1760229988348_0.9197212425612864","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@firsttx/prepaint","version":"0.3.1","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.3.1","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"1ea70f6377f7b5725dd507bab56e9bb7b0c0747c","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.3.1.tgz","fileCount":12,"integrity":"sha512-hFJH+3cfcC5u8stQLLRXKNyrBVVCrpiPZFrltjZWNsQxYdsFmVKjz0chaOI/aMNT8rquQE1too1rU9on/dV/+w==","signatures":[{"sig":"MEQCIBKjGbGyaTkCwpB+kWqvqTlohbk6GJvhK3I+fNtPwvpxAiBcBNCGwgchUOaxFg8rEBIjWwSYZMzoCHC+slUVN/A0RA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81611},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.3.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/529164d73a36fa56ab7c6acda27188bb/firsttx-prepaint-0.3.1.tgz","_integrity":"sha512-hFJH+3cfcC5u8stQLLRXKNyrBVVCrpiPZFrltjZWNsQxYdsFmVKjz0chaOI/aMNT8rquQE1too1rU9on/dV/+w==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.3","description":"Prepaint’s tiny boot script (<2KB gzip target) replays the last snapshot before the main bundle arrives, yielding a 0ms blank screen on return visits. It attempts hydration to reuse the DOM or cleanly replaces it, and shows a clear stale→fresh handoff onc","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.3.1_1760401046090_0.9600497844687825","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@firsttx/prepaint","version":"0.3.2","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.3.2","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"0df20c03b561534a598473eaacc29bd36554da70","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.3.2.tgz","fileCount":12,"integrity":"sha512-Wwv5lXrn28j5saGpJmz6pNnAP8oy192g+01XGp9ckhDs9oV09ac6tWdyCyncWKvtckuQAO+wRRyn/2/gcE5Hiw==","signatures":[{"sig":"MEYCIQD1G+taQQTnn134oJ17kpgWzxwbnK9Uw4M+yJe41zaW+QIhANfH41StYQVoNpWB2vn6MjY/u6Yl+Lvqd+nvBBC7XWWk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103828},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.3.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/9a6d8729495be5b653b19d323b9bef47/firsttx-prepaint-0.3.2.tgz","_integrity":"sha512-Wwv5lXrn28j5saGpJmz6pNnAP8oy192g+01XGp9ckhDs9oV09ac6tWdyCyncWKvtckuQAO+wRRyn/2/gcE5Hiw==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.3","description":"Prepaint’s tiny boot script (<2KB gzip target) replays the last snapshot before the main bundle arrives, yielding a 0ms blank screen on return visits. It attempts hydration to reuse the DOM or cleanly replaces it, and shows a clear stale→fresh handoff onc","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.3.2_1760497525094_0.4763978282123069","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@firsttx/prepaint","version":"0.4.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.4.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"746c8726f4ce62df82720d47214b9bde27108e6f","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.4.0.tgz","fileCount":12,"integrity":"sha512-1dQLGGPh0RDT+wERY1sA2kK5g3BzdFlj/BtrSplfipmxJnFZw3tTOkKdgHeQfMkFKNsWpBhtSDYdof5J9olnmQ==","signatures":[{"sig":"MEYCIQDsO09khHkiFJRKh7HKJdXg/rtti/DxoorhOZxoZC+LyQIhANniX9HtxVRm+jR70mceOY5jkHdzSVAbgyK2ixEH1c09","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137121},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/9465b31694dcc5d0718b2c4089be2002/firsttx-prepaint-0.4.0.tgz","_integrity":"sha512-1dQLGGPh0RDT+wERY1sA2kK5g3BzdFlj/BtrSplfipmxJnFZw3tTOkKdgHeQfMkFKNsWpBhtSDYdof5J9olnmQ==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.3","description":"Prepaint’s tiny boot script (<2KB gzip target) replays the last snapshot before the main bundle arrives, yielding a 0ms blank screen on return visits. It attempts hydration to reuse the DOM or cleanly replaces it, and shows a clear stale→fresh handoff onc","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.4.0_1760918588847_0.4405080054611463","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@firsttx/prepaint","version":"0.4.1","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.4.1","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"272e35d6a118639244fa0eed20c5635f6c02b82d","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.4.1.tgz","fileCount":12,"integrity":"sha512-If2jKgdRhWSq+2iMJWuz0cFXOIjIAn3fF8exkA6UjWStQEN+bhkH+KR1PdlaNCmAzBLqlyRe2RDuCPaWQYdGkg==","signatures":[{"sig":"MEYCIQCaqHF1GYf1Wn35bBtWbIW3fGhKc79+A/QoUnEocpAMGAIhAMbttqRJQ0WikV10soLRDHCJfpgBgWPRW+qMyS3EIbmN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153466},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.4.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.20.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/6f722bb5fdd808469a60955ed556c407/firsttx-prepaint-0.4.1.tgz","_integrity":"sha512-If2jKgdRhWSq+2iMJWuz0cFXOIjIAn3fF8exkA6UjWStQEN+bhkH+KR1PdlaNCmAzBLqlyRe2RDuCPaWQYdGkg==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.4","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"22.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.4.1_1761379894601_0.46521440098166744","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@firsttx/prepaint","version":"0.4.2","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.4.2","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"041387d988396a1aebf9785eaed9efff37c5fffb","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.4.2.tgz","fileCount":12,"integrity":"sha512-7GZQOnY1KSjAqNOQ0WSpm+3/FV14+DcsadW3PDPiP5a+O0EN9Jh4GnNIsYx7nSnk8rAszZ96o/C4NdvlZD2fTQ==","signatures":[{"sig":"MEQCIA0UxNzYQ0Mr9XG+6ieCsGs8NhiATHgNapYAl0+Z35EyAiBNTZ22g6xTpCwre4K458zX4rSrdXjwObkv7jVK2Bfycg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154060},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.4.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/e2a3e1b26c6a0949ef530d8f29a8dbcc/firsttx-prepaint-0.4.2.tgz","_integrity":"sha512-7GZQOnY1KSjAqNOQ0WSpm+3/FV14+DcsadW3PDPiP5a+O0EN9Jh4GnNIsYx7nSnk8rAszZ96o/C4NdvlZD2fTQ==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.4","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"22.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.4.2_1761891217166_0.8693597372648678","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@firsttx/prepaint","version":"0.5.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.5.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"2659b414233a4bdb9abc2cb46ef7a6b779467151","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.5.0.tgz","fileCount":12,"integrity":"sha512-tbXgNhkUDOMmTdZkYptUM3hZfAKpWGfyxMnz6C56MlWHibztm/m2AZleNLZTOpe06dpvtnR/zENiykbXqpvL2Q==","signatures":[{"sig":"MEUCIQDdOt/fWr+h3YIgjykPKbdihXLn5iBJOLfm32IOFvBRnQIgeuuEDaOPC1e5uaewpLmuKfafLHv6zNn1Oqsz48HMu74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":169166},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.5.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0097827-a275-468a-bf67-1d643dad9d7c"}},"_resolved":"/tmp/06d2b1c513309a59cb3431c909a0d824/firsttx-prepaint-0.5.0.tgz","_integrity":"sha512-tbXgNhkUDOMmTdZkYptUM3hZfAKpWGfyxMnz6C56MlWHibztm/m2AZleNLZTOpe06dpvtnR/zENiykbXqpvL2Q==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.6.2","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.5.0_1763429683572_0.2944980941128299","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@firsttx/prepaint","version":"0.6.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.6.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"d2619a9a64837edeef00a84f9d8a1aad5e2767f2","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.6.0.tgz","fileCount":12,"integrity":"sha512-H7dm/Invwy5QNKsF1E4YfUNt+rq2NQUJ/bg3Wv3cfbZtaw5QFpIMBv+4UGVlleDiU8lGe8rhi51hcjIGI9vCZw==","signatures":[{"sig":"MEQCIEgE2uFtUbd2Zd+tGKfKXP3AW2mPmKngey21KZP9AF0XAiAFMppWMX9wulzLFT+VXgrkru6K3JrA5QFmQoa+AyMomA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":179010},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.6.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0097827-a275-468a-bf67-1d643dad9d7c"}},"_resolved":"/tmp/657f3d1d04232feff0561bf461471f57/firsttx-prepaint-0.6.0.tgz","_integrity":"sha512-H7dm/Invwy5QNKsF1E4YfUNt+rq2NQUJ/bg3Wv3cfbZtaw5QFpIMBv+4UGVlleDiU8lGe8rhi51hcjIGI9vCZw==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.6.3","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.2.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.2.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.6.0_1763603917760_0.6067929916713304","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@firsttx/prepaint","version":"0.6.1","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.6.1","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"2e9892ec9469dc1c5c3d0e222c1d6bc1d978f03f","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.6.1.tgz","fileCount":12,"integrity":"sha512-Ywy9R8dcrkhKkwzHqVjP6i9Fe5zgU6AZAacSyhFZVG4iI58btCUI5tDfyn/Mo0OguJPLNZ//TlDc/ex0g3soAQ==","signatures":[{"sig":"MEQCIDOfW6A8Mjf+ArW2CexTxqZcogz0dRoiD/icOC0Fl+BTAiANj3IyKIrwDLjQiXhjvZpYzw8uJY7EhnvzpxvsYRakPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":179010},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.6.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0097827-a275-468a-bf67-1d643dad9d7c"}},"_resolved":"/tmp/eeafb76718e47c8934ad4c3f69ef4b6b/firsttx-prepaint-0.6.1.tgz","_integrity":"sha512-Ywy9R8dcrkhKkwzHqVjP6i9Fe5zgU6AZAacSyhFZVG4iI58btCUI5tDfyn/Mo0OguJPLNZ//TlDc/ex0g3soAQ==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.6.4","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.7","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.6.1_1764839048513_0.7957466562493027","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@firsttx/prepaint","version":"0.7.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.7.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"ddaa336a5869c4b4e84e7c7c317306dfde3c317c","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.7.0.tgz","fileCount":12,"integrity":"sha512-jcHMVCU+TxRQWtKYkwtq8O1zz+0r57VbDixXSLXQ9ZIp5gA2SS64znxqRpFyDvdTzA5lf0cCgYrO0MQZfLlleA==","signatures":[{"sig":"MEUCICG2QCAxvxJWQaU0PHspMaM7aQw0DNlEuODIgp62wtdoAiEAlQNfWq1QzoxNOpGzuDPXOvD/sQAYdMIAOBPrLWJ/+EI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193798},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.7.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0097827-a275-468a-bf67-1d643dad9d7c"}},"_resolved":"/tmp/47dfb30248a4fdadf41eebb6ed8a390c/firsttx-prepaint-0.7.0.tgz","_integrity":"sha512-jcHMVCU+TxRQWtKYkwtq8O1zz+0r57VbDixXSLXQ9ZIp5gA2SS64znxqRpFyDvdTzA5lf0cCgYrO0MQZfLlleA==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.7.0","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@firsttx/shared":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.7","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.7.0_1765419486720_0.316953280974559","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@firsttx/prepaint","version":"0.7.1","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.7.1","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"c274aea292ef2281816b860f8d6e53134e392e7a","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.7.1.tgz","fileCount":12,"integrity":"sha512-IEDIdwVaGR8q4OcIWNvTCLnoDyt+olY3TuGrITVmDqPoAFem1+6YxvvAIMGy+Owrn2Md13ec29UTYVy8EK/Xgg==","signatures":[{"sig":"MEYCIQDQEVQja+Wc6mUFLK2D4ti3hoo+r1FF+bRXeH0U2EGy8wIhAIsaMr1SaPhY9pWHWtCHaCu9VF4esic2NzSIldnDArgs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193798},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.7.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0097827-a275-468a-bf67-1d643dad9d7c"}},"_resolved":"/tmp/8e2c9c9a5c60e56215f5c838fba6bed0/firsttx-prepaint-0.7.1.tgz","_integrity":"sha512-IEDIdwVaGR8q4OcIWNvTCLnoDyt+olY3TuGrITVmDqPoAFem1+6YxvvAIMGy+Owrn2Md13ec29UTYVy8EK/Xgg==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.7.0","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@firsttx/shared":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.7","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.7.1_1765536134989_0.3613634663531058","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@firsttx/prepaint","version":"0.7.2","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.7.2","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"29e3dc99d5c9d26b4fb2121cf8a1c8f7240bcebf","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.7.2.tgz","fileCount":12,"integrity":"sha512-3EwcYI706tx2cpXsHLGqd3Ls/GUE25MZ3YV5uzfKkRSCiM+HAFZyFGlOU2mnjctoM1KRPk6SsTmD9i+HWVR4ew==","signatures":[{"sig":"MEUCIQCWTpqswC74mKscxOZe14JLrFFw333awIQxWeOOwtaWSwIgNCGP78JC1WFFLrxLF1DJOBC2e3jx9MvU1mLlTrUpqdI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193798},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.7.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0097827-a275-468a-bf67-1d643dad9d7c"}},"_resolved":"/tmp/0c478475e782279d31a0d04630356361/firsttx-prepaint-0.7.2.tgz","_integrity":"sha512-3EwcYI706tx2cpXsHLGqd3Ls/GUE25MZ3YV5uzfKkRSCiM+HAFZyFGlOU2mnjctoM1KRPk6SsTmD9i+HWVR4ew==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.7.0","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@firsttx/shared":"0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.7","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.7.2_1765536238869_0.7734164437245621","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@firsttx/prepaint","version":"0.7.3","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.7.3","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"4300d7aef0a2a406fe2f9d1ce052258bc119ae2d","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.7.3.tgz","fileCount":12,"integrity":"sha512-JZMV+sCQbHDc8G3hEdP8oaGjNm9D9/RNqLcVwLt6UPMGCS7e8fElBtb1BTHPalntHf72M5O0Bz6UAODh6JJZNg==","signatures":[{"sig":"MEUCIHvTgRqviTj07T2j48rZ7f1yeCkxK9kAJLt5SjnWl3tfAiEAimQRT0mSSbG20VmztI4IAoj+6x2qSzaWQTfzz51GmBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193798},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.7.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0097827-a275-468a-bf67-1d643dad9d7c"}},"_resolved":"/tmp/684fb38a2f2839d2e5e094eb70ed5d79/firsttx-prepaint-0.7.3.tgz","_integrity":"sha512-JZMV+sCQbHDc8G3hEdP8oaGjNm9D9/RNqLcVwLt6UPMGCS7e8fElBtb1BTHPalntHf72M5O0Bz6UAODh6JJZNg==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.7.0","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@firsttx/shared":"0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.7","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.7.3_1765536618173_0.29037981460096973","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@firsttx/prepaint","version":"0.7.4","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.7.4","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"f391ba07cb6a91ac3f9622662b516a7c25a73a82","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.7.4.tgz","fileCount":12,"integrity":"sha512-CPg5GwiHF3GQ5/STHQS448mHt84cWwxFAFcZhlF5IWSExtkv8kkDJW71uSVONFSfXIhdlNF7HGJZtztHvmZ2Jw==","signatures":[{"sig":"MEUCIQCyOmDPikUJyNToc+nXpg3uQTRpq7VNsnYLAU8cUC7HSgIgbEEzJOHKaBOFuh5y4o/xf2D5lc10GFyhlrqlH4e6pUA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.7.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193798},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.7.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0097827-a275-468a-bf67-1d643dad9d7c"}},"_resolved":"/tmp/cf819da0e8b76dc4538d83daadd000a1/firsttx-prepaint-0.7.4.tgz","_integrity":"sha512-CPg5GwiHF3GQ5/STHQS448mHt84cWwxFAFcZhlF5IWSExtkv8kkDJW71uSVONFSfXIhdlNF7HGJZtztHvmZ2Jw==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.7.0","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@firsttx/shared":"0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.7","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.7.4_1765536919621_0.059053118111547453","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@firsttx/prepaint","version":"0.8.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.8.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"696b0bf6128e178c2bef8223c7c8d25517409146","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.8.0.tgz","fileCount":12,"integrity":"sha512-hlLIFvScblZwpmGmuvmjc+bM59JQG0WcLorOYLyOuexT6UwjNiqDKa+b5VkxyoUCtFvvZE8e64+Wjoj27q1wUw==","signatures":[{"sig":"MEUCIAdp3LHUu5Hpszu0xmlvI8pgHX0Rro4lthsAIIpOevBoAiEAxd1EaCUAhM4IQDEPMCSmZ9XCfbrr6S2ccK12vLod6kg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193798},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.8.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0097827-a275-468a-bf67-1d643dad9d7c"}},"_resolved":"/tmp/6a9c24e4dc3e57ec75e10807dac959ea/firsttx-prepaint-0.8.0.tgz","_integrity":"sha512-hlLIFvScblZwpmGmuvmjc+bM59JQG0WcLorOYLyOuexT6UwjNiqDKa+b5VkxyoUCtFvvZE8e64+Wjoj27q1wUw==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.7.0","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@firsttx/shared":"0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.7","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.8.0_1765537212518_0.9309237691543641","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@firsttx/prepaint","version":"0.8.1","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.8.1","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"848547aac633e1e253cb25a7f52e2f7d7014abf4","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.8.1.tgz","fileCount":12,"integrity":"sha512-5atjWxmwE/7VlzvntWTq7FhfWnP6w55CPFJvbborWamA2rPBNWP08OHZVI/pDLbdazamKhk4i6zaQbw4UBHr8Q==","signatures":[{"sig":"MEUCIQC5P0GN37f5ELynOa2PO20EHxL4sYhg9pBDI7u/JQKoMQIgMNtW837ywXNyRF7SrR5dvJwg3c32MdfrHvheTIxVT38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193848},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.8.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0097827-a275-468a-bf67-1d643dad9d7c"}},"_resolved":"/tmp/f4f9eada5dab52a4251eb2308a349f7a/firsttx-prepaint-0.8.1.tgz","_integrity":"sha512-5atjWxmwE/7VlzvntWTq7FhfWnP6w55CPFJvbborWamA2rPBNWP08OHZVI/pDLbdazamKhk4i6zaQbw4UBHr8Q==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.7.0","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@firsttx/shared":"0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.7","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.8.1_1765539451193_0.8975306289807286","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@firsttx/prepaint","version":"0.9.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.9.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"75f6018aff1b2915bbc52b8a1ecd4a234a6deb36","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.9.0.tgz","fileCount":12,"integrity":"sha512-l/6LSISmbH9UCNjxtfu01+FNbBjI37llEfrr8rRThDQMSwBDhy0yU1O5+VUl6ybajhfagrdS712QsORlwwX9rA==","signatures":[{"sig":"MEQCIEmn6ETV9uF7ItsUGOarBFZXGTtC7zrrBXHNoSB0nK3tAiBV83i/1QR7HHCe6C4XRTqIDiMCJGp1rUUdo1P99FCeZQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":193055},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.9.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"import":"./dist/plugin/vite.js"},"./plugin/esbuild":{"import":"./dist/plugin/esbuild.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts src/plugin/esbuild.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"joseph0926","email":"rkekqmf0926@gmail.com"},"_resolved":"/tmp/5db01d3fa310b2dd772b1b26ad99f9ec/firsttx-prepaint-0.9.0.tgz","_integrity":"sha512-l/6LSISmbH9UCNjxtfu01+FNbBjI37llEfrr8rRThDQMSwBDhy0yU1O5+VUl6ybajhfagrdS712QsORlwwX9rA==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"10.9.4","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","dependencies":{"@firsttx/shared":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","vitest":"^3.2.4","@types/react":"^19.2.7","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.9.0_1765965620631_0.6489902515784465","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"@firsttx/prepaint","version":"0.9.2","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.9.2","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"6deedf3bb47923010ecabbb92dc0468d8602bf67","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.9.2.tgz","fileCount":12,"integrity":"sha512-1oPEYWlVlHATgPyRGzVX9C4HHxVlQhgHJlAnPBQdAplutALdrndelVTI912iRNq5jzoDz/bLGTxkV51YoCAdYA==","signatures":[{"sig":"MEQCIGyDqeqW/Vbi41Rsv09tRJ0QKdLlOmYGQPQ+kGKruIF+AiBcqHK5QFOEq22aHdGjp89/5VOsPfmciSQ1MuWxFDZDQw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":209247},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.9.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"types":"./dist/plugin/vite.d.ts","import":"./dist/plugin/vite.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6b17d258-5c27-4439-b1a1-296d33b7f7a8"}},"_resolved":"/tmp/a762585a35531ac7020c355573d40591/firsttx-prepaint-0.9.2.tgz","_integrity":"sha512-1oPEYWlVlHATgPyRGzVX9C4HHxVlQhgHJlAnPBQdAplutALdrndelVTI912iRNq5jzoDz/bLGTxkV51YoCAdYA==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.6.2","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@firsttx/shared":"0.3.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","@types/react":"^19.2.7","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.9.2_1769899755088_0.9905410264409749","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"@firsttx/prepaint","version":"0.9.3","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.9.3","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"c131c7832d5e91b755f8ce1c3e0faeb466aa9f10","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.9.3.tgz","fileCount":12,"integrity":"sha512-ThmFcCwIWoOLWlQ+fDLzUkTdDHwuZTp9bdOi1mspcOQ/wTDpiZp635IjZhl+SthVghW1n8kFXsUS1lzTlhsYXg==","signatures":[{"sig":"MEUCIQCchyq030F8ef89V/GmEYOOi0vdoaWWFhKyrooyO+a/AgIgP9o8kJJDyKckqjLOhGyz01hiG2WYiohZwfByRpn9wkA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.9.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":211529},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.9.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"types":"./dist/plugin/vite.d.ts","import":"./dist/plugin/vite.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6b17d258-5c27-4439-b1a1-296d33b7f7a8"}},"_resolved":"/tmp/e248a08d7502ebfe787eecd25b14a6b0/firsttx-prepaint-0.9.3.tgz","_integrity":"sha512-ThmFcCwIWoOLWlQ+fDLzUkTdDHwuZTp9bdOi1mspcOQ/wTDpiZp635IjZhl+SthVghW1n8kFXsUS1lzTlhsYXg==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.6.2","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@firsttx/shared":"0.3.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","rimraf":"^6.0.1","vitest":"^4.0.18","@types/react":"^19.2.10","@vitest/coverage-v8":"^4.0.18","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.9.3_1770419088363_0.9472495173365312","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@firsttx/prepaint","version":"0.10.0","keywords":["prepaint","csr","hydration","view-transitions","bootstrap","inline-script","react"],"author":{"name":"joseph0926"},"license":"MIT","_id":"@firsttx/prepaint@0.10.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"26551ecbc386b7f8934af5c42d4784d80441bfe7","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.10.0.tgz","fileCount":12,"integrity":"sha512-PxLluq8V10aLxUT7f8hDvZQfvik7RBBoNBtw8bKhtNSarHDcpqoUU3lL4Su6bg12MeQ3LIyY6l8iE4g458S43A==","signatures":[{"sig":"MEUCIQDWkP8/+5j31npnVdlSpjSG5QBnYdQnbVAGKpedthNR5wIgdJj5nR4JeqAMBCq/oQULUUkibPL3mbIOgS6ZV+vAnt4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":216306},"main":"./dist/index.js","type":"module","_from":"file:firsttx-prepaint-0.10.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"types":"./dist/plugin/vite.d.ts","import":"./dist/plugin/vite.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6b17d258-5c27-4439-b1a1-296d33b7f7a8"}},"_resolved":"/tmp/b2d689bd0247322fef66a659a7ef7690/firsttx-prepaint-0.10.0.tgz","_integrity":"sha512-PxLluq8V10aLxUT7f8hDvZQfvik7RBBoNBtw8bKhtNSarHDcpqoUU3lL4Su6bg12MeQ3LIyY6l8iE4g458S43A==","repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"_npmVersion":"11.6.2","description":"Instant boot script for CSR apps that replays IndexedDB snapshots before React loads, delivering ~0 ms revisit blanks with automatic hydration or clean rerender fallback.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@firsttx/shared":"0.3.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","rimraf":"^6.0.1","vitest":"^4.0.18","@types/react":"^19.2.10","@vitest/coverage-v8":"^4.0.18","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","dompurify":"^3.3.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true},"dompurify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.10.0_1771723407775_0.23299527485421145","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@firsttx/prepaint","version":"0.11.0","keywords":["prepaint","csr","visual-cache","view-transitions","bootstrap","inline-script","react"],"author":"joseph0926","license":"MIT","_id":"@firsttx/prepaint@0.11.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"973d597b814f4af98d3a3dcf319b4ed2ad11b894","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.11.0.tgz","fileCount":12,"integrity":"sha512-XxuNQi+C1sUYoSteP2alsSSDvGdsurxM4Z5SKtd2/XgZbWGbNLaDSKGihGa4acb8xURXKMBmvdIyJHd5j1ZjKA==","signatures":[{"sig":"MEYCIQCt/W59Yu+g1PejwFwexXnB3LGPv3JxewNGAsNvMuxN/AIhAIH+NfjF4oUgl4+92AZ1skWzgfP+Xs7vFdl3JKwkckDO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":185889},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"types":"./dist/plugin/vite.d.ts","import":"./dist/plugin/vite.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","lint:fix":"eslint . --fix","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6b17d258-5c27-4439-b1a1-296d33b7f7a8"}},"repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"description":"Boot-time visual snapshot replay for CSR apps, backed by IndexedDB and designed to reduce revisit blank time before the React app mounts.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@firsttx/shared":"0.3.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","rimraf":"^6.0.1","vitest":"^4.0.18","@types/react":"^19.2.10","@vitest/coverage-v8":"^4.0.18","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.11.0_1784008529618_0.9722702968784636","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@firsttx/prepaint","version":"0.12.0","keywords":["prepaint","csr","visual-cache","view-transitions","bootstrap","inline-script","react"],"author":"joseph0926","license":"MIT","_id":"@firsttx/prepaint@0.12.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"a127cbbf0cb08ec6cf5332d7c38c46308d66d894","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.12.0.tgz","fileCount":13,"integrity":"sha512-T5R1hwkCB4iT18eC4K7YyyiPP0FO5TATCXU8B9IGZEUGmUwikkcMvtcRADo/UXrnSUU4RX8G77MHDAtcOsgPCQ==","signatures":[{"sig":"MEQCICSHvgwUfqx2gcKrqtuO/CLhRu7bhT6BRXWAUYrIqKDAAiA8z/PwRnKV68jifoPHJvx4tbCWrPYlf7QhKLuqWnZEmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":240217},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"types":"./dist/plugin/vite.d.ts","import":"./dist/plugin/vite.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","lint:fix":"eslint . --fix","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6b17d258-5c27-4439-b1a1-296d33b7f7a8"}},"repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"description":"Boot-time visual snapshot replay for CSR apps, backed by IndexedDB and designed to reduce revisit blank time before the React app mounts.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@firsttx/shared":"0.3.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","rimraf":"^6.0.1","vitest":"^4.0.18","@types/react":"^19.2.10","@vitest/coverage-v8":"^4.0.18","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.12.0_1784240087523_0.8658658078021206","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@firsttx/prepaint","version":"0.12.1","keywords":["prepaint","csr","visual-cache","view-transitions","bootstrap","inline-script","react"],"author":"joseph0926","license":"MIT","_id":"@firsttx/prepaint@0.12.1","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"cbed9053dcd67b78c6dad20e8e01157f8c6cb0bb","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.12.1.tgz","fileCount":13,"integrity":"sha512-OFtxPzHJ6E1wdEol9g/F9o5ZmiUQ9JabLxu8qfdrJvP2SkRrE3Pob/nNAI25ZaCZvI1ED0v/4RmNQiloFnxsgA==","signatures":[{"sig":"MEYCIQCXUkzGbCl1xv7oo/0pCCeH3q6Cih7UDWXjf9o3kwOU2AIhAI9qV/PablzTteqw6H7qy3UHdKDADaU7m4Jq3ZXel3hA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":243467},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"types":"./dist/plugin/vite.d.ts","import":"./dist/plugin/vite.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","lint:fix":"eslint . --fix","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6b17d258-5c27-4439-b1a1-296d33b7f7a8"}},"repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"description":"Boot-time visual snapshot replay for CSR apps, backed by IndexedDB and designed to reduce revisit blank time before the React app mounts.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@firsttx/shared":"0.3.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","rimraf":"^6.0.1","vitest":"^4.0.18","@types/react":"^19.2.10","@vitest/coverage-v8":"^4.0.18","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.12.1_1784331112902_0.4687939457148078","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@firsttx/prepaint","version":"0.13.0","keywords":["prepaint","csr","visual-cache","view-transitions","bootstrap","inline-script","react"],"author":"joseph0926","license":"MIT","_id":"@firsttx/prepaint@0.13.0","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"dist":{"shasum":"9a6ee58dc9bcdd476ef7666f01353fc32b2b14db","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.13.0.tgz","fileCount":13,"integrity":"sha512-YXuWQnCzsSSdxVvl1CjkyGSkbXIZqCagRCR9G3yr3ozCZs32GSyUpt4oKJHLv7lA4cMlShlh02vnOL1cHT2Aig==","signatures":[{"sig":"MEYCIQDPc3p8RemguuCxdgL3LEzWINKoab83AoEmqqiRX7WRYQIhAJNPouk8emReXMSN3xCla12V4ucvYlfq3o6CyzC4g93h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":249025},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"types":"./dist/plugin/vite.d.ts","import":"./dist/plugin/vite.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts --dts --format esm --out-dir dist","clean":"rimraf dist","test:ui":"vitest --ui","lint:fix":"eslint . --fix","test:run":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6b17d258-5c27-4439-b1a1-296d33b7f7a8"}},"repository":{"url":"git+https://github.com/joseph0926/firsttx.git","type":"git","directory":"packages/prepaint"},"description":"Boot-time visual snapshot replay for CSR apps, backed by IndexedDB and designed to reduce revisit blank time before the React app mounts.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@firsttx/shared":"0.3.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","rimraf":"^6.0.1","vitest":"^4.0.18","@types/react":"^19.2.10","@vitest/coverage-v8":"^4.0.18","@testing-library/react":"^16.3.0"},"peerDependencies":{"vite":"^7.0.0","react":"^18.2.0 || ^19.0.0","esbuild":"^0.25.0","react-dom":"^18.2.0 || ^19.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/prepaint_0.13.0_1785276368550_0.6661486413185285","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"@firsttx/prepaint","version":"0.13.1","description":"Boot-time visual snapshot replay for CSR apps, backed by IndexedDB and designed to reduce revisit blank time before the React app mounts.","license":"MIT","author":"joseph0926","type":"module","engines":{"node":">=24"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin/vite":{"types":"./dist/plugin/vite.d.ts","import":"./dist/plugin/vite.js"}},"sideEffects":false,"keywords":["prepaint","csr","visual-cache","view-transitions","bootstrap","inline-script","react"],"dependencies":{"@firsttx/shared":"0.3.2"},"peerDependencies":{"esbuild":"^0.25.0","react":"^18.2.0 || ^19.0.0","react-dom":"^18.2.0 || ^19.0.0","vite":"^7.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"esbuild":{"optional":true}},"devDependencies":{"@testing-library/react":"^16.3.0","@types/react":"^19.2.10","@vitest/coverage-v8":"^4.0.18","rimraf":"^6.0.1","tsup":"^8.5.1","vitest":"^4.0.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"repository":{"type":"git","url":"git+https://github.com/joseph0926/firsttx.git","directory":"packages/prepaint"},"bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","scripts":{"dev":"tsup --watch","build":"tsup src/index.ts src/boot.ts src/plugin/vite.ts --dts --format esm --out-dir dist","clean":"rimraf dist","lint":"eslint .","lint:fix":"eslint . --fix","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest","test:ui":"vitest --ui","test:run":"vitest run","test:coverage":"vitest run --coverage"},"_nodeVersion":"24.18.0","_id":"@firsttx/prepaint@0.13.1","dist":{"integrity":"sha512-qyrKAsMgGzMb3RckUAjWt26EiRFEYE3R2rmU7S/P/J0D+ErgJvAzQWyafLQX+l1PYqChtRsdNwf4ON2hLh2ENw==","shasum":"ba0de1ed56caa057a8d2c31401ef926334a43e73","tarball":"https://registry.npmjs.org/@firsttx/prepaint/-/prepaint-0.13.1.tgz","fileCount":13,"unpackedSize":246219,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@firsttx%2fprepaint@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD4t33WeYodunytr8Li1kQB6eOy7pVxSqa00goOBqRAwQIhAOnKJoJ3U4LEUwmits0hJ+JLHYaRIs+XVeQMjRfTBtqP"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6b17d258-5c27-4439-b1a1-296d33b7f7a8"}},"directories":{},"maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/prepaint_0.13.1_1785277575037_0.2554280492968297"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-05T11:25:45.109Z","modified":"2026-07-28T22:26:15.601Z","0.0.0":"2025-10-05T11:25:45.465Z","0.1.0":"2025-10-09T07:49:10.718Z","0.1.1":"2025-10-09T07:57:42.392Z","0.1.2":"2025-10-09T22:31:29.821Z","0.1.3":"2025-10-10T01:57:21.594Z","0.2.0":"2025-10-10T23:10:15.196Z","0.3.0":"2025-10-12T00:46:28.549Z","0.3.1":"2025-10-14T00:17:26.330Z","0.3.2":"2025-10-15T03:05:25.281Z","0.4.0":"2025-10-20T00:03:09.060Z","0.4.1":"2025-10-25T08:11:34.789Z","0.4.2":"2025-10-31T06:13:37.368Z","0.5.0":"2025-11-18T01:34:43.750Z","0.6.0":"2025-11-20T01:58:37.988Z","0.6.1":"2025-12-04T09:04:08.666Z","0.7.0":"2025-12-11T02:18:06.863Z","0.7.1":"2025-12-12T10:42:15.126Z","0.7.2":"2025-12-12T10:43:59.044Z","0.7.3":"2025-12-12T10:50:18.326Z","0.7.4":"2025-12-12T10:55:19.766Z","0.8.0":"2025-12-12T11:00:12.653Z","0.8.1":"2025-12-12T11:37:31.341Z","0.9.0":"2025-12-17T10:00:20.770Z","0.9.2":"2026-01-31T22:49:15.226Z","0.9.3":"2026-02-06T23:04:48.529Z","0.10.0":"2026-02-22T01:23:27.928Z","0.11.0":"2026-07-14T05:55:29.756Z","0.12.0":"2026-07-16T22:14:47.675Z","0.12.1":"2026-07-17T23:31:53.050Z","0.13.0":"2026-07-28T22:06:08.726Z","0.13.1":"2026-07-28T22:26:15.184Z"},"bugs":{"url":"https://github.com/joseph0926/firsttx/issues"},"author":"joseph0926","license":"MIT","homepage":"https://github.com/joseph0926/firsttx/tree/main/packages/prepaint#readme","keywords":["prepaint","csr","visual-cache","view-transitions","bootstrap","inline-script","react"],"repository":{"type":"git","url":"git+https://github.com/joseph0926/firsttx.git","directory":"packages/prepaint"},"description":"Boot-time visual snapshot replay for CSR apps, backed by IndexedDB and designed to reduce revisit blank time before the React app mounts.","maintainers":[{"name":"joseph0926","email":"rkekqmf0926@gmail.com"}],"readme":"# @firsttx/prepaint\n\n**Boot-time visual snapshot replay for CSR apps**\n\nReplays your app's last visual state from IndexedDB before the main app bundle starts, reducing the blank interval while React mounts. The snapshot is a temporary, non-interactive visual cache.\n\n<table>\n<tr>\n<td align=\"center\">❌ Before prepaint</td>\n<td align=\"center\">✅ After prepaint</td>\n</tr>\n<tr>\n<td><img src=\"https://res.cloudinary.com/dx25hswix/image/upload/v1760316819/firsttx-01_vi2svy.gif\" /></td>\n<td><img src=\"https://res.cloudinary.com/dx25hswix/image/upload/v1760316819/firsttx-02_tfmsy7.gif\" /></td>\n</tr>\n<tr>\n<td align=\"center\"><sub>Slow 4G: Blank screen exposed</sub></td>\n<td align=\"center\"><sub>Slow 4G: Snapshot replay</sub></td>\n</tr>\n</table>\n\n```bash\nnpm install @firsttx/prepaint\n```\n\n[![npm version](https://img.shields.io/npm/v/@firsttx/prepaint.svg)](https://www.npmjs.com/package/@firsttx/prepaint)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\n> Module format: ESM-only. CommonJS users should use `import()` (dynamic import).\n\n---\n\n## Why Prepaint?\n\n**Replay the last visual state without adding an SSR runtime.**\n\n- No SSR/SSG infrastructure needed\n- Designed for Vite-based CSR React apps\n- Shadow DOM overlay keeps cached DOM separate from the React root\n- Native ViewTransition support\n\n### The Problem\n\n```\nTraditional CSR on revisit:\nUser clicks → Blank screen (2000ms) → Content appears\n\nWith Prepaint:\nUser clicks → Last visual snapshot → React app mounts → Fresh data\n```\n\nPrepaint captures DOM snapshots per route and replays them during boot on the next visit. Replay time depends on the device, snapshot size, and storage state.\n\n---\n\n## Quick Start\n\n### 1. Vite Plugin\n\nPrepaint currently provides a Vite plugin only.\n\n```ts\n// vite.config.ts\nimport { firstTx } from '@firsttx/prepaint/plugin/vite';\n\nexport default defineConfig({\n  plugins: [firstTx({ policy: { routes: ['/dashboard', '/cart'] } })],\n});\n```\n\nPrepaint is disabled until `policy.routes` explicitly opts pathnames in. Matching is exact, and the same policy governs capture, restore, and stored-record pruning. Snapshot restore always uses a non-interactive overlay outside the React root.\n\n### 2. React Entry\n\n```tsx\n// main.tsx\nimport { createFirstTxRoot } from '@firsttx/prepaint';\n\ncreateFirstTxRoot(document.getElementById('root')!, <App />);\n```\n\n**Done.** Prepaint now:\n\n- Prepares snapshots during idle time and saves a final state on hidden/pagehide\n- Replays a visual snapshot during boot on revisit\n- Hands control to the React app when the main bundle runs\n\n---\n\n## How It Works\n\n### Three Phases\n\n```\n┌─────────────────────────────────┐\n│ 1) Capture                     │\n│  - idle preparation             │\n│  - pagehide/visibilitychange    │\n│  - Saves DOM + styles to        │\n│    IndexedDB                    │\n└─────────────────────────────────┘\n              ↓\n┌─────────────────────────────────┐\n│ 2) Boot (measured on revisit)   │\n│  - External script runs         │\n│  - Reads snapshot from IndexedDB│\n│  - Paints cached visual DOM     │\n└─────────────────────────────────┘\n              ↓\n┌─────────────────────────────────┐\n│ 3) Handoff                      │\n│  - Main bundle loads            │\n│  - Mounts the React app         │\n│  - Cleans up prepaint artifacts │\n└─────────────────────────────────┘\n```\n\n**Storage**\n\n- DB: `firsttx-prepaint`\n- Store: `snapshots`\n- Key: route pathname\n- Default TTL: 7 days\n- Default maximum payload: 1 MiB\n- Schema v2 clears v1 records once, then every boot prunes records outside the current policy\n\n---\n\n## API\n\n### `createFirstTxRoot(container, element, options?)`\n\n```typescript\ncreateFirstTxRoot(\n  container: HTMLElement,\n  element: ReactElement,\n  options?: {\n    transition?: boolean;  // ViewTransition (default: true)\n    onCapture?: (snapshot: Snapshot) => void;\n    onHandoff?: (strategy: 'has-prepaint' | 'cold-start') => void;\n  }\n);\n```\n\n**Behavior**\n\n- The cached DOM always stays in a non-interactive overlay outside `#root`\n- React always mounts with `createRoot()` into an empty container\n- The overlay is removed only after React's first commit\n- `onHydrationError` remains as a deprecated no-op for one release\n\n### `firstTx(options?)` (Vite Plugin)\n\n```typescript\nfirstTx({\n  inline?: boolean,              // Inline boot script (default: false)\n  minify?: boolean,              // Minify boot script (default: !isDev)\n  injectTo?: 'head-prepend' | 'head' | 'body-prepend' | 'body',\n  nonce?: string | (() => string),\n  policy: {\n    routes: string[],            // Exact pathnames; empty or omitted disables Prepaint\n    ttlMs?: number,              // Default: 7 days\n    maxSnapshotBytes?: number,   // Default: 1 MiB, UTF-8 JSON payload\n    includeStyles?: boolean,     // Default: true\n  },\n})\n```\n\nStatic Vite output uses the self-starting `/firsttx-boot.js` asset by default. Set `inline: true` only when you intentionally manage a CSP hash for the generated inline script. A `nonce` is embedded at build time even when supplied as a function; static output cannot create a per-response nonce.\n\nThe previous `overlay` and `overlayRoutes` options remain accepted as deprecated no-ops for one release. The Vite policy is serialized into the boot asset and reused by `setupCapture()`.\n\nStored HTML is sanitized before overlay insertion. Passwords, marked sensitive fields, dangerous elements, event handlers, and executable URL schemes are removed. CSS is a visual cache, not sanitized application data: use `includeStyles: false` when routes can contain user-controlled or sensitive CSS, and only opt non-sensitive routes in.\n\n---\n\n## Visual Overlay\n\nPrepaint paints the cached snapshot **above** your app in Shadow DOM. The overlay is non-interactive and does not modify the React container.\n\nDuring handoff, React mounts with `createRoot()` into an empty container. Prepaint removes the overlay only after the first React commit, optionally using ViewTransition.\n\nThe following legacy configuration is no longer required:\n\n```js\nlocalStorage.removeItem('firsttx:overlay');\nlocalStorage.removeItem('firsttx:overlayRoutes');\n```\n\n---\n\n## Real-World Patterns\n\n### With Local-First\n\n```tsx\nimport { useModel } from '@firsttx/local-first';\n\nfunction ProductsPage() {\n  const [products] = useModel(ProductsModel);\n\n  // Prepaint shows last snapshot\n  // useModel provides instant data from IndexedDB\n  if (!products) return <Skeleton />;\n\n  return <ProductList products={products} />;\n}\n```\n\n### Mark Volatile Content\n\n```tsx\n// These change on every render → exclude from snapshot\n<span data-firsttx-volatile>{Date.now()}</span>\n<div data-firsttx-volatile>{Math.random()}</div>\n<Timer data-firsttx-volatile />\n```\n\n### Debug Lifecycle\n\n```tsx\ncreateFirstTxRoot(root, <App />, {\n  onCapture: (snapshot) => console.log('Captured:', snapshot.route),\n  onHandoff: (strategy) => console.log('Strategy:', strategy),\n});\n```\n\n---\n\n## Visual Handoff Behavior\n\nThe restored snapshot is visual cache only. Prepaint never hydrates cached client DOM and does not enforce a single-child React root. Fragments and multiple top-level React nodes are valid.\n\n### Cleanup\n\nPost-mount:\n\n- Removes `<html data-prepaint=\"true\">`\n- Removes overlay host `#__firsttx_prepaint__`\n\n---\n\n## Best Practices\n\n### DO\n\n✅ **Use ViewTransition (default)**\n\n```tsx\ncreateFirstTxRoot(root, <App />, { transition: true });\n```\n\n✅ **Mark volatile content**\n\n```html\n<span data-firsttx-volatile>{timestamp}</span>\n```\n\n✅ **Combine with Local-First**\n\n```tsx\nconst [data] = useModel(Model);\n// Instant data from IndexedDB while network refreshes\n```\n\n### DON'T\n\n❌ **Don't expect instant availability on first visit**\n\n```tsx\n// First visit: snapshot doesn't exist yet\n// Only kicks in on second+ visits\n```\n\n❌ **Don't capture sensitive data**\n\n```tsx\n// Snapshots are plain HTML in IndexedDB\n// Avoid capturing auth tokens, PII, etc.\n```\n\n---\n\n## Security\n\n### HTML Sanitization\n\nPrepaint sanitizes all restored HTML to prevent XSS attacks:\n\n- Removes tags that execute code or load remote resources: `<script>`, `<iframe>`, `<object>`, `<embed>`, `<meta>`, `<link>`, `<base>`, etc.\n- Keeps form controls so the restored overlay matches the captured screen, and removes their interaction paths instead: `href`, `action`, `formaction`, `method`, `target`, `autocomplete`, and inline `pointer-events`.\n- Removes event handlers: `onclick`, `onerror`, `onload`, etc.\n- Blocks `javascript:` and `data:text/html` URLs\n\n**Note on the sanitizer**\n\nRestore happens on the boot path, so Prepaint uses a single synchronous built-in sanitizer and takes no sanitizer dependency. It covers the vectors listed above but is not a general-purpose HTML sanitizer.\n\nCaptured CSS is visual cache data and is not sanitized. Set `includeStyles: false` for routes with user-controlled or sensitive CSS.\n\n### Sensitive Data\n\nPrepaint automatically protects sensitive fields:\n\n```tsx\n// Password inputs are automatically cleared\n<input type=\"password\" />\n\n// Mark custom sensitive fields\n<input data-firsttx-sensitive name=\"ssn\" />\n<div data-firsttx-sensitive>{authToken}</div>\n```\n\n**Best Practices:**\n\n✅ Mark auth tokens and PII with `data-firsttx-sensitive`\n✅ Keep session data in memory (not DOM)\n❌ Don't store encryption keys in visible elements\n\n### Storage Security\n\n- Snapshots are stored in IndexedDB (browser's same-origin policy applies)\n- Data is **not encrypted** — treat IndexedDB like localStorage\n- TTL: 7 days (auto-expires)\n\n---\n\n## Debugging\n\n### Development Logs\n\n```\n[FirstTx] Snapshot restored (age: 63ms)\n[FirstTx] Prepaint detected (age: 63ms)\n[FirstTx] Snapshot captured for /products\n```\n\n### Inspect IndexedDB\n\n```js\nindexedDB.open('firsttx-prepaint').onsuccess = (e) => {\n  const db = e.target.result;\n  const tx = db.transaction('snapshots', 'readonly');\n  tx.objectStore('snapshots').getAll().onsuccess = (e2) => {\n    console.log(e2.target.result);\n  };\n};\n```\n\n### Check Injection\n\nOn revisit, look for:\n\n- `<html data-prepaint=\"true\" data-prepaint-timestamp=\"...\">`\n- Boot script near `<head>` top\n- Temporary overlay host `#__firsttx_prepaint__`\n\n---\n\n## Performance\n\nMeasure boot execution, visual replay duration, snapshot size, and handoff timing in your target browser and device profile. Prepaint does not guarantee a universal blank-screen duration.\n\n---\n\n## Browser Support\n\n| Browser     | Min Version                  | ViewTransition | Status        |\n| ----------- | ---------------------------- | -------------- | ------------- |\n| Chrome/Edge | 111+                         | ✅ Full        | ✅ Tested     |\n| Firefox     | Latest                       | ❌ No          | ✅ Fallback   |\n| Safari      | 16+                          | ❌ No          | ✅ Fallback   |\n| Mobile      | iOS 16+, Android Chrome 111+ | Varies         | ✅ Core works |\n\n---\n\n## Limitations\n\n| Issue                  | Workaround                           |\n| ---------------------- | ------------------------------------ |\n| Vite-only plugin       | Manual `<script>` for other bundlers |\n| Fixed 7-day TTL        | Override in source (config planned)  |\n| Full-page capture only | Sub-tree snapshots not supported yet |\n\n---\n\n## FAQ\n\n**Q: Does this work with SSR/Next.js?**\n\nA: No. Prepaint targets pure CSR apps. For SSR, use framework's native features.\n\n---\n\n**Q: Will this increase memory usage?**\n\nA: Snapshots live in IndexedDB (disk). Memory overhead is minimal during boot.\n\n---\n\n**Q: How do I prevent duplicate UI?**\n\nA: Snapshot restore always uses an overlay outside the React root. No additional option is required.\n\n---\n\n**Q: Can I restrict capture to certain routes?**\n\nA: Yes. Configure exact pathnames with `firstTx({ policy: { routes: [...] } })`. Missing or empty routes disable both capture and restore, and stale records are pruned.\n\n---\n\n**Q: Does Prepaint hydrate the saved DOM?**\n\nA: No. Saved DOM is visual cache only. React always mounts into an empty root with `createRoot()`.\n\n---\n\n## Changelog\n\n### [0.3.0](https://github.com/joseph0926/firsttx/releases/tag/%40firsttx%2Fprepaint%400.3.0) - 2025.10.12\n\n**Add overlay mode and hard hydration bailout to prepaint**\n\nThis release introduces significant improvements to snapshot capture and hydration reliability:\n\n**Breaking Changes**\n\n- `captureSnapshot()` now uses root element serialization instead of `body.innerHTML`\n- Requires `#root` element to be present for capture to work\n\n**New Features**\n\n- **Overlay mode support** Adds global `__FIRSTTX_DEV__` flag for development logging\n- **Volatile data handling** Elements with `data-firsttx-volatile` attribute are automatically cleared during capture (useful for timestamps, random values)\n- **Style filtering** Prepaint-injected styles are now excluded from capture via `data-firsttx-prepaint` attribute\n- **Enhanced capture timing**\n  - Captures on `visibilitychange` (when page becomes hidden)\n  - Captures on `pagehide` (mobile-friendly)\n  - Maintains `beforeunload` capture\n  - Debounced with microtask queue to prevent duplicate saves\n\n**Improvements**\n\n- Cleaner serialization: Only captures first child of root element\n- More reliable hydration: Filters out dynamic content that causes mismatches\n- Better mobile support: `pagehide` event works more reliably on iOS/Android\n- Development experience: `__FIRSTTX_DEV__` replaces `process.env.NODE_ENV` checks\n\n**Migration Guide**\n\n```tsx\n// If you have dynamic content that changes on every render:\n<span data-firsttx-volatile>{Date.now()}</span>\n<div data-firsttx-volatile>{Math.random()}</div>\n\n// Vite plugin automatically injects __FIRSTTX_DEV__ flag\n// No changes needed to your vite.config.ts\n```\n\n---\n\n## Related Packages\n\n- [`@firsttx/local-first`](https://www.npmjs.com/package/@firsttx/local-first) - IndexedDB + React integration\n- [`@firsttx/tx`](https://www.npmjs.com/package/@firsttx/tx) - Optimistic sagas with compensating rollback\n\n---\n\n## License\n\nMIT © [joseph0926](https://github.com/joseph0926)\n","readmeFilename":""}