{"_id":"quickjs-wasi","_rev":"36-7290a38076323ec3f8c57a3f540a163c","name":"quickjs-wasi","dist-tags":{"latest":"3.6.2"},"versions":{"0.0.0":{"name":"quickjs-wasi","version":"0.0.0","license":"MIT","_id":"quickjs-wasi@0.0.0","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"}],"homepage":"https://github.com/vercel-labs/quickjs-wasm#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasm/issues"},"dist":{"shasum":"51ae2e8893613b4f26cf03b2f85ae72fb4e93b4a","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-0.0.0.tgz","fileCount":11,"integrity":"sha512-HDVJM7xo2dQlhcjLDE98F956lSp1AS0Oa2LXcf7y0z7EFk9HYq/k1yv5bfBvwx4uTljmUEBDDIVnhjNhIPOgiw==","signatures":[{"sig":"MEQCIGcbacCJeXoz80QPtVe2UyFw+FhHwOmEyy6WodH4wFATAiBsRGg2x/Ys8ySThlQJM3tRVl2gS8c7/TBaF86tT8VLKw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1564771},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"e590e47c6f1c19ce5636eb96db9ebac2d237d294","scripts":{"test":"vitest run","build":"pnpm run build:wasm && pnpm run build:ts","build:ts":"tsc","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version"},"_npmUser":{"name":"tootallnate","email":"nathan@tootallnate.net"},"repository":{"url":"git://github.com/vercel-labs/quickjs-wasm.git","type":"git"},"_npmVersion":"11.10.1","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","typescript":"^5.7.0","@types/node":"^22.0.0","degenerator":"^5.0.1","@changesets/cli":"^2.29.8","@changesets/changelog-github":"^0.5.2"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_0.0.0_1772829585658_0.051383169647845284","host":"s3://npm-registry-packages-npm-production"}},"0.0.1":{"name":"quickjs-wasi","version":"0.0.1","license":"MIT","_id":"quickjs-wasi@0.0.1","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasm#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasm/issues"},"dist":{"shasum":"a2087b982a76ac0eb3bdcb93d7e51f178457d0fb","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-0.0.1.tgz","fileCount":11,"integrity":"sha512-fBWNLTBkxkLAhe1AzF1hyXEvuA+N+vV1WMP2D6iiMUblvmOt8Pp5t8zUcgvz7aYA1ldUdxDlgUse15dmcKjkNg==","signatures":[{"sig":"MEYCIQCYszKN+HXv4B+7FbAAKCiln332LG2PNn6uvwuxuUwIDAIhAIIf1vll51/GkTNUNetvV7SXaufJDFPlKuaPL79qWdC0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1563298},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-0.0.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"pnpm run build:wasm && pnpm run build:ts","build:ts":"tsc","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/49a09fc2d51e2e67c9c215756448e89e/quickjs-wasi-0.0.1.tgz","_integrity":"sha512-fBWNLTBkxkLAhe1AzF1hyXEvuA+N+vV1WMP2D6iiMUblvmOt8Pp5t8zUcgvz7aYA1ldUdxDlgUse15dmcKjkNg==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasm.git","type":"git"},"_npmVersion":"11.11.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","typescript":"^5.7.0","@types/node":"^22.0.0","degenerator":"^5.0.1","@changesets/cli":"^2.29.8","@changesets/changelog-github":"^0.5.2"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_0.0.1_1772832004231_0.38322735525625373","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"quickjs-wasi","version":"0.1.0","license":"MIT","_id":"quickjs-wasi@0.1.0","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"f6c3e04ec6d294379acc34180baf783069f29c5f","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-0.1.0.tgz","fileCount":11,"integrity":"sha512-kSnAsOSp8ydJRq/a3XntGp09dGZlVGi1bH4TpYXr4v7HgRsGy63o90RjhFTOJ5Vmda3fvDg2wlSaEjttQi0JcQ==","signatures":[{"sig":"MEQCIHlJ1e61DQxbkLkVA4P/prEujQEl42nylO9M/dwBrRvoAiAT1hkjurdE8JKyykveEhvGX2s6nR4aoJWvqoDZb3B5RA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1594736},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-0.1.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"pnpm run build:wasm && pnpm run build:ts","build:ts":"tsc","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/981b9cb766dcf98168f08148f33318be/quickjs-wasi-0.1.0.tgz","_integrity":"sha512-kSnAsOSp8ydJRq/a3XntGp09dGZlVGi1bH4TpYXr4v7HgRsGy63o90RjhFTOJ5Vmda3fvDg2wlSaEjttQi0JcQ==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.11.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","typescript":"^5.7.0","@types/node":"^22.0.0","degenerator":"^5.0.1","@changesets/cli":"^2.30.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_0.1.0_1772870262049_0.3711345914698869","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"quickjs-wasi","version":"0.2.0","license":"MIT","_id":"quickjs-wasi@0.2.0","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"8fba770ac4f525611b60c66d7da7f98717294f35","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-0.2.0.tgz","fileCount":11,"integrity":"sha512-Qb1sI+8+NjuHU/GXNBv4AQ/LkNG1/LJDLL6JTUsrDec3oP7Q3qbb5zaTPZTcmXOWdgA0VDD0dV/ef/SweK2jgA==","signatures":[{"sig":"MEUCIQD10XGXsP6kSuSYl1dL8ipOiNnSu6UWb4KjAvA7bxc1oQIgWNYFDUr5132kQzjqJH4HlaTA3KR5E91VmpkxEZeiZSQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1608679},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-0.2.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"pnpm run build:wasm && pnpm run build:ts","build:ts":"tsc","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/3e9d3ba73d62fc408fc8b8a68cd47e3f/quickjs-wasi-0.2.0.tgz","_integrity":"sha512-Qb1sI+8+NjuHU/GXNBv4AQ/LkNG1/LJDLL6JTUsrDec3oP7Q3qbb5zaTPZTcmXOWdgA0VDD0dV/ef/SweK2jgA==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.11.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","typescript":"^5.7.0","@types/node":"^22.0.0","degenerator":"^5.0.1","@changesets/cli":"^2.30.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_0.2.0_1772920505786_0.3836588613435017","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"quickjs-wasi","version":"1.0.0","license":"MIT","_id":"quickjs-wasi@1.0.0","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"283e22160f032b93cb71b0728a7c46d130bccd13","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-1.0.0.tgz","fileCount":15,"integrity":"sha512-+A+o9cjwp8Ic4a7NkOYOW5wff1qAktLh1agwbS7Po3LCivcNZNQgS54PMqJ9BP2bVVB1i0k39BelaPWAIir7Ug==","signatures":[{"sig":"MEQCIARdzWV+CBDjxIycq1khYc3y9GkbEM4lh41UnZvsaTYFAiBeMkn5AS51Yr41SJkJtJbRcJrsGtK555oI8zvvbcFVKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1711531},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-1.0.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"pnpm run build:wasm && pnpm run build:ts","build:ts":"tsc","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/df2d4198852e288e7e636361389652f1/quickjs-wasi-1.0.0.tgz","_integrity":"sha512-+A+o9cjwp8Ic4a7NkOYOW5wff1qAktLh1agwbS7Po3LCivcNZNQgS54PMqJ9BP2bVVB1i0k39BelaPWAIir7Ug==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.11.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","typescript":"^5.7.0","@types/node":"^22.0.0","degenerator":"^5.0.1","@changesets/cli":"^2.30.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_1.0.0_1773099395001_0.07275265354514726","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"quickjs-wasi","version":"1.1.0","license":"MIT","_id":"quickjs-wasi@1.1.0","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"qiao","email":"xueqiaoxu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"83ba374b9d7096f29775dd08ebeffef23757a7a6","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-1.1.0.tgz","fileCount":35,"integrity":"sha512-jHkEZUwlR39iSbjIS/pyBhMfNl+O3ZoWBrvaXIOjXcg4dHv/Yu4afQ3em13sKLG2eT9Qzuy9ZyBuVP4mXhECMg==","signatures":[{"sig":"MEQCICsoYHsHWm9jBlnDqhXcL3mf7xi2cdTmxQE5txP9xdVOAiAwy4lAzePQSlrVr3QoZCf66ZATUsmATUVm9iH1H6t7CA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2643463},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-1.1.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url":{"types":"./dist/url.d.ts","default":"./dist/url.js"},"./base64":{"types":"./dist/base64.d.ts","default":"./dist/base64.js"},"./encoding":{"types":"./dist/encoding.d.ts","default":"./dist/encoding.js"},"./structured-clone":{"types":"./dist/structured-clone.d.ts","default":"./dist/structured-clone.js"}},"scripts":{"test":"vitest run","bench":"bun run bench/url-benchmark.ts","build":"pnpm run build:wasm && pnpm run build:ts","build:ts":"tsc","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version","bench:base64":"bun run bench/base64-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/5da745bd2f4853233b85510272cffe45/quickjs-wasi-1.1.0.tgz","_integrity":"sha512-jHkEZUwlR39iSbjIS/pyBhMfNl+O3ZoWBrvaXIOjXcg4dHv/Yu4afQ3em13sKLG2eT9Qzuy9ZyBuVP4mXhECMg==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.11.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.10","vitest":"^4.0.18","esbuild":"^0.27.3","typescript":"^5.7.0","@types/node":"^22.0.0","degenerator":"^5.0.1","core-js-pure":"^3.48.0","@changesets/cli":"^2.30.0","fast-text-encoding":"^1.0.6","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_1.1.0_1773219325699_0.2938404772201486","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"quickjs-wasi","version":"1.2.0","license":"MIT","_id":"quickjs-wasi@1.2.0","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"qiao","email":"xueqiaoxu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"ab72e73f6b1da007aa69c645019fa3ef5f5b198d","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-1.2.0.tgz","fileCount":40,"integrity":"sha512-CZ8YmEHqTcbVT+REWR1eS/YDXwpknaEObOzNUoRQ2B3020hydxgAoTM7EWY5fW90hm2UF3L12fdHMZJFCAupug==","signatures":[{"sig":"MEUCIEG29dr7PXy2Ov8Bg7KMa9OGobZiPlDNJIjnjskqQQadAiEA0AwwmMyeEuvbWRQzQlJrgKTmx7fv6T0aWNJHSinhAoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2666462},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-1.2.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url":{"types":"./dist/url.d.ts","default":"./dist/url.js"},"./base64":{"types":"./dist/base64.d.ts","default":"./dist/base64.js"},"./headers":{"types":"./dist/headers.d.ts","default":"./dist/headers.js"},"./encoding":{"types":"./dist/encoding.d.ts","default":"./dist/encoding.js"},"./structured-clone":{"types":"./dist/structured-clone.d.ts","default":"./dist/structured-clone.js"}},"scripts":{"test":"vitest run","bench":"bun run bench/url-benchmark.ts","build":"pnpm run build:wasm && pnpm run build:ts","build:ts":"tsc","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version","bench:base64":"bun run bench/base64-benchmark.ts","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/64cb0b89596abafd2ecb579c90e5950e/quickjs-wasi-1.2.0.tgz","_integrity":"sha512-CZ8YmEHqTcbVT+REWR1eS/YDXwpknaEObOzNUoRQ2B3020hydxgAoTM7EWY5fW90hm2UF3L12fdHMZJFCAupug==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.11.1","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.10","vitest":"^4.0.18","esbuild":"^0.27.3","typescript":"^5.7.0","@types/node":"^22.0.0","degenerator":"^5.0.1","core-js-pure":"^3.48.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.30.0","fast-text-encoding":"^1.0.6","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_1.2.0_1773351341446_0.16771557585603802","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"quickjs-wasi","version":"1.3.0","license":"MIT","_id":"quickjs-wasi@1.3.0","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"qiao","email":"xueqiaoxu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"6a9d8646a16d9dd7b15c1db1718f04afd72461a9","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-1.3.0.tgz","fileCount":45,"integrity":"sha512-gkkgMGYZyADVvV55q39ryQirfbGj3Sa14Ru1VXLk9WQ/MYQ2y2SztMX7s/qqdV2HrrlYUcGgojmqKfHdKi8vqA==","signatures":[{"sig":"MEUCIQCXOAwQIzAZQGuhQo4STcYVp/4OCHF3eNy+0SCk0FiluAIgFqgpgKJAIIX40y+EMBe0xT/C5B+vtiJwRzmolvUEP6I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2866819},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-1.3.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url":{"types":"./dist/url.d.ts","default":"./dist/url.js"},"./base64":{"types":"./dist/base64.d.ts","default":"./dist/base64.js"},"./crypto":{"types":"./dist/crypto.d.ts","default":"./dist/crypto.js"},"./headers":{"types":"./dist/headers.d.ts","default":"./dist/headers.js"},"./encoding":{"types":"./dist/encoding.d.ts","default":"./dist/encoding.js"},"./structured-clone":{"types":"./dist/structured-clone.d.ts","default":"./dist/structured-clone.js"}},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:base64 && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version","bench:base64":"bun run bench/base64-benchmark.ts","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/e6dc31968b8eb7afc927df46f2f87996/quickjs-wasi-1.3.0.tgz","_integrity":"sha512-gkkgMGYZyADVvV55q39ryQirfbGj3Sa14Ru1VXLk9WQ/MYQ2y2SztMX7s/qqdV2HrrlYUcGgojmqKfHdKi8vqA==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.11.1","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.10","vitest":"^4.0.18","esbuild":"^0.27.3","tinybench":"^6.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@vercel/nft":"^1.3.2","degenerator":"^5.0.1","core-js-pure":"^3.48.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.30.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_1.3.0_1773681874194_0.9499100236697549","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"quickjs-wasi","version":"2.0.0","license":"MIT","_id":"quickjs-wasi@2.0.0","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"qiao","email":"xueqiaoxu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"9e588567c73ad4b76b944876283bc53ba8c43db9","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-2.0.0.tgz","fileCount":45,"integrity":"sha512-9bSUf9KSi4wAWQpgFZNYx/aeL7v0wBd+jgjwNNhL115BD0JsC9ojBfkqiAeh/CynwX39OUYUSU2myisgFteLog==","signatures":[{"sig":"MEYCIQDDL5QzfZBfDb/r803IsYaj/ClYDB4SDKJ1RdmsYksl2gIhAJlWUBl7ej1xfYDizKDNz1ugYTk+6q/EKUiWEpW7zjyi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2910833},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-2.0.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url":{"types":"./dist/url.d.ts","default":"./dist/url.js"},"./base64":{"types":"./dist/base64.d.ts","default":"./dist/base64.js"},"./crypto":{"types":"./dist/crypto.d.ts","default":"./dist/crypto.js"},"./headers":{"types":"./dist/headers.d.ts","default":"./dist/headers.js"},"./encoding":{"types":"./dist/encoding.d.ts","default":"./dist/encoding.js"},"./structured-clone":{"types":"./dist/structured-clone.d.ts","default":"./dist/structured-clone.js"}},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:base64 && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version","bench:base64":"bun run bench/base64-benchmark.ts","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/10c2eda7373dc65ac8608ac364503056/quickjs-wasi-2.0.0.tgz","_integrity":"sha512-9bSUf9KSi4wAWQpgFZNYx/aeL7v0wBd+jgjwNNhL115BD0JsC9ojBfkqiAeh/CynwX39OUYUSU2myisgFteLog==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.11.1","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.10","vitest":"^4.0.18","esbuild":"^0.27.3","tinybench":"^6.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@vercel/nft":"^1.3.2","degenerator":"^5.0.1","core-js-pure":"^3.48.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.30.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_2.0.0_1773777906651_0.7192885147680825","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"quickjs-wasi","version":"2.0.1","license":"MIT","_id":"quickjs-wasi@2.0.1","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"qiao","email":"xueqiaoxu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"194731b9f3c14011279d125d268ae8b4fab4239f","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-2.0.1.tgz","fileCount":45,"integrity":"sha512-77wofpdLKppZSoWOTNnJdNdoKOHgrPE3dcgTpUSXt262X4/ONcUmCtSG1PQEmfcoIpNux9T16UO1sWGsd6tekA==","signatures":[{"sig":"MEQCIGF/MPqU8/F8D/TqR0R7AjpxRFZKql6FcBCRgyamqlGAAiBDtH1NsL/vrbUWjxYKP6sJVTspwDBRCGojgDRwixsEjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2910886},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-2.0.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url":{"types":"./dist/url.d.ts","default":"./dist/url.js"},"./base64":{"types":"./dist/base64.d.ts","default":"./dist/base64.js"},"./crypto":{"types":"./dist/crypto.d.ts","default":"./dist/crypto.js"},"./headers":{"types":"./dist/headers.d.ts","default":"./dist/headers.js"},"./encoding":{"types":"./dist/encoding.d.ts","default":"./dist/encoding.js"},"./package.json":"./package.json","./structured-clone":{"types":"./dist/structured-clone.d.ts","default":"./dist/structured-clone.js"}},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:base64 && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version","bench:base64":"bun run bench/base64-benchmark.ts","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/656a16cced2e98f18878adf5a8a2ceeb/quickjs-wasi-2.0.1.tgz","_integrity":"sha512-77wofpdLKppZSoWOTNnJdNdoKOHgrPE3dcgTpUSXt262X4/ONcUmCtSG1PQEmfcoIpNux9T16UO1sWGsd6tekA==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.12.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.10","vitest":"^4.0.18","esbuild":"^0.27.3","tinybench":"^6.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@vercel/nft":"^1.3.2","degenerator":"^5.0.1","core-js-pure":"^3.48.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.30.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_2.0.1_1773881653355_0.44543002550653177","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"quickjs-wasi","version":"2.1.0","license":"MIT","_id":"quickjs-wasi@2.1.0","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"qiao","email":"xueqiaoxu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"280fbf0cf58d3a015ae76d69821c0a9337d1aa2a","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-2.1.0.tgz","fileCount":45,"integrity":"sha512-Qt+XCiPiR819RLxnVDOjKRsTDtyKr+VlasAzoCsXVx1i67JxddDrjPSVD5m5imYiRwxVs4RD46M+4Bh0Yu1taA==","signatures":[{"sig":"MEYCIQClDUEr12lJSoM87eSko0PjebPdJ4xBw0fbE7Ef2qr0CwIhAJdaMJnOppTud1hokrUQLQzIAEAa7MTcwTX54BXahB8a","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2922134},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-2.1.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url":{"types":"./dist/url.d.ts","default":"./dist/url.js"},"./base64":{"types":"./dist/base64.d.ts","default":"./dist/base64.js"},"./crypto":{"types":"./dist/crypto.d.ts","default":"./dist/crypto.js"},"./headers":{"types":"./dist/headers.d.ts","default":"./dist/headers.js"},"./encoding":{"types":"./dist/encoding.d.ts","default":"./dist/encoding.js"},"./package.json":"./package.json","./structured-clone":{"types":"./dist/structured-clone.d.ts","default":"./dist/structured-clone.js"}},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:base64 && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version","bench:base64":"bun run bench/base64-benchmark.ts","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/40252f36e71b36bc9944d9c41780cc37/quickjs-wasi-2.1.0.tgz","_integrity":"sha512-Qt+XCiPiR819RLxnVDOjKRsTDtyKr+VlasAzoCsXVx1i67JxddDrjPSVD5m5imYiRwxVs4RD46M+4Bh0Yu1taA==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.12.1","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.10","vitest":"^4.0.18","esbuild":"^0.27.3","tinybench":"^6.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@vercel/nft":"^1.3.2","degenerator":"^5.0.1","core-js-pure":"^3.48.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.30.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_2.1.0_1774901575430_0.8197075983311517","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"quickjs-wasi","version":"2.2.0","license":"MIT","_id":"quickjs-wasi@2.2.0","maintainers":[{"name":"melkey","email":"melkeydev@gmail.com"},{"name":"techwraith","email":"techwraithpdx@gmail.com"},{"name":"vaguelyserious","email":"mittgfu@gmail.com"},{"name":"qiao","email":"xueqiaoxu@gmail.com"},{"name":"bobmshannon","email":"bob.shannon@vercel.com"},{"name":"vercel_it_service_account","email":"it+npmserviceaccount@vercel.com"},{"name":"ronnie-hanif","email":"ronnie.hanif@gmail.com"},{"name":"nick.tracey","email":"nick.tracey@vercel.com"},{"name":"elsigh","email":"lsimon@commoner.com"},{"name":"adamdong","email":"adam.dong@vercel.com"},{"name":"matheuss","email":"matheus.frndes@gmail.com"},{"name":"bvred4244","email":"becky.vredenburg@vercel.com"},{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"pranaygp","email":"pranay.gp@gmail.com"},{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"85d8984aa1b048546e5634c764165034c6e22d48","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-2.2.0.tgz","fileCount":49,"integrity":"sha512-zQxXmQMrEoD3S+jQdYsloq4qAuaxKFHZj6hHqOYGwB2iQZH+q9e/lf5zQPXCKOk0WJuAjzRFbO4KwHIp2D05Iw==","signatures":[{"sig":"MEUCIQCn6n05Fk1+EMUkLktwqAoVqBxpzjOd2R8KdkA4nTE2IAIgFpg5PGHfU5xsakdvv/BSC+fKriQePb/zPjJ//j90Wjo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2977399},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-2.2.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url":{"types":"./dist/url.d.ts","default":"./dist/url.js"},"./base64":{"types":"./dist/base64.d.ts","default":"./dist/base64.js"},"./crypto":{"types":"./dist/crypto.d.ts","default":"./dist/crypto.js"},"./headers":{"types":"./dist/headers.d.ts","default":"./dist/headers.js"},"./encoding":{"types":"./dist/encoding.d.ts","default":"./dist/encoding.js"},"./package.json":"./package.json","./structured-clone":{"types":"./dist/structured-clone.d.ts","default":"./dist/structured-clone.js"}},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:base64 && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:base64":"bun run bench/base64-benchmark.ts","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/8f3531ee8354857171c7fbb70fd32cd1/quickjs-wasi-2.2.0.tgz","_integrity":"sha512-zQxXmQMrEoD3S+jQdYsloq4qAuaxKFHZj6hHqOYGwB2iQZH+q9e/lf5zQPXCKOk0WJuAjzRFbO4KwHIp2D05Iw==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.11.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.10","vitest":"^4.0.18","esbuild":"^0.27.3","tinybench":"^6.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@vercel/nft":"^1.3.2","degenerator":"^5.0.1","core-js-pure":"^3.48.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.30.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_2.2.0_1775455832600_0.5254392690387797","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"quickjs-wasi","version":"3.0.0","license":"MIT","_id":"quickjs-wasi@3.0.0","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"112f276cfe20edbd146e100ce1c6f69f4863b74b","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.0.0.tgz","fileCount":24,"integrity":"sha512-X7ouKC4ZVf9bXQ8rsE7+L6TeBbesejAJH61x16xRaGAQGfBHHRcniWgzJZZVtHc8rS9yVsY+Tvk8/usAosg4bg==","signatures":[{"sig":"MEUCIF6hv5E7pJfTlS7cdyMX91fmNWz0zhTtCAwNMcBkggpJAiEAwudpQ0/SSXbgziCRbzS6NpCmlGZaPo23xd4xIWnNdHM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2994499},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.0.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/bb2754baccad6d06171c2c91ffe284e5/quickjs-wasi-3.0.0.tgz","_integrity":"sha512-X7ouKC4ZVf9bXQ8rsE7+L6TeBbesejAJH61x16xRaGAQGfBHHRcniWgzJZZVtHc8rS9yVsY+Tvk8/usAosg4bg==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.12.1","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.10","vitest":"^4.0.18","esbuild":"^0.27.3","tinybench":"^6.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@vercel/nft":"^1.3.2","degenerator":"^5.0.1","core-js-pure":"^3.48.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.30.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.0.0_1779608223366_0.07921739003773509","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"quickjs-wasi","version":"3.0.1","license":"MIT","_id":"quickjs-wasi@3.0.1","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"a811919f7c92f4b44964ca64f05b33175fd47e05","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.0.1.tgz","fileCount":24,"integrity":"sha512-WNRgnIOpZgzrv6ea3Hl7ewH+mV7krKGYX1jpjpk4vmwtwl0x4OCNOl9CgOj9hrTtEd9aiRii5fG5ZVxWL6X2mA==","signatures":[{"sig":"MEYCIQCO/453AxJc9X0JOi1Tz2taFyDkFHA0/vnXx/5c27tz/wIhAJwQu+g1Zsz1v/G+Sxlp9UOgCWYPh42M4Eyt+YGnKWGu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2996280},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.0.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/e8c072786b6c7b5b15e3bc7db3a01bfb/quickjs-wasi-3.0.1.tgz","_integrity":"sha512-WNRgnIOpZgzrv6ea3Hl7ewH+mV7krKGYX1jpjpk4vmwtwl0x4OCNOl9CgOj9hrTtEd9aiRii5fG5ZVxWL6X2mA==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.13.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.10","vitest":"^4.0.18","esbuild":"^0.27.3","tinybench":"^6.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@vercel/nft":"^1.3.2","degenerator":"^5.0.1","core-js-pure":"^3.48.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.30.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.0.1_1781684486786_0.04728751341803661","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"quickjs-wasi","version":"3.0.2","license":"MIT","_id":"quickjs-wasi@3.0.2","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"81746568a5c61e428b6990963064201c1c2f370d","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.0.2.tgz","fileCount":24,"integrity":"sha512-SyfPzlrfz67/kv0SogmQgW4c2I1klkLcbvj9Y2gc1h7+VylmvuGevFljLXibGKajKJKiJV29d4S6FQLA6Sc80A==","signatures":[{"sig":"MEQCIAxw+b606IQ6uDN8X4sPuvW8Gwf44zrjhohrWYbxr9V9AiAXQ36lSxwjuc9N2AjxGcur1qbkjmrmnFmT/Ngoss5F9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1415928},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.0.2.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:opt-level":"make clean >/dev/null && make OPT=-O2 quickjs.wasm && cp quickjs.wasm /tmp/qjs-O2.wasm && make clean >/dev/null && make OPT=-Oz quickjs.wasm && cp quickjs.wasm /tmp/qjs-Oz.wasm && QJS_O2_WASM=/tmp/qjs-O2.wasm QJS_OZ_WASM=/tmp/qjs-Oz.wasm bun run bench/opt-level-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/74a5b799e4e6391819cba9aa0d7a7b52/quickjs-wasi-3.0.2.tgz","_integrity":"sha512-SyfPzlrfz67/kv0SogmQgW4c2I1klkLcbvj9Y2gc1h7+VylmvuGevFljLXibGKajKJKiJV29d4S6FQLA6Sc80A==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.13.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.10","vitest":"^4.0.18","esbuild":"^0.27.3","binaryen":"^130.0.0","tinybench":"^6.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@vercel/nft":"^1.3.2","degenerator":"^5.0.1","core-js-pure":"^3.48.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.30.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.0.2_1782543697637_0.4282427426573787","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"quickjs-wasi","version":"3.1.0","license":"MIT","_id":"quickjs-wasi@3.1.0","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"70157770a37afaa2fb2004aac97b20764523c46a","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.1.0.tgz","fileCount":24,"integrity":"sha512-Vw2g4GhAh/QVgPIoDRgpPMBv9Z+E1LjUGgwrLewjjvTqONtty0GukgE+2IoZU1Z4anNF3uZIWA5EtBa3m0QiWQ==","signatures":[{"sig":"MEQCIErySEPAoIQ1HNjlMoyJTYYaPv8RtXPjwU/QhSzqv4EJAiBqL4hfFu5B039DH+IOxWY1iEKqskzaWcPkbposgLGNvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1423759},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.1.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:opt-level":"make clean >/dev/null && make OPT=-O2 quickjs.wasm && cp quickjs.wasm /tmp/qjs-O2.wasm && make clean >/dev/null && make OPT=-Oz quickjs.wasm && cp quickjs.wasm /tmp/qjs-Oz.wasm && QJS_O2_WASM=/tmp/qjs-O2.wasm QJS_OZ_WASM=/tmp/qjs-Oz.wasm bun run bench/opt-level-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/4b46a0809848aaed1d33701e90ae3f83/quickjs-wasi-3.1.0.tgz","_integrity":"sha512-Vw2g4GhAh/QVgPIoDRgpPMBv9Z+E1LjUGgwrLewjjvTqONtty0GukgE+2IoZU1Z4anNF3uZIWA5EtBa3m0QiWQ==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.16.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.14","vite":"^7.3.5","vitest":"^4.1.9","esbuild":"^0.28.1","binaryen":"^130.0.0","tinybench":"^6.0.2","typescript":"^5.9.3","@types/node":"^22.20.0","@vercel/nft":"^1.10.2","degenerator":"^5.0.1","core-js-pure":"^3.49.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.31.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.1.0_1784596182108_0.7678084205385447","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"quickjs-wasi","version":"3.2.0","license":"MIT","_id":"quickjs-wasi@3.2.0","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"a907f16b3a3735751da3cb02d7521775891fd40a","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.2.0.tgz","fileCount":24,"integrity":"sha512-+7ArUWrc1qCtFLjpNVGI47eGih4TKWg3RSB+FfPFtnfZrKlgvCGUUWbClDalFL7lzNAYH82jrPPHsh3LBkuk7g==","signatures":[{"sig":"MEUCIQDRaK3TPNgZJjSyJsRVKYv+FcFshSXTjoby3zdVJQOMfAIgadM5ejJ22sSF5y1n+brhig6IjXpKLhJ27lo639to3Cg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1445913},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.2.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:opt-level":"make clean >/dev/null && make OPT=-O2 quickjs.wasm && cp quickjs.wasm /tmp/qjs-O2.wasm && make clean >/dev/null && make OPT=-Oz quickjs.wasm && cp quickjs.wasm /tmp/qjs-Oz.wasm && QJS_O2_WASM=/tmp/qjs-O2.wasm QJS_OZ_WASM=/tmp/qjs-Oz.wasm bun run bench/opt-level-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/e2231f622b453fa748a931205b4b3355/quickjs-wasi-3.2.0.tgz","_integrity":"sha512-+7ArUWrc1qCtFLjpNVGI47eGih4TKWg3RSB+FfPFtnfZrKlgvCGUUWbClDalFL7lzNAYH82jrPPHsh3LBkuk7g==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.16.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.14","vite":"^7.3.5","vitest":"^4.1.9","esbuild":"^0.28.1","binaryen":"^130.0.0","tinybench":"^6.0.2","typescript":"^5.9.3","@types/node":"^22.20.0","@vercel/nft":"^1.10.2","degenerator":"^5.0.1","core-js-pure":"^3.49.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.31.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.2.0_1784800312601_0.2941091123160189","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"quickjs-wasi","version":"3.3.0","license":"MIT","_id":"quickjs-wasi@3.3.0","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"e14b4435c5da857598c74bbfadb27115b6e299f6","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.3.0.tgz","fileCount":24,"integrity":"sha512-IYbBhELZIWUHLriW3TA3Fsg/lhFxWHtc4U++VtdoIwDMiatb0xJKskgHVREl1R4xXmnUvzmtuERYHEDuYkqyOA==","signatures":[{"sig":"MEQCIBGnPXZ/IevmkLCWeDjCT4PT81PFr5Jh0HYjeCexVMLmAiBFbk4uZTyZ+npP96Xy/27/Mnt44ilnlbQXSxkHePG6Zw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC5ln4tqt3E24j0kKe6yvAW67fFrF2NPWKAjTP3CsvFGQIhALGj95zbCvyBr+gXSalNNvfz9Mq23nP31lsRyGfBSksV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1465299},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.3.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:opt-level":"make clean >/dev/null && make OPT=-O2 quickjs.wasm && cp quickjs.wasm /tmp/qjs-O2.wasm && make clean >/dev/null && make OPT=-Oz quickjs.wasm && cp quickjs.wasm /tmp/qjs-Oz.wasm && QJS_O2_WASM=/tmp/qjs-O2.wasm QJS_OZ_WASM=/tmp/qjs-Oz.wasm bun run bench/opt-level-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/66134baeb9b5941587b27577659e2dbb/quickjs-wasi-3.3.0.tgz","_integrity":"sha512-IYbBhELZIWUHLriW3TA3Fsg/lhFxWHtc4U++VtdoIwDMiatb0xJKskgHVREl1R4xXmnUvzmtuERYHEDuYkqyOA==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.16.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.14","vite":"^7.3.5","vitest":"^4.1.9","devalue":"^5.9.0","esbuild":"^0.28.1","binaryen":"^130.0.0","tinybench":"^6.0.2","typescript":"^5.9.3","@types/node":"^22.20.0","@vercel/nft":"^1.10.2","degenerator":"^5.0.1","core-js-pure":"^3.49.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.31.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.3.0_1785521323494_0.5687381778819973","host":"s3://npm-registry-packages-npm-production"}},"3.3.1":{"name":"quickjs-wasi","version":"3.3.1","license":"MIT","_id":"quickjs-wasi@3.3.1","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"0c1acad2620f36c081065df6059f2d1164ad0ad6","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.3.1.tgz","fileCount":24,"integrity":"sha512-03RhBUA6hNX4274oa10pWpkXsbOhgqTvCoFPm8Dy3E7jcp+obNHVQGQZXghcNOutJaiOWkyezwdgbANHD1/Gxw==","signatures":[{"sig":"MEUCIHoKTBRvLKAOVqG8Z2MR4IIwV+X/zNuKQAVb6TnJoePwAiEA/ZsqJpZkoE0RY6oEgJ6kgCwDXqtNQW6kg5ShMc2BPp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDdYEQr+4iU8WUZUsK1nujdHDWc6hS2ybiYJcrNnlUeoQIgCZG3AF9QUGmmHOmUy9T9F+dlkvTdPUO4gZRKkINwGVo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1470330},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.3.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:opt-level":"make clean >/dev/null && make OPT=-O2 quickjs.wasm && cp quickjs.wasm /tmp/qjs-O2.wasm && make clean >/dev/null && make OPT=-Oz quickjs.wasm && cp quickjs.wasm /tmp/qjs-Oz.wasm && QJS_O2_WASM=/tmp/qjs-O2.wasm QJS_OZ_WASM=/tmp/qjs-Oz.wasm bun run bench/opt-level-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/10dfc7cbe3da53791cef18f330ac9315/quickjs-wasi-3.3.1.tgz","_integrity":"sha512-03RhBUA6hNX4274oa10pWpkXsbOhgqTvCoFPm8Dy3E7jcp+obNHVQGQZXghcNOutJaiOWkyezwdgbANHD1/Gxw==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.16.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.14","vite":"^7.3.5","vitest":"^4.1.9","devalue":"^5.9.0","esbuild":"^0.28.1","binaryen":"^130.0.0","tinybench":"^6.0.2","typescript":"^5.9.3","@types/node":"^22.20.0","@vercel/nft":"^1.10.2","degenerator":"^5.0.1","core-js-pure":"^3.49.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.31.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.3.1_1785881675062_0.25248890767537","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"quickjs-wasi","version":"3.4.0","license":"MIT","_id":"quickjs-wasi@3.4.0","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"310fda9244715c3061090dab2f9b3576ee106be8","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.4.0.tgz","fileCount":24,"integrity":"sha512-ttKaBD8u0RXhz2UqDU8wOEruhxADt0WWHfMfnNR8aO0UyhlifFS6NvPYFbyhASjqIp2/1dpneoP1IzBUxION1w==","signatures":[{"sig":"MEUCIBr7RGB7T83SHJwRymSAIgvNsiIrAmxLWjThFIlTf1kEAiEA+g9W8itXQs1n+6i3gzs3NCBsmd+cF+zdCJ4vTe8lpes=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIC/ojaD7Q3AaJWUW0Wl8ZlX4I2djz0MJAC8OUPLv+aOGAiEAimdOn2ForHimm9KhwcgpHTNaZWRbZovYAayAoVf53DA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1492771},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.4.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:opt-level":"make clean >/dev/null && make OPT=-O2 quickjs.wasm && cp quickjs.wasm /tmp/qjs-O2.wasm && make clean >/dev/null && make OPT=-Oz quickjs.wasm && cp quickjs.wasm /tmp/qjs-Oz.wasm && QJS_O2_WASM=/tmp/qjs-O2.wasm QJS_OZ_WASM=/tmp/qjs-Oz.wasm bun run bench/opt-level-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/84264624812eb2963b22295f335f2110/quickjs-wasi-3.4.0.tgz","_integrity":"sha512-ttKaBD8u0RXhz2UqDU8wOEruhxADt0WWHfMfnNR8aO0UyhlifFS6NvPYFbyhASjqIp2/1dpneoP1IzBUxION1w==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.16.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.14","vite":"^7.3.5","vitest":"^4.1.9","devalue":"^5.9.0","esbuild":"^0.28.1","binaryen":"^130.0.0","tinybench":"^6.0.2","typescript":"^5.9.3","@types/node":"^22.20.0","@vercel/nft":"^1.10.2","degenerator":"^5.0.1","core-js-pure":"^3.49.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.31.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.4.0_1786000101217_0.25073873189501006","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"name":"quickjs-wasi","version":"3.5.0","license":"MIT","_id":"quickjs-wasi@3.5.0","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"3eefb907131a1fe0099e4bc3a6f7c6a480d094a4","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.5.0.tgz","fileCount":24,"integrity":"sha512-/4LKs62eqqqQyr0uVEgSvB3QeOlIpM0Wc4XPgomOfucVurDWssH2eNfDS0Y4NjQoIzoD8jVO7qWvR5drkgnRVg==","signatures":[{"sig":"MEYCIQCehoUAK7FHt2i+lxbqlHz/gDjt7/myAjCtBBx9NJEp1AIhAL4sGzmkxFKcTD174XO7bQ4D8VWTpHwFpXJev19reZu4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCID9fQmE4LMliUnRiHMjN5ugbDqvPzxvV+jqu8swsWWMKAiBTwfpL+RWj3Sqm7uKsJNdyAmfqJ11JhyATcztpiEybDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1519904},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.5.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:opt-level":"make clean >/dev/null && make OPT=-O2 quickjs.wasm && cp quickjs.wasm /tmp/qjs-O2.wasm && make clean >/dev/null && make OPT=-Oz quickjs.wasm && cp quickjs.wasm /tmp/qjs-Oz.wasm && QJS_O2_WASM=/tmp/qjs-O2.wasm QJS_OZ_WASM=/tmp/qjs-Oz.wasm bun run bench/opt-level-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/fc6cee48f698403932eacb5ca3e309f4/quickjs-wasi-3.5.0.tgz","_integrity":"sha512-/4LKs62eqqqQyr0uVEgSvB3QeOlIpM0Wc4XPgomOfucVurDWssH2eNfDS0Y4NjQoIzoD8jVO7qWvR5drkgnRVg==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.17.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.14","vite":"^7.3.5","vitest":"^4.1.9","devalue":"^5.9.0","esbuild":"^0.28.1","binaryen":"^130.0.0","tinybench":"^6.0.2","typescript":"^5.9.3","@types/node":"^22.20.0","@vercel/nft":"^1.10.2","degenerator":"^5.0.1","core-js-pure":"^3.49.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.31.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.5.0_1787257170703_0.9714671022969323","host":"s3://npm-registry-packages-npm-production"}},"3.6.0":{"name":"quickjs-wasi","version":"3.6.0","license":"MIT","_id":"quickjs-wasi@3.6.0","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"ffe3dc9ab5952b0a5e26e6356221639bfd56acd2","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.6.0.tgz","fileCount":24,"integrity":"sha512-/CNzMq42B8ThzUpzjLSF8K50ntVLV3RREyT8zr4wHaP2CZSHFhPkqg3E1GULmTerehf8Bo+UguQ+4LoOMCTC6A==","signatures":[{"sig":"MEUCIF517HzCcAp54tus610gTC36jtZ32LXSRPIGYSRofTKHAiEAg+Khmee+ditQ/chhdfigGyp0awGUQ/Qd6qqo/PCpq2A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIC9ZWTkSczLL+qeAEGlwbS74Ze23OQ14Bh+QGsECaepNAiEAvtng6UpfdtR1Ro1a6CHfQUMgTw/KSznIxueatAZcQ6w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1521638},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.6.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:opt-level":"make clean >/dev/null && make OPT=-O2 quickjs.wasm && cp quickjs.wasm /tmp/qjs-O2.wasm && make clean >/dev/null && make OPT=-Oz quickjs.wasm && cp quickjs.wasm /tmp/qjs-Oz.wasm && QJS_O2_WASM=/tmp/qjs-O2.wasm QJS_OZ_WASM=/tmp/qjs-Oz.wasm bun run bench/opt-level-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/cd7561bd34da9609257e9ae976f914f7/quickjs-wasi-3.6.0.tgz","_integrity":"sha512-/CNzMq42B8ThzUpzjLSF8K50ntVLV3RREyT8zr4wHaP2CZSHFhPkqg3E1GULmTerehf8Bo+UguQ+4LoOMCTC6A==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.17.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.14","vite":"^7.3.5","vitest":"^4.1.9","devalue":"^5.9.0","esbuild":"^0.28.1","binaryen":"^130.0.0","tinybench":"^6.0.2","typescript":"^5.9.3","@types/node":"^22.20.0","@vercel/nft":"^1.10.2","degenerator":"^5.0.1","core-js-pure":"^3.49.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.31.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.6.0_1787695290421_0.8160971467509794","host":"s3://npm-registry-packages-npm-production"}},"3.6.1":{"name":"quickjs-wasi","version":"3.6.1","license":"MIT","_id":"quickjs-wasi@3.6.1","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"b4f8e4126b344615feb03c6f49e5d9a60d621629","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.6.1.tgz","fileCount":25,"integrity":"sha512-cw0Q9c5g0AGWDJdLgzqm853g9oznW7ySDIDZbAeUovo1kDro6uRFd2hTrEvLqVxFiMz3demZHsQe0Pgv5BxB6A==","signatures":[{"sig":"MEQCIFCnFaEbYZ3qFbzwA0Y845a+7uLRobUB4VuZ6jIBYzp2AiAx2EJfRfJzeOFhUMScJfK+7Of0nHxqeYy7d0BC22zdZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBNlbqgr7WFH83AuSsQ5isWDvZejsvSP1gDSWs8VOS/kAiEAmRtpzBHP7aJKcvyl7IWQXPJAYdBuABpnh2HX26qefEQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1523239},"main":"dist/index.js","type":"module","_from":"file:quickjs-wasi-3.6.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:opt-level":"make clean >/dev/null && make OPT=-O2 quickjs.wasm && cp quickjs.wasm /tmp/qjs-O2.wasm && make clean >/dev/null && make OPT=-Oz quickjs.wasm && cp quickjs.wasm /tmp/qjs-Oz.wasm && QJS_O2_WASM=/tmp/qjs-O2.wasm QJS_OZ_WASM=/tmp/qjs-Oz.wasm bun run bench/opt-level-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"_resolved":"/tmp/f5e1400b37a7f5c07df39a253e093d2e/quickjs-wasi-3.6.1.tgz","_integrity":"sha512-cw0Q9c5g0AGWDJdLgzqm853g9oznW7ySDIDZbAeUovo1kDro6uRFd2hTrEvLqVxFiMz3demZHsQe0Pgv5BxB6A==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.19.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.14","vite":"^7.3.5","vitest":"^4.1.9","devalue":"^5.9.0","esbuild":"^0.28.1","binaryen":"^130.0.0","tinybench":"^6.0.2","typescript":"^5.9.3","@types/node":"^22.20.0","@vercel/nft":"^1.10.2","degenerator":"^5.0.1","core-js-pure":"^3.49.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.31.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/quickjs-wasi_3.6.1_1789630711506_0.007229557882630022","host":"s3://npm-registry-packages-npm-production"}},"3.6.2":{"_id":"quickjs-wasi@3.6.2","bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"dist":{"shasum":"6ab7ed689997a9013b49ea7bbce3e88896bd80d9","tarball":"https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-3.6.2.tgz","fileCount":25,"integrity":"sha512-FCqGtGOrMgzUiIrMNMA2YnsOxCNwo31dzqXvclXUC6xeT35NJLKXQJsvbeCTjvoFAwZgEAPg8U6+KAPDGXn8Mg==","signatures":[{"sig":"MEUCIDQpDs8DrvHgdIPG8M6vN/Eg7gJ7SwObjaunKnwSMKUJAiEAtTZfJZv1ZZW0OlK3JAmZoDVvlrMeFgAG4ahC9Kag328=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDvUondQKFW6leZZ56ZJUhWaEy6GKo+oLZAfqUHa6uuVgIgczuVc3r5BL4iBL80OXwKpk8ZbcbnJH8USK1uEvWPfa0="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/quickjs-wasi@3.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1524119},"main":"dist/index.js","name":"quickjs-wasi","type":"module","_from":"file:quickjs-wasi-3.6.2.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./url.so":"./extensions/url/url.so","./crypto.so":"./extensions/crypto/crypto.so","./headers.so":"./extensions/headers/headers.so","./encoding.so":"./extensions/encoding/encoding.so","./package.json":"./package.json","./quickjs.wasm":"./quickjs.wasm","./structured-clone.so":"./extensions/structured-clone/structured-clone.so"},"license":"MIT","scripts":{"test":"vitest run","bench":"pnpm run bench:url && pnpm run bench:encoding && pnpm run bench:headers && pnpm run bench:emscripten","build":"pnpm run build:wasm && pnpm run build:ts","setup":"make setup","build:ts":"tsc","bench:url":"bun run bench/url-benchmark.ts","changeset":"changeset","build:wasm":"make","ci:publish":"git submodule update --init --recursive && make setup && pnpm run build && changeset publish","ci:version":"changeset version && node -e \"fs.writeFileSync('src/version.ts', '// Auto-synced with package.json version. Do not edit manually.\\nexport const VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\n')\"","bench:headers":"bun run bench/headers-benchmark.ts","bench:encoding":"bun run bench/encoding-benchmark.ts","bench:opt-level":"make clean >/dev/null && make OPT=-O2 quickjs.wasm && cp quickjs.wasm /tmp/qjs-O2.wasm && make clean >/dev/null && make OPT=-Oz quickjs.wasm && cp quickjs.wasm /tmp/qjs-Oz.wasm && QJS_O2_WASM=/tmp/qjs-O2.wasm QJS_OZ_WASM=/tmp/qjs-Oz.wasm bun run bench/opt-level-benchmark.ts","bench:emscripten":"bun run bench/emscripten-benchmark.ts"},"version":"3.6.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4316768-2b23-40c9-bfb9-77c0375b5476"}},"homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","_resolved":"/tmp/2bd2ce71ff91a36bfd7f943a7553f8eb/quickjs-wasi-3.6.2.tgz","_integrity":"sha512-FCqGtGOrMgzUiIrMNMA2YnsOxCNwo31dzqXvclXUC6xeT35NJLKXQJsvbeCTjvoFAwZgEAPg8U6+KAPDGXn8Mg==","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"_npmVersion":"11.19.0","description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","directories":{},"maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun":"^1.3.14","vite":"^7.3.5","vitest":"^4.1.9","devalue":"^5.9.0","esbuild":"^0.28.1","binaryen":"^130.0.0","tinybench":"^6.0.2","typescript":"^5.9.3","@types/node":"^22.20.0","@vercel/nft":"^1.10.2","degenerator":"^5.0.1","core-js-pure":"^3.49.0","whatwg-fetch":"^3.6.20","@changesets/cli":"^2.31.0","fast-text-encoding":"^1.0.6","quickjs-emscripten":"^0.32.0","@changesets/changelog-github":"^0.6.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/quickjs-wasi_3.6.2_1789793659709_0.10602353898188865"}}},"time":{"created":"2026-03-06T20:39:45.585Z","modified":"2026-09-19T04:54:20.184Z","0.0.0":"2026-03-06T20:39:45.889Z","0.0.1":"2026-03-06T21:20:04.435Z","0.1.0":"2026-03-07T07:57:42.248Z","0.2.0":"2026-03-07T21:55:06.020Z","1.0.0":"2026-03-09T23:36:35.237Z","1.1.0":"2026-03-11T08:55:25.908Z","1.2.0":"2026-03-12T21:35:41.696Z","1.3.0":"2026-03-16T17:24:34.370Z","2.0.0":"2026-03-17T20:05:06.908Z","2.0.1":"2026-03-19T00:54:13.595Z","2.1.0":"2026-03-30T20:12:55.639Z","2.2.0":"2026-04-06T06:10:32.790Z","3.0.0":"2026-05-24T07:37:03.529Z","3.0.1":"2026-06-17T08:21:26.998Z","3.0.2":"2026-06-27T07:01:37.817Z","3.1.0":"2026-07-21T01:09:42.303Z","3.2.0":"2026-07-23T09:51:52.792Z","3.3.0":"2026-07-31T18:08:43.605Z","3.3.1":"2026-08-04T22:14:35.189Z","3.4.0":"2026-08-06T07:08:21.343Z","3.5.0":"2026-08-20T20:19:30.860Z","3.6.0":"2026-08-25T22:01:30.548Z","3.6.1":"2026-09-17T07:38:31.610Z","3.6.2":"2026-09-19T04:54:19.848Z"},"bugs":{"url":"https://github.com/vercel-labs/quickjs-wasi/issues"},"license":"MIT","homepage":"https://github.com/vercel-labs/quickjs-wasi#readme","repository":{"url":"git://github.com/vercel-labs/quickjs-wasi.git","type":"git"},"description":"Snapshotable JavaScript runtime via WebAssembly. QuickJS-NG compiled to WASM with snapshot/restore support.","maintainers":[{"name":"tootallnate","email":"nathan@tootallnate.net"},{"name":"adamdong","email":"adam.dong@vercel.com"}],"readme":"# quickjs-wasi\n\nA snapshotable JavaScript runtime via WebAssembly. Runs [QuickJS](https://github.com/quickjs-ng/quickjs) compiled to WASM, with the ability to **snapshot the entire VM state** (including pending promises) and **restore it in a fresh WASM instance**.\n\n## Install\n\n```sh\nnpm install quickjs-wasi\n```\n\n## Usage\n\n### Loading the WASM binary\n\nThe caller is responsible for providing the WASM bytes (or a pre-compiled `WebAssembly.Module`): quickjs-wasi does no implicit filesystem or network I/O. The package ships the binary at the `quickjs-wasi/quickjs.wasm` subpath, which can be resolved by your environment's preferred mechanism.\n\nNode.js (read from disk):\n\n```typescript\nimport { readFile } from 'node:fs/promises';\n\nconst wasmBytes = await readFile(new URL(import.meta.resolve('quickjs-wasi/quickjs.wasm')));\n// or with require.resolve in CJS:\n//   readFileSync(require.resolve('quickjs-wasi/quickjs.wasm'))\n```\n\nBrowser (`fetch` + streaming compile):\n\n```typescript\nconst wasmModule = await WebAssembly.compileStreaming(fetch('/quickjs.wasm'));\n```\n\nVite / bundlers using the `?url` import suffix:\n\n```typescript\nimport wasmUrl from 'quickjs-wasi/quickjs.wasm?url';\n\nconst wasmModule = await WebAssembly.compileStreaming(fetch(wasmUrl));\n```\n\nCompile a `WebAssembly.Module` once and reuse it across VMs: instantiation from a compiled module skips recompiling the ~620 KB binary on every `QuickJS.create()` call.\n\n### Basic evaluation\n\nBoth `QuickJS` and `JSValueHandle` implement `Symbol.dispose`, so you can use `using` declarations for automatic cleanup:\n\n```typescript\nimport { QuickJS } from 'quickjs-wasi';\n\n{\n  using vm = await QuickJS.create({ wasm: wasmBytes });\n\n  // Evaluate code. Handles are auto-disposed with `using`\n  using result = vm.evalCode('1 + 2');\n  console.log(result.toNumber()); // 3\n} // vm and result are automatically disposed here\n```\n\n### Working with values\n\n```typescript\nusing vm = await QuickJS.create(wasmBytes);\n\n// Create values. `using` ensures they're disposed at end of scope\n{\n  using str = vm.newString('hello');\n  using num = vm.newNumber(42);\n  using big = vm.newBigInt(9007199254740993n);\n  vm.setProp(vm.global, 'message', str);\n}\n\n// Read back the value\nusing msg = vm.evalCode('message');\nconsole.log(msg.toString()); // \"hello\"\n\n// Convert host values to QuickJS handles (and back)\nusing handle = vm.hostToHandle({ x: 1, y: [2, 3] });\nconst dumped = vm.dump(handle); // { x: 1, y: [2, 3] }\n\n// `consume()` is useful for inline one-liners\nconst value = vm.evalCode('1 + 2').consume(h => h.toNumber()); // 3\n```\n\n### Host functions\n\nRegister JavaScript functions backed by host (Node.js) callbacks:\n\n```typescript\nusing vm = await QuickJS.create(wasmBytes);\n\n// The callback receives the call arguments as handles. The guest `this`\n// value is the callback's `this` binding, so use a regular `function`\n// expression (not an arrow function) if you need to access it.\n{\n  using add = vm.newFunction('add', (...args) => {\n    return vm.newNumber(args[0].toNumber() + args[1].toNumber());\n  });\n  vm.setProp(vm.global, 'add', add);\n}\n\nusing result = vm.evalCode('add(3, 4)');\nconsole.log(result.toNumber()); // 7\n```\n\n### Promises and async host functions\n\nBridge async host operations into the QuickJS sandbox:\n\n```typescript\nusing vm = await QuickJS.create(wasmBytes);\n\n// Create an async host function that returns a promise to QuickJS\n{\n  using dnsResolve = vm.newFunction('dnsResolve', (...args) => {\n    const hostname = args[0].toString();\n    const deferred = vm.newPromise();\n\n    // Do real async work on the host side\n    dns.resolve4(hostname).then(\n      (addresses) => {\n        deferred.resolve(vm.newString(addresses[0]));\n        vm.executePendingJobs(); // drain the QuickJS job queue\n      },\n      (err) => {\n        deferred.reject(vm.newError(err));\n        vm.executePendingJobs();\n      }\n    );\n\n    return deferred.handle; // return the QuickJS promise\n  });\n  vm.setProp(vm.global, 'dnsResolve', dnsResolve);\n}\n```\n\n### ES modules\n\nEvaluate code as an ES module with `EvalFlags.TYPE_MODULE`. Module evaluation\nreturns a handle to a Promise that resolves to the module's namespace object\n(its exports):\n\n```typescript\nimport { QuickJS, EvalFlags } from 'quickjs-wasi';\n\nusing vm = await QuickJS.create(wasmBytes);\n\nusing promise = vm.evalCode(\n  'export const x = 42; export default \"hi\";',\n  '<eval>',\n  EvalFlags.TYPE_MODULE\n);\nvm.executePendingJobs();\n\nconst result = await vm.resolvePromise(promise);\nif ('error' in result) {\n  console.error(result.error.consume(h => h.toString()));\n} else {\n  using ns = result.value;\n  ns.getProp('x').consume(h => h.toNumber());        // 42\n  ns.getProp('default').consume(h => h.toString());  // \"hi\"\n}\n```\n\n`import` statements are resolved through the `moduleLoader` option:\n\n```typescript\nusing vm = await QuickJS.create({\n  wasm: wasmBytes,\n  moduleLoader: {\n    // Optional: resolve relative specifiers against the importing module\n    normalize: (baseName, specifier) => specifier,\n    // Return the module source code for a given (normalized) specifier\n    load: (name) => {\n      if (name === 'math.js') return 'export const add = (a, b) => a + b;';\n      throw new Error(`Module not found: ${name}`);\n    },\n  },\n});\n\nusing promise = vm.evalCode(\n  `import { add } from 'math.js'; export const sum = add(3, 4);`,\n  '<entry>',\n  EvalFlags.TYPE_MODULE\n);\nvm.executePendingJobs();\nconst result = await vm.resolvePromise(promise);\nif ('value' in result) {\n  result.value.consume(ns => ns.getProp('sum').consume(h => h.toNumber())); // 7\n}\n```\n\n#### Async module loading\n\nThe `load` and `normalize` callbacks are **synchronous**: the engine calls\nthem from inside the WASM call stack, which cannot be suspended to await a\nPromise (returning one throws a `TypeError`). To load module sources\nasynchronously (e.g. over `https://`), use the **fetch-and-retry** pattern:\nthrow from `load` on a cache miss, fetch the missing module on the host, and\nre-run the eval. Modules already loaded by the runtime are cached and not\nre-requested, so each attempt makes progress one module deeper into the\ndependency graph:\n\n```typescript\nconst cache = new Map<string, string>();\nlet missing: string | null = null;\n\nusing vm = await QuickJS.create({\n  wasm: wasmBytes,\n  moduleLoader: {\n    load: (name) => {\n      const src = cache.get(name);\n      if (src === undefined) {\n        missing = name;\n        throw new Error(`module not cached: ${name}`);\n      }\n      return src;\n    },\n  },\n});\n\nasync function evalModule(code: string, filename: string) {\n  while (true) {\n    missing = null;\n    try {\n      return vm.evalCode(code, filename, EvalFlags.TYPE_MODULE);\n    } catch (err) {\n      if (missing === null) throw err; // a real error, not a cache miss\n      const response = await fetch(new URL(missing, 'https://example.com/'));\n      if (!response.ok) throw new Error(`failed to fetch ${missing}`);\n      cache.set(missing, await response.text());\n    }\n  }\n}\n\nusing promise = await evalModule(`import { x } from 'mod.js'; export { x };`, '<entry>');\nvm.executePendingJobs();\nconst result = await vm.resolvePromise(promise);\n```\n\nAlternatively, pre-fetch all module sources up front and serve them from the\ncache directly.\n\n### Error handling\n\n```typescript\nusing vm = await QuickJS.create(wasmBytes);\n\n// evalCode() throws a JSException if the evaluated code throws\ntry {\n  vm.evalCode('throw new TypeError(\"bad\")');\n} catch (err) {\n  console.log(err.name);    // \"TypeError\"\n  console.log(err.message); // \"bad\"\n  console.log(err.stack);   // QuickJS stack trace\n}\n\n// Create errors from host Error objects (preserves name, message, stack)\n{\n  using errHandle = vm.newError(new RangeError('out of bounds'));\n  vm.setProp(vm.global, 'hostError', errHandle);\n}\n```\n\n### WASI overrides\n\nThe `wasi` option lets you override any WebAssembly System Interface (WASI) `wasi_snapshot_preview1` host function. It's a factory that receives the WASM linear memory and returns an object of override functions. Overrides apply to both the main module and all loaded extensions.\n\nThis is useful for deterministic execution: QuickJS uses a [xorshift64*](https://en.wikipedia.org/wiki/Xorshift) PRNG that is seeded once from the clock value during context creation. Override `clock_time_get` to control both `Date.now()` and the `Math.random()` seed:\n\n```typescript\nconst fixedClock = (memory: WebAssembly.Memory) => ({\n  clock_time_get(_clockId: number, _precision: bigint, resultPtr: number) {\n    new DataView(memory.buffer).setBigUint64(resultPtr, 1700000000000n * 1_000_000n, true);\n    return 0;\n  },\n});\n\nusing vm1 = await QuickJS.create({ wasm: wasmBytes, wasi: fixedClock });\nusing vm2 = await QuickJS.create({ wasm: wasmBytes, wasi: fixedClock });\n\nvm1.evalCode('Math.random()').consume(h => h.toNumber());\n// => 0.8130834347906803\n\nvm2.evalCode('Math.random()').consume(h => h.toNumber());\n// => 0.8130834347906803 (identical)\n```\n\nOverride `random_get` to control the crypto extension's RNG:\n\n```typescript\nusing vm = await QuickJS.create({\n  wasm: wasmBytes,\n  wasi: (memory) => ({\n    random_get(bufPtr: number, bufLen: number) {\n      new Uint8Array(memory.buffer, bufPtr, bufLen).fill(0x42); // deterministic\n      return 0;\n    },\n  }),\n  extensions: [cryptoExtension],\n});\n```\n\nThe time can also be advanced between calls for realistic behavior:\n\n```typescript\nlet currentTime = 1700000000000n;\nusing vm = await QuickJS.create({\n  wasm: wasmBytes,\n  wasi: (memory) => ({\n    clock_time_get(_clockId: number, _precision: bigint, resultPtr: number) {\n      new DataView(memory.buffer).setBigUint64(resultPtr, currentTime * 1_000_000n, true);\n      return 0;\n    },\n  }),\n});\n\nvm.evalCode('Date.now()').consume(h => h.toNumber()); // 1700000000000\ncurrentTime += 1000n; // advance 1 second\nvm.evalCode('Date.now()').consume(h => h.toNumber()); // 1700000001000\n```\n\n### Memory limits\n\nRestrict how much memory the QuickJS runtime can allocate. When exceeded, allocations fail and surface as JS exceptions:\n\n```typescript\nusing vm = await QuickJS.create({\n  wasm: wasmBytes,\n  memoryLimit: 4 * 1024 * 1024, // 4 MB\n});\n\nvm.evalCode(`\n  try {\n    const huge = new Array(10000000).fill(\"x\".repeat(1000));\n  } catch (e) {\n    console.log(e.message); // allocation failure\n  }\n`);\n```\n\nThe limit is re-applied after `QuickJS.restore()`, so you can use a different limit for restored VMs than the original.\n\n### Interrupt handler\n\nPrevent infinite loops and enforce execution timeouts:\n\n```typescript\nconst start = Date.now();\nusing vm = await QuickJS.create({\n  wasm: wasmBytes,\n  interruptHandler: () => {\n    // Return true to interrupt. Called periodically during JS execution\n    return Date.now() - start > 5000; // 5 second timeout\n  },\n});\n\ntry {\n  vm.evalCode('while (true) {}');\n} catch (err) {\n  // JSException: interrupted\n  err.dispose();\n}\n\n// VM is still usable after an interrupt\nvm.evalCode('1 + 2').consume(h => h.toNumber()); // 3\n```\n\nThe handler is called approximately once per JS bytecode instruction, so it should be fast. When it returns `true`, the current execution is interrupted and throws a `JSException`. The VM remains usable after an interrupt.\n\n### Timezone offset\n\nBy default, `Date` inside the sandbox mirrors the host environment's timezone. You can override this with a fixed offset or a dynamic callback:\n\n```typescript\n// Fixed offset: UTC-8 (480 minutes west of UTC)\nusing vm = await QuickJS.create({\n  wasm: wasmBytes,\n  timezoneOffset: 480,\n});\nvm.evalCode('new Date().getTimezoneOffset()').consume(h => h.toNumber()); // 480\n```\n\n```typescript\n// Force UTC (offset 0)\nusing vm = await QuickJS.create({\n  wasm: wasmBytes,\n  timezoneOffset: 0,\n});\n```\n\n```typescript\n// Dynamic callback for custom DST-aware logic\nusing vm = await QuickJS.create({\n  wasm: wasmBytes,\n  timezoneOffset: (timeSecs) => {\n    // Return offset in minutes (getTimezoneOffset convention: positive = west of UTC)\n    return new Date(timeSecs * 1000).getTimezoneOffset();\n  },\n});\n```\n\nThe `timezoneOffset` option accepts:\n\n- **`'host'`** (default): mirrors the host's timezone, including DST transitions.\n- **A number**: fixed UTC offset in minutes using the `getTimezoneOffset()` sign convention (positive values are west of UTC, e.g. `480` for UTC-8).\n- **A callback `(timeSecs: number) => number`**: called with seconds since epoch, must return the offset in minutes. Useful for custom timezone logic. The callback is invoked whenever QuickJS needs to convert between UTC and local time (e.g. `getHours()`, `toString()`, `new Date(year, month, ...)`, `getTimezoneOffset()`), so it may be called multiple times per Date operation.\n\n### Snapshot and restore\n\nThe key differentiator: snapshot the entire VM state and restore it later.\n\n```typescript\nlet snapshot: Snapshot;\n\n{\n  using vm = await QuickJS.create(wasmBytes);\n\n  // Build up some state, including a pending promise\n  vm.evalCode(`\n    globalThis.counter = 0;\n\n    let __resolve;\n    globalThis.pendingWork = new Promise(r => { __resolve = r; });\n    globalThis.__resolve = __resolve;\n\n    globalThis.pendingWork.then(value => {\n      globalThis.counter = value;\n    });\n  `).dispose();\n  vm.executePendingJobs();\n\n  // Take a snapshot\n  snapshot = vm.snapshot();\n}\n\n// Serialize to a binary buffer for storage (apply gzip on top for best compression)\nconst bytes = QuickJS.serializeSnapshot(snapshot);\nawait storage.put('snapshots/run-123', bytes);\n\n// ... time passes, maybe a different process entirely ...\n\n// Deserialize and restore\nconst loaded = await storage.get('snapshots/run-123');\nconst restored = QuickJS.deserializeSnapshot(loaded);\n\n{\n  using vm = await QuickJS.restore(restored, wasmBytes);\n\n  // The pending promise still exists; resolve it\n  using resolve = vm.global.getProp('__resolve');\n  using arg = vm.newNumber(42);\n  vm.callFunction(resolve, vm.undefined, arg).dispose();\n  vm.executePendingJobs();\n\n  // The .then handler ran in the restored VM\n  using counter = vm.global.getProp('counter');\n  console.log(counter.toNumber()); // 42\n}\n```\n\n### Host callbacks after restore\n\nHost functions registered with `newFunction()` are keyed by their name, which gets baked into the snapshot. After restoring, re-register the callbacks by name:\n\n```typescript\nlet snapshot: Snapshot;\n\n{\n  using vm = await QuickJS.create(wasmBytes);\n  using fn = vm.newFunction('hostAdd', (...args) => {\n    return vm.newNumber(args[0].toNumber() + args[1].toNumber());\n  });\n  vm.setProp(vm.global, 'hostAdd', fn);\n  snapshot = vm.snapshot();\n}\n\n{\n  // After restore, re-register by name\n  using vm = await QuickJS.restore(snapshot, wasmBytes);\n  vm.registerHostCallback('hostAdd', (...args) => {\n    return vm.newNumber(args[0].toNumber() + args[1].toNumber());\n  });\n\n  // hostAdd() works again\n  using result = vm.evalCode('hostAdd(100, 200)');\n  console.log(result.toNumber()); // 300\n}\n```\n\nNote: each call to `newFunction()` must use a unique name. Attempting to register two host functions with the same name will throw an error.\n\n### Native WASM extensions\n\nLoad C-based extensions compiled as WASM shared libraries. Extensions link directly against the QuickJS C API with zero marshaling overhead: they share the same linear memory and can register custom classes, prototypes, and globals.\n\nThe package ships five pre-built extensions, each available as a subpath export. As with the main `quickjs.wasm` binary, the caller is responsible for loading the bytes:\n\n| Extension | Subpath | Adds |\n|-----------|---------|------|\n| URL | `quickjs-wasi/url.so` | `URL`, `URLSearchParams` (ada-url) |\n| Encoding | `quickjs-wasi/encoding.so` | `TextEncoder`, `TextDecoder` |\n| Headers | `quickjs-wasi/headers.so` | `Headers` |\n| Crypto | `quickjs-wasi/crypto.so` | `crypto.subtle`, `crypto.getRandomValues` |\n| Structured Clone | `quickjs-wasi/structured-clone.so` | `structuredClone` |\n\nNode.js:\n\n```typescript\nimport { readFile } from 'node:fs/promises';\nimport { QuickJS } from 'quickjs-wasi';\n\nconst urlExtBytes = await readFile(\n  new URL(import.meta.resolve('quickjs-wasi/url.so')),\n);\n\nusing vm = await QuickJS.create({\n  wasm: wasmBytes,\n  extensions: [{ name: 'url', wasm: urlExtBytes }],\n});\n\nusing result = vm.evalCode(`\n  const url = new URL('https://example.com:8080/api?key=value#section');\n  url.hostname // 'example.com'\n`);\n```\n\nVite / bundlers:\n\n```typescript\nimport urlSoUrl from 'quickjs-wasi/url.so?url';\n\nconst urlExtBytes = await fetch(urlSoUrl).then((r) => r.arrayBuffer());\n```\n\nExtensions survive snapshot/restore. Provide the same extensions when restoring:\n\n```typescript\nconst snapshot = vm.snapshot();\n\nusing vm2 = await QuickJS.restore(snapshot, {\n  wasm: wasmBytes,\n  extensions: [{ name: 'url', wasm: urlExtBytes }],\n});\n// URL objects created before the snapshot still work\n```\n\nSee [EXTENSIONS.md](./EXTENSIONS.md) for how to build your own extensions, how dynamic linking works, and known limitations.\n\n## API reference\n\n### `QuickJS` (VM instance)\n\n| Method | Description |\n|--------|-------------|\n| `QuickJS.create(options?)` | Create a fresh VM instance |\n| `QuickJS.restore(snapshot, options?)` | Restore a VM from a snapshot |\n| `QuickJS.serializeSnapshot(snapshot)` | Serialize a snapshot to a versioned binary `Uint8Array` |\n| `QuickJS.deserializeSnapshot(data)` | Deserialize a snapshot from a binary `Uint8Array` |\n| `vm.evalCode(code, filename?)` | Evaluate JS code, returns `JSValueHandle` (throws `JSException` on error) |\n| `vm.callFunction(fn, this, ...args)` | Call a QuickJS function (throws `JSException` on error) |\n| `vm.executePendingJobs()` | Drain the promise microtask queue |\n| `vm.newString(str)` | Create a string value |\n| `vm.newNumber(num)` | Create a number value |\n| `vm.newBigInt(val)` | Create a BigInt value |\n| `vm.newObject()` | Create an empty object |\n| `vm.newArray()` | Create an empty array |\n| `vm.newSymbolFor(description)` | Create a global symbol (`Symbol.for(description)`) |\n| `vm.newArrayBuffer(data)` | Create an ArrayBuffer from host `ArrayBuffer` or `Uint8Array` |\n| `vm.newUint8Array(data)` | Create a Uint8Array from host `Uint8Array` |\n| `vm.newFunction(name, callback)` | Create a function backed by a host callback |\n| `vm.newPromise()` | Create a `Deferred` (promise + resolve/reject) |\n| `vm.newError(messageOrError)` | Create an Error from a string or native `Error` |\n| `vm.resolvePromise(handle)` | Await a QuickJS promise from the host side |\n| `vm.setProp(obj, key, value)` | Set a property (key: string or handle, including symbols) |\n| `vm.getProp(obj, key)` | Get a property using a handle key (including symbols) |\n| `vm.typeof(handle)` | Get the `typeof` as a string |\n| `vm.dump(handle)` | Convert a QuickJS value to a host value |\n| `vm.hostToHandle(value)` | Convert a host value to a QuickJS handle |\n| `vm.snapshot()` | Capture the entire VM state (including extension metadata) |\n| `vm.registerHostCallback(name, fn)` | Re-register a host callback by name after restore |\n| `vm.dispose()` | Free the VM |\n| `vm[Symbol.dispose]()` | Same as `dispose()`, enables `using vm = ...` |\n\n### `QuickJSOptions`\n\n| Option | Description |\n|--------|-------------|\n| `wasm` | WASM module bytes or pre-compiled `WebAssembly.Module` |\n| `wasi` | WASI override factory: `(memory) => ({ random_get, clock_time_get, ... })`. Applies to main module and all extensions |\n| `memoryLimit` | Maximum memory the QuickJS runtime can allocate (bytes) |\n| `interruptHandler` | Callback to interrupt execution (return `true` to stop) |\n| `extensions` | Array of `ExtensionDescriptor` objects (native WASM extensions to load) |\n| `timezoneOffset` | Timezone for `Date` inside the VM: `'host'` (default), fixed offset in minutes, or `(timeSecs) => minutes` callback |\n\n### `ExtensionDescriptor`\n\n| Property | Description |\n|----------|-------------|\n| `name` | Identifier string (used in snapshot metadata) |\n| `wasm` | WASM bytes (`BufferSource`) or pre-compiled `WebAssembly.Module` |\n| `initFn?` | Init function name (default: `qjs_ext_${name}_init`) |\n| `wasi?` | Extension-provided WASI overrides: `(memory) => ({...})`. Layered between built-in defaults and user overrides |\n\n### Cached properties\n\nThese are singleton handles. Do **not** dispose them:\n\n| Property | Value |\n|----------|-------|\n| `vm.global` | The global object |\n| `vm.undefined` | `undefined` |\n| `vm.null` | `null` |\n| `vm.true` | `true` |\n| `vm.false` | `false` |\n\n### `JSValueHandle`\n\n| Method / Property | Description |\n|-------------------|-------------|\n| `handle.isUndefined` | `true` if this is `undefined` |\n| `handle.isNull` | `true` if this is `null` |\n| `handle.promiseState` | `0` pending, `1` fulfilled, `2` rejected |\n| `handle.toNumber()` | Extract as a `number` |\n| `handle.toBigInt()` | Extract as a `bigint` |\n| `handle.toString()` | Extract as a `string` |\n| `handle.toArrayBuffer()` | Extract as an `ArrayBuffer` (copy from WASM memory) |\n| `handle.toUint8Array()` | Extract as a `Uint8Array` (copy from WASM memory) |\n| `handle.getProp(name)` | Get a property by name |\n| `handle.setProp(name, value)` | Set a property by name |\n| `handle.consume(fn)` | Call `fn(handle)`, then dispose, return result |\n| `handle.dup()` | Duplicate the handle (increment refcount) |\n| `handle.dispose()` | Free the handle |\n| `handle[Symbol.dispose]()` | Same as `dispose()`, enables `using handle = ...` |\n\n#### Trap-free introspection\n\nThese use engine-level (internal class) checks and cannot be spoofed or\nbroken by guest-side prototype/constructor mutation. This makes them safe\nto call on hostile or unknown values (e.g. when rendering an inspector UI,\nor implementing side-effect-free serialization).\n\nThe brand checks, `classId`, and `getProxyTarget()`/`getProxyHandler()`\nnever execute guest code on **any** value: no proxy traps, no getters, no\n`Symbol.hasInstance`. The two property-inspection helpers\n(`getOwnPropertyKeys()` and `getOwnPropertyDescriptor()`) never invoke\ngetters and are guest-code free for ordinary objects, but on a Proxy they\nnecessarily fire its `ownKeys`/`getOwnPropertyDescriptor` traps. Check\n`isProxy` first if that matters.\n\n| Method / Property | Description |\n|-------------------|-------------|\n| `handle.isProxy` | `true` if this is a Proxy exotic object (undetectable from within JS) |\n| `handle.isMap` / `handle.isSet` | Engine brand checks (a Proxy wrapping a Map is **not** a Map) |\n| `handle.isDate` / `handle.isRegExp` | Engine brand checks |\n| `handle.isWeakRef` / `handle.isWeakMap` / `handle.isWeakSet` | Engine brand checks |\n| `handle.isDataView` | Engine brand check |\n| `handle.classId` | Internal QuickJS class ID (`0` for non-objects) |\n| `handle.getProxyTarget()` | The `[[ProxyTarget]]` of a Proxy, without firing traps |\n| `handle.getProxyHandler()` | The `[[ProxyHandler]]` of a Proxy, without firing traps |\n| `handle.getOwnPropertyKeys()` | All own keys (strings **and** symbols, incl. non-enumerable), à la `Reflect.ownKeys()` |\n| `handle.getOwnPropertyDescriptor(key)` | Own property descriptor **without invoking getters**; accessor properties yield `get`/`set` handles |\n| `handle.identity` | Numeric identity of the underlying heap value (`0` for non-heap values). Key a `Map` on this to deduplicate or detect cycles across handles |\n| `handle.toBoolean()` | Extract as a `boolean`, applying JavaScript truthiness |\n| `vm.construct(ctor, ...args)` | Invoke a constructor with `new`, the counterpart to `callFunction` for building values in the VM from the host |\n\nNote that `handle.toString()` is **not** in this list: for values that are not\nalready strings it performs a JavaScript string conversion, which executes\nguest code. Guard with `handle.isString`, or call a captured intrinsic such as\n`URL.prototype.toString` through `vm.callFunction`.\n\n### Handle lifetime\n\n| Method / Property | Description |\n|-------------------|-------------|\n| `vm.withScope(fn)` | Run `fn`, disposing every handle created during it; use `scope.escape(handle)` to keep one. Scopes nest, and `escape()` transfers to the enclosing scope |\n| `vm.newEphemeralFunction(fn)` | Like `newFunction()`, but the host callback is unregistered when the handle is disposed. Use for short-lived callbacks instead of inventing unique names |\n| `vm.unregisterHostCallback(name)` | Remove a callback registered by `newFunction()` / `registerHostCallback()` |\n| `handle.disposed` | Whether `dispose()` has been called |\n\n```typescript\nconst name = vm.withScope((scope) => {\n  const user = root.getProp('user');       // freed automatically\n  const profile = user.getProp('profile'); // freed automatically\n  return scope.escape(profile.getProp('name'));\n});\n```\n\nHandle methods do not guard against use after disposal: reading from a\ndisposed handle reads freed memory. Check `handle.disposed` when a handle's\nlifetime is managed elsewhere.\n\n### `Deferred` (from `vm.newPromise()`)\n\n| Property / Method | Description |\n|--------------------|-------------|\n| `deferred.handle` | The QuickJS promise object |\n| `deferred.settled` | Host `Promise<void>` that resolves on settlement |\n| `deferred.resolve(handle)` | Resolve the promise with a QuickJS value |\n| `deferred.reject(handle)` | Reject the promise with a QuickJS value |\n\n### Data marshaling\n\n`dump()` and `hostToHandle()` automatically convert values between the host and the QuickJS VM. The following types are supported:\n\n| Host Type | QuickJS Type | `dump()` returns | `hostToHandle()` accepts |\n|-----------|-------------|-----------------|------------------------|\n| `undefined` | undefined | `undefined` | `undefined` |\n| `null` | null | `null` | `null` |\n| `boolean` | boolean | `boolean` | `boolean` |\n| `number` | number | `number` | `number` |\n| `string` | string | `string` | `string` |\n| `bigint` | BigInt | `bigint` | `bigint` |\n| `Symbol.for()` | global Symbol | `Symbol.for(description)` | `Symbol.for(description)` |\n| `Error` | Error | `Error` (with name, message, stack) | `Error` |\n| `Array` | Array | `Array` (recursive) | `Array` (recursive) |\n| `ArrayBuffer` | ArrayBuffer | `ArrayBuffer` (copy) | `ArrayBuffer` |\n| `Uint8Array` | Uint8Array | `Uint8Array` (copy) | `Uint8Array` |\n| Other typed arrays | typed array | Corresponding typed array (copy) | `ArrayBuffer` (via view) |\n| `Promise` | Promise | — | QuickJS Promise (bridged via `Deferred`) |\n| Plain object | Object | `Record<string, unknown>` (recursive, own enumerable keys) | Object (recursive) |\n\n**Notes:**\n\n- Global symbols (`Symbol.for()`) round-trip as real host `Symbol` values via `Symbol.for(description)`\n- Local (anonymous) symbols dump as `undefined` and throw if passed to `hostToHandle()`\n- Functions dump as `undefined` (cannot be meaningfully serialized)\n- Circular and shared references are preserved: `dump()` returns the same host object for the same QuickJS object pointer\n- Only own enumerable string properties are included when dumping objects\n- Binary data is always **copied** between host and WASM memory; there is no zero-copy view API\n- `dump()` for typed arrays determines the host constructor from bytes-per-element (1 → `Uint8Array`, 2 → `Uint16Array`, 4 → `Uint32Array`, 8 → `Float64Array`)\n\n## How it works\n\n### The core insight\n\nWebAssembly linear memory is a flat byte array. Everything QuickJS allocates (the runtime struct, all contexts, all JS objects, the GC heap, the atom table, the promise job queue, pending promises) lives in this linear memory. There are no external pointers, file handles, or OS resources. When you copy the memory wholesale to a new WASM instance, all internal pointer relationships are preserved because they reference the same linear address space.\n\n### One VM = one WASM instance\n\nUnlike quickjs-emscripten which has a two-level model (`QuickJSWASMModule` → `QuickJSContext`), quickjs-wasm uses a simpler one-level model: each `QuickJS.create()` call instantiates its own WASM module with its own linear memory, runtime, and context. This gives stronger isolation (no shared memory between VMs) and makes snapshotting clean: one instance, one context, one snapshot.\n\n### Architecture\n\n```\nHost (Node.js / Deno / Bun / Browser)\n |\n +-- QuickJS class (ts/index.ts)\n |    |-- evalCode(), callFunction(), newFunction(), ...\n |    |-- snapshot() -> Snapshot { memory, stackPointer, runtimePtr, contextPtr }\n |    +-- restore(snapshot) -> QuickJS\n |\n +-- WASI Shim (ts/wasi-shim.ts)\n |    |-- clock_time_get, fd_write, random_get\n |    +-- fd_close, fd_fdstat_get, fd_seek (stubs)\n |\n +-- quickjs.wasm (1.4 MB)\n      |-- QuickJS-NG engine\n      +-- C interface layer (c/interface.c)\n           |-- Lifecycle, eval, value creation/extraction\n           |-- Host callback trampoline (imported host_call)\n           +-- Snapshot support (get/set runtime and context pointers)\n```\n\n### Host callback mechanism\n\nWhen `vm.newFunction(name, fn)` is called, a QuickJS C function is created via `JS_NewCFunctionData2` with the function name stored as a JS string in `func_data[0]`. When QuickJS code calls the function, the C trampoline extracts the name and calls the imported `host_call(name_ptr, name_len, this_ptr, argc, argv_ptr)` function, which dispatches to the registered host callback by name.\n\nThis design survives snapshot/restore: the name string is stored in QuickJS's heap (part of the snapshot), and after restore, `registerHostCallback(name, fn)` re-maps the name to a new host function. Because callbacks are keyed by name rather than sequential integer IDs, the registration order doesn't matter and adding or removing host functions won't silently break restore.\n\n## Development\n\n### Prerequisites\n\n- [wasi-sdk](https://github.com/WebAssembly/wasi-sdk) (tested with v30). Set the `WASI_SDK` env var or it defaults to `/tmp/wasi-sdk`\n- Node.js >= 22\n- pnpm\n\n### Building locally\n\n```sh\n# Clone with submodules\ngit clone --recursive https://github.com/vercel-labs/quickjs-wasm.git\ncd quickjs-wasm\n\n# Install wasi-sdk (macOS arm64; adjust URL for your platform)\ncurl -sL \"https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-30/wasi-sdk-30.0-arm64-macos.tar.gz\" \\\n  | tar xz -C /tmp --strip-components=1 --one-top-level=wasi-sdk\n\n# Install dependencies\npnpm install\n\n# Build WASM binary + TypeScript\npnpm run build\n\n# Run tests\npnpm test\n```\n\n## Technical details\n\n### WASM binary\n\n- Built from [quickjs-ng](https://github.com/quickjs-ng/quickjs) (MIT license)\n- Compiled with wasi-sdk targeting `wasm32-wasip1` in reactor mode\n- 1.4 MB uncompressed\n- 7 WASM imports: 6 WASI functions + 1 `env.host_call` for host callbacks\n- Exports `memory` and `__stack_pointer` for snapshot support\n\n### What gets snapshotted\n\nThe snapshot captures the entire WASM linear memory, which contains:\n\n- The `JSRuntime` struct (GC state, job queue, module loader state)\n- The `JSContext` struct (global object, intrinsics, atom table)\n- All JS objects (via QuickJS's GC heap)\n- The promise job queue (pending `.then` callbacks)\n- The string intern table (atoms)\n- The `dlmalloc` heap metadata\n- The C interface's `static JSRuntime *rt` and `static JSContext *ctx` globals\n- Host callback IDs stored in function data\n\nPlus the `__stack_pointer` WASM global (a single i32).\n\n### Limitations and future work\n\n- **Snapshot size**: Snapshots capture the entire WASM linear memory (~256 KB baseline, grows with heap). Use `serializeSnapshot()` to get a binary buffer, then apply your own compression (gzip/zstd). The memory compresses well due to its large zero regions.\n- **Stack size limit**: QuickJS-ng disables `JS_SetMaxStackSize` on WASI, so deep recursion causes a WASM trap (not a catchable exception).\n- **ES modules**: Supported via `EvalFlags.TYPE_MODULE` and the `moduleLoader` option (see [ES modules](#es-modules)). Dynamic `import()` resolves through the same loader.\n- **Extension ABI**: Native WASM extensions use an experimental dynamic linking ABI that is [not yet stabilized](https://github.com/WebAssembly/tool-conventions/blob/main/DynamicLinking.md). All extensions must be compiled with the same wasi-sdk version as the main module. See [EXTENSIONS.md](./EXTENSIONS.md) for details.\n\n### Browser usage\n\nquickjs-wasi works in browsers: the TypeScript API uses only the standard `WebAssembly` API and the WASI shim is environment-agnostic. The package does no implicit I/O, so loading the WASM binary is up to you. See [Loading the WASM binary](#loading-the-wasm-binary) above for `fetch()` and bundler-based examples.\n\n```typescript\nimport { QuickJS } from 'quickjs-wasi';\nimport wasmUrl from 'quickjs-wasi/quickjs.wasm?url'; // Vite\n\n// Fetch the .wasm file and compile it once\nconst wasmModule = await WebAssembly.compileStreaming(fetch(wasmUrl));\n\n// Create VMs from the pre-compiled module (fast, no re-compilation)\nusing vm = await QuickJS.create({ wasm: wasmModule });\n```\n\nSee [`examples/browser/`](./examples/browser/) for a complete Vite demo app.\n\n## License\n\nThe quickjs-wasi wrapper is licensed under the [MIT License](./LICENSE), copyright (c) 2026 Vercel, Inc. The root `LICENSE` file contains the canonical copyright and permission notice and is included in the npm package.\n\nThe bundled QuickJS-NG engine and other third-party components retain their own copyright and license notices. The wrapper's notice does not replace those upstream notices.\n","readmeFilename":"README.md"}