@statewalker/cellb 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +323 -2
  3. package/dist/adapters/files-backup.d.ts +16 -0
  4. package/dist/adapters/files-backup.js +32 -0
  5. package/dist/adapters/files-backup.js.map +1 -0
  6. package/dist/adapters/files-changelog.d.ts +33 -0
  7. package/dist/adapters/files-changelog.js +96 -0
  8. package/dist/adapters/files-changelog.js.map +1 -0
  9. package/dist/adapters/files-ltx.d.ts +35 -0
  10. package/dist/adapters/files-ltx.js +9 -0
  11. package/dist/adapters/files-ltx.js.map +1 -0
  12. package/dist/adapters/ltx-vfs.d.ts +21 -0
  13. package/dist/adapters/ltx-vfs.js +286 -0
  14. package/dist/adapters/ltx-vfs.js.map +1 -0
  15. package/dist/adapters/node-sqlite.d.ts +45 -0
  16. package/dist/adapters/node-sqlite.js +254 -0
  17. package/dist/adapters/node-sqlite.js.map +1 -0
  18. package/dist/adapters/wasm-page-hook.d.ts +26 -0
  19. package/dist/adapters/wasm-page-hook.js +55 -0
  20. package/dist/adapters/wasm-page-hook.js.map +1 -0
  21. package/dist/adapters/wasm-session.d.ts +11 -0
  22. package/dist/adapters/wasm-session.js +76 -0
  23. package/dist/adapters/wasm-session.js.map +1 -0
  24. package/dist/adapters/wasm-sqlite.d.ts +89 -0
  25. package/dist/adapters/wasm-sqlite.js +258 -0
  26. package/dist/adapters/wasm-sqlite.js.map +1 -0
  27. package/dist/bindings/assets.d.ts +26 -0
  28. package/dist/bindings/assets.js +260 -0
  29. package/dist/bindings/assets.js.map +1 -0
  30. package/dist/bindings/cache.d.ts +16 -0
  31. package/dist/bindings/cache.js +34 -0
  32. package/dist/bindings/cache.js.map +1 -0
  33. package/dist/bindings/celld-kv.d.ts +26 -0
  34. package/dist/bindings/celld-kv.js +81 -0
  35. package/dist/bindings/celld-kv.js.map +1 -0
  36. package/dist/bindings/celld-queues.d.ts +56 -0
  37. package/dist/bindings/celld-queues.js +223 -0
  38. package/dist/bindings/celld-queues.js.map +1 -0
  39. package/dist/bindings/celld-workflows.d.ts +22 -0
  40. package/dist/bindings/celld-workflows.js +54 -0
  41. package/dist/bindings/celld-workflows.js.map +1 -0
  42. package/dist/bindings/cron.d.ts +27 -0
  43. package/dist/bindings/cron.js +232 -0
  44. package/dist/bindings/cron.js.map +1 -0
  45. package/dist/bindings/d1-migrations.d.ts +22 -0
  46. package/dist/bindings/d1-migrations.js +32 -0
  47. package/dist/bindings/d1-migrations.js.map +1 -0
  48. package/dist/bindings/html-rewriter.d.ts +8 -0
  49. package/dist/bindings/html-rewriter.js +75 -0
  50. package/dist/bindings/html-rewriter.js.map +1 -0
  51. package/dist/bindings/r2-celld.d.ts +3 -0
  52. package/dist/bindings/r2-celld.js +113 -0
  53. package/dist/bindings/r2-celld.js.map +1 -0
  54. package/dist/bindings/r2.d.ts +236 -0
  55. package/dist/bindings/r2.js +419 -0
  56. package/dist/bindings/r2.js.map +1 -0
  57. package/dist/bindings/worker-loader.d.ts +83 -0
  58. package/dist/bindings/worker-loader.js +183 -0
  59. package/dist/bindings/worker-loader.js.map +1 -0
  60. package/dist/bindings/workers-ai.d.ts +39 -0
  61. package/dist/bindings/workers-ai.js +175 -0
  62. package/dist/bindings/workers-ai.js.map +1 -0
  63. package/dist/browser.d.ts +7 -0
  64. package/dist/browser.js +8 -0
  65. package/dist/browser.js.map +1 -0
  66. package/dist/bucket/celld-cells.d.ts +86 -0
  67. package/dist/bucket/celld-cells.js +273 -0
  68. package/dist/bucket/celld-cells.js.map +1 -0
  69. package/dist/bucket/celld-format.d.ts +10 -0
  70. package/dist/bucket/celld-format.js +27 -0
  71. package/dist/bucket/celld-format.js.map +1 -0
  72. package/dist/bucket/idb-object-store.d.ts +9 -0
  73. package/dist/bucket/idb-object-store.js +73 -0
  74. package/dist/bucket/idb-object-store.js.map +1 -0
  75. package/dist/bucket/ltx-log.d.ts +34 -0
  76. package/dist/bucket/ltx-log.js +289 -0
  77. package/dist/bucket/ltx-log.js.map +1 -0
  78. package/dist/bucket/object-store.d.ts +51 -0
  79. package/dist/bucket/object-store.js +114 -0
  80. package/dist/bucket/object-store.js.map +1 -0
  81. package/dist/bucket/s3-object-store.d.ts +25 -0
  82. package/dist/bucket/s3-object-store.js +151 -0
  83. package/dist/bucket/s3-object-store.js.map +1 -0
  84. package/dist/bucket/sqlite-object-store.d.ts +10 -0
  85. package/dist/bucket/sqlite-object-store.js +107 -0
  86. package/dist/bucket/sqlite-object-store.js.map +1 -0
  87. package/dist/core/alarms.d.ts +27 -0
  88. package/dist/core/alarms.js +88 -0
  89. package/dist/core/alarms.js.map +1 -0
  90. package/dist/core/async-context.d.ts +34 -0
  91. package/dist/core/async-context.js +50 -0
  92. package/dist/core/async-context.js.map +1 -0
  93. package/dist/core/celld-schema.d.ts +14 -0
  94. package/dist/core/celld-schema.js +34 -0
  95. package/dist/core/celld-schema.js.map +1 -0
  96. package/dist/core/durable-object.d.ts +28 -0
  97. package/dist/core/durable-object.js +31 -0
  98. package/dist/core/durable-object.js.map +1 -0
  99. package/dist/core/gates.d.ts +33 -0
  100. package/dist/core/gates.js +89 -0
  101. package/dist/core/gates.js.map +1 -0
  102. package/dist/core/handles.d.ts +90 -0
  103. package/dist/core/handles.js +224 -0
  104. package/dist/core/handles.js.map +1 -0
  105. package/dist/core/id.d.ts +19 -0
  106. package/dist/core/id.js +64 -0
  107. package/dist/core/id.js.map +1 -0
  108. package/dist/core/namespace.d.ts +38 -0
  109. package/dist/core/namespace.js +141 -0
  110. package/dist/core/namespace.js.map +1 -0
  111. package/dist/core/object-host.d.ts +91 -0
  112. package/dist/core/object-host.js +616 -0
  113. package/dist/core/object-host.js.map +1 -0
  114. package/dist/core/request-body.d.ts +9 -0
  115. package/dist/core/request-body.js +55 -0
  116. package/dist/core/request-body.js.map +1 -0
  117. package/dist/core/runtime.d.ts +121 -0
  118. package/dist/core/runtime.js +366 -0
  119. package/dist/core/runtime.js.map +1 -0
  120. package/dist/core/shard.d.ts +7 -0
  121. package/dist/core/shard.js +10 -0
  122. package/dist/core/shard.js.map +1 -0
  123. package/dist/core/sql-split.d.ts +15 -0
  124. package/dist/core/sql-split.js +101 -0
  125. package/dist/core/sql-split.js.map +1 -0
  126. package/dist/core/sql-storage.d.ts +53 -0
  127. package/dist/core/sql-storage.js +407 -0
  128. package/dist/core/sql-storage.js.map +1 -0
  129. package/dist/core/state.d.ts +44 -0
  130. package/dist/core/state.js +93 -0
  131. package/dist/core/state.js.map +1 -0
  132. package/dist/core/storage.d.ts +103 -0
  133. package/dist/core/storage.js +351 -0
  134. package/dist/core/storage.js.map +1 -0
  135. package/dist/core/worker-rejections.d.ts +21 -0
  136. package/dist/core/worker-rejections.js +55 -0
  137. package/dist/core/worker-rejections.js.map +1 -0
  138. package/dist/index.d.ts +22 -0
  139. package/dist/index.js +23 -0
  140. package/dist/index.js.map +1 -0
  141. package/dist/isolate/browser.d.ts +16 -0
  142. package/dist/isolate/browser.js +37 -0
  143. package/dist/isolate/browser.js.map +1 -0
  144. package/dist/isolate/host.d.ts +24 -0
  145. package/dist/isolate/host.js +74 -0
  146. package/dist/isolate/host.js.map +1 -0
  147. package/dist/isolate/isolate-worker.d.ts +1 -0
  148. package/dist/isolate/isolate-worker.js +53 -0
  149. package/dist/isolate/isolate-worker.js.map +1 -0
  150. package/dist/isolate/isolate.d.ts +10 -0
  151. package/dist/isolate/isolate.js +169 -0
  152. package/dist/isolate/isolate.js.map +1 -0
  153. package/dist/isolate/node-entry.d.ts +1 -0
  154. package/dist/isolate/node-entry.js +12 -0
  155. package/dist/isolate/node-entry.js.map +1 -0
  156. package/dist/isolate/protocol.d.ts +66 -0
  157. package/dist/isolate/protocol.js +205 -0
  158. package/dist/isolate/protocol.js.map +1 -0
  159. package/dist/ltx/crc64.d.ts +6 -0
  160. package/dist/ltx/crc64.js +46 -0
  161. package/dist/ltx/crc64.js.map +1 -0
  162. package/dist/ltx/ltx-page-server.d.ts +65 -0
  163. package/dist/ltx/ltx-page-server.js +309 -0
  164. package/dist/ltx/ltx-page-server.js.map +1 -0
  165. package/dist/ltx/ltx-pages.d.ts +81 -0
  166. package/dist/ltx/ltx-pages.js +315 -0
  167. package/dist/ltx/ltx-pages.js.map +1 -0
  168. package/dist/ltx/ltx-store-worker.d.ts +1 -0
  169. package/dist/ltx/ltx-store-worker.js +38 -0
  170. package/dist/ltx/ltx-store-worker.js.map +1 -0
  171. package/dist/ltx/ltx.d.ts +45 -0
  172. package/dist/ltx/ltx.js +203 -0
  173. package/dist/ltx/ltx.js.map +1 -0
  174. package/dist/ltx/lz4.d.ts +9 -0
  175. package/dist/ltx/lz4.js +156 -0
  176. package/dist/ltx/lz4.js.map +1 -0
  177. package/dist/ltx/opfs-sync-files.d.ts +23 -0
  178. package/dist/ltx/opfs-sync-files.js +191 -0
  179. package/dist/ltx/opfs-sync-files.js.map +1 -0
  180. package/dist/ltx/xxh32.d.ts +1 -0
  181. package/dist/ltx/xxh32.js +43 -0
  182. package/dist/ltx/xxh32.js.map +1 -0
  183. package/dist/miniflare-compat/blob-service.d.ts +13 -0
  184. package/dist/miniflare-compat/blob-service.js +66 -0
  185. package/dist/miniflare-compat/blob-service.js.map +1 -0
  186. package/dist/miniflare-compat/kv-binding.d.ts +44 -0
  187. package/dist/miniflare-compat/kv-binding.js +99 -0
  188. package/dist/miniflare-compat/kv-binding.js.map +1 -0
  189. package/dist/miniflare-compat/shims/assert.d.ts +15 -0
  190. package/dist/miniflare-compat/shims/assert.js +24 -0
  191. package/dist/miniflare-compat/shims/assert.js.map +1 -0
  192. package/dist/miniflare-compat/shims/workerd-cloudflare.d.ts +7 -0
  193. package/dist/miniflare-compat/shims/workerd-cloudflare.js +6 -0
  194. package/dist/miniflare-compat/shims/workerd-cloudflare.js.map +1 -0
  195. package/dist/miniflare-compat/shims/workerd-globals.d.ts +1 -0
  196. package/dist/miniflare-compat/shims/workerd-globals.js +30 -0
  197. package/dist/miniflare-compat/shims/workerd-globals.js.map +1 -0
  198. package/dist/miniflare-compat/shims/workerd-internal.d.ts +20 -0
  199. package/dist/miniflare-compat/shims/workerd-internal.js +23 -0
  200. package/dist/miniflare-compat/shims/workerd-internal.js.map +1 -0
  201. package/dist/miniflare-compat/shims/workerd-performance.d.ts +4 -0
  202. package/dist/miniflare-compat/shims/workerd-performance.js +17 -0
  203. package/dist/miniflare-compat/shims/workerd-performance.js.map +1 -0
  204. package/dist/miniflare-compat/simulator-fetcher.d.ts +9 -0
  205. package/dist/miniflare-compat/simulator-fetcher.js +14 -0
  206. package/dist/miniflare-compat/simulator-fetcher.js.map +1 -0
  207. package/dist/miniflare-compat/vendored.d.ts +15 -0
  208. package/dist/miniflare-compat/vendored.js +27 -0
  209. package/dist/miniflare-compat/vendored.js.map +1 -0
  210. package/dist/node-compat/async_hooks.d.ts +22 -0
  211. package/dist/node-compat/async_hooks.js +176 -0
  212. package/dist/node-compat/async_hooks.js.map +1 -0
  213. package/dist/node-compat/browser-registry.d.ts +3 -0
  214. package/dist/node-compat/browser-registry.js +39 -0
  215. package/dist/node-compat/browser-registry.js.map +1 -0
  216. package/dist/node-compat/crypto.d.ts +60 -0
  217. package/dist/node-compat/crypto.js +143 -0
  218. package/dist/node-compat/crypto.js.map +1 -0
  219. package/dist/node-compat/diagnostics_channel.d.ts +27 -0
  220. package/dist/node-compat/diagnostics_channel.js +46 -0
  221. package/dist/node-compat/diagnostics_channel.js.map +1 -0
  222. package/dist/node-compat/fs.d.ts +35 -0
  223. package/dist/node-compat/fs.js +40 -0
  224. package/dist/node-compat/fs.js.map +1 -0
  225. package/dist/node-compat/globals.d.ts +3 -0
  226. package/dist/node-compat/globals.js +4 -0
  227. package/dist/node-compat/globals.js.map +1 -0
  228. package/dist/node-compat/install.d.ts +5 -0
  229. package/dist/node-compat/install.js +12 -0
  230. package/dist/node-compat/install.js.map +1 -0
  231. package/dist/node-compat/module.d.ts +12 -0
  232. package/dist/node-compat/module.js +36 -0
  233. package/dist/node-compat/module.js.map +1 -0
  234. package/dist/node-compat/modules.d.ts +8 -0
  235. package/dist/node-compat/modules.js +23 -0
  236. package/dist/node-compat/modules.js.map +1 -0
  237. package/dist/node-compat/os.d.ts +36 -0
  238. package/dist/node-compat/os.js +36 -0
  239. package/dist/node-compat/os.js.map +1 -0
  240. package/dist/node-compat/process.d.ts +14 -0
  241. package/dist/node-compat/process.js +16 -0
  242. package/dist/node-compat/process.js.map +1 -0
  243. package/dist/node-compat/shims.d.ts +4 -0
  244. package/dist/node.d.ts +5 -0
  245. package/dist/node.js +6 -0
  246. package/dist/node.js.map +1 -0
  247. package/dist/peer/celld-peer.d.ts +53 -0
  248. package/dist/peer/celld-peer.js +555 -0
  249. package/dist/peer/celld-peer.js.map +1 -0
  250. package/dist/ports.d.ts +183 -0
  251. package/dist/ports.js +10 -0
  252. package/dist/ports.js.map +1 -0
  253. package/dist/project/browser-bundle.d.ts +17 -0
  254. package/dist/project/browser-bundle.js +125 -0
  255. package/dist/project/browser-bundle.js.map +1 -0
  256. package/dist/project/browser-cookies.d.ts +12 -0
  257. package/dist/project/browser-cookies.js +90 -0
  258. package/dist/project/browser-cookies.js.map +1 -0
  259. package/dist/project/browser-host.d.ts +173 -0
  260. package/dist/project/browser-host.js +200 -0
  261. package/dist/project/browser-host.js.map +1 -0
  262. package/dist/project/browser-modules.d.ts +17 -0
  263. package/dist/project/browser-modules.js +89 -0
  264. package/dist/project/browser-modules.js.map +1 -0
  265. package/dist/project/browser-shards.d.ts +62 -0
  266. package/dist/project/browser-shards.js +210 -0
  267. package/dist/project/browser-shards.js.map +1 -0
  268. package/dist/project/browser-tabs.d.ts +103 -0
  269. package/dist/project/browser-tabs.js +418 -0
  270. package/dist/project/browser-tabs.js.map +1 -0
  271. package/dist/project/cloudflare-email.d.ts +8 -0
  272. package/dist/project/cloudflare-email.js +11 -0
  273. package/dist/project/cloudflare-email.js.map +1 -0
  274. package/dist/project/cloudflare-workers.d.ts +12 -0
  275. package/dist/project/cloudflare-workers.js +16 -0
  276. package/dist/project/cloudflare-workers.js.map +1 -0
  277. package/dist/project/host-modules.d.ts +4 -0
  278. package/dist/project/host-modules.js +40 -0
  279. package/dist/project/host-modules.js.map +1 -0
  280. package/dist/project/jsonc.d.ts +2 -0
  281. package/dist/project/jsonc.js +27 -0
  282. package/dist/project/jsonc.js.map +1 -0
  283. package/dist/project/lower-await.d.ts +2 -0
  284. package/dist/project/lower-await.js +151 -0
  285. package/dist/project/lower-await.js.map +1 -0
  286. package/dist/project/node-project.d.ts +38 -0
  287. package/dist/project/node-project.js +373 -0
  288. package/dist/project/node-project.js.map +1 -0
  289. package/dist/project/own-module.d.ts +6 -0
  290. package/dist/project/own-module.js +13 -0
  291. package/dist/project/own-module.js.map +1 -0
  292. package/dist/project/scheduler.d.ts +2 -0
  293. package/dist/project/scheduler.js +3 -0
  294. package/dist/project/scheduler.js.map +1 -0
  295. package/dist/project/site.d.ts +74 -0
  296. package/dist/project/site.js +206 -0
  297. package/dist/project/site.js.map +1 -0
  298. package/dist/project/virtual-modules.d.ts +3 -0
  299. package/dist/project/worker-scope.d.ts +27 -0
  300. package/dist/project/worker-scope.js +46 -0
  301. package/dist/project/worker-scope.js.map +1 -0
  302. package/dist/project/workerd-message-channel.d.ts +13 -0
  303. package/dist/project/workerd-message-channel.js +137 -0
  304. package/dist/project/workerd-message-channel.js.map +1 -0
  305. package/dist/project/workers-global-names.d.ts +6 -0
  306. package/dist/project/workers-global-names.js +15 -0
  307. package/dist/project/workers-global-names.js.map +1 -0
  308. package/dist/project/workers-globals-module.d.ts +8 -0
  309. package/dist/project/workers-globals-module.js +9 -0
  310. package/dist/project/workers-globals-module.js.map +1 -0
  311. package/dist/project/workers-globals.d.ts +9 -0
  312. package/dist/project/workers-globals.js +19 -0
  313. package/dist/project/workers-globals.js.map +1 -0
  314. package/dist/project/wrangler.d.ts +116 -0
  315. package/dist/project/wrangler.js +342 -0
  316. package/dist/project/wrangler.js.map +1 -0
  317. package/dist/router/cell-router.d.ts +72 -0
  318. package/dist/router/cell-router.js +247 -0
  319. package/dist/router/cell-router.js.map +1 -0
  320. package/dist/router/shard-worker.d.ts +44 -0
  321. package/dist/router/shard-worker.js +163 -0
  322. package/dist/router/shard-worker.js.map +1 -0
  323. package/dist/transport/cells-http.d.ts +25 -0
  324. package/dist/transport/cells-http.js +141 -0
  325. package/dist/transport/cells-http.js.map +1 -0
  326. package/dist/transport/cells-link.d.ts +27 -0
  327. package/dist/transport/cells-link.js +71 -0
  328. package/dist/transport/cells-link.js.map +1 -0
  329. package/dist/transport/port.d.ts +26 -0
  330. package/dist/transport/port.js +100 -0
  331. package/dist/transport/port.js.map +1 -0
  332. package/dist/v8/codec.d.ts +6 -0
  333. package/dist/v8/codec.js +9 -0
  334. package/dist/v8/codec.js.map +1 -0
  335. package/dist/v8/serialize.d.ts +10 -0
  336. package/dist/v8/serialize.js +601 -0
  337. package/dist/v8/serialize.js.map +1 -0
  338. package/dist/ws/client.d.ts +25 -0
  339. package/dist/ws/client.js +203 -0
  340. package/dist/ws/client.js.map +1 -0
  341. package/dist/ws/control.d.ts +48 -0
  342. package/dist/ws/control.js +44 -0
  343. package/dist/ws/control.js.map +1 -0
  344. package/dist/ws/frames.d.ts +38 -0
  345. package/dist/ws/frames.js +39 -0
  346. package/dist/ws/frames.js.map +1 -0
  347. package/dist/ws/server.d.ts +99 -0
  348. package/dist/ws/server.js +295 -0
  349. package/dist/ws/server.js.map +1 -0
  350. package/dist/ws/sw-connector.d.ts +10 -0
  351. package/dist/ws/sw-connector.js +25 -0
  352. package/dist/ws/sw-connector.js.map +1 -0
  353. package/dist/ws/upgrade.d.ts +28 -0
  354. package/dist/ws/upgrade.js +75 -0
  355. package/dist/ws/upgrade.js.map +1 -0
  356. package/package.json +111 -3
  357. package/vendor/celld/LICENSE +202 -0
  358. package/vendor/celld/kv.js +1131 -0
  359. package/vendor/celld/queues.js +1656 -0
  360. package/vendor/celld/workflows.js +1610 -0
  361. package/vendor/html-rewriter-wasm/html_rewriter.js +925 -0
  362. package/vendor/html-rewriter-wasm/html_rewriter_bg.wasm +0 -0
  363. package/vendor/miniflare/d1-api.js +738 -0
  364. package/vendor/miniflare/d1-database.js +6978 -0
  365. package/vendor/miniflare/kv-namespace.js +3061 -0
@@ -0,0 +1,601 @@
1
+ /**
2
+ * The V8 ValueSerializer wire format (version 15) in TypeScript — what celld stores as the
3
+ * values of Durable Object KV storage (`_cf_KV.v`), so cellb can read celld's cells
4
+ * and write cells celld reads, in browsers too (they have no `v8.serialize`).
5
+ *
6
+ * Covers: undefined, null, booleans, numbers (Smi / double), BigInt, strings (Latin-1 and
7
+ * two-byte), objects, dense and sparse arrays, Date, RegExp, Map, Set, ArrayBuffer and every
8
+ * ArrayBufferView, boxed primitives, object identity (back-references), Error (read).
9
+ * Typed arrays use V8's own encoding ('B' + 'V'), as V8 embedders without a host-object
10
+ * delegate (workerd, Deno, celld) write them — not Node's Buffer host objects.
11
+ */
12
+ const VERSION = 15;
13
+ const T = {
14
+ pad: 0x00,
15
+ version: 0xff,
16
+ undef: 0x5f,
17
+ nul: 0x30,
18
+ tru: 0x54,
19
+ fal: 0x46,
20
+ int32: 0x49,
21
+ uint32: 0x55,
22
+ double: 0x4e,
23
+ bigint: 0x5a,
24
+ utf8: 0x53,
25
+ oneByte: 0x22,
26
+ twoByte: 0x63,
27
+ ref: 0x5e,
28
+ obj: 0x6f,
29
+ objEnd: 0x7b,
30
+ dense: 0x41,
31
+ denseEnd: 0x24,
32
+ sparse: 0x61,
33
+ sparseEnd: 0x40,
34
+ date: 0x44,
35
+ trueObj: 0x79,
36
+ falseObj: 0x78,
37
+ numObj: 0x6e,
38
+ bigintObj: 0x7a,
39
+ strObj: 0x73,
40
+ regexp: 0x52,
41
+ map: 0x3b,
42
+ mapEnd: 0x3a,
43
+ set: 0x27,
44
+ setEnd: 0x2c,
45
+ ab: 0x42,
46
+ rab: 0x7e,
47
+ view: 0x56,
48
+ error: 0x72,
49
+ theHole: 0x2d,
50
+ host: 0x5c,
51
+ };
52
+ const VIEW_TAGS = [
53
+ ["Int8Array", 0x62],
54
+ ["Uint8Array", 0x42],
55
+ ["Uint8ClampedArray", 0x43],
56
+ ["Int16Array", 0x77],
57
+ ["Uint16Array", 0x57],
58
+ ["Int32Array", 0x64],
59
+ ["Uint32Array", 0x44],
60
+ ["Float32Array", 0x66],
61
+ ["Float64Array", 0x46],
62
+ ["BigInt64Array", 0x71],
63
+ ["BigUint64Array", 0x51],
64
+ ["DataView", 0x3f],
65
+ ["Float16Array", 0x68],
66
+ ];
67
+ class Writer {
68
+ buf = new Uint8Array(64);
69
+ len = 0;
70
+ ensure(n) {
71
+ if (this.len + n <= this.buf.length)
72
+ return;
73
+ const b = new Uint8Array(Math.max(this.buf.length * 2, this.len + n));
74
+ b.set(this.buf.subarray(0, this.len));
75
+ this.buf = b;
76
+ }
77
+ byte(b) {
78
+ this.ensure(1);
79
+ this.buf[this.len++] = b;
80
+ }
81
+ bytes(b) {
82
+ this.ensure(b.length);
83
+ this.buf.set(b, this.len);
84
+ this.len += b.length;
85
+ }
86
+ varint(n) {
87
+ let v = BigInt(n);
88
+ do {
89
+ let b = Number(v & 0x7fn);
90
+ v >>= 7n;
91
+ if (v)
92
+ b |= 0x80;
93
+ this.byte(b);
94
+ } while (v);
95
+ }
96
+ double(d) {
97
+ const b = new Uint8Array(8);
98
+ new DataView(b.buffer).setFloat64(0, d, true);
99
+ this.bytes(b);
100
+ }
101
+ }
102
+ export function serialize(value, host) {
103
+ const w = new Writer();
104
+ w.byte(T.version);
105
+ w.varint(VERSION);
106
+ const ids = new Map();
107
+ let nextId = 0;
108
+ const remember = (o) => ids.set(o, nextId++);
109
+ const str = (s) => {
110
+ let oneByte = true;
111
+ for (let i = 0; i < s.length; i++)
112
+ if (s.charCodeAt(i) > 0xff) {
113
+ oneByte = false;
114
+ break;
115
+ }
116
+ if (oneByte) {
117
+ w.byte(T.oneByte);
118
+ w.varint(s.length);
119
+ for (let i = 0; i < s.length; i++)
120
+ w.byte(s.charCodeAt(i));
121
+ return;
122
+ }
123
+ // Two-byte: V8 pads so the UTF-16 data starts at an even offset.
124
+ const byteLength = s.length * 2;
125
+ const lenBytes = new Writer();
126
+ lenBytes.varint(byteLength);
127
+ if ((w.len + 1 + lenBytes.len) % 2 !== 0)
128
+ w.byte(T.pad);
129
+ w.byte(T.twoByte);
130
+ w.varint(byteLength);
131
+ for (let i = 0; i < s.length; i++) {
132
+ const c = s.charCodeAt(i);
133
+ w.byte(c & 0xff);
134
+ w.byte(c >> 8);
135
+ }
136
+ };
137
+ const num = (n) => {
138
+ if (Number.isInteger(n) && n >= -(2 ** 30) && n < 2 ** 30 && !Object.is(n, -0)) {
139
+ w.byte(T.int32);
140
+ w.varint((n << 1) ^ (n >> 31)); // zigzag
141
+ }
142
+ else {
143
+ w.byte(T.double);
144
+ w.double(n);
145
+ }
146
+ };
147
+ const bigint = (b) => {
148
+ const neg = b < 0n;
149
+ let m = neg ? -b : b;
150
+ const words = [];
151
+ while (m > 0n) {
152
+ words.push(m & 0xffffffffffffffffn);
153
+ m >>= 64n;
154
+ }
155
+ w.varint(((words.length * 8) << 1) | (neg ? 1 : 0));
156
+ for (const word of words) {
157
+ const b8 = new Uint8Array(8);
158
+ new DataView(b8.buffer).setBigUint64(0, word, true);
159
+ w.bytes(b8);
160
+ }
161
+ };
162
+ const props = (o, keys) => {
163
+ for (const k of keys) {
164
+ const n = Number(k);
165
+ if (String(n >>> 0) === k && n >>> 0 !== 0xffffffff)
166
+ num(n);
167
+ else
168
+ str(k);
169
+ write(o[k]);
170
+ }
171
+ return keys.length;
172
+ };
173
+ const write = (v) => {
174
+ if (v === undefined)
175
+ return w.byte(T.undef);
176
+ if (v === null)
177
+ return w.byte(T.nul);
178
+ if (v === true)
179
+ return w.byte(T.tru);
180
+ if (v === false)
181
+ return w.byte(T.fal);
182
+ if (typeof v === "number")
183
+ return num(v);
184
+ if (typeof v === "bigint") {
185
+ w.byte(T.bigint);
186
+ return bigint(v);
187
+ }
188
+ if (typeof v === "string")
189
+ return str(v);
190
+ if (typeof v !== "object")
191
+ throw new TypeError(`${String(v)} could not be cloned.`);
192
+ const known = ids.get(v);
193
+ if (known !== undefined) {
194
+ w.byte(T.ref);
195
+ return w.varint(known);
196
+ }
197
+ const hosted = host?.encode(v);
198
+ if (hosted) {
199
+ remember(v);
200
+ w.byte(T.host);
201
+ w.varint(hosted.length);
202
+ return w.bytes(hosted);
203
+ }
204
+ if (ArrayBuffer.isView(v)) {
205
+ // The buffer first (its id precedes the view's), then the view.
206
+ const bytes = new Uint8Array(v.buffer, v.byteOffset, v.byteLength);
207
+ remember(v.buffer);
208
+ w.byte(T.ab);
209
+ w.varint(v.byteLength);
210
+ w.bytes(bytes);
211
+ remember(v);
212
+ const tag = VIEW_TAGS.find(([name]) => v.constructor.name === name)?.[1];
213
+ if (tag === undefined)
214
+ throw new TypeError(`${v.constructor.name} could not be cloned.`);
215
+ w.byte(T.view);
216
+ w.byte(tag);
217
+ w.varint(0);
218
+ w.varint(v.byteLength);
219
+ w.varint(0); // flags (length-tracking / backed-by-rab)
220
+ return;
221
+ }
222
+ remember(v);
223
+ if (v instanceof ArrayBuffer) {
224
+ w.byte(T.ab);
225
+ w.varint(v.byteLength);
226
+ return w.bytes(new Uint8Array(v));
227
+ }
228
+ if (v instanceof Date) {
229
+ w.byte(T.date);
230
+ return w.double(v.getTime());
231
+ }
232
+ if (v instanceof Error) {
233
+ // V8's Error: 'r', the prototype tag (standard subclasses), 'm' message, 's' stack, '.'
234
+ w.byte(T.error);
235
+ const proto = {
236
+ EvalError: 0x45,
237
+ RangeError: 0x52,
238
+ ReferenceError: 0x46,
239
+ SyntaxError: 0x53,
240
+ TypeError: 0x54,
241
+ URIError: 0x55,
242
+ };
243
+ const tag = proto[v.constructor?.name ?? ""];
244
+ if (tag)
245
+ w.byte(tag);
246
+ if (v.message !== undefined && v.message !== "") {
247
+ w.byte(0x6d);
248
+ str(String(v.message));
249
+ }
250
+ if (typeof v.stack === "string") {
251
+ w.byte(0x73);
252
+ str(v.stack);
253
+ }
254
+ return w.byte(0x2e);
255
+ }
256
+ if (v instanceof RegExp) {
257
+ w.byte(T.regexp);
258
+ str(v.source);
259
+ const flags = "dgimsuyv";
260
+ let bits = 0;
261
+ // V8's JSRegExp::Flags order: g=1 i=2 m=4 y=8 u=16 s=32 d=64 v=256 (linear=128)
262
+ const bit = { g: 1, i: 2, m: 4, y: 8, u: 16, s: 32, d: 64, v: 256 };
263
+ for (const f of v.flags)
264
+ if (flags.includes(f))
265
+ bits |= bit[f];
266
+ return w.varint(bits);
267
+ }
268
+ if (v instanceof Map) {
269
+ w.byte(T.map);
270
+ for (const [k, x] of v) {
271
+ write(k);
272
+ write(x);
273
+ }
274
+ w.byte(T.mapEnd);
275
+ return w.varint(v.size * 2);
276
+ }
277
+ if (v instanceof Set) {
278
+ w.byte(T.set);
279
+ for (const x of v)
280
+ write(x);
281
+ w.byte(T.setEnd);
282
+ return w.varint(v.size);
283
+ }
284
+ if (v instanceof Boolean)
285
+ return w.byte(v.valueOf() ? T.trueObj : T.falseObj);
286
+ if (v instanceof Number) {
287
+ w.byte(T.numObj);
288
+ return w.double(v.valueOf());
289
+ }
290
+ if (v instanceof String) {
291
+ w.byte(T.strObj);
292
+ return str(v.valueOf());
293
+ }
294
+ if (Array.isArray(v)) {
295
+ const holes = v.length > 0 && Object.keys(v).length < v.length;
296
+ if (holes) {
297
+ w.byte(T.sparse);
298
+ w.varint(v.length);
299
+ const n = props(v, Object.keys(v));
300
+ w.byte(T.sparseEnd);
301
+ w.varint(n);
302
+ return w.varint(v.length);
303
+ }
304
+ w.byte(T.dense);
305
+ w.varint(v.length);
306
+ for (let i = 0; i < v.length; i++)
307
+ write(v[i]);
308
+ const extra = Object.keys(v).filter((k) => String(Number(k) >>> 0) !== k);
309
+ const n = props(v, extra);
310
+ w.byte(T.denseEnd);
311
+ w.varint(n);
312
+ return w.varint(v.length);
313
+ }
314
+ if (typeof v.then === "function" ||
315
+ v instanceof WeakMap ||
316
+ v instanceof WeakSet)
317
+ throw new TypeError(`#<${v.constructor?.name ?? "Object"}> could not be cloned.`);
318
+ w.byte(T.obj);
319
+ const n = props(v, Object.keys(v));
320
+ w.byte(T.objEnd);
321
+ return w.varint(n);
322
+ };
323
+ write(value);
324
+ return w.buf.slice(0, w.len);
325
+ }
326
+ export function deserialize(bytes, host) {
327
+ let o = 0;
328
+ const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
329
+ const objs = [];
330
+ const u8 = () => bytes[o++];
331
+ const varint = () => {
332
+ let r = 0n;
333
+ let shift = 0n;
334
+ for (;;) {
335
+ const b = u8();
336
+ r |= BigInt(b & 0x7f) << shift;
337
+ if (!(b & 0x80))
338
+ break;
339
+ shift += 7n;
340
+ }
341
+ return Number(r);
342
+ };
343
+ const double = () => {
344
+ const d = dv.getFloat64(o, true);
345
+ o += 8;
346
+ return d;
347
+ };
348
+ const tag = () => {
349
+ let t = u8();
350
+ while (t === T.pad)
351
+ t = u8();
352
+ return t;
353
+ };
354
+ if (u8() !== T.version)
355
+ throw new Error("v8: missing version header");
356
+ const version = varint();
357
+ if (version < 13)
358
+ throw new Error(`v8: unsupported version ${version}`);
359
+ const bigint = () => {
360
+ const bitfield = varint();
361
+ const n = bitfield >> 1;
362
+ let r = 0n;
363
+ for (let i = 0; i < n; i++)
364
+ r |= BigInt(bytes[o + i]) << BigInt(8 * i);
365
+ o += n;
366
+ return bitfield & 1 ? -r : r;
367
+ };
368
+ const strBody = (t) => {
369
+ const n = varint();
370
+ const b = bytes.subarray(o, o + n);
371
+ o += n;
372
+ if (t === T.oneByte)
373
+ return String.fromCharCode(...b);
374
+ if (t === T.utf8)
375
+ return new TextDecoder().decode(b);
376
+ let s = "";
377
+ for (let i = 0; i + 1 < b.length; i += 2)
378
+ s += String.fromCharCode(b[i] | (b[i + 1] << 8));
379
+ return s;
380
+ };
381
+ const props = (target, end) => {
382
+ for (;;) {
383
+ const t = tag();
384
+ if (t === end) {
385
+ varint(); // property count
386
+ return;
387
+ }
388
+ o--;
389
+ const k = read();
390
+ target[String(k)] = read();
391
+ }
392
+ };
393
+ const viewOf = (buffer) => {
394
+ const sub = u8();
395
+ const offset = varint();
396
+ const length = varint();
397
+ if (version >= 14)
398
+ varint(); // flags
399
+ const name = VIEW_TAGS.find(([, t]) => t === sub)?.[0];
400
+ if (!name)
401
+ throw new Error(`v8: unknown view tag ${sub}`);
402
+ const Ctor = globalThis[name];
403
+ const size = name === "DataView" ? 1 : Ctor.BYTES_PER_ELEMENT;
404
+ const view = name === "DataView"
405
+ ? new DataView(buffer, offset, length)
406
+ : new Ctor(buffer, offset, length / size);
407
+ objs.push(view);
408
+ return view;
409
+ };
410
+ const read = () => {
411
+ const t = tag();
412
+ switch (t) {
413
+ case T.undef:
414
+ return undefined;
415
+ case T.nul:
416
+ return null;
417
+ case T.tru:
418
+ return true;
419
+ case T.fal:
420
+ return false;
421
+ case T.int32: {
422
+ const z = varint();
423
+ return (z >>> 1) ^ -(z & 1);
424
+ }
425
+ case T.uint32:
426
+ return varint();
427
+ case T.double:
428
+ return double();
429
+ case T.bigint:
430
+ return bigint();
431
+ case T.oneByte:
432
+ case T.twoByte:
433
+ case T.utf8:
434
+ return strBody(t);
435
+ case T.ref:
436
+ return objs[varint()];
437
+ case T.obj: {
438
+ const r = {};
439
+ objs.push(r);
440
+ props(r, T.objEnd);
441
+ return r;
442
+ }
443
+ case T.dense: {
444
+ const n = varint();
445
+ const a = new Array(n);
446
+ objs.push(a);
447
+ for (let i = 0; i < n; i++) {
448
+ const peek = bytes[o];
449
+ if (peek === T.theHole) {
450
+ o++;
451
+ continue;
452
+ }
453
+ a[i] = read();
454
+ }
455
+ props(a, T.denseEnd);
456
+ varint(); // length
457
+ return a;
458
+ }
459
+ case T.sparse: {
460
+ const n = varint();
461
+ const a = new Array(n);
462
+ objs.push(a);
463
+ props(a, T.sparseEnd);
464
+ varint();
465
+ return a;
466
+ }
467
+ case T.date: {
468
+ const d = new Date(double());
469
+ objs.push(d);
470
+ return d;
471
+ }
472
+ case T.trueObj:
473
+ case T.falseObj: {
474
+ const b = new Boolean(t === T.trueObj);
475
+ objs.push(b);
476
+ return b;
477
+ }
478
+ case T.numObj: {
479
+ const n = new Number(double());
480
+ objs.push(n);
481
+ return n;
482
+ }
483
+ case T.bigintObj: {
484
+ const b = Object(bigint());
485
+ objs.push(b);
486
+ return b;
487
+ }
488
+ case T.strObj: {
489
+ const s = new String(read());
490
+ objs.push(s);
491
+ return s;
492
+ }
493
+ case T.regexp: {
494
+ const id = objs.length;
495
+ objs.push(null);
496
+ const source = read();
497
+ const bits = varint();
498
+ const map = [
499
+ [64, "d"],
500
+ [1, "g"],
501
+ [2, "i"],
502
+ [4, "m"],
503
+ [32, "s"],
504
+ [16, "u"],
505
+ [256, "v"],
506
+ [8, "y"],
507
+ ];
508
+ const r = new RegExp(source, map
509
+ .filter(([b]) => bits & b)
510
+ .map(([, f]) => f)
511
+ .join(""));
512
+ objs[id] = r;
513
+ return r;
514
+ }
515
+ case T.map: {
516
+ const m = new Map();
517
+ objs.push(m);
518
+ for (;;) {
519
+ if (bytes[o] === T.mapEnd) {
520
+ o++;
521
+ varint();
522
+ return m;
523
+ }
524
+ const k = read();
525
+ m.set(k, read());
526
+ }
527
+ }
528
+ case T.set: {
529
+ const s = new Set();
530
+ objs.push(s);
531
+ for (;;) {
532
+ if (bytes[o] === T.setEnd) {
533
+ o++;
534
+ varint();
535
+ return s;
536
+ }
537
+ s.add(read());
538
+ }
539
+ }
540
+ case T.ab:
541
+ case T.rab: {
542
+ const n = varint();
543
+ if (t === T.rab)
544
+ varint(); // max byte length
545
+ const buffer = bytes.slice(o, o + n).buffer;
546
+ o += n;
547
+ objs.push(buffer);
548
+ if (bytes[o] === T.view) {
549
+ o++;
550
+ return viewOf(buffer);
551
+ }
552
+ return buffer;
553
+ }
554
+ case T.host: {
555
+ if (!host)
556
+ throw new Error("v8: a host object, and no decoder for it");
557
+ const n = varint();
558
+ const v = host.decode(bytes.slice(o, o + n));
559
+ o += n;
560
+ objs.push(v);
561
+ return v;
562
+ }
563
+ case T.error: {
564
+ let message = "";
565
+ let name = "Error";
566
+ let stack;
567
+ const proto = {
568
+ 69: "EvalError",
569
+ 82: "RangeError",
570
+ 70: "ReferenceError",
571
+ 83: "SyntaxError",
572
+ 84: "TypeError",
573
+ 85: "URIError",
574
+ };
575
+ for (;;) {
576
+ const s = u8();
577
+ if (s === 0x2e)
578
+ break; // '.' end
579
+ if (proto[s])
580
+ name = proto[s];
581
+ else if (s === 0x6d)
582
+ message = read(); // 'm'
583
+ else if (s === 0x73)
584
+ stack = read(); // 's'
585
+ else if (s === 0x63)
586
+ read(); // 'c' cause
587
+ }
588
+ const Ctor = globalThis[name] ?? Error;
589
+ const e = new Ctor(message);
590
+ if (stack)
591
+ e.stack = stack;
592
+ objs.push(e);
593
+ return e;
594
+ }
595
+ default:
596
+ throw new Error(`v8: unsupported tag 0x${t.toString(16)} at ${o - 1}`);
597
+ }
598
+ };
599
+ return read();
600
+ }
601
+ //# sourceMappingURL=serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/v8/serialize.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The V8 ValueSerializer wire format (version 15) in TypeScript — what celld stores as the\n * values of Durable Object KV storage (`_cf_KV.v`), so cellb can read celld's cells\n * and write cells celld reads, in browsers too (they have no `v8.serialize`).\n *\n * Covers: undefined, null, booleans, numbers (Smi / double), BigInt, strings (Latin-1 and\n * two-byte), objects, dense and sparse arrays, Date, RegExp, Map, Set, ArrayBuffer and every\n * ArrayBufferView, boxed primitives, object identity (back-references), Error (read).\n * Typed arrays use V8's own encoding ('B' + 'V'), as V8 embedders without a host-object\n * delegate (workerd, Deno, celld) write them — not Node's Buffer host objects.\n */\nconst VERSION = 15;\nconst T = {\n pad: 0x00,\n version: 0xff,\n undef: 0x5f,\n nul: 0x30,\n tru: 0x54,\n fal: 0x46,\n int32: 0x49,\n uint32: 0x55,\n double: 0x4e,\n bigint: 0x5a,\n utf8: 0x53,\n oneByte: 0x22,\n twoByte: 0x63,\n ref: 0x5e,\n obj: 0x6f,\n objEnd: 0x7b,\n dense: 0x41,\n denseEnd: 0x24,\n sparse: 0x61,\n sparseEnd: 0x40,\n date: 0x44,\n trueObj: 0x79,\n falseObj: 0x78,\n numObj: 0x6e,\n bigintObj: 0x7a,\n strObj: 0x73,\n regexp: 0x52,\n map: 0x3b,\n mapEnd: 0x3a,\n set: 0x27,\n setEnd: 0x2c,\n ab: 0x42,\n rab: 0x7e,\n view: 0x56,\n error: 0x72,\n theHole: 0x2d,\n host: 0x5c,\n} as const;\n\n/**\n * An embedder's own objects (V8's host objects, tag `\\`), written as a length and bytes:\n * `encode` claims a value (bytes) or leaves it (undefined); `decode` restores it.\n */\nexport interface HostObjects {\n encode(v: object): Uint8Array | undefined;\n decode(bytes: Uint8Array): unknown;\n}\n\nconst VIEW_TAGS: [string, number][] = [\n [\"Int8Array\", 0x62],\n [\"Uint8Array\", 0x42],\n [\"Uint8ClampedArray\", 0x43],\n [\"Int16Array\", 0x77],\n [\"Uint16Array\", 0x57],\n [\"Int32Array\", 0x64],\n [\"Uint32Array\", 0x44],\n [\"Float32Array\", 0x66],\n [\"Float64Array\", 0x46],\n [\"BigInt64Array\", 0x71],\n [\"BigUint64Array\", 0x51],\n [\"DataView\", 0x3f],\n [\"Float16Array\", 0x68],\n];\n\nclass Writer {\n buf = new Uint8Array(64);\n len = 0;\n ensure(n: number) {\n if (this.len + n <= this.buf.length) return;\n const b = new Uint8Array(Math.max(this.buf.length * 2, this.len + n));\n b.set(this.buf.subarray(0, this.len));\n this.buf = b;\n }\n byte(b: number) {\n this.ensure(1);\n this.buf[this.len++] = b;\n }\n bytes(b: Uint8Array) {\n this.ensure(b.length);\n this.buf.set(b, this.len);\n this.len += b.length;\n }\n varint(n: number | bigint) {\n let v = BigInt(n);\n do {\n let b = Number(v & 0x7fn);\n v >>= 7n;\n if (v) b |= 0x80;\n this.byte(b);\n } while (v);\n }\n double(d: number) {\n const b = new Uint8Array(8);\n new DataView(b.buffer).setFloat64(0, d, true);\n this.bytes(b);\n }\n}\n\nexport function serialize(value: unknown, host?: HostObjects): Uint8Array {\n const w = new Writer();\n w.byte(T.version);\n w.varint(VERSION);\n const ids = new Map<object, number>();\n let nextId = 0;\n const remember = (o: object) => ids.set(o, nextId++);\n\n const str = (s: string) => {\n let oneByte = true;\n for (let i = 0; i < s.length; i++)\n if (s.charCodeAt(i) > 0xff) {\n oneByte = false;\n break;\n }\n if (oneByte) {\n w.byte(T.oneByte);\n w.varint(s.length);\n for (let i = 0; i < s.length; i++) w.byte(s.charCodeAt(i));\n return;\n }\n // Two-byte: V8 pads so the UTF-16 data starts at an even offset.\n const byteLength = s.length * 2;\n const lenBytes = new Writer();\n lenBytes.varint(byteLength);\n if ((w.len + 1 + lenBytes.len) % 2 !== 0) w.byte(T.pad);\n w.byte(T.twoByte);\n w.varint(byteLength);\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n w.byte(c & 0xff);\n w.byte(c >> 8);\n }\n };\n const num = (n: number) => {\n if (Number.isInteger(n) && n >= -(2 ** 30) && n < 2 ** 30 && !Object.is(n, -0)) {\n w.byte(T.int32);\n w.varint((n << 1) ^ (n >> 31)); // zigzag\n } else {\n w.byte(T.double);\n w.double(n);\n }\n };\n const bigint = (b: bigint) => {\n const neg = b < 0n;\n let m = neg ? -b : b;\n const words: bigint[] = [];\n while (m > 0n) {\n words.push(m & 0xffffffffffffffffn);\n m >>= 64n;\n }\n w.varint(((words.length * 8) << 1) | (neg ? 1 : 0));\n for (const word of words) {\n const b8 = new Uint8Array(8);\n new DataView(b8.buffer).setBigUint64(0, word, true);\n w.bytes(b8);\n }\n };\n const props = (o: object, keys: string[]) => {\n for (const k of keys) {\n const n = Number(k);\n if (String(n >>> 0) === k && n >>> 0 !== 0xffffffff) num(n);\n else str(k);\n write((o as Record<string, unknown>)[k]);\n }\n return keys.length;\n };\n\n const write = (v: unknown): unknown => {\n if (v === undefined) return w.byte(T.undef);\n if (v === null) return w.byte(T.nul);\n if (v === true) return w.byte(T.tru);\n if (v === false) return w.byte(T.fal);\n if (typeof v === \"number\") return num(v);\n if (typeof v === \"bigint\") {\n w.byte(T.bigint);\n return bigint(v);\n }\n if (typeof v === \"string\") return str(v);\n if (typeof v !== \"object\") throw new TypeError(`${String(v)} could not be cloned.`);\n const known = ids.get(v);\n if (known !== undefined) {\n w.byte(T.ref);\n return w.varint(known);\n }\n const hosted = host?.encode(v);\n if (hosted) {\n remember(v);\n w.byte(T.host);\n w.varint(hosted.length);\n return w.bytes(hosted);\n }\n if (ArrayBuffer.isView(v)) {\n // The buffer first (its id precedes the view's), then the view.\n const bytes = new Uint8Array(v.buffer, v.byteOffset, v.byteLength);\n remember(v.buffer as object);\n w.byte(T.ab);\n w.varint(v.byteLength);\n w.bytes(bytes);\n remember(v);\n const tag = VIEW_TAGS.find(([name]) => v.constructor.name === name)?.[1];\n if (tag === undefined) throw new TypeError(`${v.constructor.name} could not be cloned.`);\n w.byte(T.view);\n w.byte(tag);\n w.varint(0);\n w.varint(v.byteLength);\n w.varint(0); // flags (length-tracking / backed-by-rab)\n return;\n }\n remember(v);\n if (v instanceof ArrayBuffer) {\n w.byte(T.ab);\n w.varint(v.byteLength);\n return w.bytes(new Uint8Array(v));\n }\n if (v instanceof Date) {\n w.byte(T.date);\n return w.double(v.getTime());\n }\n if (v instanceof Error) {\n // V8's Error: 'r', the prototype tag (standard subclasses), 'm' message, 's' stack, '.'\n w.byte(T.error);\n const proto: Record<string, number> = {\n EvalError: 0x45,\n RangeError: 0x52,\n ReferenceError: 0x46,\n SyntaxError: 0x53,\n TypeError: 0x54,\n URIError: 0x55,\n };\n const tag = proto[v.constructor?.name ?? \"\"];\n if (tag) w.byte(tag);\n if (v.message !== undefined && v.message !== \"\") {\n w.byte(0x6d);\n str(String(v.message));\n }\n if (typeof v.stack === \"string\") {\n w.byte(0x73);\n str(v.stack);\n }\n return w.byte(0x2e);\n }\n if (v instanceof RegExp) {\n w.byte(T.regexp);\n str(v.source);\n const flags = \"dgimsuyv\";\n let bits = 0;\n // V8's JSRegExp::Flags order: g=1 i=2 m=4 y=8 u=16 s=32 d=64 v=256 (linear=128)\n const bit: Record<string, number> = { g: 1, i: 2, m: 4, y: 8, u: 16, s: 32, d: 64, v: 256 };\n for (const f of v.flags) if (flags.includes(f)) bits |= bit[f];\n return w.varint(bits);\n }\n if (v instanceof Map) {\n w.byte(T.map);\n for (const [k, x] of v) {\n write(k);\n write(x);\n }\n w.byte(T.mapEnd);\n return w.varint(v.size * 2);\n }\n if (v instanceof Set) {\n w.byte(T.set);\n for (const x of v) write(x);\n w.byte(T.setEnd);\n return w.varint(v.size);\n }\n if (v instanceof Boolean) return w.byte(v.valueOf() ? T.trueObj : T.falseObj);\n if (v instanceof Number) {\n w.byte(T.numObj);\n return w.double(v.valueOf());\n }\n if (v instanceof String) {\n w.byte(T.strObj);\n return str(v.valueOf());\n }\n if (Array.isArray(v)) {\n const holes = v.length > 0 && Object.keys(v).length < v.length;\n if (holes) {\n w.byte(T.sparse);\n w.varint(v.length);\n const n = props(v, Object.keys(v));\n w.byte(T.sparseEnd);\n w.varint(n);\n return w.varint(v.length);\n }\n w.byte(T.dense);\n w.varint(v.length);\n for (let i = 0; i < v.length; i++) write(v[i]);\n const extra = Object.keys(v).filter((k) => String(Number(k) >>> 0) !== k);\n const n = props(v, extra);\n w.byte(T.denseEnd);\n w.varint(n);\n return w.varint(v.length);\n }\n if (\n typeof (v as { then?: unknown }).then === \"function\" ||\n v instanceof WeakMap ||\n v instanceof WeakSet\n )\n throw new TypeError(`#<${v.constructor?.name ?? \"Object\"}> could not be cloned.`);\n w.byte(T.obj);\n const n = props(v, Object.keys(v));\n w.byte(T.objEnd);\n return w.varint(n);\n };\n write(value);\n return w.buf.slice(0, w.len);\n}\n\nexport function deserialize(bytes: Uint8Array, host?: HostObjects): unknown {\n let o = 0;\n const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const objs: unknown[] = [];\n const u8 = () => bytes[o++];\n const varint = (): number => {\n let r = 0n;\n let shift = 0n;\n for (;;) {\n const b = u8();\n r |= BigInt(b & 0x7f) << shift;\n if (!(b & 0x80)) break;\n shift += 7n;\n }\n return Number(r);\n };\n const double = () => {\n const d = dv.getFloat64(o, true);\n o += 8;\n return d;\n };\n const tag = () => {\n let t = u8();\n while (t === T.pad) t = u8();\n return t;\n };\n if (u8() !== T.version) throw new Error(\"v8: missing version header\");\n const version = varint();\n if (version < 13) throw new Error(`v8: unsupported version ${version}`);\n\n const bigint = (): bigint => {\n const bitfield = varint();\n const n = bitfield >> 1;\n let r = 0n;\n for (let i = 0; i < n; i++) r |= BigInt(bytes[o + i]) << BigInt(8 * i);\n o += n;\n return bitfield & 1 ? -r : r;\n };\n const strBody = (t: number): string => {\n const n = varint();\n const b = bytes.subarray(o, o + n);\n o += n;\n if (t === T.oneByte) return String.fromCharCode(...b);\n if (t === T.utf8) return new TextDecoder().decode(b);\n let s = \"\";\n for (let i = 0; i + 1 < b.length; i += 2) s += String.fromCharCode(b[i] | (b[i + 1] << 8));\n return s;\n };\n const props = (target: Record<string, unknown>, end: number) => {\n for (;;) {\n const t = tag();\n if (t === end) {\n varint(); // property count\n return;\n }\n o--;\n const k = read();\n target[String(k)] = read();\n }\n };\n const viewOf = (buffer: ArrayBuffer): unknown => {\n const sub = u8();\n const offset = varint();\n const length = varint();\n if (version >= 14) varint(); // flags\n const name = VIEW_TAGS.find(([, t]) => t === sub)?.[0];\n if (!name) throw new Error(`v8: unknown view tag ${sub}`);\n const Ctor = (globalThis as Record<string, any>)[name];\n const size = name === \"DataView\" ? 1 : Ctor.BYTES_PER_ELEMENT;\n const view =\n name === \"DataView\"\n ? new DataView(buffer, offset, length)\n : new Ctor(buffer, offset, length / size);\n objs.push(view);\n return view;\n };\n const read = (): unknown => {\n const t = tag();\n switch (t) {\n case T.undef:\n return undefined;\n case T.nul:\n return null;\n case T.tru:\n return true;\n case T.fal:\n return false;\n case T.int32: {\n const z = varint();\n return (z >>> 1) ^ -(z & 1);\n }\n case T.uint32:\n return varint();\n case T.double:\n return double();\n case T.bigint:\n return bigint();\n case T.oneByte:\n case T.twoByte:\n case T.utf8:\n return strBody(t);\n case T.ref:\n return objs[varint()];\n case T.obj: {\n const r: Record<string, unknown> = {};\n objs.push(r);\n props(r, T.objEnd);\n return r;\n }\n case T.dense: {\n const n = varint();\n const a: unknown[] = new Array(n);\n objs.push(a);\n for (let i = 0; i < n; i++) {\n const peek = bytes[o];\n if (peek === T.theHole) {\n o++;\n continue;\n }\n a[i] = read();\n }\n props(a as unknown as Record<string, unknown>, T.denseEnd);\n varint(); // length\n return a;\n }\n case T.sparse: {\n const n = varint();\n const a: unknown[] = new Array(n);\n objs.push(a);\n props(a as unknown as Record<string, unknown>, T.sparseEnd);\n varint();\n return a;\n }\n case T.date: {\n const d = new Date(double());\n objs.push(d);\n return d;\n }\n case T.trueObj:\n case T.falseObj: {\n const b = new Boolean(t === T.trueObj);\n objs.push(b);\n return b;\n }\n case T.numObj: {\n const n = new Number(double());\n objs.push(n);\n return n;\n }\n case T.bigintObj: {\n const b = Object(bigint());\n objs.push(b);\n return b;\n }\n case T.strObj: {\n const s = new String(read() as string);\n objs.push(s);\n return s;\n }\n case T.regexp: {\n const id = objs.length;\n objs.push(null);\n const source = read() as string;\n const bits = varint();\n const map: [number, string][] = [\n [64, \"d\"],\n [1, \"g\"],\n [2, \"i\"],\n [4, \"m\"],\n [32, \"s\"],\n [16, \"u\"],\n [256, \"v\"],\n [8, \"y\"],\n ];\n const r = new RegExp(\n source,\n map\n .filter(([b]) => bits & b)\n .map(([, f]) => f)\n .join(\"\"),\n );\n objs[id] = r;\n return r;\n }\n case T.map: {\n const m = new Map();\n objs.push(m);\n for (;;) {\n if (bytes[o] === T.mapEnd) {\n o++;\n varint();\n return m;\n }\n const k = read();\n m.set(k, read());\n }\n }\n case T.set: {\n const s = new Set();\n objs.push(s);\n for (;;) {\n if (bytes[o] === T.setEnd) {\n o++;\n varint();\n return s;\n }\n s.add(read());\n }\n }\n case T.ab:\n case T.rab: {\n const n = varint();\n if (t === T.rab) varint(); // max byte length\n const buffer = bytes.slice(o, o + n).buffer;\n o += n;\n objs.push(buffer);\n if (bytes[o] === T.view) {\n o++;\n return viewOf(buffer);\n }\n return buffer;\n }\n case T.host: {\n if (!host) throw new Error(\"v8: a host object, and no decoder for it\");\n const n = varint();\n const v = host.decode(bytes.slice(o, o + n));\n o += n;\n objs.push(v);\n return v;\n }\n case T.error: {\n let message = \"\";\n let name = \"Error\";\n let stack: string | undefined;\n const proto: Record<number, string> = {\n 69: \"EvalError\",\n 82: \"RangeError\",\n 70: \"ReferenceError\",\n 83: \"SyntaxError\",\n 84: \"TypeError\",\n 85: \"URIError\",\n };\n for (;;) {\n const s = u8();\n if (s === 0x2e) break; // '.' end\n if (proto[s]) name = proto[s];\n else if (s === 0x6d)\n message = read() as string; // 'm'\n else if (s === 0x73)\n stack = read() as string; // 's'\n else if (s === 0x63) read(); // 'c' cause\n }\n const Ctor = (globalThis as Record<string, any>)[name] ?? Error;\n const e = new Ctor(message);\n if (stack) e.stack = stack;\n objs.push(e);\n return e;\n }\n default:\n throw new Error(`v8: unsupported tag 0x${t.toString(16)} at ${o - 1}`);\n }\n };\n return read();\n}\n"]}