@statewalker/cellb 0.0.0-stage → 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +323 -2
- package/dist/adapters/files-backup.d.ts +16 -0
- package/dist/adapters/files-backup.js +32 -0
- package/dist/adapters/files-backup.js.map +1 -0
- package/dist/adapters/files-changelog.d.ts +33 -0
- package/dist/adapters/files-changelog.js +96 -0
- package/dist/adapters/files-changelog.js.map +1 -0
- package/dist/adapters/files-ltx.d.ts +35 -0
- package/dist/adapters/files-ltx.js +9 -0
- package/dist/adapters/files-ltx.js.map +1 -0
- package/dist/adapters/ltx-vfs.d.ts +21 -0
- package/dist/adapters/ltx-vfs.js +286 -0
- package/dist/adapters/ltx-vfs.js.map +1 -0
- package/dist/adapters/node-sqlite.d.ts +45 -0
- package/dist/adapters/node-sqlite.js +254 -0
- package/dist/adapters/node-sqlite.js.map +1 -0
- package/dist/adapters/wasm-page-hook.d.ts +26 -0
- package/dist/adapters/wasm-page-hook.js +55 -0
- package/dist/adapters/wasm-page-hook.js.map +1 -0
- package/dist/adapters/wasm-session.d.ts +11 -0
- package/dist/adapters/wasm-session.js +76 -0
- package/dist/adapters/wasm-session.js.map +1 -0
- package/dist/adapters/wasm-sqlite.d.ts +89 -0
- package/dist/adapters/wasm-sqlite.js +258 -0
- package/dist/adapters/wasm-sqlite.js.map +1 -0
- package/dist/bindings/assets.d.ts +26 -0
- package/dist/bindings/assets.js +260 -0
- package/dist/bindings/assets.js.map +1 -0
- package/dist/bindings/cache.d.ts +16 -0
- package/dist/bindings/cache.js +34 -0
- package/dist/bindings/cache.js.map +1 -0
- package/dist/bindings/celld-kv.d.ts +26 -0
- package/dist/bindings/celld-kv.js +81 -0
- package/dist/bindings/celld-kv.js.map +1 -0
- package/dist/bindings/celld-queues.d.ts +56 -0
- package/dist/bindings/celld-queues.js +223 -0
- package/dist/bindings/celld-queues.js.map +1 -0
- package/dist/bindings/celld-workflows.d.ts +22 -0
- package/dist/bindings/celld-workflows.js +54 -0
- package/dist/bindings/celld-workflows.js.map +1 -0
- package/dist/bindings/cron.d.ts +27 -0
- package/dist/bindings/cron.js +232 -0
- package/dist/bindings/cron.js.map +1 -0
- package/dist/bindings/d1-migrations.d.ts +22 -0
- package/dist/bindings/d1-migrations.js +32 -0
- package/dist/bindings/d1-migrations.js.map +1 -0
- package/dist/bindings/html-rewriter.d.ts +8 -0
- package/dist/bindings/html-rewriter.js +75 -0
- package/dist/bindings/html-rewriter.js.map +1 -0
- package/dist/bindings/r2-celld.d.ts +3 -0
- package/dist/bindings/r2-celld.js +113 -0
- package/dist/bindings/r2-celld.js.map +1 -0
- package/dist/bindings/r2.d.ts +236 -0
- package/dist/bindings/r2.js +419 -0
- package/dist/bindings/r2.js.map +1 -0
- package/dist/bindings/worker-loader.d.ts +83 -0
- package/dist/bindings/worker-loader.js +183 -0
- package/dist/bindings/worker-loader.js.map +1 -0
- package/dist/bindings/workers-ai.d.ts +39 -0
- package/dist/bindings/workers-ai.js +175 -0
- package/dist/bindings/workers-ai.js.map +1 -0
- package/dist/browser.d.ts +7 -0
- package/dist/browser.js +8 -0
- package/dist/browser.js.map +1 -0
- package/dist/bucket/celld-cells.d.ts +86 -0
- package/dist/bucket/celld-cells.js +273 -0
- package/dist/bucket/celld-cells.js.map +1 -0
- package/dist/bucket/celld-format.d.ts +10 -0
- package/dist/bucket/celld-format.js +27 -0
- package/dist/bucket/celld-format.js.map +1 -0
- package/dist/bucket/idb-object-store.d.ts +9 -0
- package/dist/bucket/idb-object-store.js +73 -0
- package/dist/bucket/idb-object-store.js.map +1 -0
- package/dist/bucket/ltx-log.d.ts +34 -0
- package/dist/bucket/ltx-log.js +289 -0
- package/dist/bucket/ltx-log.js.map +1 -0
- package/dist/bucket/object-store.d.ts +51 -0
- package/dist/bucket/object-store.js +114 -0
- package/dist/bucket/object-store.js.map +1 -0
- package/dist/bucket/s3-object-store.d.ts +25 -0
- package/dist/bucket/s3-object-store.js +151 -0
- package/dist/bucket/s3-object-store.js.map +1 -0
- package/dist/bucket/sqlite-object-store.d.ts +10 -0
- package/dist/bucket/sqlite-object-store.js +107 -0
- package/dist/bucket/sqlite-object-store.js.map +1 -0
- package/dist/core/alarms.d.ts +27 -0
- package/dist/core/alarms.js +88 -0
- package/dist/core/alarms.js.map +1 -0
- package/dist/core/async-context.d.ts +34 -0
- package/dist/core/async-context.js +50 -0
- package/dist/core/async-context.js.map +1 -0
- package/dist/core/celld-schema.d.ts +14 -0
- package/dist/core/celld-schema.js +34 -0
- package/dist/core/celld-schema.js.map +1 -0
- package/dist/core/durable-object.d.ts +28 -0
- package/dist/core/durable-object.js +31 -0
- package/dist/core/durable-object.js.map +1 -0
- package/dist/core/gates.d.ts +33 -0
- package/dist/core/gates.js +89 -0
- package/dist/core/gates.js.map +1 -0
- package/dist/core/handles.d.ts +90 -0
- package/dist/core/handles.js +224 -0
- package/dist/core/handles.js.map +1 -0
- package/dist/core/id.d.ts +19 -0
- package/dist/core/id.js +64 -0
- package/dist/core/id.js.map +1 -0
- package/dist/core/namespace.d.ts +38 -0
- package/dist/core/namespace.js +141 -0
- package/dist/core/namespace.js.map +1 -0
- package/dist/core/object-host.d.ts +91 -0
- package/dist/core/object-host.js +616 -0
- package/dist/core/object-host.js.map +1 -0
- package/dist/core/request-body.d.ts +9 -0
- package/dist/core/request-body.js +55 -0
- package/dist/core/request-body.js.map +1 -0
- package/dist/core/runtime.d.ts +121 -0
- package/dist/core/runtime.js +366 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/shard.d.ts +7 -0
- package/dist/core/shard.js +10 -0
- package/dist/core/shard.js.map +1 -0
- package/dist/core/sql-split.d.ts +15 -0
- package/dist/core/sql-split.js +101 -0
- package/dist/core/sql-split.js.map +1 -0
- package/dist/core/sql-storage.d.ts +53 -0
- package/dist/core/sql-storage.js +407 -0
- package/dist/core/sql-storage.js.map +1 -0
- package/dist/core/state.d.ts +44 -0
- package/dist/core/state.js +93 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/storage.d.ts +103 -0
- package/dist/core/storage.js +351 -0
- package/dist/core/storage.js.map +1 -0
- package/dist/core/worker-rejections.d.ts +21 -0
- package/dist/core/worker-rejections.js +55 -0
- package/dist/core/worker-rejections.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/isolate/browser.d.ts +16 -0
- package/dist/isolate/browser.js +37 -0
- package/dist/isolate/browser.js.map +1 -0
- package/dist/isolate/host.d.ts +24 -0
- package/dist/isolate/host.js +74 -0
- package/dist/isolate/host.js.map +1 -0
- package/dist/isolate/isolate-worker.d.ts +1 -0
- package/dist/isolate/isolate-worker.js +53 -0
- package/dist/isolate/isolate-worker.js.map +1 -0
- package/dist/isolate/isolate.d.ts +10 -0
- package/dist/isolate/isolate.js +169 -0
- package/dist/isolate/isolate.js.map +1 -0
- package/dist/isolate/node-entry.d.ts +1 -0
- package/dist/isolate/node-entry.js +12 -0
- package/dist/isolate/node-entry.js.map +1 -0
- package/dist/isolate/protocol.d.ts +66 -0
- package/dist/isolate/protocol.js +205 -0
- package/dist/isolate/protocol.js.map +1 -0
- package/dist/ltx/crc64.d.ts +6 -0
- package/dist/ltx/crc64.js +46 -0
- package/dist/ltx/crc64.js.map +1 -0
- package/dist/ltx/ltx-page-server.d.ts +65 -0
- package/dist/ltx/ltx-page-server.js +309 -0
- package/dist/ltx/ltx-page-server.js.map +1 -0
- package/dist/ltx/ltx-pages.d.ts +81 -0
- package/dist/ltx/ltx-pages.js +315 -0
- package/dist/ltx/ltx-pages.js.map +1 -0
- package/dist/ltx/ltx-store-worker.d.ts +1 -0
- package/dist/ltx/ltx-store-worker.js +38 -0
- package/dist/ltx/ltx-store-worker.js.map +1 -0
- package/dist/ltx/ltx.d.ts +45 -0
- package/dist/ltx/ltx.js +203 -0
- package/dist/ltx/ltx.js.map +1 -0
- package/dist/ltx/lz4.d.ts +9 -0
- package/dist/ltx/lz4.js +156 -0
- package/dist/ltx/lz4.js.map +1 -0
- package/dist/ltx/opfs-sync-files.d.ts +23 -0
- package/dist/ltx/opfs-sync-files.js +191 -0
- package/dist/ltx/opfs-sync-files.js.map +1 -0
- package/dist/ltx/xxh32.d.ts +1 -0
- package/dist/ltx/xxh32.js +43 -0
- package/dist/ltx/xxh32.js.map +1 -0
- package/dist/miniflare-compat/blob-service.d.ts +13 -0
- package/dist/miniflare-compat/blob-service.js +66 -0
- package/dist/miniflare-compat/blob-service.js.map +1 -0
- package/dist/miniflare-compat/kv-binding.d.ts +44 -0
- package/dist/miniflare-compat/kv-binding.js +99 -0
- package/dist/miniflare-compat/kv-binding.js.map +1 -0
- package/dist/miniflare-compat/shims/assert.d.ts +15 -0
- package/dist/miniflare-compat/shims/assert.js +24 -0
- package/dist/miniflare-compat/shims/assert.js.map +1 -0
- package/dist/miniflare-compat/shims/workerd-cloudflare.d.ts +7 -0
- package/dist/miniflare-compat/shims/workerd-cloudflare.js +6 -0
- package/dist/miniflare-compat/shims/workerd-cloudflare.js.map +1 -0
- package/dist/miniflare-compat/shims/workerd-globals.d.ts +1 -0
- package/dist/miniflare-compat/shims/workerd-globals.js +30 -0
- package/dist/miniflare-compat/shims/workerd-globals.js.map +1 -0
- package/dist/miniflare-compat/shims/workerd-internal.d.ts +20 -0
- package/dist/miniflare-compat/shims/workerd-internal.js +23 -0
- package/dist/miniflare-compat/shims/workerd-internal.js.map +1 -0
- package/dist/miniflare-compat/shims/workerd-performance.d.ts +4 -0
- package/dist/miniflare-compat/shims/workerd-performance.js +17 -0
- package/dist/miniflare-compat/shims/workerd-performance.js.map +1 -0
- package/dist/miniflare-compat/simulator-fetcher.d.ts +9 -0
- package/dist/miniflare-compat/simulator-fetcher.js +14 -0
- package/dist/miniflare-compat/simulator-fetcher.js.map +1 -0
- package/dist/miniflare-compat/vendored.d.ts +15 -0
- package/dist/miniflare-compat/vendored.js +27 -0
- package/dist/miniflare-compat/vendored.js.map +1 -0
- package/dist/node-compat/async_hooks.d.ts +22 -0
- package/dist/node-compat/async_hooks.js +176 -0
- package/dist/node-compat/async_hooks.js.map +1 -0
- package/dist/node-compat/browser-registry.d.ts +3 -0
- package/dist/node-compat/browser-registry.js +39 -0
- package/dist/node-compat/browser-registry.js.map +1 -0
- package/dist/node-compat/crypto.d.ts +60 -0
- package/dist/node-compat/crypto.js +143 -0
- package/dist/node-compat/crypto.js.map +1 -0
- package/dist/node-compat/diagnostics_channel.d.ts +27 -0
- package/dist/node-compat/diagnostics_channel.js +46 -0
- package/dist/node-compat/diagnostics_channel.js.map +1 -0
- package/dist/node-compat/fs.d.ts +35 -0
- package/dist/node-compat/fs.js +40 -0
- package/dist/node-compat/fs.js.map +1 -0
- package/dist/node-compat/globals.d.ts +3 -0
- package/dist/node-compat/globals.js +4 -0
- package/dist/node-compat/globals.js.map +1 -0
- package/dist/node-compat/install.d.ts +5 -0
- package/dist/node-compat/install.js +12 -0
- package/dist/node-compat/install.js.map +1 -0
- package/dist/node-compat/module.d.ts +12 -0
- package/dist/node-compat/module.js +36 -0
- package/dist/node-compat/module.js.map +1 -0
- package/dist/node-compat/modules.d.ts +8 -0
- package/dist/node-compat/modules.js +23 -0
- package/dist/node-compat/modules.js.map +1 -0
- package/dist/node-compat/os.d.ts +36 -0
- package/dist/node-compat/os.js +36 -0
- package/dist/node-compat/os.js.map +1 -0
- package/dist/node-compat/process.d.ts +14 -0
- package/dist/node-compat/process.js +16 -0
- package/dist/node-compat/process.js.map +1 -0
- package/dist/node-compat/shims.d.ts +4 -0
- package/dist/node.d.ts +5 -0
- package/dist/node.js +6 -0
- package/dist/node.js.map +1 -0
- package/dist/peer/celld-peer.d.ts +53 -0
- package/dist/peer/celld-peer.js +555 -0
- package/dist/peer/celld-peer.js.map +1 -0
- package/dist/ports.d.ts +183 -0
- package/dist/ports.js +10 -0
- package/dist/ports.js.map +1 -0
- package/dist/project/browser-bundle.d.ts +17 -0
- package/dist/project/browser-bundle.js +125 -0
- package/dist/project/browser-bundle.js.map +1 -0
- package/dist/project/browser-cookies.d.ts +12 -0
- package/dist/project/browser-cookies.js +90 -0
- package/dist/project/browser-cookies.js.map +1 -0
- package/dist/project/browser-host.d.ts +173 -0
- package/dist/project/browser-host.js +200 -0
- package/dist/project/browser-host.js.map +1 -0
- package/dist/project/browser-modules.d.ts +17 -0
- package/dist/project/browser-modules.js +89 -0
- package/dist/project/browser-modules.js.map +1 -0
- package/dist/project/browser-shards.d.ts +62 -0
- package/dist/project/browser-shards.js +210 -0
- package/dist/project/browser-shards.js.map +1 -0
- package/dist/project/browser-tabs.d.ts +103 -0
- package/dist/project/browser-tabs.js +418 -0
- package/dist/project/browser-tabs.js.map +1 -0
- package/dist/project/cloudflare-email.d.ts +8 -0
- package/dist/project/cloudflare-email.js +11 -0
- package/dist/project/cloudflare-email.js.map +1 -0
- package/dist/project/cloudflare-workers.d.ts +12 -0
- package/dist/project/cloudflare-workers.js +16 -0
- package/dist/project/cloudflare-workers.js.map +1 -0
- package/dist/project/host-modules.d.ts +4 -0
- package/dist/project/host-modules.js +40 -0
- package/dist/project/host-modules.js.map +1 -0
- package/dist/project/jsonc.d.ts +2 -0
- package/dist/project/jsonc.js +27 -0
- package/dist/project/jsonc.js.map +1 -0
- package/dist/project/lower-await.d.ts +2 -0
- package/dist/project/lower-await.js +151 -0
- package/dist/project/lower-await.js.map +1 -0
- package/dist/project/node-project.d.ts +38 -0
- package/dist/project/node-project.js +362 -0
- package/dist/project/node-project.js.map +1 -0
- package/dist/project/own-module.d.ts +6 -0
- package/dist/project/own-module.js +13 -0
- package/dist/project/own-module.js.map +1 -0
- package/dist/project/scheduler.d.ts +2 -0
- package/dist/project/scheduler.js +3 -0
- package/dist/project/scheduler.js.map +1 -0
- package/dist/project/site.d.ts +74 -0
- package/dist/project/site.js +206 -0
- package/dist/project/site.js.map +1 -0
- package/dist/project/virtual-modules.d.ts +3 -0
- package/dist/project/worker-scope.d.ts +27 -0
- package/dist/project/worker-scope.js +46 -0
- package/dist/project/worker-scope.js.map +1 -0
- package/dist/project/workerd-message-channel.d.ts +13 -0
- package/dist/project/workerd-message-channel.js +137 -0
- package/dist/project/workerd-message-channel.js.map +1 -0
- package/dist/project/workers-global-names.d.ts +6 -0
- package/dist/project/workers-global-names.js +15 -0
- package/dist/project/workers-global-names.js.map +1 -0
- package/dist/project/workers-globals-module.d.ts +8 -0
- package/dist/project/workers-globals-module.js +9 -0
- package/dist/project/workers-globals-module.js.map +1 -0
- package/dist/project/workers-globals.d.ts +9 -0
- package/dist/project/workers-globals.js +19 -0
- package/dist/project/workers-globals.js.map +1 -0
- package/dist/project/wrangler.d.ts +116 -0
- package/dist/project/wrangler.js +342 -0
- package/dist/project/wrangler.js.map +1 -0
- package/dist/router/cell-router.d.ts +72 -0
- package/dist/router/cell-router.js +247 -0
- package/dist/router/cell-router.js.map +1 -0
- package/dist/router/shard-worker.d.ts +44 -0
- package/dist/router/shard-worker.js +163 -0
- package/dist/router/shard-worker.js.map +1 -0
- package/dist/transport/cells-http.d.ts +25 -0
- package/dist/transport/cells-http.js +141 -0
- package/dist/transport/cells-http.js.map +1 -0
- package/dist/transport/cells-link.d.ts +27 -0
- package/dist/transport/cells-link.js +71 -0
- package/dist/transport/cells-link.js.map +1 -0
- package/dist/transport/port.d.ts +26 -0
- package/dist/transport/port.js +100 -0
- package/dist/transport/port.js.map +1 -0
- package/dist/v8/codec.d.ts +6 -0
- package/dist/v8/codec.js +9 -0
- package/dist/v8/codec.js.map +1 -0
- package/dist/v8/serialize.d.ts +10 -0
- package/dist/v8/serialize.js +601 -0
- package/dist/v8/serialize.js.map +1 -0
- package/dist/ws/client.d.ts +25 -0
- package/dist/ws/client.js +203 -0
- package/dist/ws/client.js.map +1 -0
- package/dist/ws/control.d.ts +48 -0
- package/dist/ws/control.js +44 -0
- package/dist/ws/control.js.map +1 -0
- package/dist/ws/frames.d.ts +38 -0
- package/dist/ws/frames.js +39 -0
- package/dist/ws/frames.js.map +1 -0
- package/dist/ws/server.d.ts +99 -0
- package/dist/ws/server.js +295 -0
- package/dist/ws/server.js.map +1 -0
- package/dist/ws/sw-connector.d.ts +10 -0
- package/dist/ws/sw-connector.js +25 -0
- package/dist/ws/sw-connector.js.map +1 -0
- package/dist/ws/upgrade.d.ts +28 -0
- package/dist/ws/upgrade.js +75 -0
- package/dist/ws/upgrade.js.map +1 -0
- package/package.json +111 -3
- package/vendor/celld/LICENSE +202 -0
- package/vendor/celld/kv.js +1131 -0
- package/vendor/celld/queues.js +1656 -0
- package/vendor/celld/workflows.js +1610 -0
- package/vendor/html-rewriter-wasm/html_rewriter.js +925 -0
- package/vendor/html-rewriter-wasm/html_rewriter_bg.wasm +0 -0
- package/vendor/miniflare/d1-api.js +738 -0
- package/vendor/miniflare/d1-database.js +6978 -0
- 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"]}
|