@sofa-buffers/corelib 0.8.0 → 0.10.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/CHANGELOG.md +54 -1
- package/README.md +55 -0
- package/dist/index.cjs +262 -47
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +204 -26
- package/dist/index.d.ts +204 -26
- package/dist/index.global.js +262 -47
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +262 -47
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/public.ts","../src/constants.ts","../src/errors.ts","../src/long.ts","../src/varint/leb128.ts","../src/varint/num64.ts","../src/varint/zigzag.ts","../src/backend/js.ts","../src/backend/kernel.ts","../src/encode/fixlen.ts","../src/encode/ostream.ts","../src/decode/fast.ts","../src/decode/state.ts","../src/decode/istream.ts","../src/decode/cursor.ts","../src/backend/native.ts","../src/backend/wasm.ts"],"names":["SIGNED_FAST_MAX","TWO32","require"],"mappings":"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","file":"index.global.js","sourcesContent":["/**\n * The complete public surface of the library, re-exported by {@link \"./index\"}\n * both as flat named exports and, aggregated, under the `sofab` namespace.\n */\n\nexport {\n API_VERSION,\n ArrayKind,\n DecodeStatus,\n FixlenSubtype,\n WireType,\n ID_MAX,\n FIXLEN_MAX,\n ARRAY_MAX,\n MAX_DEPTH,\n U64_MAX,\n I64_MIN,\n I64_MAX,\n} from \"./constants.js\";\n\nexport { SofabError, SofabErrorCode } from \"./errors.js\";\n\nexport { Long } from \"./long.js\";\nexport { OStream } from \"./encode/ostream.js\";\nexport type { FlushSink } from \"./encode/sink.js\";\n\nexport { IStream, decode } from \"./decode/istream.js\";\nexport type { Visitor } from \"./decode/istream.js\";\nexport type { DecodeLimits } from \"./decode/limits.js\";\nexport { Cursor } from \"./decode/cursor.js\";\n\nexport { getKernel, setKernel } from \"./backend/kernel.js\";\nexport type { Kernel } from \"./backend/kernel.js\";\nexport { jsKernel } from \"./backend/js.js\";\nexport { loadNativeKernel } from \"./backend/native.js\";\nexport { loadWasmKernel } from \"./backend/wasm.js\";\nexport type { WasmKernelFactory } from \"./backend/wasm.js\";\n","/**\n * Wire-format constants for SofaBuffers.\n *\n * The format is specified, language-neutrally, in the\n * {@link https://github.com/sofa-buffers/documentation | SofaBuffers documentation}.\n * Every field on the wire begins with a varint header `(id << 3) | wireType`,\n * so the wire type lives in the low three bits and the field id in the rest.\n */\n\n/**\n * The SofaBuffers API version this library implements. The generator and other\n * tooling read it to verify compatibility. Bumped only on a breaking API change.\n */\nexport const API_VERSION = 1;\n\n/** The three low bits of a field header: what kind of field follows. */\nexport const WireType = {\n /** Unsigned varint scalar. */\n Unsigned: 0,\n /** Signed varint scalar (zig-zag encoded). */\n Signed: 1,\n /** Fixed-length value: fp32, fp64, string or blob (see {@link FixlenSubtype}). */\n Fixlen: 2,\n /** Array of unsigned varints. */\n ArrayUnsigned: 3,\n /** Array of signed (zig-zag) varints. */\n ArraySigned: 4,\n /** Array of fixed-length values (fp32 / fp64 only). */\n ArrayFixlen: 5,\n /** Opens a nested sequence (new id scope). */\n SequenceStart: 6,\n /** Closes the current sequence. Encoded as the single byte `0x07`. */\n SequenceEnd: 7,\n} as const;\n/** A field's wire type: one of the {@link WireType} values. */\nexport type WireType = (typeof WireType)[keyof typeof WireType];\n\n/** The three low bits of a fixlen length header: which fixed-length type. */\nexport const FixlenSubtype = {\n /** IEEE-754 32-bit float, little-endian. */\n Fp32: 0,\n /** IEEE-754 64-bit double, little-endian. */\n Fp64: 1,\n /** UTF-8 string (no null terminator). */\n String: 2,\n /** Arbitrary binary data. */\n Blob: 3,\n} as const;\n/** A fixed-length value's type: one of the {@link FixlenSubtype} values. */\nexport type FixlenSubtype = (typeof FixlenSubtype)[keyof typeof FixlenSubtype];\n\n/** Which element kind an array field carries (reported to {@link Visitor.arrayBegin}). */\nexport const ArrayKind = {\n /** Unsigned-integer elements. */\n Unsigned: 0,\n /** Signed-integer (zig-zag) elements. */\n Signed: 1,\n /** IEEE-754 32-bit float elements. */\n Fp32: 2,\n /** IEEE-754 64-bit double elements. */\n Fp64: 3,\n} as const;\n/** An array field's element kind: one of the {@link ArrayKind} values. */\nexport type ArrayKind = (typeof ArrayKind)[keyof typeof ArrayKind];\n\n/** Largest permitted field id and fixlen length / array count: `INT32_MAX`. */\nexport const ID_MAX = 0x7fff_ffff;\n/** Largest permitted fixlen byte length: `INT32_MAX`. */\nexport const FIXLEN_MAX = 0x7fff_ffff;\n/** Largest permitted array element count: `INT32_MAX`. */\nexport const ARRAY_MAX = 0x7fff_ffff;\n\n/** Largest unsigned 64-bit value (`2^64 - 1`). */\nexport const U64_MAX = 0xffff_ffff_ffff_ffffn;\n/** Smallest signed 64-bit value (`-2^63`). */\nexport const I64_MIN = -0x8000_0000_0000_0000n;\n/** Largest signed 64-bit value (`2^63 - 1`). */\nexport const I64_MAX = 0x7fff_ffff_ffff_ffffn;\n\n/** A varint encodes at most this many bytes for a 64-bit value. */\nexport const VARINT_MAX_BYTES = 10;\n\n/**\n * Maximum nested-sequence depth (§4.9 / §6.2). An encoder must not open more\n * than this many nested sequences, and a decoder must reject a message that\n * nests deeper with an `InvalidMessage` error rather than risk unbounded\n * recursion / stack growth.\n */\nexport const MAX_DEPTH = 255;\n\n/**\n * The terminal outcome of a decode (MESSAGE_SPEC §7), reported identically for\n * one-shot and streaming decode with **no** finish / finalize / end promotion\n * step:\n *\n * - `Complete` — the bytes ended exactly at a field boundary: a valid message.\n * - `Incomplete` — the bytes ended *inside* a field (an unterminated varint, a\n * payload shorter than its declared length, an array that runs off the end, or\n * a nested sequence never closed). **Not an error** — more bytes could\n * complete it, and the caller owns end-of-input.\n * - `Invalid` — the bytes are malformed regardless of what follows.\n *\n * {@link IStream.end} returns `Complete` or `Incomplete` (an `Invalid` message\n * has already thrown from {@link IStream.feed}); the one-shot {@link decode} /\n * {@link Cursor} path signals `Incomplete` and `Invalid` by throwing a\n * {@link SofabError} whose `code` is {@link SofabErrorCode.Incomplete} or\n * {@link SofabErrorCode.InvalidMsg}, and `Complete` by returning normally.\n */\nexport const DecodeStatus = {\n /** The bytes ended exactly at a field boundary — a valid message. */\n Complete: \"COMPLETE\",\n /** The bytes ended inside a field; more bytes could complete it (not an error). */\n Incomplete: \"INCOMPLETE\",\n /** The bytes are malformed regardless of what follows. */\n Invalid: \"INVALID\",\n} as const;\n/** A decode's terminal outcome: one of the {@link DecodeStatus} values. */\nexport type DecodeStatus = (typeof DecodeStatus)[keyof typeof DecodeStatus];\n","/**\n * Error handling for SofaBuffers.\n *\n * Both encoder and decoder report problems through a single {@link SofabError}\n * carrying a {@link SofabErrorCode}, mirroring the C reference's `sofab_ret_t`\n * return codes so the failure modes line up across the language family.\n *\n * The decoder distinguishes two *kinds* of decode failure (MESSAGE_SPEC §7):\n * {@link SofabErrorCode.InvalidMsg} for input that is malformed regardless of\n * what follows (`INVALID`), and {@link SofabErrorCode.Incomplete} for input that\n * merely ends inside a field (`INCOMPLETE`) — a truncation that more bytes could\n * complete, and so is *not* the same as a malformed message. A third code,\n * {@link SofabErrorCode.LimitExceeded}, is orthogonal to both: it reports a\n * receiver-configured decode limit being hit — *policy*, not a property of the\n * bytes — so it is kept distinct from `InvalidMsg`.\n */\n\n/**\n * The cause of a {@link SofabError}. `Argument`, `Usage`, `BufferFull` and\n * `InvalidMsg` match the C reference's `sofab_ret_t` codes; `Incomplete` is the\n * finish-less INCOMPLETE decode outcome (MESSAGE_SPEC §7), a distinct,\n * more-bytes-could-complete-it signal split out from `InvalidMsg`.\n */\nexport const SofabErrorCode = {\n /** A caller argument was invalid (e.g. id out of range, empty array). */\n Argument: \"ARGUMENT\",\n /** The API was used incorrectly (e.g. unbalanced sequence end). */\n Usage: \"USAGE\",\n /** The output buffer is full and no flush sink was provided. */\n BufferFull: \"BUFFER_FULL\",\n /** The input being decoded is malformed regardless of what follows (`INVALID`). */\n InvalidMsg: \"INVALID_MSG\",\n /**\n * The input being decoded ends inside a field (`INCOMPLETE`, MESSAGE_SPEC §7):\n * an unterminated varint, a payload shorter than its declared length, an array\n * that runs off the end, or a nested sequence never closed. Not a malformed\n * message — more bytes could complete it, and the caller owns end-of-input.\n */\n Incomplete: \"INCOMPLETE\",\n /**\n * A receiver-configured decode limit was exceeded — a dynamic array, string or\n * blob on the wire claims more elements / bytes than the caller's\n * {@link DecodeLimits} (`maxArrayCount` / `maxStringLen` / `maxBlobLen`)\n * allows. Deliberately distinct from {@link SofabErrorCode.InvalidMsg}:\n * exceeding a limit is *policy*, not wire malformation — the identical bytes\n * decode fine under a looser limit — so differential fuzzing must not read it\n * as a conformance divergence. The decoder never clamps or truncates; it\n * rejects, before the offending field is materialized.\n */\n LimitExceeded: \"LIMIT_EXCEEDED\",\n} as const;\n/** A {@link SofabError}'s cause: one of the {@link SofabErrorCode} values. */\nexport type SofabErrorCode =\n (typeof SofabErrorCode)[keyof typeof SofabErrorCode];\n\n/** The single error type thrown by the encoder and decoder. */\nexport class SofabError extends Error {\n /** The machine-readable cause. */\n readonly code: SofabErrorCode;\n\n constructor(code: SofabErrorCode, message: string) {\n super(message);\n this.name = \"SofabError\";\n this.code = code;\n // Restore the prototype chain for transpiled-to-ES5 consumers.\n Object.setPrototypeOf(this, SofabError.prototype);\n }\n}\n\n/** @internal A caller passed an invalid argument. */\nexport function argumentError(message: string): SofabError {\n return new SofabError(SofabErrorCode.Argument, message);\n}\n\n/** @internal The API was driven into an invalid state. */\nexport function usageError(message: string): SofabError {\n return new SofabError(SofabErrorCode.Usage, message);\n}\n\n/** @internal The output buffer filled with no flush sink to drain it. */\nexport function bufferFullError(message: string): SofabError {\n return new SofabError(SofabErrorCode.BufferFull, message);\n}\n\n/** @internal The input being decoded is malformed regardless of what follows. */\nexport function invalidMsgError(message: string): SofabError {\n return new SofabError(SofabErrorCode.InvalidMsg, message);\n}\n\n/**\n * @internal The input being decoded ended inside a field (truncation). A\n * distinct, non-malformed outcome (MESSAGE_SPEC §7): more bytes could complete\n * it, so it carries {@link SofabErrorCode.Incomplete}, never `InvalidMsg`.\n */\nexport function incompleteError(message: string): SofabError {\n return new SofabError(SofabErrorCode.Incomplete, message);\n}\n\n/**\n * @internal A receiver-configured decode limit ({@link DecodeLimits}) was\n * exceeded. Carries {@link SofabErrorCode.LimitExceeded}, never `InvalidMsg`:\n * it is a policy rejection, not a statement that the bytes are malformed.\n */\nexport function limitExceededError(message: string): SofabError {\n return new SofabError(SofabErrorCode.LimitExceeded, message);\n}\n","/**\n * A 64-bit integer value carried as two unsigned 32-bit halves.\n *\n * SofaBuffers accepts `bigint` at every 64-bit surface for ergonomics, but a\n * `bigint` in the encode/decode hot path is expensive — especially on\n * JavaScriptCore (Bun), where profiling showed the `bigint` split/materialise\n * and zig-zag operations dominating the 64-bit array codecs. `Long` lets a\n * caller (and the generated code) stay entirely on `number` arithmetic: the\n * codec reads `.low`/`.high` directly, and any `bigint`↔`Long` conversion\n * happens once at the API boundary rather than once per encode.\n *\n * Values are stored as raw two's-complement bits; the same `Long` serves an\n * unsigned or signed field — {@link Long.toBigInt} takes the signedness.\n */\nexport class Long {\n /** Low 32 bits (unsigned). */\n readonly low: number;\n /** High 32 bits (unsigned). */\n readonly high: number;\n\n constructor(low: number, high: number) {\n this.low = low >>> 0;\n this.high = high >>> 0;\n }\n\n /**\n * The 64-bit zero. `Long` is immutable (readonly halves), so this single shared\n * instance is safe to reuse anywhere a zero default is needed — generated code\n * uses it for fixed-count array defaults and pad-fill instead of\n * `Long.fromValue(0)`, which would run `bigint` arithmetic per call on the hot\n * decode/encode path.\n */\n static readonly ZERO: Long = new Long(0, 0);\n\n /** Construct from raw 32-bit halves. */\n static fromBits(low: number, high: number): Long {\n return new Long(low, high);\n }\n\n /** Split a `bigint` into its low/high 32-bit halves (two's complement). */\n static fromBigInt(value: bigint): Long {\n return new Long(Number(value & 0xffff_ffffn) >>> 0, Number((value >> 32n) & 0xffff_ffffn) >>> 0);\n }\n\n /** From an integer `number` (`|n| < 2^53`); sign handled via `bigint` once. */\n static fromNumber(n: number): Long {\n return Long.fromBigInt(BigInt(Math.trunc(n)));\n }\n\n /** Accept a `Long` as-is, or convert a `bigint` / `number` once. */\n static fromValue(v: Long | bigint | number): Long {\n if (v instanceof Long) return v;\n return typeof v === \"bigint\" ? Long.fromBigInt(v) : Long.fromNumber(v);\n }\n\n /** Materialise as a `bigint`. `signed` reads the high bit as two's complement. */\n toBigInt(signed = false): bigint {\n let r = (BigInt(this.high >>> 0) << 32n) | BigInt(this.low >>> 0);\n if (signed && (this.high & 0x8000_0000) !== 0) r -= 0x1_0000_0000_0000_0000n;\n return r;\n }\n\n /** Decimal string (`signed` interprets the high bit as two's complement). */\n toString(signed = false): string {\n return this.toBigInt(signed).toString();\n }\n}\n","/**\n * LEB128 variable-length integer coding.\n *\n * Each byte carries seven payload bits with the high bit as a continuation\n * flag; bytes are little-endian (least-significant group first). Values are\n * `bigint` so the full 64-bit range works. The streaming decoder in\n * `decode/state.ts` has its own resumable byte-at-a-time reader; the helpers\n * here are for whole-buffer paths (array elements, tests, the JS kernel).\n */\n\nimport { VARINT_MAX_BYTES } from \"../constants.js\";\nimport { incompleteError, invalidMsgError } from \"../errors.js\";\n\n/** Number of bytes {@link encodeVarint} will write for `value` (unsigned). */\nexport function varintSize(value: bigint): number {\n let lo = Number(value & 0xffff_ffffn) >>> 0;\n let hi = Number((value >> 32n) & 0xffff_ffffn) >>> 0;\n let n = 0;\n while (hi !== 0) {\n n++;\n const next = ((lo >>> 7) | (hi << 25)) >>> 0;\n hi >>>= 7;\n lo = next;\n }\n while (lo > 0x7f) {\n n++;\n lo >>>= 7;\n }\n return n + 1;\n}\n\n/**\n * Write `value` (an unsigned `bigint`) as a varint into `out` at `pos`.\n * The caller must guarantee `out` has at least {@link VARINT_MAX_BYTES} bytes\n * of room from `pos`. Returns the position just past the last byte written.\n *\n * The 64-bit value is split into two 32-bit *number* halves once (the only two\n * `bigint` operations), then the LEB128 groups are produced with number-only\n * arithmetic — `lo`'s top bits are fed from `hi` as it drains. This avoids the\n * ~20 short-lived `bigint` allocations a per-byte `v & 0x7fn; v >>= 7n` loop\n * would make, which V8 profiling showed to be the encoder's dominant cost.\n */\nexport function encodeVarint(value: bigint, out: Uint8Array, pos: number): number {\n let lo = Number(value & 0xffff_ffffn) >>> 0;\n let hi = Number((value >> 32n) & 0xffff_ffffn) >>> 0;\n // While high bits remain, every emitted byte is a full 7-bit group + continuation.\n while (hi !== 0) {\n out[pos++] = (lo & 0x7f) | 0x80;\n lo = ((lo >>> 7) | (hi << 25)) >>> 0; // shift the 64-bit value right by 7\n hi >>>= 7;\n }\n while (lo > 0x7f) {\n out[pos++] = (lo & 0x7f) | 0x80;\n lo >>>= 7;\n }\n out[pos++] = lo;\n return pos;\n}\n\n/**\n * Write a 64-bit value already split into two unsigned 32-bit halves as a\n * varint — the `bigint`-free sibling of {@link encodeVarint}. Callers holding a\n * `bigint` split it once (or hold a {@link Long}) and then stay on the number\n * path here, avoiding the per-value `bigint` churn that dominates the 64-bit\n * array encoders (and which JavaScriptCore optimizes far worse than V8).\n * `lo`/`hi` are coerced to uint32.\n */\nexport function encodeVarintLoHi(lo: number, hi: number, out: Uint8Array, pos: number): number {\n lo >>>= 0;\n hi >>>= 0;\n while (hi !== 0) {\n out[pos++] = (lo & 0x7f) | 0x80;\n lo = ((lo >>> 7) | (hi << 25)) >>> 0;\n hi >>>= 7;\n }\n while (lo > 0x7f) {\n out[pos++] = (lo & 0x7f) | 0x80;\n lo >>>= 7;\n }\n out[pos++] = lo;\n return pos;\n}\n\n/** Number of bytes {@link encodeVarintNum} will write for `value`. */\nexport function varintSizeNum(value: number): number {\n let n = 1;\n while (value > 0x7f) {\n n++;\n value = Math.floor(value / 128);\n }\n return n;\n}\n\n/**\n * Write `value` (a non-negative integer `number`, `≤ 2^53`) as a varint into\n * `out` at `pos`. The number-only sibling of {@link encodeVarint}: it avoids\n * `bigint` entirely, which is the encoder's hot path for ids, lengths, counts\n * and the very common small scalar. The caller guarantees {@link VARINT_MAX_BYTES}\n * bytes of room. Returns the position past the last byte written.\n */\nexport function encodeVarintNum(value: number, out: Uint8Array, pos: number): number {\n // Fast path: below 2^32 every 7-bit group survives bitwise extraction (ToUint32\n // is exact there, and `>>>` keeps it unsigned), so we stay on cheap integer ops.\n // This covers ids, lengths, counts, u8..u32 and their zig-zags — the vast\n // majority of calls. It matters because JavaScriptCore does not inline this\n // helper and its `% 128` / `Math.floor(/128)` float path is a top-3 hotspot\n // there; V8 optimizes both away, so the change is JSC-facing but harmless on V8.\n if (value < 0x1_0000_0000) {\n let v = value;\n while (v > 0x7f) {\n out[pos++] = (v & 0x7f) | 0x80;\n v >>>= 7;\n }\n out[pos++] = v;\n return pos;\n }\n // Slow path: 2^32 .. 2^53, where bitwise ops would truncate to 32 bits.\n while (value > 0x7f) {\n out[pos++] = (value % 128) | 0x80;\n value = Math.floor(value / 128);\n }\n out[pos++] = value;\n return pos;\n}\n\n/** The result of {@link decodeVarint}: the value and the position after it. */\nexport interface VarintResult {\n value: bigint;\n pos: number;\n}\n\n/**\n * Read a varint from `buf` starting at `pos`. Reports the same two decode\n * failures the streaming path does (MESSAGE_SPEC §7): throws a\n * {@link SofabError} with code `INVALID_MSG` on overflow past 64 bits (malformed\n * regardless of what follows), and `INCOMPLETE` if the buffer ends mid-varint\n * (an unterminated varint that more bytes could complete).\n */\nexport function decodeVarint(buf: Uint8Array, pos: number): VarintResult {\n let value = 0n;\n let shift = 0n;\n let bytes = 0;\n for (;;) {\n if (pos >= buf.length) throw incompleteError(\"truncated varint\");\n if (bytes >= VARINT_MAX_BYTES) throw invalidMsgError(\"varint overflow\");\n const byte = buf[pos++]!;\n // 10th byte carries only bit 63 below 64; any higher payload bit would\n // spill past bit 63 and is a >64-bit overflow (silently accepted before).\n if (bytes === VARINT_MAX_BYTES - 1 && (byte & 0x7f) > 1) {\n throw invalidMsgError(\"varint overflow\");\n }\n value |= BigInt(byte & 0x7f) << shift;\n bytes++;\n if ((byte & 0x80) === 0) return { value, pos };\n shift += 7n;\n }\n}\n","/**\n * 64-bit and IEEE-754 helpers.\n *\n * `bigint` masking utilities plus little-endian float pack/unpack built on a\n * single shared {@link DataView}. The format always stores `fp32` / `fp64`\n * little-endian regardless of host byte order, which a `DataView` gives us for\n * free (the `littleEndian` argument is passed explicitly everywhere).\n */\n\nimport { I64_MAX, I64_MIN, U64_MAX } from \"../constants.js\";\n\nconst SCRATCH = new DataView(new ArrayBuffer(8));\n\n/** Coerce a `number | bigint` to a `bigint`, rejecting non-integers. */\nexport function toBigInt(value: number | bigint): bigint {\n if (typeof value === \"bigint\") return value;\n if (!Number.isInteger(value)) {\n throw new RangeError(`expected an integer, got ${value}`);\n }\n return BigInt(value);\n}\n\n/** True when `value` fits in an unsigned 64-bit integer. */\nexport function inU64(value: bigint): boolean {\n return value >= 0n && value <= U64_MAX;\n}\n\n/** True when `value` fits in a signed 64-bit integer. */\nexport function inI64(value: bigint): boolean {\n return value >= I64_MIN && value <= I64_MAX;\n}\n\n/** Write `value` as a little-endian fp32 into `out` at `pos`; returns `pos + 4`. */\nexport function packFp32(out: Uint8Array, pos: number, value: number): number {\n SCRATCH.setFloat32(0, value, true);\n out[pos] = SCRATCH.getUint8(0);\n out[pos + 1] = SCRATCH.getUint8(1);\n out[pos + 2] = SCRATCH.getUint8(2);\n out[pos + 3] = SCRATCH.getUint8(3);\n return pos + 4;\n}\n\n/** Write `value` as a little-endian fp64 into `out` at `pos`; returns `pos + 8`. */\nexport function packFp64(out: Uint8Array, pos: number, value: number): number {\n SCRATCH.setFloat64(0, value, true);\n for (let i = 0; i < 8; i++) out[pos + i] = SCRATCH.getUint8(i);\n return pos + 8;\n}\n\n/** Read a little-endian fp32 from `buf` at `pos`. */\nexport function unpackFp32(buf: Uint8Array, pos: number): number {\n SCRATCH.setUint8(0, buf[pos]!);\n SCRATCH.setUint8(1, buf[pos + 1]!);\n SCRATCH.setUint8(2, buf[pos + 2]!);\n SCRATCH.setUint8(3, buf[pos + 3]!);\n return SCRATCH.getFloat32(0, true);\n}\n\n/** Read a little-endian fp64 from `buf` at `pos`. */\nexport function unpackFp64(buf: Uint8Array, pos: number): number {\n for (let i = 0; i < 8; i++) SCRATCH.setUint8(i, buf[pos + i]!);\n return SCRATCH.getFloat64(0, true);\n}\n","/**\n * Zig-zag mapping for signed integers.\n *\n * Signed values are zig-zag encoded before being written as an unsigned varint,\n * so small magnitudes of either sign stay short. The transform is the standard\n * `(n << 1) ^ (n >> 63)` over 64 bits, computed here in `bigint` so the full\n * `int64` range round-trips exactly.\n */\n\nimport { U64_MAX } from \"../constants.js\";\n\n/** Map a signed 64-bit value to its unsigned zig-zag representation. */\nexport function zigzagEncode(value: bigint): bigint {\n return ((value << 1n) ^ (value >> 63n)) & U64_MAX;\n}\n\n/** Recover a signed 64-bit value from its unsigned zig-zag representation. */\nexport function zigzagDecode(value: bigint): bigint {\n return (value >> 1n) ^ -(value & 1n);\n}\n","/**\n * The default, pure-TypeScript {@link Kernel}.\n *\n * Always available — no native dependency, no WebAssembly — so SofaBuffers runs\n * unchanged in Node.js, browsers, Electron and bundled builds. Importing this\n * module registers it as the default kernel (idempotently); a native or WASM\n * kernel can later override it via {@link setKernel}.\n */\n\nimport { encodeVarint, encodeVarintNum } from \"../varint/leb128.js\";\nimport { packFp32, packFp64, toBigInt } from \"../varint/num64.js\";\nimport { zigzagEncode } from \"../varint/zigzag.js\";\nimport type { Kernel } from \"./kernel.js\";\n\n// Largest signed magnitude whose zig-zag (|v|*2) stays an exact integer.\nconst SIGNED_FAST_MAX = 0x10_0000_0000_0000; // 2^52\n\n/**\n * The default, pure-TypeScript {@link Kernel} — active until {@link setKernel}\n * installs another. It implements the bulk encoder transforms with no native or\n * WebAssembly dependency, so it works in every environment.\n */\nexport const jsKernel: Kernel = {\n name: \"js\",\n\n encodeUnsignedVarints(values, out, pos) {\n for (let i = 0; i < values.length; i++) {\n const v = values[i]!;\n // Number elements (u8..u32 and any small u64) skip bigint entirely.\n if (typeof v === \"number\" && v >= 0 && v <= Number.MAX_SAFE_INTEGER && Number.isInteger(v)) {\n pos = encodeVarintNum(v, out, pos);\n } else {\n pos = encodeVarint(toBigInt(v), out, pos);\n }\n }\n return pos;\n },\n\n encodeSignedVarints(values, out, pos) {\n for (let i = 0; i < values.length; i++) {\n const v = values[i]!;\n if (typeof v === \"number\" && v >= -SIGNED_FAST_MAX && v <= SIGNED_FAST_MAX && Number.isInteger(v)) {\n pos = encodeVarintNum(v >= 0 ? v * 2 : -v * 2 - 1, out, pos);\n } else {\n pos = encodeVarint(zigzagEncode(toBigInt(v)), out, pos);\n }\n }\n return pos;\n },\n\n packFp32Array(values, out, pos) {\n for (let i = 0; i < values.length; i++) {\n pos = packFp32(out, pos, values[i]!);\n }\n return pos;\n },\n\n packFp64Array(values, out, pos) {\n for (let i = 0; i < values.length; i++) {\n pos = packFp64(out, pos, values[i]!);\n }\n return pos;\n },\n};\n","/**\n * The acceleration seam.\n *\n * The encoder's bulk array paths run through a {@link Kernel} — a small set of\n * self-contained, buffer-oriented transforms over a region the caller has\n * already sized. The default {@link \"./js\"} kernel is pure TypeScript and works\n * everywhere; a C++ (N-API) or WebAssembly build can implement the same\n * interface and be swapped in with {@link setKernel} for a speed-up, with **no\n * change to the public API**. The boundary is deliberately *bulk* (a whole\n * array per call, into guaranteed capacity) so the cost of crossing into native\n * code is amortised — never one call per element.\n */\n\nimport { jsKernel } from \"./js.js\";\n\n/**\n * Bulk, capacity-guaranteed transforms used on the encoder's fast path.\n *\n * Every method writes into `out` starting at `pos`, assuming the caller has\n * already ensured enough room, and returns the position just past the last byte\n * written. Headers, counts, flushing and validation stay in the stream classes;\n * a kernel only moves bytes.\n */\nexport interface Kernel {\n /** A short identifier, surfaced in diagnostics and the parity tests. */\n readonly name: string;\n\n /** Encode each element as an unsigned varint. */\n encodeUnsignedVarints(\n values: ArrayLike<number | bigint>,\n out: Uint8Array,\n pos: number,\n ): number;\n\n /** Zig-zag then varint-encode each element. */\n encodeSignedVarints(\n values: ArrayLike<number | bigint>,\n out: Uint8Array,\n pos: number,\n ): number;\n\n /** Pack each element as a little-endian fp32 (4 bytes). */\n packFp32Array(values: ArrayLike<number>, out: Uint8Array, pos: number): number;\n\n /** Pack each element as a little-endian fp64 (8 bytes). */\n packFp64Array(values: ArrayLike<number>, out: Uint8Array, pos: number): number;\n}\n\n// Initialised directly (not via an import side effect) so that bundlers honouring\n// the package's `\"sideEffects\": false` can never tree-shake the default away.\nlet active: Kernel = jsKernel;\n\n/** Install `kernel` as the active acceleration backend. */\nexport function setKernel(kernel: Kernel): void {\n validateKernel(kernel);\n active = kernel;\n}\n\n/** The currently active kernel (the JS kernel until something replaces it). */\nexport function getKernel(): Kernel {\n return active;\n}\n\n/** Throws if `kernel` is missing a required method — used by {@link setKernel}. */\nexport function validateKernel(kernel: Kernel): void {\n const required: (keyof Kernel)[] = [\n \"encodeUnsignedVarints\",\n \"encodeSignedVarints\",\n \"packFp32Array\",\n \"packFp64Array\",\n ];\n for (const m of required) {\n if (typeof kernel[m] !== \"function\") {\n throw new TypeError(`kernel \"${kernel?.name}\" is missing ${String(m)}()`);\n }\n }\n}\n","/**\n * Encode-side text helper.\n *\n * Two paths turn strings into UTF-8:\n *\n * - {@link utf8Length} / {@link utf8Write} — an allocation-free, two-pass writer\n * used by the encoder's in-memory fast path. `writeString` needs the byte\n * length *before* the payload (it goes into the fixlen length word), so the\n * length is scanned first and the bytes are then written straight into the\n * output buffer. This avoids `TextEncoder.encode`'s per-call WHATWG setup cost\n * plus the throwaway `Uint8Array` it allocates and the second copy into the\n * buffer — which V8 profiling showed to be the encoder's dominant cost (a\n * short string cost ~700 ns almost entirely in `TextEncoder`).\n * - {@link encodeUtf8} — a validated wrapper over the shared {@link TextEncoder},\n * still used by the streaming path where the payload is drained in chunks\n * through a small buffer.\n *\n * **Strict UTF-8 (MESSAGE_SPEC §8, CORELIB_PLAN §6.4).** A `string` is UTF-8\n * text; the encode side is always strict for this Unicode-string target. The\n * platform encoders are lossy — `TextEncoder`, and the hand-rolled fast path it\n * once mirrored, both replace an **unpaired surrogate** with `U+FFFD` — which is\n * the silent data mutation §8 forbids in every mode and direction. Both paths\n * here instead **reject** an unpaired surrogate with an `InvalidArgument`\n * {@link SofabError} (the encode-side image of the decode `INVALID` outcome), so\n * a producer can never emit bytes a strict decoder would refuse. Every *valid*\n * string — ASCII, multibyte BMP, correctly paired astral code points, embedded\n * `U+0000` — still encodes byte-for-byte as before.\n */\n\nimport { argumentError, type SofabError } from \"../errors.js\";\n\nconst UTF8 = new TextEncoder();\n\n/** An unpaired surrogate at `index` cannot be encoded as valid UTF-8 (§8/§6.4). */\nfunction unpairedSurrogate(index: number): SofabError {\n return argumentError(\n `unpaired surrogate at index ${index}: string value is not valid UTF-8`,\n );\n}\n\n/**\n * Encode `text` to UTF-8 bytes (no null terminator). Throws\n * {@link SofabError} (`ARGUMENT`) on an unpaired surrogate — `TextEncoder` alone\n * would silently substitute `U+FFFD`, the lossy mutation §8 forbids, so the\n * string is validated first and only well-formed input reaches the encoder.\n */\nexport function encodeUtf8(text: string): Uint8Array {\n // utf8Length is a full unpaired-surrogate scan that throws on the first one;\n // reuse it as the validator so both encode paths share one rule, then hand the\n // now-known-well-formed string to TextEncoder (byte-identical for valid input).\n utf8Length(text);\n return UTF8.encode(text);\n}\n\n/**\n * Number of UTF-8 bytes {@link utf8Write} will emit for `text`. For a\n * well-formed string this matches {@link TextEncoder} byte-for-byte (a paired\n * surrogate is 4 bytes). An **unpaired surrogate** is not encodable as UTF-8, so\n * it is **rejected** with {@link SofabError} (`ARGUMENT`), never counted as a\n * `U+FFFD` (3-byte) replacement (MESSAGE_SPEC §8).\n */\nexport function utf8Length(text: string): number {\n let len = 0;\n for (let i = 0; i < text.length; i++) {\n const c = text.charCodeAt(i);\n if (c < 0x80) {\n len += 1;\n } else if (c < 0x800) {\n len += 2;\n } else if (c >= 0xd800 && c <= 0xdbff) {\n // High surrogate: a following low surrogate makes a 4-byte code point;\n // otherwise it is an unpaired surrogate — reject, never collapse to U+FFFD.\n const c2 = i + 1 < text.length ? text.charCodeAt(i + 1) : 0;\n if (c2 >= 0xdc00 && c2 <= 0xdfff) {\n i++;\n len += 4;\n } else {\n throw unpairedSurrogate(i);\n }\n } else if (c >= 0xdc00 && c <= 0xdfff) {\n // Lone low surrogate (a paired one was consumed with its high half above).\n throw unpairedSurrogate(i);\n } else {\n // BMP ≥ 0x800.\n len += 3;\n }\n }\n return len;\n}\n\n/**\n * Write `text` as UTF-8 into `out` at `pos`; returns the position past the last\n * byte. The caller must have ensured {@link utf8Length}(text) bytes of room.\n * Byte-for-byte identical to {@link TextEncoder} for well-formed input; an\n * **unpaired surrogate** is rejected with {@link SofabError} (`ARGUMENT`) rather\n * than written as `U+FFFD` (MESSAGE_SPEC §8). `writeString` runs\n * {@link utf8Length} first, so the fast path rejects before any byte is emitted.\n */\nexport function utf8Write(text: string, out: Uint8Array, pos: number): number {\n for (let i = 0; i < text.length; i++) {\n let c = text.charCodeAt(i);\n if (c < 0x80) {\n out[pos++] = c;\n } else if (c < 0x800) {\n out[pos++] = 0xc0 | (c >> 6);\n out[pos++] = 0x80 | (c & 0x3f);\n } else if (c >= 0xd800 && c <= 0xdbff) {\n const c2 = i + 1 < text.length ? text.charCodeAt(i + 1) : 0;\n if (c2 >= 0xdc00 && c2 <= 0xdfff) {\n i++;\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n out[pos++] = 0xf0 | (c >> 18);\n out[pos++] = 0x80 | ((c >> 12) & 0x3f);\n out[pos++] = 0x80 | ((c >> 6) & 0x3f);\n out[pos++] = 0x80 | (c & 0x3f);\n } else {\n // Unpaired high surrogate — reject, never write U+FFFD.\n throw unpairedSurrogate(i);\n }\n } else if (c >= 0xdc00 && c <= 0xdfff) {\n // Unpaired low surrogate — reject, never write U+FFFD.\n throw unpairedSurrogate(i);\n } else {\n out[pos++] = 0xe0 | (c >> 12);\n out[pos++] = 0x80 | ((c >> 6) & 0x3f);\n out[pos++] = 0x80 | (c & 0x3f);\n }\n }\n return pos;\n}\n","/**\n * The SofaBuffers encoder.\n *\n * `OStream` writes fields into a byte buffer. Two modes:\n *\n * - **In-memory** (`new OStream()`): an auto-growing buffer; call\n * {@link OStream.bytes} for the finished message.\n * - **Streaming** (`new OStream(buffer, offset?, flush?)`): writes into a\n * caller-provided buffer and, when it fills, hands the produced bytes to the\n * `flush` sink and continues — so the buffer can be much smaller than the\n * message. `offset` reserves room at the front for a lower-layer header.\n *\n * Generated code typically writes one field per message field; the methods map\n * one-to-one onto the wire types. Problems throw {@link SofabError}.\n */\n\nimport {\n ARRAY_MAX,\n FIXLEN_MAX,\n FixlenSubtype,\n ID_MAX,\n MAX_DEPTH,\n VARINT_MAX_BYTES,\n WireType,\n} from \"../constants.js\";\nimport {\n argumentError,\n bufferFullError,\n usageError,\n} from \"../errors.js\";\nimport {\n getKernel,\n type Kernel,\n} from \"../backend/kernel.js\";\nimport { Long } from \"../long.js\";\nimport { encodeVarint, encodeVarintLoHi, encodeVarintNum, varintSize, varintSizeNum } from \"../varint/leb128.js\";\nimport { inI64, inU64, packFp32, packFp64, toBigInt } from \"../varint/num64.js\";\nimport { zigzagEncode } from \"../varint/zigzag.js\";\nimport { encodeUtf8, utf8Length, utf8Write } from \"./fixlen.js\";\nimport type { FlushSink } from \"./sink.js\";\n\nconst DEFAULT_CAPACITY = 256;\n\n/**\n * Largest magnitude a signed scalar takes on the number fast path: its zig-zag\n * image (`|v| * 2`) must stay an exact integer, i.e. `≤ 2^53`.\n */\nconst SIGNED_FAST_MAX = 0x10_0000_0000_0000; // 2^52\n\n/**\n * Encoder for the SofaBuffers wire format. Each `write*` method appends one\n * field and maps one-to-one onto a wire type. Construct it in-memory (an\n * auto-growing buffer, read back with {@link OStream.bytes}) or in streaming\n * mode over a caller-provided buffer that drains to a {@link FlushSink} as it\n * fills, so the message can outgrow the buffer. Invalid arguments and a full\n * buffer with no sink throw {@link SofabError}.\n */\nexport class OStream {\n private buf: Uint8Array;\n private pos: number;\n private start: number;\n private readonly flushSink: FlushSink | undefined;\n private readonly canGrow: boolean;\n private depth = 0;\n private kernel: Kernel;\n\n /** In-memory encoder backed by an auto-growing buffer. */\n constructor();\n /** Streaming encoder over a caller buffer, optionally draining to `flush`. */\n constructor(buffer: Uint8Array, offset?: number, flush?: FlushSink);\n constructor(buffer?: Uint8Array, offset = 0, flush?: FlushSink) {\n this.kernel = getKernel();\n if (buffer === undefined) {\n this.buf = new Uint8Array(DEFAULT_CAPACITY);\n this.start = 0;\n this.pos = 0;\n this.flushSink = undefined;\n this.canGrow = true;\n } else {\n if (offset < 0 || offset > buffer.length) {\n throw argumentError(`offset ${offset} out of range`);\n }\n this.buf = buffer;\n this.start = offset;\n this.pos = offset;\n this.flushSink = flush;\n this.canGrow = false;\n }\n }\n\n /** Bytes currently held in the buffer (since construction or the last flush). */\n get bytesUsed(): number {\n return this.pos - this.start;\n }\n\n /**\n * The encoded message so far, as a view into the working buffer.\n * Meaningful for the in-memory mode; in streaming mode it is only the\n * not-yet-flushed tail. The view is valid until the next write.\n */\n bytes(): Uint8Array {\n return this.buf.subarray(this.start, this.pos);\n }\n\n /** Drain buffered bytes to the flush sink (no-op without one). */\n flush(): void {\n if (this.flushSink && this.pos > this.start) {\n this.flushSink(this.buf.subarray(this.start, this.pos));\n this.pos = this.start;\n }\n }\n\n /**\n * Install a fresh output buffer to write into, mid-stream. Intended for the\n * streaming (flush-sink) mode: call it from inside your flush callback to hand\n * the encoder a new buffer for the next batch of bytes, so encoding continues\n * without interruption. `offset` reserves space at the front of the new\n * buffer. Any not-yet-flushed bytes in the old buffer are dropped, so\n * {@link flush} first (the flush callback fires before you swap).\n */\n setBuffer(buffer: Uint8Array, offset = 0): void {\n if (offset < 0 || offset > buffer.length) {\n throw argumentError(`offset ${offset} out of range`);\n }\n this.buf = buffer;\n this.start = offset;\n this.pos = offset;\n }\n\n /**\n * Rewind the encoder to empty, reusing the existing buffer. Lets a caller pool\n * one OStream across many messages instead of allocating a fresh buffer per\n * encode. Any view previously returned by {@link bytes} is invalidated.\n */\n reset(): void {\n this.pos = this.start;\n this.depth = 0;\n }\n\n // --- scalars ------------------------------------------------------------\n\n /** Write an unsigned integer field. */\n writeUnsigned(id: number, value: number | bigint): void {\n // Fast path: a small non-negative integer never touches bigint.\n if (typeof value === \"number\" && value >= 0 && value <= Number.MAX_SAFE_INTEGER && Number.isInteger(value)) {\n this.header(id, WireType.Unsigned);\n this.putVarintNum(value);\n return;\n }\n const v = toBigInt(value);\n if (!inU64(v)) throw argumentError(`unsigned value ${v} out of 64-bit range`);\n this.header(id, WireType.Unsigned);\n this.putVarint(v);\n }\n\n /** Write a signed integer field (zig-zag encoded). */\n writeSigned(id: number, value: number | bigint): void {\n // Fast path: a small-magnitude integer zig-zags within number precision.\n if (typeof value === \"number\" && value >= -SIGNED_FAST_MAX && value <= SIGNED_FAST_MAX && Number.isInteger(value)) {\n this.header(id, WireType.Signed);\n this.putVarintNum(value >= 0 ? value * 2 : -value * 2 - 1);\n return;\n }\n const v = toBigInt(value);\n if (!inI64(v)) throw argumentError(`signed value ${v} out of 64-bit range`);\n this.header(id, WireType.Signed);\n this.putVarint(zigzagEncode(v));\n }\n\n /** Write a boolean field (encoded as the unsigned value 0 or 1). */\n writeBoolean(id: number, value: boolean): void {\n this.header(id, WireType.Unsigned);\n this.putVarintNum(value ? 1 : 0);\n }\n\n /** Write an IEEE-754 32-bit float field. */\n writeFp32(id: number, value: number): void {\n this.fixlenHead(id, 4, FixlenSubtype.Fp32);\n this.ensure(4);\n this.pos = packFp32(this.buf, this.pos, value);\n }\n\n /** Write an IEEE-754 64-bit double field. */\n writeFp64(id: number, value: number): void {\n this.fixlenHead(id, 8, FixlenSubtype.Fp64);\n this.ensure(8);\n this.pos = packFp64(this.buf, this.pos, value);\n }\n\n /** Write a UTF-8 string field. */\n writeString(id: number, text: string): void {\n // Fast path (in-memory, growable buffer): scan the UTF-8 byte length, write\n // the fixlen header, then encode the characters straight into the output\n // buffer. This skips `TextEncoder.encode`'s per-call setup + throwaway array\n // + second copy — the encoder's dominant cost on string-heavy messages.\n if (this.canGrow) {\n const byteLen = utf8Length(text);\n if (byteLen > FIXLEN_MAX) {\n throw argumentError(`fixlen length ${byteLen} exceeds ${FIXLEN_MAX}`);\n }\n this.fixlenHead(id, byteLen, FixlenSubtype.String);\n this.ensure(byteLen);\n this.pos = utf8Write(text, this.buf, this.pos);\n return;\n }\n // Streaming path: the payload may outgrow a fixed caller buffer, so keep the\n // chunk-draining `writeRaw` route (needs the bytes materialised up front).\n this.writeFixlen(id, encodeUtf8(text), FixlenSubtype.String);\n }\n\n /** Write a blob (arbitrary bytes) field. */\n writeBlob(id: number, data: Uint8Array): void {\n this.writeFixlen(id, data, FixlenSubtype.Blob);\n }\n\n /** Write a fixed-length field of the given subtype from raw bytes. */\n writeFixlen(id: number, data: Uint8Array, subtype: FixlenSubtype): void {\n if (data.length > FIXLEN_MAX) {\n throw argumentError(`fixlen length ${data.length} exceeds ${FIXLEN_MAX}`);\n }\n this.fixlenHead(id, data.length, subtype);\n this.writeRaw(data);\n }\n\n // --- arrays -------------------------------------------------------------\n\n /** Write an array of unsigned integers (each a varint). */\n writeUnsignedArray(id: number, values: ArrayLike<number | bigint>): void {\n this.arrayHead(id, WireType.ArrayUnsigned, values.length);\n if (this.canGrow) {\n this.ensure(values.length * VARINT_MAX_BYTES);\n this.pos = this.kernel.encodeUnsignedVarints(values, this.buf, this.pos);\n } else {\n for (let i = 0; i < values.length; i++) {\n const v = toBigInt(values[i]!);\n if (!inU64(v)) throw argumentError(`unsigned value ${v} out of range`);\n this.ensure(VARINT_MAX_BYTES);\n this.pos = encodeVarint(v, this.buf, this.pos);\n }\n }\n }\n\n /** Write an array of signed integers (each zig-zag + varint). */\n writeSignedArray(id: number, values: ArrayLike<number | bigint>): void {\n this.arrayHead(id, WireType.ArraySigned, values.length);\n if (this.canGrow) {\n this.ensure(values.length * VARINT_MAX_BYTES);\n this.pos = this.kernel.encodeSignedVarints(values, this.buf, this.pos);\n } else {\n for (let i = 0; i < values.length; i++) {\n const v = toBigInt(values[i]!);\n if (!inI64(v)) throw argumentError(`signed value ${v} out of range`);\n this.ensure(VARINT_MAX_BYTES);\n this.pos = encodeVarint(zigzagEncode(v), this.buf, this.pos);\n }\n }\n }\n\n /**\n * Write an unsigned 64-bit array from {@link Long}[] — the `bigint`-free path.\n * Produces the identical wire to {@link writeUnsignedArray}; reads each Long's\n * 32-bit halves directly, so no `bigint` is created per element.\n */\n writeUnsignedArrayLong(id: number, values: readonly Long[]): void {\n this.arrayHead(id, WireType.ArrayUnsigned, values.length);\n this.ensure(values.length * VARINT_MAX_BYTES);\n let pos = this.pos;\n const buf = this.buf;\n for (let i = 0; i < values.length; i++) {\n const v = values[i]!;\n pos = encodeVarintLoHi(v.low, v.high, buf, pos);\n }\n this.pos = pos;\n }\n\n /**\n * Write a signed 64-bit array (zig-zag) from {@link Long}[] — the `bigint`-free\n * path. Zig-zag `(n << 1) ^ (n >> 63)` is computed on the lo/hi pair.\n */\n writeSignedArrayLong(id: number, values: readonly Long[]): void {\n this.arrayHead(id, WireType.ArraySigned, values.length);\n this.ensure(values.length * VARINT_MAX_BYTES);\n let pos = this.pos;\n const buf = this.buf;\n for (let i = 0; i < values.length; i++) {\n const v = values[i]!;\n const lo = v.low;\n const hi = v.high;\n const sgn = (-(hi >>> 31)) >>> 0; // all ones when negative, else zero\n const zLo = (((lo << 1) >>> 0) ^ sgn) >>> 0;\n const zHi = ((((hi << 1) | (lo >>> 31)) >>> 0) ^ sgn) >>> 0;\n pos = encodeVarintLoHi(zLo, zHi, buf, pos);\n }\n this.pos = pos;\n }\n\n /** Write an array of IEEE-754 32-bit floats. */\n writeFp32Array(id: number, values: ArrayLike<number>): void {\n this.arrayHead(id, WireType.ArrayFixlen, values.length);\n // A fixlen array always carries its fixlen_word — even when empty (§4.8) —\n // so an empty fp32 array stays distinct from an empty fp64 one. The payload\n // loop below simply runs zero times: the field is [ header ][ count = 0 ]\n // [ fixlen_word ] with no elements.\n this.putVarintNum(4 * 8 + FixlenSubtype.Fp32);\n if (this.canGrow) {\n this.ensure(values.length * 4);\n this.pos = this.kernel.packFp32Array(values, this.buf, this.pos);\n } else {\n for (let i = 0; i < values.length; i++) {\n this.ensure(4);\n this.pos = packFp32(this.buf, this.pos, values[i]!);\n }\n }\n }\n\n /** Write an array of IEEE-754 64-bit doubles. */\n writeFp64Array(id: number, values: ArrayLike<number>): void {\n this.arrayHead(id, WireType.ArrayFixlen, values.length);\n // A fixlen array always carries its fixlen_word — even when empty (§4.8) —\n // so an empty fp64 array stays distinct from an empty fp32 one. The payload\n // loop below simply runs zero times: the field is [ header ][ count = 0 ]\n // [ fixlen_word ] with no elements.\n this.putVarintNum(8 * 8 + FixlenSubtype.Fp64);\n if (this.canGrow) {\n this.ensure(values.length * 8);\n this.pos = this.kernel.packFp64Array(values, this.buf, this.pos);\n } else {\n for (let i = 0; i < values.length; i++) {\n this.ensure(8);\n this.pos = packFp64(this.buf, this.pos, values[i]!);\n }\n }\n }\n\n // --- sequences ----------------------------------------------------------\n\n /** Open a nested sequence (a fresh id scope). */\n writeSequenceBegin(id: number): void {\n // §4.9/§6.2: refuse to open more than MAX_DEPTH nested sequences.\n if (this.depth >= MAX_DEPTH) {\n throw usageError(`nesting exceeds MAX_DEPTH (${MAX_DEPTH})`);\n }\n this.header(id, WireType.SequenceStart);\n this.depth++;\n }\n\n /** Close the current sequence. */\n writeSequenceEnd(): void {\n if (this.depth <= 0) throw usageError(\"sequence end without matching begin\");\n this.ensure(1);\n this.buf[this.pos++] = WireType.SequenceEnd; // id 0, type 7 -> byte 0x07\n this.depth--;\n }\n\n // --- internals ----------------------------------------------------------\n\n /** Ensure exactly `value`'s varint size, then write it (bigint path). */\n private putVarint(value: bigint): void {\n this.ensure(varintSize(value));\n this.pos = encodeVarint(value, this.buf, this.pos);\n }\n\n /** Ensure exactly `value`'s varint size, then write it (number fast path). */\n private putVarintNum(value: number): void {\n this.ensure(varintSizeNum(value));\n this.pos = encodeVarintNum(value, this.buf, this.pos);\n }\n\n private header(id: number, type: WireType): void {\n if (id < 0 || id > ID_MAX || !Number.isInteger(id)) {\n throw argumentError(`field id ${id} out of range 0..${ID_MAX}`);\n }\n // (id << 3) | type as a number: id ≤ 2^31-1, so the word stays ≤ 2^34.\n this.putVarintNum(id * 8 + type);\n }\n\n private fixlenHead(id: number, length: number, subtype: FixlenSubtype): void {\n this.header(id, WireType.Fixlen);\n this.putVarintNum(length * 8 + subtype);\n }\n\n private arrayHead(id: number, type: WireType, count: number): void {\n // §4.7/§4.8: element_count range is 0..ARRAY_MAX; a zero-count array is a\n // valid, fully-specified empty array on the wire.\n if (count < 0 || count > ARRAY_MAX) {\n throw argumentError(`array count ${count} out of range 0..${ARRAY_MAX}`);\n }\n this.header(id, type);\n this.putVarintNum(count);\n }\n\n /** Copy `data` out, flushing/growing as needed (large payloads stay chunked). */\n private writeRaw(data: Uint8Array): void {\n let off = 0;\n while (off < data.length) {\n const room = this.ensureSome(data.length - off);\n this.buf.set(data.subarray(off, off + room), this.pos);\n this.pos += room;\n off += room;\n }\n }\n\n /** Ensure `n` contiguous bytes are free at `pos`; returns `pos` for chaining. */\n private ensure(n: number): number {\n if (this.buf.length - this.pos >= n) return this.pos;\n this.flush();\n if (this.buf.length - this.pos >= n) return this.pos;\n if (this.canGrow) {\n this.growTo(this.pos + n);\n return this.pos;\n }\n throw bufferFullError(\n `output buffer full: need ${n} more bytes, have ${this.buf.length - this.pos}`,\n );\n }\n\n /** Ensure *some* room (up to `want`); returns how many bytes are available. */\n private ensureSome(want: number): number {\n let room = this.buf.length - this.pos;\n if (room === 0) {\n this.flush();\n room = this.buf.length - this.pos;\n if (room === 0) {\n if (this.canGrow) {\n this.growTo(this.pos + want);\n room = this.buf.length - this.pos;\n } else {\n throw bufferFullError(\"output buffer full\");\n }\n }\n }\n return Math.min(room, want);\n }\n\n private growTo(needed: number): void {\n let cap = this.buf.length * 2;\n if (cap < needed) cap = needed;\n const next = new Uint8Array(cap);\n next.set(this.buf.subarray(0, this.pos));\n this.buf = next;\n }\n}\n","/**\n * The contiguous-buffer fast path: \"advance a pointer over a whole message\".\n *\n * When the entire message is already in one {@link Uint8Array} (the common\n * non-streaming case) there is no need for the resumable, byte-at-a-time state\n * machine in {@link \"./state\"}. This decoder keeps a single read cursor and\n * walks it straight to the end, decoding each field inline — the technique\n * Protocol Buffers uses for its fast path.\n *\n * Two things make it much faster than the streaming decoder:\n *\n * - **No `bigint` in the varint hot loop.** Each varint is accumulated into two\n * 32-bit JavaScript *numbers* (`lo` / `hi`); a `bigint` is materialised only\n * once per 64-bit *value* (and never at all for ids, lengths and counts,\n * which stay numbers). The streaming reader, by contrast, does a `bigint`\n * shift-and-or for every single byte.\n * - **No per-byte state reload.** The field type is dispatched once and the\n * whole field is consumed in place, instead of re-entering a `switch` on a\n * saved state enum for each byte.\n *\n * String / blob payloads are handed to the visitor as a single zero-copy\n * `subarray` view (one call, offset 0) rather than streamed in pieces. The\n * decoder validates exactly what the streaming path does and reports the same\n * three-valued outcome (MESSAGE_SPEC §7): it throws a {@link SofabError} with\n * code `INVALID_MSG` on malformed input, and `INCOMPLETE` when the buffer ends\n * inside a field — a truncated varint / payload / array, or an unclosed\n * sequence detected at the end of the buffer.\n */\n\nimport {\n ARRAY_MAX,\n ArrayKind,\n FIXLEN_MAX,\n FixlenSubtype,\n ID_MAX,\n MAX_DEPTH,\n WireType,\n} from \"../constants.js\";\nimport {\n incompleteError,\n invalidMsgError,\n limitExceededError,\n} from \"../errors.js\";\nimport { zigzagDecode } from \"../varint/zigzag.js\";\nimport type { DecodeLimits } from \"./limits.js\";\nimport type { Visitor } from \"./istream.js\";\n\nconst TWO32 = 0x1_0000_0000; // 2^32, for combining the 32-bit halves\n\n/** Decode a complete message held in one contiguous buffer. */\nexport function decodeContiguous(\n buf: Uint8Array,\n root: Visitor,\n limits?: DecodeLimits,\n): void {\n new FastDecoder(buf, limits).run(root);\n}\n\nclass FastDecoder {\n private readonly buf: Uint8Array;\n private readonly view: DataView;\n private readonly n: number;\n private p = 0;\n\n // Last varint, as two unsigned 32-bit halves (see readVarint).\n private lo = 0;\n private hi = 0;\n\n // Opt-in decode limits (corelib-ts#38); an unset limit is Infinity (no cap).\n private readonly maxArrayCount: number;\n private readonly maxStringLen: number;\n private readonly maxBlobLen: number;\n\n constructor(buf: Uint8Array, limits?: DecodeLimits) {\n this.buf = buf;\n this.n = buf.length;\n this.view = new DataView(buf.buffer, buf.byteOffset, buf.length);\n this.maxArrayCount = limits?.maxArrayCount ?? Infinity;\n this.maxStringLen = limits?.maxStringLen ?? Infinity;\n this.maxBlobLen = limits?.maxBlobLen ?? Infinity;\n }\n\n run(root: Visitor): void {\n const stack: Visitor[] = [root];\n let top = root;\n\n while (this.p < this.n) {\n this.readVarint();\n const type = this.lo & 7;\n\n if (type === WireType.SequenceEnd) {\n if (stack.length <= 1) throw invalidMsgError(\"unbalanced sequence end\");\n top.sequenceEnd?.();\n stack.pop();\n top = stack[stack.length - 1]!;\n continue;\n }\n\n const id = this.upper();\n if (id > ID_MAX) throw invalidMsgError(`field id ${id} out of range`);\n\n switch (type) {\n case WireType.Unsigned: {\n this.readVarint();\n top.unsigned?.(id, this.unsignedValue());\n break;\n }\n\n case WireType.Signed: {\n this.readVarint();\n top.signed?.(id, this.signedValue());\n break;\n }\n\n case WireType.Fixlen: {\n this.readVarint();\n const sub = this.lo & 7;\n const len = this.upper();\n if (sub > FixlenSubtype.Blob) throw invalidMsgError(`invalid fixlen subtype ${sub}`);\n if (len > FIXLEN_MAX) throw invalidMsgError(\"fixlen length out of range\");\n if (sub === FixlenSubtype.String && len > this.maxStringLen) {\n throw limitExceededError(`string length ${len} exceeds maxStringLen ${this.maxStringLen}`);\n }\n if (sub === FixlenSubtype.Blob && len > this.maxBlobLen) {\n throw limitExceededError(`blob length ${len} exceeds maxBlobLen ${this.maxBlobLen}`);\n }\n if (sub === FixlenSubtype.Fp32 || sub === FixlenSubtype.Fp64) {\n const want = sub === FixlenSubtype.Fp32 ? 4 : 8;\n if (len !== want) throw invalidMsgError(\"fixlen float length mismatch\");\n const value =\n sub === FixlenSubtype.Fp32 ? this.readFp32() : this.readFp64();\n if (sub === FixlenSubtype.Fp32) top.fp32?.(id, value);\n else top.fp64?.(id, value);\n } else {\n const chunk = this.take(len);\n if (sub === FixlenSubtype.String) top.string?.(id, len, 0, chunk);\n else top.blob?.(id, len, 0, chunk);\n }\n break;\n }\n\n case WireType.ArrayUnsigned: {\n const count = this.arrayCount();\n top.arrayBegin?.(id, ArrayKind.Unsigned, count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n top.arrayUnsigned?.(id, i, this.unsignedValue());\n }\n top.arrayEnd?.(id);\n break;\n }\n\n case WireType.ArraySigned: {\n const count = this.arrayCount();\n top.arrayBegin?.(id, ArrayKind.Signed, count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n top.arraySigned?.(id, i, this.signedValue());\n }\n top.arrayEnd?.(id);\n break;\n }\n\n case WireType.ArrayFixlen: {\n const count = this.arrayCount();\n // §4.8: a fixlen array always carries its element-length word — even\n // when empty — so the true element kind (fp32 vs fp64) stays known.\n // When count == 0 the payload loops below simply run zero times.\n this.readVarint();\n const sub = this.lo & 7;\n const size = this.upper();\n let kind: ArrayKind;\n if (sub === FixlenSubtype.Fp32 && size === 4) kind = ArrayKind.Fp32;\n else if (sub === FixlenSubtype.Fp64 && size === 8) kind = ArrayKind.Fp64;\n else throw invalidMsgError(\"invalid fixlen array element type\");\n top.arrayBegin?.(id, kind, count);\n // Read each element into a local *before* the optional call: with an\n // absent handler, `v?.m(read())` would short-circuit and never advance.\n if (kind === ArrayKind.Fp32) {\n for (let i = 0; i < count; i++) {\n const value = this.readFp32();\n top.arrayFp32?.(id, i, value);\n }\n } else {\n for (let i = 0; i < count; i++) {\n const value = this.readFp64();\n top.arrayFp64?.(id, i, value);\n }\n }\n top.arrayEnd?.(id);\n break;\n }\n\n case WireType.SequenceStart: {\n // §4.9/§6.2: reject nesting deeper than MAX_DEPTH. The stack holds the\n // root plus one entry per open sequence, so depth is stack.length - 1.\n if (stack.length - 1 >= MAX_DEPTH) {\n throw invalidMsgError(`nesting exceeds MAX_DEPTH (${MAX_DEPTH})`);\n }\n const child = top.sequenceBegin?.(id);\n top = child ?? top;\n stack.push(top);\n break;\n }\n\n default:\n throw invalidMsgError(`invalid wire type ${type}`);\n }\n }\n\n if (stack.length > 1) throw incompleteError(\"truncated message: unbalanced sequence\");\n }\n\n // --- field helpers ------------------------------------------------------\n\n /** Read and validate an array count word (0..ARRAY_MAX; §4.7/§4.8). */\n private arrayCount(): number {\n this.readVarint();\n const count = this.num();\n if (count > ARRAY_MAX) throw invalidMsgError(\"array count out of range\");\n if (count > this.maxArrayCount) {\n throw limitExceededError(`array count ${count} exceeds maxArrayCount ${this.maxArrayCount}`);\n }\n return count;\n }\n\n /** Hand back a zero-copy view of the next `len` bytes, advancing the cursor. */\n private take(len: number): Uint8Array {\n const start = this.p;\n const end = start + len;\n if (end > this.n) throw incompleteError(\"truncated fixlen payload\");\n this.p = end;\n return this.buf.subarray(start, end);\n }\n\n private readFp32(): number {\n const p = this.p;\n if (p + 4 > this.n) throw incompleteError(\"truncated fp32\");\n this.p = p + 4;\n return this.view.getFloat32(p, true);\n }\n\n private readFp64(): number {\n const p = this.p;\n if (p + 8 > this.n) throw incompleteError(\"truncated fp64\");\n this.p = p + 8;\n return this.view.getFloat64(p, true);\n }\n\n // --- varint reading -----------------------------------------------------\n\n /** The last varint's full value as a `bigint` (64-bit fidelity). */\n private big(): bigint {\n return this.hi === 0\n ? BigInt(this.lo >>> 0)\n : (BigInt(this.hi >>> 0) << 32n) | BigInt(this.lo >>> 0);\n }\n\n /**\n * The last varint as an unsigned value, number-first: a `number` when it fits\n * exactly (`≤ 2^53-1` — all ids, u8..u32 and small u64s), a `bigint` only\n * beyond that. Skips the per-value bigint allocation on the common path.\n */\n private unsignedValue(): number | bigint {\n const hi = this.hi >>> 0; // unsigned: hi's bit 31 must not read as negative\n return hi <= 0x1fffff ? hi * TWO32 + (this.lo >>> 0) : this.big();\n }\n\n /** The last zig-zag varint as a signed value, number-first (see {@link unsignedValue}). */\n private signedValue(): number | bigint {\n const hi = this.hi >>> 0;\n if (hi <= 0x1fffff) {\n const r = hi * TWO32 + (this.lo >>> 0); // raw zig-zag, ≤ 2^53-1\n return r % 2 === 0 ? r / 2 : -(r + 1) / 2;\n }\n return zigzagDecode(this.big());\n }\n\n /** The last varint's value as a JS number — exact for ids/lengths/counts. */\n private num(): number {\n return this.hi * TWO32 + (this.lo >>> 0);\n }\n\n /** The last varint with its low 3 tag bits stripped (`value >> 3`). */\n private upper(): number {\n // value >> 3 without losing the high bits: drop 3 bits, carry hi's low 3.\n return (this.hi >>> 0) * (TWO32 / 8) + (this.lo >>> 3);\n }\n\n /**\n * Decode one LEB128 varint at the cursor into {@link lo} / {@link hi} (each an\n * unsigned 32-bit half), advancing {@link p}. Throws on truncation or a value\n * spilling past 64 bits (>10 bytes). Unrolled, number-only — no `bigint`.\n */\n private readVarint(): void {\n const buf = this.buf;\n const n = this.n;\n let p = this.p;\n let b: number;\n let lo: number;\n let hi = 0;\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo = b & 0x7f;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 7;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 14;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 21;\n if (b < 0x80) return this.set(lo, 0, p);\n\n // 5th byte straddles the 32-bit boundary: 4 bits to lo, 3 bits to hi.\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x0f) << 28;\n hi = (b >> 4) & 0x07;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 3;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 10;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 17;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 24;\n if (b < 0x80) return this.set(lo, hi, p);\n\n // 10th byte: only bit 63 (1 payload bit) remains below 64; any higher\n // payload bit, or a continuation into an 11th byte, is a >64-bit overflow.\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n if (((b & 0x7f) >> 1) !== 0) throw invalidMsgError(\"varint overflow\");\n hi |= (b & 0x7f) << 31;\n if (b < 0x80) return this.set(lo, hi, p);\n\n throw invalidMsgError(\"varint overflow\");\n }\n\n private set(lo: number, hi: number, p: number): void {\n this.lo = lo;\n this.hi = hi;\n this.p = p;\n }\n}\n","/**\n * The resumable decode state machine.\n *\n * `DecoderState` consumes input one byte at a time and never needs to buffer\n * more than a single varint (≤10 bytes) or one fixlen element (≤8 bytes), so it\n * can be fed arbitrarily small chunks: every multi-byte construct saves its\n * progress in instance fields and continues on the next {@link push}. Large\n * string / blob payloads are streamed straight to the visitor in pieces, and\n * array elements are emitted as they arrive — nothing is materialised whole.\n */\n\nimport {\n ARRAY_MAX,\n ArrayKind,\n DecodeStatus,\n FIXLEN_MAX,\n FixlenSubtype,\n ID_MAX,\n MAX_DEPTH,\n VARINT_MAX_BYTES,\n WireType,\n} from \"../constants.js\";\nimport { invalidMsgError, limitExceededError } from \"../errors.js\";\nimport { unpackFp32, unpackFp64 } from \"../varint/num64.js\";\nimport { zigzagDecode } from \"../varint/zigzag.js\";\nimport type { DecodeLimits } from \"./limits.js\";\nimport type { Visitor } from \"./istream.js\";\n\nconst enum S {\n Header,\n ScalarU,\n ScalarS,\n FixlenLen,\n FixlenFp,\n FixlenBytes,\n ArrayCount,\n ArrayUElem,\n ArraySElem,\n ArrayElemLen,\n ArrayFp,\n}\n\nconst TWO32 = 0x1_0000_0000; // 2^32, for combining the 32-bit halves\n\nexport class DecoderState {\n private state = S.Header;\n private stack: Visitor[] = [];\n\n // current field\n private id = 0;\n\n // Resumable varint accumulator, as two unsigned 32-bit halves (vLo / vHi)\n // plus the byte count so far. Number-only: a `bigint` is built once, at the\n // end, and only for full 64-bit *values* (not ids, lengths or counts).\n private vLo = 0;\n private vHi = 0;\n private vBytes = 0;\n private vComplete = false;\n\n // fixlen / fp scratch\n private scratch = new Uint8Array(8);\n private need = 0;\n private have = 0;\n\n // fixlen string/blob streaming\n private fixSub: FixlenSubtype = FixlenSubtype.String;\n private fixLen = 0;\n private fixOff = 0;\n\n // array\n private arrKind: ArrayKind = ArrayKind.Unsigned;\n private arrIsFixlen = false;\n private arrCount = 0;\n private arrIndex = 0;\n\n // Opt-in decode limits (corelib-ts#38); an unset limit is Infinity (no cap).\n // Enforced at the count / length header, before any payload is streamed to\n // the visitor, so an over-limit string/blob is never fed chunk-by-chunk.\n private readonly maxArrayCount: number;\n private readonly maxStringLen: number;\n private readonly maxBlobLen: number;\n\n constructor(limits?: DecodeLimits) {\n this.maxArrayCount = limits?.maxArrayCount ?? Infinity;\n this.maxStringLen = limits?.maxStringLen ?? Infinity;\n this.maxBlobLen = limits?.maxBlobLen ?? Infinity;\n }\n\n /** Feed `input` to the machine, dispatching to `root` and its sub-visitors. */\n push(input: Uint8Array, root: Visitor): void {\n if (this.stack.length === 0) this.stack.push(root);\n let i = 0;\n const n = input.length;\n\n while (i < n) {\n switch (this.state) {\n case S.Header: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const type = this.vTag();\n if (type === WireType.SequenceEnd) {\n this.resetVarint();\n this.endSequence();\n break;\n }\n const id = this.vUpper();\n this.resetVarint();\n if (id > ID_MAX) throw invalidMsgError(`field id ${id} out of range`);\n this.id = id;\n this.dispatch(type);\n break;\n }\n\n case S.ScalarU: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const value = this.vUnsigned();\n this.resetVarint();\n this.top().unsigned?.(this.id, value);\n this.state = S.Header;\n break;\n }\n\n case S.ScalarS: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const value = this.vSigned();\n this.resetVarint();\n this.top().signed?.(this.id, value);\n this.state = S.Header;\n break;\n }\n\n case S.FixlenLen: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const sub = this.vTag();\n const len = this.vUpper();\n this.resetVarint();\n if (sub > FixlenSubtype.Blob) throw invalidMsgError(`invalid fixlen subtype ${sub}`);\n if (len > FIXLEN_MAX) throw invalidMsgError(\"fixlen length out of range\");\n if (sub === FixlenSubtype.String && len > this.maxStringLen) {\n throw limitExceededError(`string length ${len} exceeds maxStringLen ${this.maxStringLen}`);\n }\n if (sub === FixlenSubtype.Blob && len > this.maxBlobLen) {\n throw limitExceededError(`blob length ${len} exceeds maxBlobLen ${this.maxBlobLen}`);\n }\n this.fixSub = sub as FixlenSubtype;\n this.fixLen = len;\n this.fixOff = 0;\n if (sub === FixlenSubtype.Fp32 || sub === FixlenSubtype.Fp64) {\n const want = sub === FixlenSubtype.Fp32 ? 4 : 8;\n if (this.fixLen !== want) throw invalidMsgError(\"fixlen float length mismatch\");\n this.need = want;\n this.have = 0;\n this.state = S.FixlenFp;\n } else {\n // string / blob: emit empties immediately, otherwise stream below\n if (this.fixLen === 0) {\n this.emitBytes(input.subarray(0, 0));\n this.state = S.Header;\n } else {\n this.state = S.FixlenBytes;\n }\n }\n break;\n }\n\n case S.FixlenFp: {\n i = this.fpStep(input, i);\n if (this.have < this.need) return;\n const value =\n this.fixSub === FixlenSubtype.Fp32\n ? unpackFp32(this.scratch, 0)\n : unpackFp64(this.scratch, 0);\n if (this.fixSub === FixlenSubtype.Fp32) this.top().fp32?.(this.id, value);\n else this.top().fp64?.(this.id, value);\n this.state = S.Header;\n break;\n }\n\n case S.FixlenBytes: {\n const take = Math.min(n - i, this.fixLen - this.fixOff);\n this.emitBytes(input.subarray(i, i + take));\n i += take;\n this.fixOff += take;\n if (this.fixOff === this.fixLen) this.state = S.Header;\n break;\n }\n\n case S.ArrayCount: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const count = this.vNum();\n this.resetVarint();\n if (count > ARRAY_MAX) throw invalidMsgError(\"array count out of range\");\n if (count > this.maxArrayCount) {\n throw limitExceededError(`array count ${count} exceeds maxArrayCount ${this.maxArrayCount}`);\n }\n this.arrCount = count;\n this.arrIndex = 0;\n if (this.arrIsFixlen) {\n // §4.8: a fixlen array always carries its element-length word — even\n // when empty — so the true element kind (fp32 vs fp64) stays known.\n // The element kind is only knowable once that word arrives, so defer\n // arrayBegin until then; a zero-count array reads the word then ends\n // with no payload (handled in S.ArrayElemLen).\n this.state = S.ArrayElemLen;\n } else if (count === 0) {\n // §4.7: a zero-count integer array is empty — no payload follows and\n // no element-length word exists (element width is API-only).\n this.top().arrayBegin?.(this.id, this.arrKind, 0);\n this.top().arrayEnd?.(this.id);\n this.state = S.Header;\n } else {\n this.top().arrayBegin?.(this.id, this.arrKind, this.arrCount);\n this.state = this.arrKind === ArrayKind.Unsigned ? S.ArrayUElem : S.ArraySElem;\n }\n break;\n }\n\n case S.ArrayUElem: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const value = this.vUnsigned();\n this.resetVarint();\n this.top().arrayUnsigned?.(this.id, this.arrIndex, value);\n this.advanceArray();\n break;\n }\n\n case S.ArraySElem: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const value = this.vSigned();\n this.resetVarint();\n this.top().arraySigned?.(this.id, this.arrIndex, value);\n this.advanceArray();\n break;\n }\n\n case S.ArrayElemLen: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const sub = this.vTag();\n const size = this.vUpper();\n this.resetVarint();\n if (sub === FixlenSubtype.Fp32 && size === 4) {\n this.arrKind = ArrayKind.Fp32;\n this.need = 4;\n } else if (sub === FixlenSubtype.Fp64 && size === 8) {\n this.arrKind = ArrayKind.Fp64;\n this.need = 8;\n } else {\n throw invalidMsgError(\"invalid fixlen array element type\");\n }\n this.top().arrayBegin?.(this.id, this.arrKind, this.arrCount);\n if (this.arrCount === 0) {\n // §4.8: an empty fixlen array is [ header ][ count = 0 ][ fixlen_word ]\n // with no payload — the word above yielded the true element kind.\n this.top().arrayEnd?.(this.id);\n this.state = S.Header;\n } else {\n this.have = 0;\n this.state = S.ArrayFp;\n }\n break;\n }\n\n case S.ArrayFp: {\n i = this.fpStep(input, i);\n if (this.have < this.need) return;\n const value =\n this.arrKind === ArrayKind.Fp32\n ? unpackFp32(this.scratch, 0)\n : unpackFp64(this.scratch, 0);\n if (this.arrKind === ArrayKind.Fp32) this.top().arrayFp32?.(this.id, this.arrIndex, value);\n else this.top().arrayFp64?.(this.id, this.arrIndex, value);\n this.have = 0;\n this.advanceArray();\n break;\n }\n }\n }\n }\n\n /**\n * Report the terminal decode outcome (MESSAGE_SPEC §7) *without* promoting it\n * to an error. Returns {@link DecodeStatus.Complete} when the stream ended\n * exactly at a field boundary, or {@link DecodeStatus.Incomplete} when it\n * ended inside a field (a partial varint, an unfinished payload / array, or a\n * still-open nested sequence). This is a pure accessor — the finish-less spec\n * has no finalize step, and a trailing `Incomplete` is a truncation the caller\n * decides how to treat, not an error this machine raises. A genuinely\n * malformed message has already thrown from {@link push}.\n */\n finish(): DecodeStatus {\n const atBoundary =\n this.state === S.Header && this.vBytes === 0 && this.stack.length <= 1;\n return atBoundary ? DecodeStatus.Complete : DecodeStatus.Incomplete;\n }\n\n // --- helpers ------------------------------------------------------------\n\n private dispatch(type: number): void {\n switch (type) {\n case WireType.Unsigned:\n this.state = S.ScalarU;\n break;\n case WireType.Signed:\n this.state = S.ScalarS;\n break;\n case WireType.Fixlen:\n this.state = S.FixlenLen;\n break;\n case WireType.ArrayUnsigned:\n this.arrKind = ArrayKind.Unsigned;\n this.arrIsFixlen = false;\n this.state = S.ArrayCount;\n break;\n case WireType.ArraySigned:\n this.arrKind = ArrayKind.Signed;\n this.arrIsFixlen = false;\n this.state = S.ArrayCount;\n break;\n case WireType.ArrayFixlen:\n this.arrIsFixlen = true; // element kind resolved at the element-length word\n this.state = S.ArrayCount;\n break;\n case WireType.SequenceStart: {\n // §4.9/§6.2: reject nesting deeper than MAX_DEPTH. The stack always\n // holds the root visitor plus one entry per open sequence, so the\n // current depth is stack.length - 1.\n if (this.stack.length - 1 >= MAX_DEPTH) {\n throw invalidMsgError(`nesting exceeds MAX_DEPTH (${MAX_DEPTH})`);\n }\n const child = this.top().sequenceBegin?.(this.id);\n this.stack.push(child ?? this.top());\n this.state = S.Header;\n break;\n }\n default:\n throw invalidMsgError(`invalid wire type ${type}`);\n }\n }\n\n private endSequence(): void {\n if (this.stack.length <= 1) throw invalidMsgError(\"unbalanced sequence end\");\n this.top().sequenceEnd?.();\n this.stack.pop();\n this.state = S.Header;\n }\n\n private advanceArray(): void {\n this.arrIndex++;\n if (this.arrIndex === this.arrCount) {\n this.top().arrayEnd?.(this.id);\n this.state = S.Header;\n }\n }\n\n private emitBytes(chunk: Uint8Array): void {\n const v = this.top();\n if (this.fixSub === FixlenSubtype.String) v.string?.(this.id, this.fixLen, this.fixOff, chunk);\n else v.blob?.(this.id, this.fixLen, this.fixOff, chunk);\n }\n\n private top(): Visitor {\n return this.stack[this.stack.length - 1]!;\n }\n\n /**\n * Consume varint bytes from `input` at `i` into the {@link vLo} / {@link vHi}\n * accumulator, resuming across chunk boundaries; sets {@link vComplete} when a\n * terminator byte arrives. Number-only — no per-byte `bigint`.\n */\n private varintStep(input: Uint8Array, i: number): number {\n let lo = this.vLo;\n let hi = this.vHi;\n let k = this.vBytes;\n const n = input.length;\n while (i < n) {\n if (k >= VARINT_MAX_BYTES) throw invalidMsgError(\"varint overflow\");\n const b = input[i++]!;\n if (k < 4) lo |= (b & 0x7f) << (7 * k);\n else if (k === 4) {\n lo |= (b & 0x0f) << 28;\n hi |= (b >> 4) & 0x07;\n } else {\n // 10th byte (k === 9) has only bit 63 below 64; any higher payload\n // bit would spill past bit 63 and is a >64-bit overflow.\n if (k === 9 && ((b & 0x7f) >> 1) !== 0) throw invalidMsgError(\"varint overflow\");\n hi |= (b & 0x7f) << (7 * k - 32);\n }\n k++;\n if ((b & 0x80) === 0) {\n this.vLo = lo;\n this.vHi = hi;\n this.vBytes = k;\n this.vComplete = true;\n return i;\n }\n }\n this.vLo = lo;\n this.vHi = hi;\n this.vBytes = k;\n this.vComplete = false;\n return i;\n }\n\n private resetVarint(): void {\n this.vLo = 0;\n this.vHi = 0;\n this.vBytes = 0;\n this.vComplete = false;\n }\n\n /** The accumulated varint as a `bigint` (full 64-bit fidelity). */\n private vBig(): bigint {\n return this.vHi === 0\n ? BigInt(this.vLo >>> 0)\n : (BigInt(this.vHi >>> 0) << 32n) | BigInt(this.vLo >>> 0);\n }\n\n /**\n * The accumulated varint as an unsigned value, number-first: a `number` when\n * it fits exactly (`≤ 2^53-1`, which covers all ids, u8..u32 and small u64s),\n * a `bigint` only beyond that. Avoids a bigint allocation on the common path.\n */\n private vUnsigned(): number | bigint {\n // Unsigned: vHi's bit 31 must not read as negative. vHi ≤ 0x1fffff (2^21-1)\n // ⇔ vHi*2^32 + lo ≤ 2^53-1.\n const hi = this.vHi >>> 0;\n return hi <= 0x1fffff ? hi * TWO32 + (this.vLo >>> 0) : this.vBig();\n }\n\n /** The accumulated zig-zag varint as a signed value, number-first (see {@link vUnsigned}). */\n private vSigned(): number | bigint {\n const hi = this.vHi >>> 0;\n if (hi <= 0x1fffff) {\n const r = hi * TWO32 + (this.vLo >>> 0); // raw zig-zag, ≤ 2^53-1\n return r % 2 === 0 ? r / 2 : -(r + 1) / 2;\n }\n return zigzagDecode(this.vBig());\n }\n\n /** The accumulated varint as a JS number — exact for ids/lengths/counts. */\n private vNum(): number {\n return this.vHi * TWO32 + (this.vLo >>> 0);\n }\n\n /** The accumulated varint's low 3 tag bits (the wire type / fixlen subtype). */\n private vTag(): number {\n return this.vLo & 7;\n }\n\n /** The accumulated varint with its low 3 tag bits stripped (`value >> 3`). */\n private vUpper(): number {\n return (this.vHi >>> 0) * (TWO32 / 8) + (this.vLo >>> 3);\n }\n\n /** Accumulate `need` raw bytes into {@link scratch}. */\n private fpStep(input: Uint8Array, i: number): number {\n while (this.have < this.need && i < input.length) {\n this.scratch[this.have++] = input[i++]!;\n }\n return i;\n }\n}\n","/**\n * The SofaBuffers decoder.\n *\n * `IStream` is a push parser: feed it bytes with {@link IStream.feed} and it\n * drives a {@link Visitor}, calling one method per decoded field. It is a\n * resumable state machine, so the chunks you feed can be any size — a whole\n * message, a network packet, or a single byte — and a field that straddles a\n * chunk boundary is picked up seamlessly on the next call.\n *\n * Nesting is hierarchical: {@link Visitor.sequenceBegin} may return a child\n * visitor, and the decoder routes the nested fields to it until the matching\n * end. Generated message classes use this directly — a class implements\n * `Visitor`, and a nested-message field returns the child instance.\n *\n * There is no finish / finalize step (MESSAGE_SPEC §7): {@link IStream.feed}\n * throws only for a *malformed* message ({@link SofabErrorCode.InvalidMsg}); a\n * message that merely ends inside a field is reported — never thrown — by\n * {@link IStream.end}, which returns {@link DecodeStatus.Incomplete} rather than\n * {@link DecodeStatus.Complete}. The caller owns end-of-input and decides\n * whether a trailing `Incomplete` is a truncation error.\n */\n\nimport type { ArrayKind, DecodeStatus } from \"../constants.js\";\nimport { decodeContiguous } from \"./fast.js\";\nimport type { DecodeLimits } from \"./limits.js\";\nimport { DecoderState } from \"./state.js\";\n\n/**\n * Receives decoded fields from an {@link IStream}. Every method is optional and\n * defaults to a no-op, so a visitor implements only the fields it cares about\n * and silently skips the rest.\n *\n * String and blob payloads arrive as one or more `chunk`s, each tagged with the\n * field's `total` length and the `offset` of the chunk within the field, so a\n * large payload never has to be held in one piece. Array elements arrive one at\n * a time between {@link Visitor.arrayBegin} and {@link Visitor.arrayEnd}.\n */\nexport interface Visitor {\n /**\n * An unsigned integer field. Number-first: `value` is a `number` when it fits\n * exactly (`≤ 2^53-1`, covering ids, u8..u32 and small u64s) and a `bigint`\n * only beyond that, so the common case avoids a per-value bigint allocation.\n */\n unsigned?(id: number, value: number | bigint): void;\n /** A signed integer field. Number-first like {@link unsigned} (`|value| ≤ 2^53-1` ⇒ `number`). */\n signed?(id: number, value: number | bigint): void;\n /** An IEEE-754 32-bit float field. */\n fp32?(id: number, value: number): void;\n /** An IEEE-754 64-bit double field. */\n fp64?(id: number, value: number): void;\n /** A chunk of a UTF-8 string field. */\n string?(id: number, total: number, offset: number, chunk: Uint8Array): void;\n /** A chunk of a blob field. */\n blob?(id: number, total: number, offset: number, chunk: Uint8Array): void;\n /** Start of an array; `count` elements of `kind` follow. */\n arrayBegin?(id: number, kind: ArrayKind, count: number): void;\n /** One unsigned array element. Number-first like {@link unsigned}. */\n arrayUnsigned?(id: number, index: number, value: number | bigint): void;\n /** One signed array element. Number-first like {@link signed}. */\n arraySigned?(id: number, index: number, value: number | bigint): void;\n /** One fp32 array element. */\n arrayFp32?(id: number, index: number, value: number): void;\n /** One fp64 array element. */\n arrayFp64?(id: number, index: number, value: number): void;\n /** End of an array. */\n arrayEnd?(id: number): void;\n /**\n * Start of a nested sequence. Return a {@link Visitor} to route the nested\n * fields to it (its {@link Visitor.sequenceEnd} fires at the matching end);\n * return nothing to keep using the current visitor.\n */\n sequenceBegin?(id: number): Visitor | void;\n /** End of the nested sequence this visitor was handling. */\n sequenceEnd?(): void;\n}\n\n/**\n * Push parser for the SofaBuffers wire format. Feed it bytes in chunks of any\n * size with {@link IStream.feed} and it drives a {@link Visitor}, one call per\n * decoded field, resuming cleanly across chunk boundaries. Call\n * {@link IStream.end} after the final chunk to read whether the message finished\n * on a field boundary. When the whole message is already in one buffer, prefer\n * the faster {@link decode}.\n */\nexport class IStream {\n private readonly state: DecoderState;\n\n /**\n * @param limits Optional opt-in decode caps ({@link DecodeLimits}). An\n * over-limit array count or string / blob length throws {@link SofabError}\n * (`LIMIT_EXCEEDED`) from {@link feed}, at the offending field's header and\n * before any of its payload is streamed to the visitor. Omit for no caps.\n */\n constructor(limits?: DecodeLimits) {\n this.state = new DecoderState(limits);\n }\n\n /**\n * Feed a chunk of bytes, dispatching decoded fields to `visitor`. Throws\n * {@link SofabError} (`INVALID_MSG`) only if the bytes are *malformed*;\n * running out of bytes mid-field is not an error — it simply suspends until\n * the next chunk (see {@link end}).\n */\n feed(chunk: Uint8Array, visitor: Visitor): void {\n this.state.push(chunk, visitor);\n }\n\n /**\n * Report whether the stream ended exactly at a field boundary. Call after the\n * final {@link feed}: returns {@link DecodeStatus.Complete} at a clean field\n * boundary, or {@link DecodeStatus.Incomplete} if the last chunk ended inside\n * a field (a partial varint, an unfinished payload / array, or a still-open\n * nested sequence).\n *\n * Per the finish-less spec (MESSAGE_SPEC §7) this is a pure accessor: it never\n * throws and never promotes an incomplete decode to an error — the caller owns\n * end-of-input and decides whether a trailing `Incomplete` is a truncation\n * error. (A *malformed* message has already thrown from {@link feed}.)\n */\n end(): DecodeStatus {\n return this.state.finish();\n }\n}\n\n/**\n * Decode a complete message held in one contiguous buffer, in a single call.\n *\n * This is the non-streaming convenience — and the fast path: with the whole\n * message in hand it advances one cursor over the buffer instead of running the\n * resumable per-byte state machine, so it is markedly faster than feeding the\n * same bytes through\n * {@link IStream}. Use {@link IStream} when the message arrives in chunks; use\n * this when you already have it whole.\n *\n * The whole buffer *is* the end of input, so the two failure outcomes both\n * throw a {@link SofabError} the caller tells apart by `code` (MESSAGE_SPEC §7):\n * malformed input throws `INVALID_MSG`, while input that ends inside a field —\n * truncation or an unclosed sequence — throws `INCOMPLETE`. A complete message\n * returns normally.\n *\n * Pass `limits` ({@link DecodeLimits}) to cap array counts and string / blob\n * lengths; an over-limit field throws `LIMIT_EXCEEDED` at its header, before it\n * is materialized. Omit for no caps (the default).\n */\nexport function decode(\n bytes: Uint8Array,\n visitor: Visitor,\n limits?: DecodeLimits,\n): void {\n decodeContiguous(bytes, visitor, limits);\n}\n","/**\n * The pull / cursor decoder: a monomorphic companion to {@link \"./fast\"}.\n *\n * {@link \"./fast\"}'s {@link decodeContiguous} is a *push* decoder — it drives the\n * buffer and calls a {@link Visitor} method per field. That is the right shape\n * for streaming and skip-subtree callers, but the visitor call sites go\n * megamorphic once a single decode routes through several differently-shaped\n * visitor objects (one per nested message type), which a JIT cannot inline.\n *\n * {@link Cursor} inverts control: it keeps one read cursor over the contiguous\n * {@link Uint8Array} and exposes *pull* primitives — {@link Cursor.readHeader}\n * plus a typed `read*` per wire type — so **generated code drives the loop** with\n * a single `switch (cursor.id)` that reads straight into its own fields. Every\n * call site is then monomorphic (the generated per-type decoder is the only\n * caller), which is what lets V8 inline the whole decode into a flat loop — the\n * same technique protobuf's generated `decode(reader)` uses.\n *\n * It shares {@link \"./fast\"}'s number-first varint core verbatim: each varint is\n * accumulated into two 32-bit JS *numbers* (`lo`/`hi`) and a `bigint` is\n * materialised only for a 64-bit *value* that does not fit in `2^53-1` (never for\n * ids, lengths or counts). String / blob payloads are returned as a single\n * zero-copy `subarray` view. It reports the same three-valued outcome as the\n * push path (MESSAGE_SPEC §7): malformed input throws a {@link SofabError} with\n * code `INVALID_MSG`, and a read that runs off the end of the buffer mid-field\n * throws `INCOMPLETE`.\n */\n\nimport {\n ARRAY_MAX,\n FIXLEN_MAX,\n FixlenSubtype,\n ID_MAX,\n WireType,\n} from \"../constants.js\";\nimport {\n incompleteError,\n invalidMsgError,\n limitExceededError,\n} from \"../errors.js\";\nimport { Long } from \"../long.js\";\nimport { zigzagDecode } from \"../varint/zigzag.js\";\nimport type { DecodeLimits } from \"./limits.js\";\n\nconst TWO32 = 0x1_0000_0000; // 2^32, for combining the 32-bit halves\n// Strict UTF-8 (MESSAGE_SPEC §8, CORELIB_PLAN §6.4): JavaScript strings are a\n// Unicode string type, so this target is always strict — the decoder builds the\n// string with the fatal TextDecoder, which throws on any invalid-UTF-8 payload\n// (overlong forms, surrogate code points, out-of-range, truncated or stray\n// bytes) rather than silently substituting U+FFFD. readString maps that throw to\n// the INVALID decode outcome. A lossy decoder is never used.\nconst _utf8 = new TextDecoder(\"utf-8\", { fatal: true });\n\n/**\n * A pull decoder over a complete message held in one contiguous buffer.\n *\n * Usage from generated code: loop on {@link readHeader}; for each field switch on\n * {@link id} and call the matching `read*` (which consumes that field's value and\n * advances the cursor); recurse into a child type's decoder on a nested sequence;\n * fall through to {@link skip} for an unknown id. See {@link readHeader}.\n *\n * Pass {@link DecodeLimits} to cap array counts and string / blob lengths; an\n * over-limit field throws {@link SofabError} (`LIMIT_EXCEEDED`) at its header,\n * before it is materialized. Omit for no caps (the default).\n */\nexport class Cursor {\n /** Field id of the header last accepted by {@link readHeader}. */\n id = 0;\n /** Wire type of the header last accepted by {@link readHeader}. */\n wire = 0;\n /**\n * Fixlen subtype of the header last accepted by {@link readHeader} — one of\n * {@link FixlenSubtype} — when its {@link wire} is {@link WireType.Fixlen} or\n * {@link WireType.ArrayFixlen}; `-1` otherwise (a non-fixlen field, or a\n * fixlen field whose subtype word is truncated away).\n *\n * The four fixlen subtypes (`fp32`, `fp64`, `string`, `blob`) all share one\n * {@link wire} type, so {@link wire} alone cannot separate them. This is the\n * companion accessor that can: a generated guard reads it right after\n * {@link readHeader} to skip a field whose delivered subtype contradicts the\n * schema (MESSAGE_SPEC §7.3), exactly as it already does on {@link wire} for\n * the other kinds:\n *\n * ```ts\n * case 9: if (c.wire !== WireType.Fixlen || c.fixSub !== FixlenSubtype.Fp64) {\n * c.skip(c.wire); break;\n * } o.somefp64 = c.readFp64(); break;\n * ```\n *\n * It is *peeked* — the subtype word is not consumed — so the matching typed\n * reader (or {@link skip}) still reads and validates it, and a malformed or\n * truncated word surfaces `INVALID` / `INCOMPLETE` there as before.\n */\n fixSub = -1;\n\n private readonly buf: Uint8Array;\n private readonly view: DataView;\n private readonly n: number;\n private p = 0;\n\n // Opt-in decode limits (corelib-ts#38). An unset limit is Infinity — no cap,\n // today's behavior. Enforced at the count / length header, before allocation.\n private readonly maxArrayCount: number;\n private readonly maxStringLen: number;\n private readonly maxBlobLen: number;\n\n // Last varint, as two unsigned 32-bit halves (see readVarint).\n private lo = 0;\n private hi = 0;\n\n // Number of nested sequences currently open (0 = root). Incremented when\n // readHeader accepts a SequenceStart, decremented when it consumes the matching\n // SequenceEnd (or when skip() discards a whole nested sequence). Lets the pull\n // parser tell a root-level dangling sequence-end (INVALID) and an unclosed\n // sequence at end-of-buffer (INCOMPLETE) apart from a clean boundary.\n private depth = 0;\n\n constructor(buf: Uint8Array, limits?: DecodeLimits) {\n this.buf = buf;\n this.n = buf.length;\n this.view = new DataView(buf.buffer, buf.byteOffset, buf.length);\n this.maxArrayCount = limits?.maxArrayCount ?? Infinity;\n this.maxStringLen = limits?.maxStringLen ?? Infinity;\n this.maxBlobLen = limits?.maxBlobLen ?? Infinity;\n }\n\n /**\n * Advance to the next field header. Returns `true` and sets {@link id} /\n * {@link wire} when a field follows; returns `false` — consuming the marker —\n * at the end of the buffer *or* at the sequence-end that closes the sequence\n * this decoder is reading. So a generated per-type decoder loops uniformly:\n *\n * ```ts\n * while (c.readHeader()) {\n * switch (c.id) {\n * case 4: this.u32 = Number(c.readUnsigned()); break;\n * case 10: this.child = Child.decodeFrom(c); break; // nested sequence\n * default: c.skip(c.wire); break; // unknown field\n * }\n * }\n * ```\n *\n * At the root the loop ends at end-of-buffer; inside a nested sequence it ends\n * at the matching {@link WireType.SequenceEnd} (which is consumed). A field\n * whose id is out of range throws {@link SofabError} (`INVALID_MSG`).\n */\n readHeader(): boolean {\n if (this.p >= this.n) {\n // End of buffer. At the root (depth 0) this is a clean, complete boundary;\n // inside an open sequence it is a truncated, unclosed sequence → INCOMPLETE\n // (§7), matching the fast path (fast.ts) which throws on `stack.length > 1`.\n if (this.depth > 0) {\n throw incompleteError(\"truncated message: unbalanced sequence\");\n }\n return false;\n }\n this.readVarint();\n const wire = this.lo & 7;\n if (wire === WireType.SequenceEnd) {\n // A sequence-end closes the current nested scope. At the root (depth 0)\n // there is no open sequence to close, so it is a dangling marker → INVALID\n // (mirrors fast.ts `stack.length <= 1` → \"unbalanced sequence end\").\n if (this.depth === 0) {\n throw invalidMsgError(\"unbalanced sequence end\");\n }\n this.depth--;\n return false;\n }\n const id = this.upper();\n if (id > ID_MAX) throw invalidMsgError(`field id ${id} out of range`);\n if (wire === WireType.SequenceStart) this.depth++;\n this.id = id;\n this.wire = wire;\n this.fixSub = this.peekFixSub(wire);\n return true;\n }\n\n /** Read an unsigned scalar (wire {@link WireType.Unsigned}), number-first. */\n readUnsigned(): number | bigint {\n this.readVarint();\n return this.unsignedValue();\n }\n\n /** Read a signed scalar (wire {@link WireType.Signed}), zig-zag, number-first. */\n readSigned(): number | bigint {\n this.readVarint();\n return this.signedValue();\n }\n\n /** Read a 32-bit float scalar (wire {@link WireType.Fixlen}, subtype fp32). */\n readFp32(): number {\n this.fixlenHeader(FixlenSubtype.Fp32, 4);\n return this.rawFp32();\n }\n\n /** Read a 64-bit float scalar (wire {@link WireType.Fixlen}, subtype fp64). */\n readFp64(): number {\n this.fixlenHeader(FixlenSubtype.Fp64, 8);\n return this.rawFp64();\n }\n\n /** Read a UTF-8 string scalar (wire {@link WireType.Fixlen}, subtype string). */\n readString(): string {\n const len = this.fixlenLen(FixlenSubtype.String);\n // take() (truncation → INCOMPLETE) runs before the decode, so a short\n // payload stays INCOMPLETE; only genuinely malformed UTF-8 bytes reach the\n // fatal decoder. Its TypeError becomes the INVALID outcome (§8/§6.4/§5.2).\n const bytes = this.take(len);\n try {\n return _utf8.decode(bytes);\n } catch {\n throw invalidMsgError(\"invalid UTF-8 in string\");\n }\n }\n\n /**\n * Read a blob scalar (wire {@link WireType.Fixlen}, subtype blob) as a\n * zero-copy {@link Uint8Array} view into the source buffer.\n */\n readBlob(): Uint8Array {\n const len = this.fixlenLen(FixlenSubtype.Blob);\n return this.take(len);\n }\n\n /** Read an unsigned array (wire {@link WireType.ArrayUnsigned}), number-first per element. */\n readUnsignedArray(): (number | bigint)[] {\n const count = this.arrayCount();\n const out: (number | bigint)[] = new Array(count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n out[i] = this.unsignedValue();\n }\n return out;\n }\n\n /** Read a signed array (wire {@link WireType.ArraySigned}), zig-zag, number-first per element. */\n readSignedArray(): (number | bigint)[] {\n const count = this.arrayCount();\n const out: (number | bigint)[] = new Array(count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n out[i] = this.signedValue();\n }\n return out;\n }\n\n /**\n * Read an unsigned 64-bit array into {@link Long}[] — the `bigint`-free path.\n * Each element keeps the raw lo/hi halves; call {@link Long.toBigInt} to\n * materialise only the values the caller actually needs.\n */\n readUnsignedArrayLong(): Long[] {\n const count = this.arrayCount();\n const out = new Array<Long>(count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n out[i] = new Long(this.lo, this.hi);\n }\n return out;\n }\n\n /** Read a signed 64-bit array (zig-zag) into {@link Long}[] — the `bigint`-free path. */\n readSignedArrayLong(): Long[] {\n const count = this.arrayCount();\n const out = new Array<Long>(count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n const lo = this.lo >>> 0;\n const hi = this.hi >>> 0;\n const mask = (-(lo & 1)) >>> 0; // all ones when the zig-zag lsb is set\n out[i] = new Long((((lo >>> 1) | (hi << 31)) >>> 0) ^ mask, ((hi >>> 1) >>> 0) ^ mask);\n }\n return out;\n }\n\n /** Read an fp32 array (wire {@link WireType.ArrayFixlen}, element subtype fp32). */\n readFp32Array(): number[] {\n const count = this.arrayFixlenHeader(FixlenSubtype.Fp32, 4);\n const out: number[] = new Array(count);\n for (let i = 0; i < count; i++) out[i] = this.rawFp32();\n return out;\n }\n\n /** Read an fp64 array (wire {@link WireType.ArrayFixlen}, element subtype fp64). */\n readFp64Array(): number[] {\n const count = this.arrayFixlenHeader(FixlenSubtype.Fp64, 8);\n const out: number[] = new Array(count);\n for (let i = 0; i < count; i++) out[i] = this.rawFp64();\n return out;\n }\n\n /**\n * Consume the value of the field whose header {@link readHeader} just accepted,\n * discarding it — for a `default:` branch that keeps the cursor in sync on an\n * unknown id. Pass {@link wire}. A {@link WireType.SequenceStart} skips the\n * whole nested sequence.\n */\n skip(wire: number): void {\n if (wire === WireType.SequenceStart) {\n // readHeader already counted this SequenceStart (depth++); skipSequence\n // consumes its whole balanced body incl. the matching end without going\n // through readHeader, so balance the count here.\n this.skipSequence();\n this.depth--;\n return;\n }\n this.skipValue(wire);\n }\n\n // --- value skipping -----------------------------------------------------\n\n private skipValue(wire: number): void {\n switch (wire) {\n case WireType.Unsigned:\n case WireType.Signed:\n this.readVarint();\n return;\n case WireType.Fixlen: {\n this.readVarint();\n const sub = this.lo & 7;\n const len = this.upper();\n // §4.6/§5.2: validate the fixlen word at the header, before the payload,\n // so a malformed word — a reserved subtype (0x4..0x7), or an fp32/fp64\n // whose declared length ≠ 4/8 — is INVALID even when the payload is also\n // truncated (INVALID takes precedence over INCOMPLETE). Mirrors the\n // known-field path ({@link fixlenHeader}) and fast.ts. A skip never\n // materializes the value, so string/blob keep only the len ≤ FIXLEN_MAX\n // bound — no opt-in length limit is enforced here (corelib-ts#49).\n if (sub > FixlenSubtype.Blob) throw invalidMsgError(`invalid fixlen subtype ${sub}`);\n if (sub === FixlenSubtype.Fp32 || sub === FixlenSubtype.Fp64) {\n if (len !== (sub === FixlenSubtype.Fp32 ? 4 : 8)) {\n throw invalidMsgError(\"fixlen float length mismatch\");\n }\n } else if (len > FIXLEN_MAX) {\n throw invalidMsgError(\"fixlen length out of range\");\n }\n this.take(len);\n return;\n }\n case WireType.ArrayUnsigned:\n case WireType.ArraySigned: {\n const count = this.arrayCount();\n for (let i = 0; i < count; i++) this.readVarint();\n return;\n }\n case WireType.ArrayFixlen: {\n // Read count and the element word, then validate the element type at the\n // header before taking the payload — a fixlen array carries only fp32\n // (size 4) or fp64 (size 8) elements (§4.8), so any other element word is\n // INVALID even when the payload is truncated (§5.2 precedence). This\n // deliberately does NOT use {@link arrayCount}'s count ≤ remaining-bytes\n // guard: that guard exists to bound allocation on the read paths, but the\n // skip path allocates nothing, and applying it here would report a\n // malformed-element array as INCOMPLETE instead of INVALID (corelib-ts#49).\n this.readVarint();\n const count = this.num();\n if (count > ARRAY_MAX) throw invalidMsgError(\"array count out of range\");\n if (count > this.maxArrayCount) {\n throw limitExceededError(\n `array count ${count} exceeds maxArrayCount ${this.maxArrayCount}`,\n );\n }\n this.readVarint();\n const sub = this.lo & 7;\n const size = this.upper();\n const ok =\n (sub === FixlenSubtype.Fp32 && size === 4) ||\n (sub === FixlenSubtype.Fp64 && size === 8);\n if (!ok) throw invalidMsgError(\"invalid fixlen array element type\");\n this.take(count * size);\n return;\n }\n default:\n throw invalidMsgError(`invalid wire type ${wire}`);\n }\n }\n\n private skipSequence(): void {\n let depth = 1;\n while (depth > 0) {\n if (this.p >= this.n) throw incompleteError(\"truncated message: unbalanced sequence\");\n this.readVarint();\n const wire = this.lo & 7;\n if (wire === WireType.SequenceEnd) {\n depth--;\n continue;\n }\n const id = this.upper();\n if (id > ID_MAX) throw invalidMsgError(`field id ${id} out of range`);\n if (wire === WireType.SequenceStart) depth++;\n else this.skipValue(wire);\n }\n }\n\n // --- field helpers ------------------------------------------------------\n\n /**\n * Peek the delivered fixlen subtype of the field {@link readHeader} just\n * accepted, **without advancing the cursor** — the readers / {@link skip}\n * still re-read and validate the word. Returns one of {@link FixlenSubtype}\n * (0..3), a reserved value (4..7), or `-1` when the wire is not a fixlen kind\n * or the subtype word is truncated away.\n *\n * The subtype is the low 3 bits of the fixlen sub-header word, and the low\n * bits of a LEB128 word live entirely in its **first** byte — so this only\n * reads one byte, it never decodes a varint.\n */\n private peekFixSub(wire: number): number {\n // Scalar fixlen: the sub-header is the byte right after the field header.\n if (wire === WireType.Fixlen) {\n return this.p < this.n ? this.buf[this.p]! & 7 : -1;\n }\n // Fixlen array: the element sub-header sits after the count varint (§4.8:\n // always present, even for count 0), so step over the count's bytes first —\n // a varint's last byte is the first one with the high bit clear.\n if (wire === WireType.ArrayFixlen) {\n let p = this.p;\n while (p < this.n && this.buf[p]! >= 0x80) p++;\n p++;\n return p < this.n ? this.buf[p]! & 7 : -1;\n }\n return -1; // not a fixlen field\n }\n\n /** Read and validate an array count word (0..ARRAY_MAX; §4.7/§4.8). */\n private arrayCount(): number {\n this.readVarint();\n const count = this.num();\n if (count > ARRAY_MAX) throw invalidMsgError(\"array count out of range\");\n if (count > this.maxArrayCount) {\n throw limitExceededError(\n `array count ${count} exceeds maxArrayCount ${this.maxArrayCount}`,\n );\n }\n // Part A hardening (corelib-ts#38): a dynamic array needs at least one wire\n // byte per element (a varint element, or an fp element ≥ its size), so a\n // count larger than the bytes left in the buffer cannot be real — reject it\n // as truncation *before* sizing `new Array(count)`, so a hostile count can\n // never drive an allocation larger than the input. A tighter fixlen bound\n // (count * elemSize) is applied once the element word is read, in\n // {@link arrayFixlenHeader}.\n if (count > this.n - this.p) throw incompleteError(\"truncated array\");\n return count;\n }\n\n /** Read a scalar fixlen sub-header, asserting subtype and exact byte length (floats). */\n private fixlenHeader(wantSub: number, wantLen: number): void {\n this.readVarint();\n const sub = this.lo & 7;\n const len = this.upper();\n if (sub !== wantSub) throw invalidMsgError(`invalid fixlen subtype ${sub}`);\n if (len !== wantLen) throw invalidMsgError(\"fixlen float length mismatch\");\n }\n\n /** Read a scalar fixlen sub-header for a string/blob, asserting subtype; returns byte length. */\n private fixlenLen(wantSub: number): number {\n this.readVarint();\n const sub = this.lo & 7;\n const len = this.upper();\n if (sub !== wantSub) throw invalidMsgError(`invalid fixlen subtype ${sub}`);\n if (len > FIXLEN_MAX) throw invalidMsgError(\"fixlen length out of range\");\n // Opt-in length cap (corelib-ts#38), enforced at the header before the\n // payload is taken. wantSub tells string from blob, so the right limit\n // applies to each.\n const limit =\n wantSub === FixlenSubtype.String ? this.maxStringLen : this.maxBlobLen;\n if (len > limit) {\n const what = wantSub === FixlenSubtype.String ? \"string\" : \"blob\";\n const name =\n wantSub === FixlenSubtype.String ? \"maxStringLen\" : \"maxBlobLen\";\n throw limitExceededError(\n `${what} length ${len} exceeds ${name} ${limit}`,\n );\n }\n return len;\n }\n\n /** Read an array fixlen element header (count + element type); returns the count. */\n private arrayFixlenHeader(wantSub: number, wantSize: number): number {\n // §4.8: a fixlen array always carries its element-length word — even when\n // empty — so the element kind stays known. count may then be 0.\n //\n // Read the count and validate the element word *before* the count ≤\n // remaining-bytes truncation guard, so a malformed element word on a\n // truncated array is INVALID, not INCOMPLETE (§5.2 precedence). This\n // deliberately inlines the count parse rather than calling {@link\n // arrayCount}, whose own `count > remaining` guard would otherwise fire\n // first — the same trap #49 sidestepped in skipValue's ArrayFixlen case\n // (corelib-ts#51, follow-up to #49).\n this.readVarint();\n const count = this.num();\n if (count > ARRAY_MAX) throw invalidMsgError(\"array count out of range\");\n if (count > this.maxArrayCount) {\n throw limitExceededError(\n `array count ${count} exceeds maxArrayCount ${this.maxArrayCount}`,\n );\n }\n this.readVarint();\n const sub = this.lo & 7;\n const size = this.upper();\n if (sub !== wantSub || size !== wantSize) {\n throw invalidMsgError(\"invalid fixlen array element type\");\n }\n // Part A hardening (corelib-ts#38): now the element size is known, a fixlen\n // array needs count * size payload bytes; a count claiming more than the\n // buffer holds is truncation — reject before sizing `new Array(count)`.\n // This tighter bound subsumes arrayCount's `count > remaining` guard.\n if (count > (this.n - this.p) / wantSize) {\n throw incompleteError(\"truncated fixlen array\");\n }\n return count;\n }\n\n /** Hand back a zero-copy view of the next `len` bytes, advancing the cursor. */\n private take(len: number): Uint8Array {\n const start = this.p;\n const end = start + len;\n if (end > this.n) throw incompleteError(\"truncated fixlen payload\");\n this.p = end;\n return this.buf.subarray(start, end);\n }\n\n private rawFp32(): number {\n const p = this.p;\n if (p + 4 > this.n) throw incompleteError(\"truncated fp32\");\n this.p = p + 4;\n return this.view.getFloat32(p, true);\n }\n\n private rawFp64(): number {\n const p = this.p;\n if (p + 8 > this.n) throw incompleteError(\"truncated fp64\");\n this.p = p + 8;\n return this.view.getFloat64(p, true);\n }\n\n // --- varint reading (shared verbatim with ./fast) -----------------------\n\n /**\n * The last varint's full value as a `bigint` (64-bit fidelity). Only ever\n * called from {@link unsignedValue} / {@link signedValue} on the `hi` overflow\n * path (`this.hi >>> 0 > 0x1fffff`), so `hi` is always non-zero here.\n */\n private big(): bigint {\n return (BigInt(this.hi >>> 0) << 32n) | BigInt(this.lo >>> 0);\n }\n\n /**\n * The last varint as an unsigned value, number-first: a `number` when it fits\n * exactly (`≤ 2^53-1`), a `bigint` only beyond that.\n */\n private unsignedValue(): number | bigint {\n const hi = this.hi >>> 0;\n return hi <= 0x1fffff ? hi * TWO32 + (this.lo >>> 0) : this.big();\n }\n\n /** The last zig-zag varint as a signed value, number-first. */\n private signedValue(): number | bigint {\n const hi = this.hi >>> 0;\n if (hi <= 0x1fffff) {\n const r = hi * TWO32 + (this.lo >>> 0); // raw zig-zag, ≤ 2^53-1\n return r % 2 === 0 ? r / 2 : -(r + 1) / 2;\n }\n return zigzagDecode(this.big());\n }\n\n /** The last varint's value as a JS number — exact for ids/lengths/counts. */\n private num(): number {\n return this.hi * TWO32 + (this.lo >>> 0);\n }\n\n /** The last varint with its low 3 tag bits stripped (`value >> 3`). */\n private upper(): number {\n return (this.hi >>> 0) * (TWO32 / 8) + (this.lo >>> 3);\n }\n\n /**\n * Decode one LEB128 varint at the cursor into {@link lo} / {@link hi} (each an\n * unsigned 32-bit half), advancing {@link p}. Throws on truncation or a value\n * spilling past 64 bits (>10 bytes). Unrolled, number-only — no `bigint`.\n */\n private readVarint(): void {\n const buf = this.buf;\n const n = this.n;\n let p = this.p;\n let b: number;\n let lo: number;\n let hi = 0;\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo = b & 0x7f;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 7;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 14;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 21;\n if (b < 0x80) return this.set(lo, 0, p);\n\n // 5th byte straddles the 32-bit boundary: 4 bits to lo, 3 bits to hi.\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x0f) << 28;\n hi = (b >> 4) & 0x07;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 3;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 10;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 17;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 24;\n if (b < 0x80) return this.set(lo, hi, p);\n\n // 10th byte: only bit 63 (1 payload bit) remains below 64; any higher\n // payload bit, or a continuation into an 11th byte, is a >64-bit overflow.\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n if (((b & 0x7f) >> 1) !== 0) throw invalidMsgError(\"varint overflow\");\n hi |= (b & 0x7f) << 31;\n if (b < 0x80) return this.set(lo, hi, p);\n\n throw invalidMsgError(\"varint overflow\");\n }\n\n private set(lo: number, hi: number, p: number): void {\n this.lo = lo;\n this.hi = hi;\n this.p = p;\n }\n}\n","/**\n * Optional native (N-API) acceleration loader.\n *\n * This module performs **no** work at import time and statically imports\n * nothing native, so pulling it into a browser or bundled build is harmless.\n * Call {@link loadNativeKernel} explicitly (only meaningful on Node.js /\n * Electron) to try to load the optional `@sofa-buffers/corelib-native` addon and\n * install it as the active {@link Kernel}. If the addon is absent or the host\n * is not Node, it returns `false` and the pure-JS kernel stays active.\n */\n\nimport { setKernel, type Kernel } from \"./kernel.js\";\n\n/** The package id of the optional native addon (an `optionalDependency`). */\nexport const NATIVE_PACKAGE = \"@sofa-buffers/corelib-native\";\n\nfunction isNode(): boolean {\n return (\n typeof process !== \"undefined\" &&\n !!(process as { versions?: { node?: string } }).versions?.node\n );\n}\n\n/**\n * Attempt to load and install the native kernel.\n *\n * @returns `true` if a valid native kernel was installed, `false` if it could\n * not be loaded (not on Node, addon not installed, or wrong shape). Never\n * throws for a missing addon — the JS kernel remains the fallback.\n */\nexport async function loadNativeKernel(): Promise<boolean> {\n if (!isNode()) return false;\n try {\n const { createRequire } = await import(\"node:module\");\n const require = createRequire(import.meta.url);\n const mod = require(NATIVE_PACKAGE) as { kernel?: Kernel } | Kernel;\n const kernel = (mod as { kernel?: Kernel }).kernel ?? (mod as Kernel);\n setKernel(kernel);\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * Optional WebAssembly acceleration loader.\n *\n * Unlike the native addon, a WASM kernel runs in the browser too. This module\n * does nothing at import time; call {@link loadWasmKernel} with the compiled\n * module's bytes (or a streaming source) to instantiate it and install it as\n * the active {@link Kernel}. A real WASM build is shipped separately; this\n * loader is the stable entry point the rest of the library is wired through.\n */\n\nimport { setKernel, type Kernel } from \"./kernel.js\";\n\n/** A factory the WASM glue exposes: given the instance exports, build a Kernel. */\nexport type WasmKernelFactory = (\n exports: WebAssembly.Exports,\n) => Kernel;\n\n/**\n * Instantiate a WASM module and install the kernel it produces.\n *\n * @param source compiled-module bytes, a `Response`/stream, or a ready module.\n * @param factory wraps the instance exports into a {@link Kernel}.\n * @returns `true` once installed; throws only if instantiation itself fails.\n */\nexport async function loadWasmKernel(\n source: BufferSource | Response | PromiseLike<Response> | WebAssembly.Module,\n factory: WasmKernelFactory,\n imports: WebAssembly.Imports = {},\n): Promise<boolean> {\n let instance: WebAssembly.Instance;\n if (source instanceof WebAssembly.Module) {\n instance = await WebAssembly.instantiate(source, imports);\n } else if (\n typeof Response !== \"undefined\" &&\n (source instanceof Response || isThenable(source))\n ) {\n const result = await WebAssembly.instantiateStreaming(\n source as Response | PromiseLike<Response>,\n imports,\n );\n instance = result.instance;\n } else {\n const result = await WebAssembly.instantiate(source as BufferSource, imports);\n instance = result.instance;\n }\n setKernel(factory(instance.exports));\n return true;\n}\n\nfunction isThenable(x: unknown): x is PromiseLike<unknown> {\n return (\n typeof x === \"object\" &&\n x !== null &&\n typeof (x as { then?: unknown }).then === \"function\"\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/public.ts","../src/constants.ts","../src/errors.ts","../src/long.ts","../src/varint/leb128.ts","../src/varint/num64.ts","../src/varint/zigzag.ts","../src/backend/js.ts","../src/backend/kernel.ts","../src/encode/fixlen.ts","../src/encode/ostream.ts","../src/decode/fast.ts","../src/decode/state.ts","../src/decode/istream.ts","../src/decode/cursor.ts","../src/backend/native.ts","../src/backend/wasm.ts"],"names":["SIGNED_FAST_MAX","TWO32","require"],"mappings":"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","file":"index.global.js","sourcesContent":["/**\n * The complete public surface of the library, re-exported by {@link \"./index\"}\n * both as flat named exports and, aggregated, under the `sofab` namespace.\n */\n\nexport {\n API_VERSION,\n ArrayKind,\n DecodeStatus,\n FixlenSubtype,\n WireType,\n ID_MAX,\n FIXLEN_MAX,\n ARRAY_MAX,\n MAX_DEPTH,\n U64_MAX,\n I64_MIN,\n I64_MAX,\n} from \"./constants.js\";\n\nexport { SofabError, SofabErrorCode } from \"./errors.js\";\n\nexport { Long } from \"./long.js\";\nexport { OStream } from \"./encode/ostream.js\";\nexport type { FlushSink } from \"./encode/sink.js\";\n\nexport { IStream, decode } from \"./decode/istream.js\";\nexport type { Visitor } from \"./decode/istream.js\";\nexport type { DecodeLimits } from \"./decode/limits.js\";\nexport { Cursor } from \"./decode/cursor.js\";\n\nexport { getKernel, setKernel } from \"./backend/kernel.js\";\nexport type { Kernel } from \"./backend/kernel.js\";\nexport { jsKernel } from \"./backend/js.js\";\nexport { loadNativeKernel } from \"./backend/native.js\";\nexport { loadWasmKernel } from \"./backend/wasm.js\";\nexport type { WasmKernelFactory } from \"./backend/wasm.js\";\n","/**\n * Wire-format constants for SofaBuffers.\n *\n * The format is specified, language-neutrally, in the\n * {@link https://github.com/sofa-buffers/documentation | SofaBuffers documentation}.\n * Every field on the wire begins with a varint header `(id << 3) | wireType`,\n * so the wire type lives in the low three bits and the field id in the rest.\n */\n\n/**\n * The SofaBuffers API version this library implements. The generator and other\n * tooling read it to verify compatibility. Bumped only on a breaking API change.\n */\nexport const API_VERSION = 1;\n\n/** The three low bits of a field header: what kind of field follows. */\nexport const WireType = {\n /** Unsigned varint scalar. */\n Unsigned: 0,\n /** Signed varint scalar (zig-zag encoded). */\n Signed: 1,\n /** Fixed-length value: fp32, fp64, string or blob (see {@link FixlenSubtype}). */\n Fixlen: 2,\n /** Array of unsigned varints. */\n ArrayUnsigned: 3,\n /** Array of signed (zig-zag) varints. */\n ArraySigned: 4,\n /** Array of fixed-length values (fp32 / fp64 only). */\n ArrayFixlen: 5,\n /** Opens a nested sequence (new id scope). */\n SequenceStart: 6,\n /** Closes the current sequence. Encoded as the single byte `0x07`. */\n SequenceEnd: 7,\n} as const;\n/** A field's wire type: one of the {@link WireType} values. */\nexport type WireType = (typeof WireType)[keyof typeof WireType];\n\n/** The three low bits of a fixlen length header: which fixed-length type. */\nexport const FixlenSubtype = {\n /** IEEE-754 32-bit float, little-endian. */\n Fp32: 0,\n /** IEEE-754 64-bit double, little-endian. */\n Fp64: 1,\n /** UTF-8 string (no null terminator). */\n String: 2,\n /** Arbitrary binary data. */\n Blob: 3,\n} as const;\n/** A fixed-length value's type: one of the {@link FixlenSubtype} values. */\nexport type FixlenSubtype = (typeof FixlenSubtype)[keyof typeof FixlenSubtype];\n\n/** Which element kind an array field carries (reported to {@link Visitor.arrayBegin}). */\nexport const ArrayKind = {\n /** Unsigned-integer elements. */\n Unsigned: 0,\n /** Signed-integer (zig-zag) elements. */\n Signed: 1,\n /** IEEE-754 32-bit float elements. */\n Fp32: 2,\n /** IEEE-754 64-bit double elements. */\n Fp64: 3,\n} as const;\n/** An array field's element kind: one of the {@link ArrayKind} values. */\nexport type ArrayKind = (typeof ArrayKind)[keyof typeof ArrayKind];\n\n/** Largest permitted field id and fixlen length / array count: `INT32_MAX`. */\nexport const ID_MAX = 0x7fff_ffff;\n/** Largest permitted fixlen byte length: `INT32_MAX`. */\nexport const FIXLEN_MAX = 0x7fff_ffff;\n/** Largest permitted array element count: `INT32_MAX`. */\nexport const ARRAY_MAX = 0x7fff_ffff;\n\n/** Largest unsigned 64-bit value (`2^64 - 1`). */\nexport const U64_MAX = 0xffff_ffff_ffff_ffffn;\n/** Smallest signed 64-bit value (`-2^63`). */\nexport const I64_MIN = -0x8000_0000_0000_0000n;\n/** Largest signed 64-bit value (`2^63 - 1`). */\nexport const I64_MAX = 0x7fff_ffff_ffff_ffffn;\n\n/** A varint encodes at most this many bytes for a 64-bit value. */\nexport const VARINT_MAX_BYTES = 10;\n\n/**\n * Maximum nested-sequence depth (§4.9 / §6.2). An encoder must not open more\n * than this many nested sequences, and a decoder must reject a message that\n * nests deeper with an `InvalidMessage` error rather than risk unbounded\n * recursion / stack growth.\n */\nexport const MAX_DEPTH = 255;\n\n/**\n * The terminal outcome of a decode (MESSAGE_SPEC §7), reported identically for\n * one-shot and streaming decode with **no** finish / finalize / end promotion\n * step:\n *\n * - `Complete` — the bytes ended exactly at a field boundary: a valid message.\n * - `Incomplete` — the bytes ended *inside* a field (an unterminated varint, a\n * payload shorter than its declared length, an array that runs off the end, or\n * a nested sequence never closed). **Not an error** — more bytes could\n * complete it, and the caller owns end-of-input.\n * - `Invalid` — the bytes are malformed regardless of what follows.\n *\n * {@link IStream.end} returns `Complete` or `Incomplete` (an `Invalid` message\n * has already thrown from {@link IStream.feed}); the one-shot {@link decode} /\n * {@link Cursor} path signals `Incomplete` and `Invalid` by throwing a\n * {@link SofabError} whose `code` is {@link SofabErrorCode.Incomplete} or\n * {@link SofabErrorCode.InvalidMsg}, and `Complete` by returning normally.\n */\nexport const DecodeStatus = {\n /** The bytes ended exactly at a field boundary — a valid message. */\n Complete: \"COMPLETE\",\n /** The bytes ended inside a field; more bytes could complete it (not an error). */\n Incomplete: \"INCOMPLETE\",\n /** The bytes are malformed regardless of what follows. */\n Invalid: \"INVALID\",\n} as const;\n/** A decode's terminal outcome: one of the {@link DecodeStatus} values. */\nexport type DecodeStatus = (typeof DecodeStatus)[keyof typeof DecodeStatus];\n","/**\n * Error handling for SofaBuffers.\n *\n * Both encoder and decoder report problems through a single {@link SofabError}\n * carrying a {@link SofabErrorCode}, mirroring the C reference's `sofab_ret_t`\n * return codes so the failure modes line up across the language family.\n *\n * The decoder distinguishes two *kinds* of decode failure (MESSAGE_SPEC §7):\n * {@link SofabErrorCode.InvalidMsg} for input that is malformed regardless of\n * what follows (`INVALID`), and {@link SofabErrorCode.Incomplete} for input that\n * merely ends inside a field (`INCOMPLETE`) — a truncation that more bytes could\n * complete, and so is *not* the same as a malformed message. A third code,\n * {@link SofabErrorCode.LimitExceeded}, is orthogonal to both: it reports a\n * receiver-configured decode limit being hit — *policy*, not a property of the\n * bytes — so it is kept distinct from `InvalidMsg`.\n */\n\n/**\n * The cause of a {@link SofabError}. `Argument`, `BufferFull` and `InvalidMsg`\n * match the C reference's `sofab_ret_t` codes; `Incomplete` is the\n * finish-less INCOMPLETE decode outcome (MESSAGE_SPEC §7), a distinct,\n * more-bytes-could-complete-it signal split out from `InvalidMsg`.\n */\nexport const SofabErrorCode = {\n /** A caller argument was invalid (e.g. id out of range, empty array). */\n Argument: \"ARGUMENT\",\n /** The output buffer is full and no flush sink was provided. */\n BufferFull: \"BUFFER_FULL\",\n /** The input being decoded is malformed regardless of what follows (`INVALID`). */\n InvalidMsg: \"INVALID_MSG\",\n /**\n * The input being decoded ends inside a field (`INCOMPLETE`, MESSAGE_SPEC §7):\n * an unterminated varint, a payload shorter than its declared length, an array\n * that runs off the end, or a nested sequence never closed. Not a malformed\n * message — more bytes could complete it, and the caller owns end-of-input.\n */\n Incomplete: \"INCOMPLETE\",\n /**\n * A receiver-configured decode limit was exceeded — a dynamic array, string or\n * blob on the wire claims more elements / bytes than the caller's\n * {@link DecodeLimits} (`maxArrayCount` / `maxStringLen` / `maxBlobLen`)\n * allows. Deliberately distinct from {@link SofabErrorCode.InvalidMsg}:\n * exceeding a limit is *policy*, not wire malformation — the identical bytes\n * decode fine under a looser limit — so differential fuzzing must not read it\n * as a conformance divergence. The decoder never clamps or truncates; it\n * rejects, before the offending field is materialized.\n */\n LimitExceeded: \"LIMIT_EXCEEDED\",\n} as const;\n/** A {@link SofabError}'s cause: one of the {@link SofabErrorCode} values. */\nexport type SofabErrorCode =\n (typeof SofabErrorCode)[keyof typeof SofabErrorCode];\n\n/** The single error type thrown by the encoder and decoder. */\nexport class SofabError extends Error {\n /** The machine-readable cause. */\n readonly code: SofabErrorCode;\n\n constructor(code: SofabErrorCode, message: string) {\n super(message);\n this.name = \"SofabError\";\n this.code = code;\n // Restore the prototype chain for transpiled-to-ES5 consumers.\n Object.setPrototypeOf(this, SofabError.prototype);\n }\n}\n\n/** @internal A caller passed an invalid argument. */\nexport function argumentError(message: string): SofabError {\n return new SofabError(SofabErrorCode.Argument, message);\n}\n\n/** @internal The output buffer filled with no flush sink to drain it. */\nexport function bufferFullError(message: string): SofabError {\n return new SofabError(SofabErrorCode.BufferFull, message);\n}\n\n/** @internal The input being decoded is malformed regardless of what follows. */\nexport function invalidMsgError(message: string): SofabError {\n return new SofabError(SofabErrorCode.InvalidMsg, message);\n}\n\n/**\n * @internal The input being decoded ended inside a field (truncation). A\n * distinct, non-malformed outcome (MESSAGE_SPEC §7): more bytes could complete\n * it, so it carries {@link SofabErrorCode.Incomplete}, never `InvalidMsg`.\n */\nexport function incompleteError(message: string): SofabError {\n return new SofabError(SofabErrorCode.Incomplete, message);\n}\n\n/**\n * @internal A receiver-configured decode limit ({@link DecodeLimits}) was\n * exceeded. Carries {@link SofabErrorCode.LimitExceeded}, never `InvalidMsg`:\n * it is a policy rejection, not a statement that the bytes are malformed.\n */\nexport function limitExceededError(message: string): SofabError {\n return new SofabError(SofabErrorCode.LimitExceeded, message);\n}\n","/**\n * A 64-bit integer value carried as two unsigned 32-bit halves.\n *\n * SofaBuffers accepts `bigint` at every 64-bit surface for ergonomics, but a\n * `bigint` in the encode/decode hot path is expensive — especially on\n * JavaScriptCore (Bun), where profiling showed the `bigint` split/materialise\n * and zig-zag operations dominating the 64-bit array codecs. `Long` lets a\n * caller (and the generated code) stay entirely on `number` arithmetic: the\n * codec reads `.low`/`.high` directly, and any `bigint`↔`Long` conversion\n * happens once at the API boundary rather than once per encode.\n *\n * Values are stored as raw two's-complement bits; the same `Long` serves an\n * unsigned or signed field — {@link Long.toBigInt} takes the signedness.\n */\nexport class Long {\n /** Low 32 bits (unsigned). */\n readonly low: number;\n /** High 32 bits (unsigned). */\n readonly high: number;\n\n constructor(low: number, high: number) {\n this.low = low >>> 0;\n this.high = high >>> 0;\n }\n\n /**\n * The 64-bit zero. `Long` is immutable (readonly halves), so this single shared\n * instance is safe to reuse anywhere a zero default is needed — generated code\n * uses it for fixed-count array defaults and pad-fill instead of\n * `Long.fromValue(0)`, which would run `bigint` arithmetic per call on the hot\n * decode/encode path.\n */\n static readonly ZERO: Long = new Long(0, 0);\n\n /** Construct from raw 32-bit halves. */\n static fromBits(low: number, high: number): Long {\n return new Long(low, high);\n }\n\n /** Split a `bigint` into its low/high 32-bit halves (two's complement). */\n static fromBigInt(value: bigint): Long {\n return new Long(Number(value & 0xffff_ffffn) >>> 0, Number((value >> 32n) & 0xffff_ffffn) >>> 0);\n }\n\n /** From an integer `number` (`|n| < 2^53`); sign handled via `bigint` once. */\n static fromNumber(n: number): Long {\n return Long.fromBigInt(BigInt(Math.trunc(n)));\n }\n\n /** Accept a `Long` as-is, or convert a `bigint` / `number` once. */\n static fromValue(v: Long | bigint | number): Long {\n if (v instanceof Long) return v;\n return typeof v === \"bigint\" ? Long.fromBigInt(v) : Long.fromNumber(v);\n }\n\n /** Materialise as a `bigint`. `signed` reads the high bit as two's complement. */\n toBigInt(signed = false): bigint {\n let r = (BigInt(this.high >>> 0) << 32n) | BigInt(this.low >>> 0);\n if (signed && (this.high & 0x8000_0000) !== 0) r -= 0x1_0000_0000_0000_0000n;\n return r;\n }\n\n /** Decimal string (`signed` interprets the high bit as two's complement). */\n toString(signed = false): string {\n return this.toBigInt(signed).toString();\n }\n}\n","/**\n * LEB128 variable-length integer coding.\n *\n * Each byte carries seven payload bits with the high bit as a continuation\n * flag; bytes are little-endian (least-significant group first). Values are\n * `bigint` so the full 64-bit range works. The streaming decoder in\n * `decode/state.ts` has its own resumable byte-at-a-time reader; the helpers\n * here are for whole-buffer paths (array elements, tests, the JS kernel).\n */\n\nimport { VARINT_MAX_BYTES } from \"../constants.js\";\nimport { incompleteError, invalidMsgError } from \"../errors.js\";\n\n/** Number of bytes {@link encodeVarint} will write for `value` (unsigned). */\nexport function varintSize(value: bigint): number {\n let lo = Number(value & 0xffff_ffffn) >>> 0;\n let hi = Number((value >> 32n) & 0xffff_ffffn) >>> 0;\n let n = 0;\n while (hi !== 0) {\n n++;\n const next = ((lo >>> 7) | (hi << 25)) >>> 0;\n hi >>>= 7;\n lo = next;\n }\n while (lo > 0x7f) {\n n++;\n lo >>>= 7;\n }\n return n + 1;\n}\n\n/**\n * Write `value` (an unsigned `bigint`) as a varint into `out` at `pos`.\n * The caller must guarantee `out` has at least {@link VARINT_MAX_BYTES} bytes\n * of room from `pos`. Returns the position just past the last byte written.\n *\n * The 64-bit value is split into two 32-bit *number* halves once (the only two\n * `bigint` operations), then the LEB128 groups are produced with number-only\n * arithmetic — `lo`'s top bits are fed from `hi` as it drains. This avoids the\n * ~20 short-lived `bigint` allocations a per-byte `v & 0x7fn; v >>= 7n` loop\n * would make, which V8 profiling showed to be the encoder's dominant cost.\n */\nexport function encodeVarint(value: bigint, out: Uint8Array, pos: number): number {\n let lo = Number(value & 0xffff_ffffn) >>> 0;\n let hi = Number((value >> 32n) & 0xffff_ffffn) >>> 0;\n // While high bits remain, every emitted byte is a full 7-bit group + continuation.\n while (hi !== 0) {\n out[pos++] = (lo & 0x7f) | 0x80;\n lo = ((lo >>> 7) | (hi << 25)) >>> 0; // shift the 64-bit value right by 7\n hi >>>= 7;\n }\n while (lo > 0x7f) {\n out[pos++] = (lo & 0x7f) | 0x80;\n lo >>>= 7;\n }\n out[pos++] = lo;\n return pos;\n}\n\n/**\n * Write a 64-bit value already split into two unsigned 32-bit halves as a\n * varint — the `bigint`-free sibling of {@link encodeVarint}. Callers holding a\n * `bigint` split it once (or hold a {@link Long}) and then stay on the number\n * path here, avoiding the per-value `bigint` churn that dominates the 64-bit\n * array encoders (and which JavaScriptCore optimizes far worse than V8).\n * `lo`/`hi` are coerced to uint32.\n */\nexport function encodeVarintLoHi(lo: number, hi: number, out: Uint8Array, pos: number): number {\n lo >>>= 0;\n hi >>>= 0;\n while (hi !== 0) {\n out[pos++] = (lo & 0x7f) | 0x80;\n lo = ((lo >>> 7) | (hi << 25)) >>> 0;\n hi >>>= 7;\n }\n while (lo > 0x7f) {\n out[pos++] = (lo & 0x7f) | 0x80;\n lo >>>= 7;\n }\n out[pos++] = lo;\n return pos;\n}\n\n/** Number of bytes {@link encodeVarintNum} will write for `value`. */\nexport function varintSizeNum(value: number): number {\n let n = 1;\n while (value > 0x7f) {\n n++;\n value = Math.floor(value / 128);\n }\n return n;\n}\n\n/**\n * Write `value` (a non-negative integer `number`, `≤ 2^53`) as a varint into\n * `out` at `pos`. The number-only sibling of {@link encodeVarint}: it avoids\n * `bigint` entirely, which is the encoder's hot path for ids, lengths, counts\n * and the very common small scalar. The caller guarantees {@link VARINT_MAX_BYTES}\n * bytes of room. Returns the position past the last byte written.\n */\nexport function encodeVarintNum(value: number, out: Uint8Array, pos: number): number {\n // Fast path: below 2^32 every 7-bit group survives bitwise extraction (ToUint32\n // is exact there, and `>>>` keeps it unsigned), so we stay on cheap integer ops.\n // This covers ids, lengths, counts, u8..u32 and their zig-zags — the vast\n // majority of calls. It matters because JavaScriptCore does not inline this\n // helper and its `% 128` / `Math.floor(/128)` float path is a top-3 hotspot\n // there; V8 optimizes both away, so the change is JSC-facing but harmless on V8.\n if (value < 0x1_0000_0000) {\n let v = value;\n while (v > 0x7f) {\n out[pos++] = (v & 0x7f) | 0x80;\n v >>>= 7;\n }\n out[pos++] = v;\n return pos;\n }\n // Slow path: 2^32 .. 2^53, where bitwise ops would truncate to 32 bits.\n while (value > 0x7f) {\n out[pos++] = (value % 128) | 0x80;\n value = Math.floor(value / 128);\n }\n out[pos++] = value;\n return pos;\n}\n\n/** The result of {@link decodeVarint}: the value and the position after it. */\nexport interface VarintResult {\n value: bigint;\n pos: number;\n}\n\n/**\n * Read a varint from `buf` starting at `pos`. Reports the same two decode\n * failures the streaming path does (MESSAGE_SPEC §7): throws a\n * {@link SofabError} with code `INVALID_MSG` on overflow past 64 bits (malformed\n * regardless of what follows), and `INCOMPLETE` if the buffer ends mid-varint\n * (an unterminated varint that more bytes could complete).\n */\nexport function decodeVarint(buf: Uint8Array, pos: number): VarintResult {\n let value = 0n;\n let shift = 0n;\n let bytes = 0;\n for (;;) {\n if (pos >= buf.length) throw incompleteError(\"truncated varint\");\n if (bytes >= VARINT_MAX_BYTES) throw invalidMsgError(\"varint overflow\");\n const byte = buf[pos++]!;\n // 10th byte carries only bit 63 below 64; any higher payload bit would\n // spill past bit 63 and is a >64-bit overflow (silently accepted before).\n if (bytes === VARINT_MAX_BYTES - 1 && (byte & 0x7f) > 1) {\n throw invalidMsgError(\"varint overflow\");\n }\n value |= BigInt(byte & 0x7f) << shift;\n bytes++;\n if ((byte & 0x80) === 0) return { value, pos };\n shift += 7n;\n }\n}\n","/**\n * 64-bit and IEEE-754 helpers.\n *\n * `bigint` masking utilities plus little-endian float pack/unpack built on a\n * single shared {@link DataView}. The format always stores `fp32` / `fp64`\n * little-endian regardless of host byte order, which a `DataView` gives us for\n * free (the `littleEndian` argument is passed explicitly everywhere).\n */\n\nimport { I64_MAX, I64_MIN, U64_MAX } from \"../constants.js\";\n\nconst SCRATCH = new DataView(new ArrayBuffer(8));\n\n/** Coerce a `number | bigint` to a `bigint`, rejecting non-integers. */\nexport function toBigInt(value: number | bigint): bigint {\n if (typeof value === \"bigint\") return value;\n if (!Number.isInteger(value)) {\n throw new RangeError(`expected an integer, got ${value}`);\n }\n return BigInt(value);\n}\n\n/** True when `value` fits in an unsigned 64-bit integer. */\nexport function inU64(value: bigint): boolean {\n return value >= 0n && value <= U64_MAX;\n}\n\n/** True when `value` fits in a signed 64-bit integer. */\nexport function inI64(value: bigint): boolean {\n return value >= I64_MIN && value <= I64_MAX;\n}\n\n/** Write `value` as a little-endian fp32 into `out` at `pos`; returns `pos + 4`. */\nexport function packFp32(out: Uint8Array, pos: number, value: number): number {\n SCRATCH.setFloat32(0, value, true);\n out[pos] = SCRATCH.getUint8(0);\n out[pos + 1] = SCRATCH.getUint8(1);\n out[pos + 2] = SCRATCH.getUint8(2);\n out[pos + 3] = SCRATCH.getUint8(3);\n return pos + 4;\n}\n\n/** Write `value` as a little-endian fp64 into `out` at `pos`; returns `pos + 8`. */\nexport function packFp64(out: Uint8Array, pos: number, value: number): number {\n SCRATCH.setFloat64(0, value, true);\n for (let i = 0; i < 8; i++) out[pos + i] = SCRATCH.getUint8(i);\n return pos + 8;\n}\n\n/** Read a little-endian fp32 from `buf` at `pos`. */\nexport function unpackFp32(buf: Uint8Array, pos: number): number {\n SCRATCH.setUint8(0, buf[pos]!);\n SCRATCH.setUint8(1, buf[pos + 1]!);\n SCRATCH.setUint8(2, buf[pos + 2]!);\n SCRATCH.setUint8(3, buf[pos + 3]!);\n return SCRATCH.getFloat32(0, true);\n}\n\n/** Read a little-endian fp64 from `buf` at `pos`. */\nexport function unpackFp64(buf: Uint8Array, pos: number): number {\n for (let i = 0; i < 8; i++) SCRATCH.setUint8(i, buf[pos + i]!);\n return SCRATCH.getFloat64(0, true);\n}\n","/**\n * Zig-zag mapping for signed integers.\n *\n * Signed values are zig-zag encoded before being written as an unsigned varint,\n * so small magnitudes of either sign stay short. The transform is the standard\n * `(n << 1) ^ (n >> 63)` over 64 bits, computed here in `bigint` so the full\n * `int64` range round-trips exactly.\n */\n\nimport { U64_MAX } from \"../constants.js\";\n\n/** Map a signed 64-bit value to its unsigned zig-zag representation. */\nexport function zigzagEncode(value: bigint): bigint {\n return ((value << 1n) ^ (value >> 63n)) & U64_MAX;\n}\n\n/** Recover a signed 64-bit value from its unsigned zig-zag representation. */\nexport function zigzagDecode(value: bigint): bigint {\n return (value >> 1n) ^ -(value & 1n);\n}\n","/**\n * The default, pure-TypeScript {@link Kernel}.\n *\n * Always available — no native dependency, no WebAssembly — so SofaBuffers runs\n * unchanged in Node.js, browsers, Electron and bundled builds. Importing this\n * module registers it as the default kernel (idempotently); a native or WASM\n * kernel can later override it via {@link setKernel}.\n */\n\nimport { encodeVarint, encodeVarintNum } from \"../varint/leb128.js\";\nimport { packFp32, packFp64, toBigInt } from \"../varint/num64.js\";\nimport { zigzagEncode } from \"../varint/zigzag.js\";\nimport type { Kernel } from \"./kernel.js\";\n\n// Largest signed magnitude whose zig-zag (|v|*2) stays an exact integer.\nconst SIGNED_FAST_MAX = 0x10_0000_0000_0000; // 2^52\n\n/**\n * The default, pure-TypeScript {@link Kernel} — active until {@link setKernel}\n * installs another. It implements the bulk encoder transforms with no native or\n * WebAssembly dependency, so it works in every environment.\n */\nexport const jsKernel: Kernel = {\n name: \"js\",\n\n encodeUnsignedVarints(values, out, pos) {\n for (let i = 0; i < values.length; i++) {\n const v = values[i]!;\n // Number elements (u8..u32 and any small u64) skip bigint entirely.\n if (typeof v === \"number\" && v >= 0 && v <= Number.MAX_SAFE_INTEGER && Number.isInteger(v)) {\n pos = encodeVarintNum(v, out, pos);\n } else {\n pos = encodeVarint(toBigInt(v), out, pos);\n }\n }\n return pos;\n },\n\n encodeSignedVarints(values, out, pos) {\n for (let i = 0; i < values.length; i++) {\n const v = values[i]!;\n if (typeof v === \"number\" && v >= -SIGNED_FAST_MAX && v <= SIGNED_FAST_MAX && Number.isInteger(v)) {\n pos = encodeVarintNum(v >= 0 ? v * 2 : -v * 2 - 1, out, pos);\n } else {\n pos = encodeVarint(zigzagEncode(toBigInt(v)), out, pos);\n }\n }\n return pos;\n },\n\n packFp32Array(values, out, pos) {\n for (let i = 0; i < values.length; i++) {\n pos = packFp32(out, pos, values[i]!);\n }\n return pos;\n },\n\n packFp64Array(values, out, pos) {\n for (let i = 0; i < values.length; i++) {\n pos = packFp64(out, pos, values[i]!);\n }\n return pos;\n },\n};\n","/**\n * The acceleration seam.\n *\n * The encoder's bulk array paths run through a {@link Kernel} — a small set of\n * self-contained, buffer-oriented transforms over a region the caller has\n * already sized. The default {@link \"./js\"} kernel is pure TypeScript and works\n * everywhere; a C++ (N-API) or WebAssembly build can implement the same\n * interface and be swapped in with {@link setKernel} for a speed-up, with **no\n * change to the public API**. The boundary is deliberately *bulk* (a whole\n * array per call, into guaranteed capacity) so the cost of crossing into native\n * code is amortised — never one call per element.\n */\n\nimport { jsKernel } from \"./js.js\";\n\n/**\n * Bulk, capacity-guaranteed transforms used on the encoder's fast path.\n *\n * Every method writes into `out` starting at `pos`, assuming the caller has\n * already ensured enough room, and returns the position just past the last byte\n * written. Headers, counts, flushing and validation stay in the stream classes;\n * a kernel only moves bytes.\n */\nexport interface Kernel {\n /** A short identifier, surfaced in diagnostics and the parity tests. */\n readonly name: string;\n\n /** Encode each element as an unsigned varint. */\n encodeUnsignedVarints(\n values: ArrayLike<number | bigint>,\n out: Uint8Array,\n pos: number,\n ): number;\n\n /** Zig-zag then varint-encode each element. */\n encodeSignedVarints(\n values: ArrayLike<number | bigint>,\n out: Uint8Array,\n pos: number,\n ): number;\n\n /** Pack each element as a little-endian fp32 (4 bytes). */\n packFp32Array(values: ArrayLike<number>, out: Uint8Array, pos: number): number;\n\n /** Pack each element as a little-endian fp64 (8 bytes). */\n packFp64Array(values: ArrayLike<number>, out: Uint8Array, pos: number): number;\n}\n\n// Initialised directly (not via an import side effect) so that bundlers honouring\n// the package's `\"sideEffects\": false` can never tree-shake the default away.\nlet active: Kernel = jsKernel;\n\n/** Install `kernel` as the active acceleration backend. */\nexport function setKernel(kernel: Kernel): void {\n validateKernel(kernel);\n active = kernel;\n}\n\n/** The currently active kernel (the JS kernel until something replaces it). */\nexport function getKernel(): Kernel {\n return active;\n}\n\n/** Throws if `kernel` is missing a required method — used by {@link setKernel}. */\nexport function validateKernel(kernel: Kernel): void {\n const required: (keyof Kernel)[] = [\n \"encodeUnsignedVarints\",\n \"encodeSignedVarints\",\n \"packFp32Array\",\n \"packFp64Array\",\n ];\n for (const m of required) {\n if (typeof kernel[m] !== \"function\") {\n throw new TypeError(`kernel \"${kernel?.name}\" is missing ${String(m)}()`);\n }\n }\n}\n","/**\n * Encode-side text helper.\n *\n * Two paths turn strings into UTF-8:\n *\n * - {@link utf8Length} / {@link utf8Write} — an allocation-free, two-pass writer\n * used by the encoder's in-memory fast path. `writeString` needs the byte\n * length *before* the payload (it goes into the fixlen length word), so the\n * length is scanned first and the bytes are then written straight into the\n * output buffer. This avoids `TextEncoder.encode`'s per-call WHATWG setup cost\n * plus the throwaway `Uint8Array` it allocates and the second copy into the\n * buffer — which V8 profiling showed to be the encoder's dominant cost (a\n * short string cost ~700 ns almost entirely in `TextEncoder`).\n * - {@link encodeUtf8} — a validated wrapper over the shared {@link TextEncoder},\n * still used by the streaming path where the payload is drained in chunks\n * through a small buffer.\n *\n * **Strict UTF-8 (MESSAGE_SPEC §8, CORELIB_PLAN §6.4).** A `string` is UTF-8\n * text; the encode side is always strict for this Unicode-string target. The\n * platform encoders are lossy — `TextEncoder`, and the hand-rolled fast path it\n * once mirrored, both replace an **unpaired surrogate** with `U+FFFD` — which is\n * the silent data mutation §8 forbids in every mode and direction. Both paths\n * here instead **reject** an unpaired surrogate with an `InvalidArgument`\n * {@link SofabError} (the encode-side image of the decode `INVALID` outcome), so\n * a producer can never emit bytes a strict decoder would refuse. Every *valid*\n * string — ASCII, multibyte BMP, correctly paired astral code points, embedded\n * `U+0000` — still encodes byte-for-byte as before.\n */\n\nimport { argumentError, type SofabError } from \"../errors.js\";\n\nconst UTF8 = new TextEncoder();\n\n/** An unpaired surrogate at `index` cannot be encoded as valid UTF-8 (§8/§6.4). */\nfunction unpairedSurrogate(index: number): SofabError {\n return argumentError(\n `unpaired surrogate at index ${index}: string value is not valid UTF-8`,\n );\n}\n\n/**\n * Encode `text` to UTF-8 bytes (no null terminator). Throws\n * {@link SofabError} (`ARGUMENT`) on an unpaired surrogate — `TextEncoder` alone\n * would silently substitute `U+FFFD`, the lossy mutation §8 forbids, so the\n * string is validated first and only well-formed input reaches the encoder.\n */\nexport function encodeUtf8(text: string): Uint8Array {\n // utf8Length is a full unpaired-surrogate scan that throws on the first one;\n // reuse it as the validator so both encode paths share one rule, then hand the\n // now-known-well-formed string to TextEncoder (byte-identical for valid input).\n utf8Length(text);\n return UTF8.encode(text);\n}\n\n/**\n * Number of UTF-8 bytes {@link utf8Write} will emit for `text`. For a\n * well-formed string this matches {@link TextEncoder} byte-for-byte (a paired\n * surrogate is 4 bytes). An **unpaired surrogate** is not encodable as UTF-8, so\n * it is **rejected** with {@link SofabError} (`ARGUMENT`), never counted as a\n * `U+FFFD` (3-byte) replacement (MESSAGE_SPEC §8).\n */\nexport function utf8Length(text: string): number {\n let len = 0;\n for (let i = 0; i < text.length; i++) {\n const c = text.charCodeAt(i);\n if (c < 0x80) {\n len += 1;\n } else if (c < 0x800) {\n len += 2;\n } else if (c >= 0xd800 && c <= 0xdbff) {\n // High surrogate: a following low surrogate makes a 4-byte code point;\n // otherwise it is an unpaired surrogate — reject, never collapse to U+FFFD.\n const c2 = i + 1 < text.length ? text.charCodeAt(i + 1) : 0;\n if (c2 >= 0xdc00 && c2 <= 0xdfff) {\n i++;\n len += 4;\n } else {\n throw unpairedSurrogate(i);\n }\n } else if (c >= 0xdc00 && c <= 0xdfff) {\n // Lone low surrogate (a paired one was consumed with its high half above).\n throw unpairedSurrogate(i);\n } else {\n // BMP ≥ 0x800.\n len += 3;\n }\n }\n return len;\n}\n\n/**\n * Write `text` as UTF-8 into `out` at `pos`; returns the position past the last\n * byte. The caller must have ensured {@link utf8Length}(text) bytes of room.\n * Byte-for-byte identical to {@link TextEncoder} for well-formed input; an\n * **unpaired surrogate** is rejected with {@link SofabError} (`ARGUMENT`) rather\n * than written as `U+FFFD` (MESSAGE_SPEC §8). `writeString` runs\n * {@link utf8Length} first, so the fast path rejects before any byte is emitted.\n */\nexport function utf8Write(text: string, out: Uint8Array, pos: number): number {\n for (let i = 0; i < text.length; i++) {\n let c = text.charCodeAt(i);\n if (c < 0x80) {\n out[pos++] = c;\n } else if (c < 0x800) {\n out[pos++] = 0xc0 | (c >> 6);\n out[pos++] = 0x80 | (c & 0x3f);\n } else if (c >= 0xd800 && c <= 0xdbff) {\n const c2 = i + 1 < text.length ? text.charCodeAt(i + 1) : 0;\n if (c2 >= 0xdc00 && c2 <= 0xdfff) {\n i++;\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n out[pos++] = 0xf0 | (c >> 18);\n out[pos++] = 0x80 | ((c >> 12) & 0x3f);\n out[pos++] = 0x80 | ((c >> 6) & 0x3f);\n out[pos++] = 0x80 | (c & 0x3f);\n } else {\n // Unpaired high surrogate — reject, never write U+FFFD.\n throw unpairedSurrogate(i);\n }\n } else if (c >= 0xdc00 && c <= 0xdfff) {\n // Unpaired low surrogate — reject, never write U+FFFD.\n throw unpairedSurrogate(i);\n } else {\n out[pos++] = 0xe0 | (c >> 12);\n out[pos++] = 0x80 | ((c >> 6) & 0x3f);\n out[pos++] = 0x80 | (c & 0x3f);\n }\n }\n return pos;\n}\n","/**\n * The SofaBuffers encoder.\n *\n * `OStream` writes fields into a byte buffer. Two modes:\n *\n * - **In-memory** (`new OStream()`): an auto-growing buffer; call\n * {@link OStream.bytes} for the finished message.\n * - **Streaming** (`new OStream(buffer, offset?, flush?)`): writes into a\n * caller-provided buffer and, when it fills, hands the produced bytes to the\n * `flush` sink and continues — so the buffer can be much smaller than the\n * message. `offset` reserves room at the front for a lower-layer header.\n *\n * Generated code typically writes one field per message field; the methods map\n * one-to-one onto the wire types. Problems throw {@link SofabError}.\n *\n * Nested sequences are opened with {@link OStream.writeSequenceBeginLazy}, which\n * holds the header back until the sequence proves it has content, so an\n * all-default one is omitted rather than framed empty (MESSAGE_SPEC §2). Close a\n * `struct`/`union` field or an array wrapper with {@link OStream.writeSequenceEnd}\n * and a wrapper-array *element* with {@link OStream.writeSequenceEndKeep}.\n */\n\nimport {\n ARRAY_MAX,\n FIXLEN_MAX,\n FixlenSubtype,\n ID_MAX,\n MAX_DEPTH,\n VARINT_MAX_BYTES,\n WireType,\n} from \"../constants.js\";\nimport {\n argumentError,\n bufferFullError,\n} from \"../errors.js\";\nimport {\n getKernel,\n type Kernel,\n} from \"../backend/kernel.js\";\nimport { Long } from \"../long.js\";\nimport { encodeVarint, encodeVarintLoHi, encodeVarintNum, varintSize, varintSizeNum } from \"../varint/leb128.js\";\nimport { inI64, inU64, packFp32, packFp64, toBigInt } from \"../varint/num64.js\";\nimport { zigzagEncode } from \"../varint/zigzag.js\";\nimport { encodeUtf8, utf8Length, utf8Write } from \"./fixlen.js\";\nimport type { FlushSink } from \"./sink.js\";\n\nconst DEFAULT_CAPACITY = 256;\n\n/**\n * Largest magnitude a signed scalar takes on the number fast path: its zig-zag\n * image (`|v| * 2`) must stay an exact integer, i.e. `≤ 2^53`.\n */\nconst SIGNED_FAST_MAX = 0x10_0000_0000_0000; // 2^52\n\n/**\n * Encoder for the SofaBuffers wire format. Each `write*` method appends one\n * field and maps one-to-one onto a wire type. Construct it in-memory (an\n * auto-growing buffer, read back with {@link OStream.bytes}) or in streaming\n * mode over a caller-provided buffer that drains to a {@link FlushSink} as it\n * fills, so the message can outgrow the buffer. Invalid arguments and a full\n * buffer with no sink throw {@link SofabError}.\n */\nexport class OStream {\n private buf: Uint8Array;\n private pos: number;\n private start: number;\n private readonly flushSink: FlushSink | undefined;\n private readonly canGrow: boolean;\n private depth = 0;\n /**\n * Ids of the innermost open sequences whose header has not been written yet\n * (MESSAGE_SPEC §2 lazy framing, {@link OStream.writeSequenceBeginLazy}).\n * Always a contiguous suffix of the open sequences: writing any field commits\n * the whole run at once, so {@link OStream.writeSequenceEnd} can drop the\n * innermost one by dropping the last entry. Held-back ids are encoder state,\n * never buffer content, so a flush can never split a run.\n *\n * Storage plus an explicit count rather than `push`/`pop`, so the slots are\n * reused across messages (no allocation on a pooled encoder) and so\n * {@link OStream.commitPending} can zero the count *before* it writes.\n *\n * The array grows on demand and is bounded only by `MAX_DEPTH` — there is no\n * fixed hold-back window and hence no eager-framing fallback, which is what\n * CORELIB_PLAN §6 (\"How deep the hold-back reaches\") demands of an\n * implementation that can allocate: canonical output at *every* depth.\n */\n private readonly pending: number[] = [];\n /** Valid entries in {@link OStream.pending}. */\n private nPending = 0;\n private kernel: Kernel;\n\n /** In-memory encoder backed by an auto-growing buffer. */\n constructor();\n /** Streaming encoder over a caller buffer, optionally draining to `flush`. */\n constructor(buffer: Uint8Array, offset?: number, flush?: FlushSink);\n constructor(buffer?: Uint8Array, offset = 0, flush?: FlushSink) {\n this.kernel = getKernel();\n if (buffer === undefined) {\n this.buf = new Uint8Array(DEFAULT_CAPACITY);\n this.start = 0;\n this.pos = 0;\n this.flushSink = undefined;\n this.canGrow = true;\n } else {\n if (offset < 0 || offset > buffer.length) {\n throw argumentError(`offset ${offset} out of range`);\n }\n this.buf = buffer;\n this.start = offset;\n this.pos = offset;\n this.flushSink = flush;\n this.canGrow = false;\n }\n }\n\n /** Bytes currently held in the buffer (since construction or the last flush). */\n get bytesUsed(): number {\n return this.pos - this.start;\n }\n\n /**\n * The encoded message so far, as a view into the working buffer.\n * Meaningful for the in-memory mode; in streaming mode it is only the\n * not-yet-flushed tail. The view is valid until the next write.\n */\n bytes(): Uint8Array {\n return this.buf.subarray(this.start, this.pos);\n }\n\n /** Drain buffered bytes to the flush sink (no-op without one). */\n flush(): void {\n if (this.flushSink && this.pos > this.start) {\n this.flushSink(this.buf.subarray(this.start, this.pos));\n this.pos = this.start;\n }\n }\n\n /**\n * Install a fresh output buffer to write into, mid-stream. Intended for the\n * streaming (flush-sink) mode: call it from inside your flush callback to hand\n * the encoder a new buffer for the next batch of bytes, so encoding continues\n * without interruption. `offset` reserves space at the front of the new\n * buffer. Any not-yet-flushed bytes in the old buffer are dropped, so\n * {@link flush} first (the flush callback fires before you swap).\n */\n setBuffer(buffer: Uint8Array, offset = 0): void {\n if (offset < 0 || offset > buffer.length) {\n throw argumentError(`offset ${offset} out of range`);\n }\n this.buf = buffer;\n this.start = offset;\n this.pos = offset;\n }\n\n /**\n * Rewind the encoder to empty, reusing the existing buffer. Lets a caller pool\n * one OStream across many messages instead of allocating a fresh buffer per\n * encode. Any view previously returned by {@link bytes} is invalidated.\n */\n reset(): void {\n this.pos = this.start;\n this.depth = 0;\n this.nPending = 0;\n }\n\n // --- scalars ------------------------------------------------------------\n\n /** Write an unsigned integer field. */\n writeUnsigned(id: number, value: number | bigint): void {\n // Fast path: a small non-negative integer never touches bigint.\n if (typeof value === \"number\" && value >= 0 && value <= Number.MAX_SAFE_INTEGER && Number.isInteger(value)) {\n this.header(id, WireType.Unsigned);\n this.putVarintNum(value);\n return;\n }\n const v = toBigInt(value);\n if (!inU64(v)) throw argumentError(`unsigned value ${v} out of 64-bit range`);\n this.header(id, WireType.Unsigned);\n this.putVarint(v);\n }\n\n /** Write a signed integer field (zig-zag encoded). */\n writeSigned(id: number, value: number | bigint): void {\n // Fast path: a small-magnitude integer zig-zags within number precision.\n if (typeof value === \"number\" && value >= -SIGNED_FAST_MAX && value <= SIGNED_FAST_MAX && Number.isInteger(value)) {\n this.header(id, WireType.Signed);\n this.putVarintNum(value >= 0 ? value * 2 : -value * 2 - 1);\n return;\n }\n const v = toBigInt(value);\n if (!inI64(v)) throw argumentError(`signed value ${v} out of 64-bit range`);\n this.header(id, WireType.Signed);\n this.putVarint(zigzagEncode(v));\n }\n\n /** Write a boolean field (encoded as the unsigned value 0 or 1). */\n writeBoolean(id: number, value: boolean): void {\n this.header(id, WireType.Unsigned);\n this.putVarintNum(value ? 1 : 0);\n }\n\n /** Write an IEEE-754 32-bit float field. */\n writeFp32(id: number, value: number): void {\n this.fixlenHead(id, 4, FixlenSubtype.Fp32);\n this.ensure(4);\n this.pos = packFp32(this.buf, this.pos, value);\n }\n\n /** Write an IEEE-754 64-bit double field. */\n writeFp64(id: number, value: number): void {\n this.fixlenHead(id, 8, FixlenSubtype.Fp64);\n this.ensure(8);\n this.pos = packFp64(this.buf, this.pos, value);\n }\n\n /** Write a UTF-8 string field. */\n writeString(id: number, text: string): void {\n // Fast path (in-memory, growable buffer): scan the UTF-8 byte length, write\n // the fixlen header, then encode the characters straight into the output\n // buffer. This skips `TextEncoder.encode`'s per-call setup + throwaway array\n // + second copy — the encoder's dominant cost on string-heavy messages.\n if (this.canGrow) {\n const byteLen = utf8Length(text);\n if (byteLen > FIXLEN_MAX) {\n throw argumentError(`fixlen length ${byteLen} exceeds ${FIXLEN_MAX}`);\n }\n this.fixlenHead(id, byteLen, FixlenSubtype.String);\n this.ensure(byteLen);\n this.pos = utf8Write(text, this.buf, this.pos);\n return;\n }\n // Streaming path: the payload may outgrow a fixed caller buffer, so keep the\n // chunk-draining `writeRaw` route (needs the bytes materialised up front).\n this.writeFixlen(id, encodeUtf8(text), FixlenSubtype.String);\n }\n\n /** Write a blob (arbitrary bytes) field. */\n writeBlob(id: number, data: Uint8Array): void {\n this.writeFixlen(id, data, FixlenSubtype.Blob);\n }\n\n /** Write a fixed-length field of the given subtype from raw bytes. */\n writeFixlen(id: number, data: Uint8Array, subtype: FixlenSubtype): void {\n if (data.length > FIXLEN_MAX) {\n throw argumentError(`fixlen length ${data.length} exceeds ${FIXLEN_MAX}`);\n }\n this.fixlenHead(id, data.length, subtype);\n this.writeRaw(data);\n }\n\n // --- arrays -------------------------------------------------------------\n\n /** Write an array of unsigned integers (each a varint). */\n writeUnsignedArray(id: number, values: ArrayLike<number | bigint>): void {\n this.arrayHead(id, WireType.ArrayUnsigned, values.length);\n if (this.canGrow) {\n this.ensure(values.length * VARINT_MAX_BYTES);\n this.pos = this.kernel.encodeUnsignedVarints(values, this.buf, this.pos);\n } else {\n for (let i = 0; i < values.length; i++) {\n const v = toBigInt(values[i]!);\n if (!inU64(v)) throw argumentError(`unsigned value ${v} out of range`);\n this.ensure(VARINT_MAX_BYTES);\n this.pos = encodeVarint(v, this.buf, this.pos);\n }\n }\n }\n\n /** Write an array of signed integers (each zig-zag + varint). */\n writeSignedArray(id: number, values: ArrayLike<number | bigint>): void {\n this.arrayHead(id, WireType.ArraySigned, values.length);\n if (this.canGrow) {\n this.ensure(values.length * VARINT_MAX_BYTES);\n this.pos = this.kernel.encodeSignedVarints(values, this.buf, this.pos);\n } else {\n for (let i = 0; i < values.length; i++) {\n const v = toBigInt(values[i]!);\n if (!inI64(v)) throw argumentError(`signed value ${v} out of range`);\n this.ensure(VARINT_MAX_BYTES);\n this.pos = encodeVarint(zigzagEncode(v), this.buf, this.pos);\n }\n }\n }\n\n /**\n * Write an unsigned 64-bit array from {@link Long}[] — the `bigint`-free path.\n * Produces the identical wire to {@link writeUnsignedArray}; reads each Long's\n * 32-bit halves directly, so no `bigint` is created per element.\n */\n writeUnsignedArrayLong(id: number, values: readonly Long[]): void {\n this.arrayHead(id, WireType.ArrayUnsigned, values.length);\n this.ensure(values.length * VARINT_MAX_BYTES);\n let pos = this.pos;\n const buf = this.buf;\n for (let i = 0; i < values.length; i++) {\n const v = values[i]!;\n pos = encodeVarintLoHi(v.low, v.high, buf, pos);\n }\n this.pos = pos;\n }\n\n /**\n * Write a signed 64-bit array (zig-zag) from {@link Long}[] — the `bigint`-free\n * path. Zig-zag `(n << 1) ^ (n >> 63)` is computed on the lo/hi pair.\n */\n writeSignedArrayLong(id: number, values: readonly Long[]): void {\n this.arrayHead(id, WireType.ArraySigned, values.length);\n this.ensure(values.length * VARINT_MAX_BYTES);\n let pos = this.pos;\n const buf = this.buf;\n for (let i = 0; i < values.length; i++) {\n const v = values[i]!;\n const lo = v.low;\n const hi = v.high;\n const sgn = (-(hi >>> 31)) >>> 0; // all ones when negative, else zero\n const zLo = (((lo << 1) >>> 0) ^ sgn) >>> 0;\n const zHi = ((((hi << 1) | (lo >>> 31)) >>> 0) ^ sgn) >>> 0;\n pos = encodeVarintLoHi(zLo, zHi, buf, pos);\n }\n this.pos = pos;\n }\n\n /** Write an array of IEEE-754 32-bit floats. */\n writeFp32Array(id: number, values: ArrayLike<number>): void {\n this.arrayHead(id, WireType.ArrayFixlen, values.length);\n // A fixlen array always carries its fixlen_word — even when empty (§4.8) —\n // so an empty fp32 array stays distinct from an empty fp64 one. The payload\n // loop below simply runs zero times: the field is [ header ][ count = 0 ]\n // [ fixlen_word ] with no elements.\n this.putVarintNum(4 * 8 + FixlenSubtype.Fp32);\n if (this.canGrow) {\n this.ensure(values.length * 4);\n this.pos = this.kernel.packFp32Array(values, this.buf, this.pos);\n } else {\n for (let i = 0; i < values.length; i++) {\n this.ensure(4);\n this.pos = packFp32(this.buf, this.pos, values[i]!);\n }\n }\n }\n\n /**\n * Write an fp32 array from its raw little-endian element payload. The bytes\n * are emitted verbatim — no per-element `setFloat32` — so a signaling NaN\n * survives bit-for-bit (§4.6), which {@link writeFp32Array} cannot guarantee\n * because it re-quantizes each JS `number`. `payload.length` must be a\n * multiple of 4; the element count is `payload.length / 4`.\n */\n writeFp32ArrayRaw(id: number, payload: Uint8Array): void {\n if ((payload.length & 3) !== 0) {\n throw argumentError(\n `fp32 array payload length ${payload.length} is not a multiple of 4`,\n );\n }\n this.arrayHead(id, WireType.ArrayFixlen, payload.length >> 2);\n this.putVarintNum(4 * 8 + FixlenSubtype.Fp32);\n this.writeRaw(payload);\n }\n\n /** Write an array of IEEE-754 64-bit doubles. */\n writeFp64Array(id: number, values: ArrayLike<number>): void {\n this.arrayHead(id, WireType.ArrayFixlen, values.length);\n // A fixlen array always carries its fixlen_word — even when empty (§4.8) —\n // so an empty fp64 array stays distinct from an empty fp32 one. The payload\n // loop below simply runs zero times: the field is [ header ][ count = 0 ]\n // [ fixlen_word ] with no elements.\n this.putVarintNum(8 * 8 + FixlenSubtype.Fp64);\n if (this.canGrow) {\n this.ensure(values.length * 8);\n this.pos = this.kernel.packFp64Array(values, this.buf, this.pos);\n } else {\n for (let i = 0; i < values.length; i++) {\n this.ensure(8);\n this.pos = packFp64(this.buf, this.pos, values[i]!);\n }\n }\n }\n\n // --- sequences ----------------------------------------------------------\n\n /**\n * Open a nested sequence (a fresh id scope) whose header is **held back**\n * until the sequence turns out to have content.\n *\n * MESSAGE_SPEC §2 omits a sequence-typed field whose value equals its declared\n * default, and \"not one child was written\" is exactly that condition —\n * evaluated per child field, recursively, for free, because the message layer\n * already omits every child equal to its default. A sequence closed with\n * nothing in it therefore emits **nothing** instead of a two-byte empty frame,\n * and an all-default message becomes the empty byte string. No byte image is\n * ever compared, so in-memory layout never enters the decision.\n *\n * This is the only way to open a sequence. How it closes decides whether a\n * contentless one survives: {@link OStream.writeSequenceEnd} drops it,\n * {@link OStream.writeSequenceEndKeep} forces the frame out.\n */\n writeSequenceBeginLazy(id: number): void {\n // §4.9/§6.2: refuse to open more than MAX_DEPTH nested sequences. This is a\n // bound on a caller-supplied value, so it reports Argument — the category\n // the C and Java ports use for the same check.\n if (this.depth >= MAX_DEPTH) {\n throw argumentError(`nesting exceeds MAX_DEPTH (${MAX_DEPTH})`);\n }\n // Validate here, not at commit time: the header may never be written, and a\n // bad id must still be rejected at the call that supplied it.\n if (id < 0 || id > ID_MAX || !Number.isInteger(id)) {\n throw argumentError(`field id ${id} out of range 0..${ID_MAX}`);\n }\n // No hold-back window and so no eager fallback: the run is an ordinary\n // growable array already bounded by MAX_DEPTH, so it is *always* a\n // contiguous suffix of the open sequences and every sequence stays\n // canonical however deep it nests. That is what CORELIB_PLAN §6 (\"How deep\n // the hold-back reaches\") requires of an implementation that can allocate;\n // only a heap-free profile may bound the run and frame eagerly past it.\n this.pending[this.nPending++] = id;\n this.depth++;\n }\n\n /**\n * Close the current sequence, letting it **vanish** if it received no content.\n *\n * Use it wherever absence encodes the same value as an empty frame: a\n * `struct`/`union` field, and an array field whose declared `default` is the\n * empty collection (MESSAGE_SPEC §2). Where the frame must be visible, close\n * with {@link OStream.writeSequenceEndKeep} instead.\n *\n * An end with no matching begin is not rejected: the encoder writes what it is\n * told, and the resulting bytes are then malformed, which is the decoder's\n * verdict to make. No other port refuses it. The depth counter stops at zero\n * so the MAX_DEPTH check on begin cannot be fooled by an underflow.\n */\n writeSequenceEnd(): void {\n if (this.nPending !== 0) {\n // The innermost open sequence is the last held-back one (the run is a\n // suffix of the open sequences), and it never got content: drop it —\n // header and end marker both.\n this.nPending--;\n if (this.depth > 0) this.depth--;\n return;\n }\n this.ensure(1);\n this.buf[this.pos++] = WireType.SequenceEnd; // id 0, type 7 -> byte 0x07\n if (this.depth > 0) this.depth--;\n }\n\n /**\n * Close the current sequence, **keeping** its frame even when it received no\n * content.\n *\n * Behaves like a write: it first emits any held-back headers — this frame's\n * and every enclosing one's — and then the end marker, so an empty sequence\n * reaches the wire as `begin` + `end`.\n *\n * Required wherever the frame carries information beyond its contents:\n * - a **wrapper-array element** (`struct`/`union`/nested row): element\n * presence is what carries a dynamic array's length — *highest present id +\n * 1* (MESSAGE_SPEC §5.1) — so dropping an all-default element would change\n * the decoded length, not just the bytes;\n * - an array field already known to **differ from a non-empty declared\n * `default`**: absence would reconstruct that default, so the empty frame is\n * the only encoding of \"explicitly empty\" (§2, §3).\n *\n * The two failure directions are not symmetric, which is why this is the safe\n * choice when in doubt: using it where {@link OStream.writeSequenceEnd} would\n * do costs one non-canonical empty frame that a decoder normalizes away, while\n * the reverse silently changes an array's length.\n */\n writeSequenceEndKeep(): void {\n if (this.nPending !== 0) this.commitPending();\n this.ensure(1);\n this.buf[this.pos++] = WireType.SequenceEnd; // id 0, type 7 -> byte 0x07\n if (this.depth > 0) this.depth--;\n }\n\n // --- internals ----------------------------------------------------------\n\n /** Ensure exactly `value`'s varint size, then write it (bigint path). */\n private putVarint(value: bigint): void {\n this.ensure(varintSize(value));\n this.pos = encodeVarint(value, this.buf, this.pos);\n }\n\n /** Ensure exactly `value`'s varint size, then write it (number fast path). */\n private putVarintNum(value: number): void {\n this.ensure(varintSizeNum(value));\n this.pos = encodeVarintNum(value, this.buf, this.pos);\n }\n\n /**\n * Write a field header, the `(id << 3) | wireType` tag, as a varint.\n *\n * This is the single choke point every field write passes through — the\n * scalar, fixlen, float, string, blob and both array writers all reach the\n * wire through `header` / `fixlenHead` / `arrayHead`, and `fixlenHead` and\n * `arrayHead` are themselves nothing but `header` plus a follow-up varint. So\n * this is also where a held-back sequence run is committed: the field about to\n * be written is content, which means every enclosing sequence is non-default\n * and must be framed after all (MESSAGE_SPEC §2).\n *\n * The only writers that do *not* pass through here are the two sequence\n * closers, which must not commit ({@link OStream.writeSequenceEnd}) or commit\n * explicitly ({@link OStream.writeSequenceEndKeep}), and\n * {@link OStream.writeSequenceBeginLazy}, which writes no byte at all.\n */\n private header(id: number, type: WireType): void {\n if (id < 0 || id > ID_MAX || !Number.isInteger(id)) {\n throw argumentError(`field id ${id} out of range 0..${ID_MAX}`);\n }\n if (this.nPending !== 0) this.commitPending();\n // (id << 3) | type as a number: id ≤ 2^31-1, so the word stays ≤ 2^34.\n this.putVarintNum(id * 8 + type);\n }\n\n /**\n * Write out the held-back sequence headers, **outermost first**, and clear the\n * run. Runs at most once per non-default sequence, never per field — the cost\n * on the hot path is the single `nPending` test in {@link header}.\n *\n * The count is zeroed before the first byte goes out, so a write re-entered\n * from a flush sink cannot emit the same run twice.\n */\n private commitPending(): void {\n const n = this.nPending;\n // Zero the count *first*, before a single byte is written. Deliberate, and\n // the ordering matters: the writes below can fill the buffer and call the\n // flush sink, which is caller code and may re-enter this encoder (that is\n // what `setBuffer` is for, and a sink is free to write a framing field of\n // its own). A re-entrant `header()` must find an empty run, or it would\n // emit these same ids a second time. The loop counts with the local `n`, so\n // clearing the field does not cut short the run it is already emitting.\n this.nPending = 0;\n for (let i = 0; i < n; i++) {\n this.putVarintNum(this.pending[i]! * 8 + WireType.SequenceStart);\n }\n }\n\n private fixlenHead(id: number, length: number, subtype: FixlenSubtype): void {\n this.header(id, WireType.Fixlen);\n this.putVarintNum(length * 8 + subtype);\n }\n\n private arrayHead(id: number, type: WireType, count: number): void {\n // §4.7/§4.8: element_count range is 0..ARRAY_MAX; a zero-count array is a\n // valid, fully-specified empty array on the wire.\n if (count < 0 || count > ARRAY_MAX) {\n throw argumentError(`array count ${count} out of range 0..${ARRAY_MAX}`);\n }\n this.header(id, type);\n this.putVarintNum(count);\n }\n\n /** Copy `data` out, flushing/growing as needed (large payloads stay chunked). */\n private writeRaw(data: Uint8Array): void {\n let off = 0;\n while (off < data.length) {\n const room = this.ensureSome(data.length - off);\n this.buf.set(data.subarray(off, off + room), this.pos);\n this.pos += room;\n off += room;\n }\n }\n\n /** Ensure `n` contiguous bytes are free at `pos`; returns `pos` for chaining. */\n private ensure(n: number): number {\n if (this.buf.length - this.pos >= n) return this.pos;\n this.flush();\n if (this.buf.length - this.pos >= n) return this.pos;\n if (this.canGrow) {\n this.growTo(this.pos + n);\n return this.pos;\n }\n throw bufferFullError(\n `output buffer full: need ${n} more bytes, have ${this.buf.length - this.pos}`,\n );\n }\n\n /** Ensure *some* room (up to `want`); returns how many bytes are available. */\n private ensureSome(want: number): number {\n let room = this.buf.length - this.pos;\n if (room === 0) {\n this.flush();\n room = this.buf.length - this.pos;\n if (room === 0) {\n if (this.canGrow) {\n this.growTo(this.pos + want);\n room = this.buf.length - this.pos;\n } else {\n throw bufferFullError(\"output buffer full\");\n }\n }\n }\n return Math.min(room, want);\n }\n\n private growTo(needed: number): void {\n let cap = this.buf.length * 2;\n if (cap < needed) cap = needed;\n const next = new Uint8Array(cap);\n next.set(this.buf.subarray(0, this.pos));\n this.buf = next;\n }\n}\n","/**\n * The contiguous-buffer fast path: \"advance a pointer over a whole message\".\n *\n * When the entire message is already in one {@link Uint8Array} (the common\n * non-streaming case) there is no need for the resumable, byte-at-a-time state\n * machine in {@link \"./state\"}. This decoder keeps a single read cursor and\n * walks it straight to the end, decoding each field inline — the technique\n * Protocol Buffers uses for its fast path.\n *\n * Two things make it much faster than the streaming decoder:\n *\n * - **No `bigint` in the varint hot loop.** Each varint is accumulated into two\n * 32-bit JavaScript *numbers* (`lo` / `hi`); a `bigint` is materialised only\n * once per 64-bit *value* (and never at all for ids, lengths and counts,\n * which stay numbers). The streaming reader, by contrast, does a `bigint`\n * shift-and-or for every single byte.\n * - **No per-byte state reload.** The field type is dispatched once and the\n * whole field is consumed in place, instead of re-entering a `switch` on a\n * saved state enum for each byte.\n *\n * String / blob payloads are handed to the visitor as a single zero-copy\n * `subarray` view (one call, offset 0) rather than streamed in pieces. The\n * decoder validates exactly what the streaming path does and reports the same\n * three-valued outcome (MESSAGE_SPEC §7): it throws a {@link SofabError} with\n * code `INVALID_MSG` on malformed input, and `INCOMPLETE` when the buffer ends\n * inside a field — a truncated varint / payload / array, or an unclosed\n * sequence detected at the end of the buffer.\n */\n\nimport {\n ARRAY_MAX,\n ArrayKind,\n FIXLEN_MAX,\n FixlenSubtype,\n ID_MAX,\n MAX_DEPTH,\n WireType,\n} from \"../constants.js\";\nimport {\n incompleteError,\n invalidMsgError,\n limitExceededError,\n} from \"../errors.js\";\nimport { zigzagDecode } from \"../varint/zigzag.js\";\nimport type { DecodeLimits } from \"./limits.js\";\nimport type { Visitor } from \"./istream.js\";\n\nconst TWO32 = 0x1_0000_0000; // 2^32, for combining the 32-bit halves\n\n/** Decode a complete message held in one contiguous buffer. */\nexport function decodeContiguous(\n buf: Uint8Array,\n root: Visitor,\n limits?: DecodeLimits,\n): void {\n new FastDecoder(buf, limits).run(root);\n}\n\nclass FastDecoder {\n private readonly buf: Uint8Array;\n private readonly view: DataView;\n private readonly n: number;\n private p = 0;\n\n // Last varint, as two unsigned 32-bit halves (see readVarint).\n private lo = 0;\n private hi = 0;\n\n // Opt-in decode limits (corelib-ts#38); an unset limit is Infinity (no cap).\n private readonly maxArrayCount: number;\n private readonly maxStringLen: number;\n private readonly maxBlobLen: number;\n\n constructor(buf: Uint8Array, limits?: DecodeLimits) {\n this.buf = buf;\n this.n = buf.length;\n this.view = new DataView(buf.buffer, buf.byteOffset, buf.length);\n this.maxArrayCount = limits?.maxArrayCount ?? Infinity;\n this.maxStringLen = limits?.maxStringLen ?? Infinity;\n this.maxBlobLen = limits?.maxBlobLen ?? Infinity;\n }\n\n run(root: Visitor): void {\n const stack: Visitor[] = [root];\n let top = root;\n\n while (this.p < this.n) {\n this.readVarint();\n const type = this.lo & 7;\n\n if (type === WireType.SequenceEnd) {\n if (stack.length <= 1) throw invalidMsgError(\"unbalanced sequence end\");\n top.sequenceEnd?.();\n stack.pop();\n top = stack[stack.length - 1]!;\n continue;\n }\n\n const id = this.upper();\n if (id > ID_MAX) throw invalidMsgError(`field id ${id} out of range`);\n\n switch (type) {\n case WireType.Unsigned: {\n this.readVarint();\n top.unsigned?.(id, this.unsignedValue());\n break;\n }\n\n case WireType.Signed: {\n this.readVarint();\n top.signed?.(id, this.signedValue());\n break;\n }\n\n case WireType.Fixlen: {\n this.readVarint();\n const sub = this.lo & 7;\n const len = this.upper();\n if (sub > FixlenSubtype.Blob) throw invalidMsgError(`invalid fixlen subtype ${sub}`);\n if (len > FIXLEN_MAX) throw invalidMsgError(\"fixlen length out of range\");\n if (sub === FixlenSubtype.String && len > this.maxStringLen) {\n throw limitExceededError(`string length ${len} exceeds maxStringLen ${this.maxStringLen}`);\n }\n if (sub === FixlenSubtype.Blob && len > this.maxBlobLen) {\n throw limitExceededError(`blob length ${len} exceeds maxBlobLen ${this.maxBlobLen}`);\n }\n if (sub === FixlenSubtype.Fp32 || sub === FixlenSubtype.Fp64) {\n const want = sub === FixlenSubtype.Fp32 ? 4 : 8;\n if (len !== want) throw invalidMsgError(\"fixlen float length mismatch\");\n if (sub === FixlenSubtype.Fp32) {\n // Hand the visitor the raw 4 wire bytes only when it opts in\n // (Visitor.fp32Raw): `value` (a double) cannot carry an fp32\n // signaling NaN faithfully (§4.6), but the per-value view is pure\n // waste for the common value-only consumer, so it is not allocated.\n const p = this.p;\n const value = this.readFp32();\n top.fp32?.(id, value, top.fp32Raw ? this.buf.subarray(p, p + 4) : undefined);\n } else {\n // Read into a local *before* the optional call: `v?.m(read())`\n // would short-circuit and never advance when fp64 is absent.\n const value = this.readFp64();\n top.fp64?.(id, value);\n }\n } else {\n const chunk = this.take(len);\n if (sub === FixlenSubtype.String) top.string?.(id, len, 0, chunk);\n else top.blob?.(id, len, 0, chunk);\n }\n break;\n }\n\n case WireType.ArrayUnsigned: {\n const count = this.arrayCount();\n top.arrayBegin?.(id, ArrayKind.Unsigned, count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n top.arrayUnsigned?.(id, i, this.unsignedValue());\n }\n top.arrayEnd?.(id);\n break;\n }\n\n case WireType.ArraySigned: {\n const count = this.arrayCount();\n top.arrayBegin?.(id, ArrayKind.Signed, count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n top.arraySigned?.(id, i, this.signedValue());\n }\n top.arrayEnd?.(id);\n break;\n }\n\n case WireType.ArrayFixlen: {\n const count = this.arrayCount();\n // §4.8: a fixlen array always carries its element-length word — even\n // when empty — so the true element kind (fp32 vs fp64) stays known.\n // When count == 0 the payload loops below simply run zero times.\n this.readVarint();\n const sub = this.lo & 7;\n const size = this.upper();\n let kind: ArrayKind;\n if (sub === FixlenSubtype.Fp32 && size === 4) kind = ArrayKind.Fp32;\n else if (sub === FixlenSubtype.Fp64 && size === 8) kind = ArrayKind.Fp64;\n else throw invalidMsgError(\"invalid fixlen array element type\");\n top.arrayBegin?.(id, kind, count);\n // Read each element into a local *before* the optional call: with an\n // absent handler, `v?.m(read())` would short-circuit and never advance.\n if (kind === ArrayKind.Fp32) {\n // Hoist the opt-in check out of the loop: a value-only consumer\n // (Visitor.fp32Raw unset) allocates no per-element views.\n const wantRaw = top.fp32Raw === true;\n for (let i = 0; i < count; i++) {\n const p = this.p;\n const value = this.readFp32();\n top.arrayFp32?.(id, i, value, wantRaw ? this.buf.subarray(p, p + 4) : undefined);\n }\n } else {\n for (let i = 0; i < count; i++) {\n const value = this.readFp64();\n top.arrayFp64?.(id, i, value);\n }\n }\n top.arrayEnd?.(id);\n break;\n }\n\n case WireType.SequenceStart: {\n // §4.9/§6.2: reject nesting deeper than MAX_DEPTH. The stack holds the\n // root plus one entry per open sequence, so depth is stack.length - 1.\n if (stack.length - 1 >= MAX_DEPTH) {\n throw invalidMsgError(`nesting exceeds MAX_DEPTH (${MAX_DEPTH})`);\n }\n const child = top.sequenceBegin?.(id);\n top = child ?? top;\n stack.push(top);\n break;\n }\n\n default:\n throw invalidMsgError(`invalid wire type ${type}`);\n }\n }\n\n if (stack.length > 1) throw incompleteError(\"truncated message: unbalanced sequence\");\n }\n\n // --- field helpers ------------------------------------------------------\n\n /** Read and validate an array count word (0..ARRAY_MAX; §4.7/§4.8). */\n private arrayCount(): number {\n this.readVarint();\n const count = this.num();\n if (count > ARRAY_MAX) throw invalidMsgError(\"array count out of range\");\n if (count > this.maxArrayCount) {\n throw limitExceededError(`array count ${count} exceeds maxArrayCount ${this.maxArrayCount}`);\n }\n return count;\n }\n\n /** Hand back a zero-copy view of the next `len` bytes, advancing the cursor. */\n private take(len: number): Uint8Array {\n const start = this.p;\n const end = start + len;\n if (end > this.n) throw incompleteError(\"truncated fixlen payload\");\n this.p = end;\n return this.buf.subarray(start, end);\n }\n\n private readFp32(): number {\n const p = this.p;\n if (p + 4 > this.n) throw incompleteError(\"truncated fp32\");\n this.p = p + 4;\n return this.view.getFloat32(p, true);\n }\n\n private readFp64(): number {\n const p = this.p;\n if (p + 8 > this.n) throw incompleteError(\"truncated fp64\");\n this.p = p + 8;\n return this.view.getFloat64(p, true);\n }\n\n // --- varint reading -----------------------------------------------------\n\n /** The last varint's full value as a `bigint` (64-bit fidelity). */\n private big(): bigint {\n return this.hi === 0\n ? BigInt(this.lo >>> 0)\n : (BigInt(this.hi >>> 0) << 32n) | BigInt(this.lo >>> 0);\n }\n\n /**\n * The last varint as an unsigned value, number-first: a `number` when it fits\n * exactly (`≤ 2^53-1` — all ids, u8..u32 and small u64s), a `bigint` only\n * beyond that. Skips the per-value bigint allocation on the common path.\n */\n private unsignedValue(): number | bigint {\n const hi = this.hi >>> 0; // unsigned: hi's bit 31 must not read as negative\n return hi <= 0x1fffff ? hi * TWO32 + (this.lo >>> 0) : this.big();\n }\n\n /** The last zig-zag varint as a signed value, number-first (see {@link unsignedValue}). */\n private signedValue(): number | bigint {\n const hi = this.hi >>> 0;\n if (hi <= 0x1fffff) {\n const r = hi * TWO32 + (this.lo >>> 0); // raw zig-zag, ≤ 2^53-1\n return r % 2 === 0 ? r / 2 : -(r + 1) / 2;\n }\n return zigzagDecode(this.big());\n }\n\n /** The last varint's value as a JS number — exact for ids/lengths/counts. */\n private num(): number {\n return this.hi * TWO32 + (this.lo >>> 0);\n }\n\n /** The last varint with its low 3 tag bits stripped (`value >> 3`). */\n private upper(): number {\n // value >> 3 without losing the high bits: drop 3 bits, carry hi's low 3.\n return (this.hi >>> 0) * (TWO32 / 8) + (this.lo >>> 3);\n }\n\n /**\n * Decode one LEB128 varint at the cursor into {@link lo} / {@link hi} (each an\n * unsigned 32-bit half), advancing {@link p}. Throws on truncation or a value\n * spilling past 64 bits (>10 bytes). Unrolled, number-only — no `bigint`.\n */\n private readVarint(): void {\n const buf = this.buf;\n const n = this.n;\n let p = this.p;\n let b: number;\n let lo: number;\n let hi = 0;\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo = b & 0x7f;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 7;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 14;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 21;\n if (b < 0x80) return this.set(lo, 0, p);\n\n // 5th byte straddles the 32-bit boundary: 4 bits to lo, 3 bits to hi.\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x0f) << 28;\n hi = (b >> 4) & 0x07;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 3;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 10;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 17;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 24;\n if (b < 0x80) return this.set(lo, hi, p);\n\n // 10th byte: only bit 63 (1 payload bit) remains below 64; any higher\n // payload bit, or a continuation into an 11th byte, is a >64-bit overflow.\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n if (((b & 0x7f) >> 1) !== 0) throw invalidMsgError(\"varint overflow\");\n hi |= (b & 0x7f) << 31;\n if (b < 0x80) return this.set(lo, hi, p);\n\n throw invalidMsgError(\"varint overflow\");\n }\n\n private set(lo: number, hi: number, p: number): void {\n this.lo = lo;\n this.hi = hi;\n this.p = p;\n }\n}\n","/**\n * The resumable decode state machine.\n *\n * `DecoderState` consumes input one byte at a time and never needs to buffer\n * more than a single varint (≤10 bytes) or one fixlen element (≤8 bytes), so it\n * can be fed arbitrarily small chunks: every multi-byte construct saves its\n * progress in instance fields and continues on the next {@link push}. Large\n * string / blob payloads are streamed straight to the visitor in pieces, and\n * array elements are emitted as they arrive — nothing is materialised whole.\n */\n\nimport {\n ARRAY_MAX,\n ArrayKind,\n DecodeStatus,\n FIXLEN_MAX,\n FixlenSubtype,\n ID_MAX,\n MAX_DEPTH,\n VARINT_MAX_BYTES,\n WireType,\n} from \"../constants.js\";\nimport { invalidMsgError, limitExceededError } from \"../errors.js\";\nimport { unpackFp32, unpackFp64 } from \"../varint/num64.js\";\nimport { zigzagDecode } from \"../varint/zigzag.js\";\nimport type { DecodeLimits } from \"./limits.js\";\nimport type { Visitor } from \"./istream.js\";\n\nconst enum S {\n Header,\n ScalarU,\n ScalarS,\n FixlenLen,\n FixlenFp,\n FixlenBytes,\n ArrayCount,\n ArrayUElem,\n ArraySElem,\n ArrayElemLen,\n ArrayFp,\n}\n\nconst TWO32 = 0x1_0000_0000; // 2^32, for combining the 32-bit halves\n\nexport class DecoderState {\n private state = S.Header;\n private stack: Visitor[] = [];\n\n // current field\n private id = 0;\n\n // Resumable varint accumulator, as two unsigned 32-bit halves (vLo / vHi)\n // plus the byte count so far. Number-only: a `bigint` is built once, at the\n // end, and only for full 64-bit *values* (not ids, lengths or counts).\n private vLo = 0;\n private vHi = 0;\n private vBytes = 0;\n private vComplete = false;\n\n // fixlen / fp scratch\n private scratch = new Uint8Array(8);\n private need = 0;\n private have = 0;\n\n // fixlen string/blob streaming\n private fixSub: FixlenSubtype = FixlenSubtype.String;\n private fixLen = 0;\n private fixOff = 0;\n\n // array\n private arrKind: ArrayKind = ArrayKind.Unsigned;\n private arrIsFixlen = false;\n private arrCount = 0;\n private arrIndex = 0;\n\n // Opt-in decode limits (corelib-ts#38); an unset limit is Infinity (no cap).\n // Enforced at the count / length header, before any payload is streamed to\n // the visitor, so an over-limit string/blob is never fed chunk-by-chunk.\n private readonly maxArrayCount: number;\n private readonly maxStringLen: number;\n private readonly maxBlobLen: number;\n\n constructor(limits?: DecodeLimits) {\n this.maxArrayCount = limits?.maxArrayCount ?? Infinity;\n this.maxStringLen = limits?.maxStringLen ?? Infinity;\n this.maxBlobLen = limits?.maxBlobLen ?? Infinity;\n }\n\n /** Feed `input` to the machine, dispatching to `root` and its sub-visitors. */\n push(input: Uint8Array, root: Visitor): void {\n if (this.stack.length === 0) this.stack.push(root);\n let i = 0;\n const n = input.length;\n\n while (i < n) {\n switch (this.state) {\n case S.Header: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const type = this.vTag();\n if (type === WireType.SequenceEnd) {\n this.resetVarint();\n this.endSequence();\n break;\n }\n const id = this.vUpper();\n this.resetVarint();\n if (id > ID_MAX) throw invalidMsgError(`field id ${id} out of range`);\n this.id = id;\n this.dispatch(type);\n break;\n }\n\n case S.ScalarU: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const value = this.vUnsigned();\n this.resetVarint();\n this.top().unsigned?.(this.id, value);\n this.state = S.Header;\n break;\n }\n\n case S.ScalarS: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const value = this.vSigned();\n this.resetVarint();\n this.top().signed?.(this.id, value);\n this.state = S.Header;\n break;\n }\n\n case S.FixlenLen: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const sub = this.vTag();\n const len = this.vUpper();\n this.resetVarint();\n if (sub > FixlenSubtype.Blob) throw invalidMsgError(`invalid fixlen subtype ${sub}`);\n if (len > FIXLEN_MAX) throw invalidMsgError(\"fixlen length out of range\");\n if (sub === FixlenSubtype.String && len > this.maxStringLen) {\n throw limitExceededError(`string length ${len} exceeds maxStringLen ${this.maxStringLen}`);\n }\n if (sub === FixlenSubtype.Blob && len > this.maxBlobLen) {\n throw limitExceededError(`blob length ${len} exceeds maxBlobLen ${this.maxBlobLen}`);\n }\n this.fixSub = sub as FixlenSubtype;\n this.fixLen = len;\n this.fixOff = 0;\n if (sub === FixlenSubtype.Fp32 || sub === FixlenSubtype.Fp64) {\n const want = sub === FixlenSubtype.Fp32 ? 4 : 8;\n if (this.fixLen !== want) throw invalidMsgError(\"fixlen float length mismatch\");\n this.need = want;\n this.have = 0;\n this.state = S.FixlenFp;\n } else {\n // string / blob: emit empties immediately, otherwise stream below\n if (this.fixLen === 0) {\n this.emitBytes(input.subarray(0, 0));\n this.state = S.Header;\n } else {\n this.state = S.FixlenBytes;\n }\n }\n break;\n }\n\n case S.FixlenFp: {\n i = this.fpStep(input, i);\n if (this.have < this.need) return;\n const value =\n this.fixSub === FixlenSubtype.Fp32\n ? unpackFp32(this.scratch, 0)\n : unpackFp64(this.scratch, 0);\n if (this.fixSub === FixlenSubtype.Fp32) {\n // Pass the raw 4 LE bytes (still in `scratch`) only when the visitor\n // opts in (Visitor.fp32Raw): `value` (a double) would have quieted a\n // signaling NaN (§4.6), but the view is waste for a value consumer.\n const top = this.top();\n top.fp32?.(this.id, value, top.fp32Raw ? this.scratch.subarray(0, 4) : undefined);\n } else this.top().fp64?.(this.id, value);\n this.state = S.Header;\n break;\n }\n\n case S.FixlenBytes: {\n const take = Math.min(n - i, this.fixLen - this.fixOff);\n this.emitBytes(input.subarray(i, i + take));\n i += take;\n this.fixOff += take;\n if (this.fixOff === this.fixLen) this.state = S.Header;\n break;\n }\n\n case S.ArrayCount: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const count = this.vNum();\n this.resetVarint();\n if (count > ARRAY_MAX) throw invalidMsgError(\"array count out of range\");\n if (count > this.maxArrayCount) {\n throw limitExceededError(`array count ${count} exceeds maxArrayCount ${this.maxArrayCount}`);\n }\n this.arrCount = count;\n this.arrIndex = 0;\n if (this.arrIsFixlen) {\n // §4.8: a fixlen array always carries its element-length word — even\n // when empty — so the true element kind (fp32 vs fp64) stays known.\n // The element kind is only knowable once that word arrives, so defer\n // arrayBegin until then; a zero-count array reads the word then ends\n // with no payload (handled in S.ArrayElemLen).\n this.state = S.ArrayElemLen;\n } else if (count === 0) {\n // §4.7: a zero-count integer array is empty — no payload follows and\n // no element-length word exists (element width is API-only).\n this.top().arrayBegin?.(this.id, this.arrKind, 0);\n this.top().arrayEnd?.(this.id);\n this.state = S.Header;\n } else {\n this.top().arrayBegin?.(this.id, this.arrKind, this.arrCount);\n this.state = this.arrKind === ArrayKind.Unsigned ? S.ArrayUElem : S.ArraySElem;\n }\n break;\n }\n\n case S.ArrayUElem: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const value = this.vUnsigned();\n this.resetVarint();\n this.top().arrayUnsigned?.(this.id, this.arrIndex, value);\n this.advanceArray();\n break;\n }\n\n case S.ArraySElem: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const value = this.vSigned();\n this.resetVarint();\n this.top().arraySigned?.(this.id, this.arrIndex, value);\n this.advanceArray();\n break;\n }\n\n case S.ArrayElemLen: {\n i = this.varintStep(input, i);\n if (!this.vComplete) return;\n const sub = this.vTag();\n const size = this.vUpper();\n this.resetVarint();\n if (sub === FixlenSubtype.Fp32 && size === 4) {\n this.arrKind = ArrayKind.Fp32;\n this.need = 4;\n } else if (sub === FixlenSubtype.Fp64 && size === 8) {\n this.arrKind = ArrayKind.Fp64;\n this.need = 8;\n } else {\n throw invalidMsgError(\"invalid fixlen array element type\");\n }\n this.top().arrayBegin?.(this.id, this.arrKind, this.arrCount);\n if (this.arrCount === 0) {\n // §4.8: an empty fixlen array is [ header ][ count = 0 ][ fixlen_word ]\n // with no payload — the word above yielded the true element kind.\n this.top().arrayEnd?.(this.id);\n this.state = S.Header;\n } else {\n this.have = 0;\n this.state = S.ArrayFp;\n }\n break;\n }\n\n case S.ArrayFp: {\n i = this.fpStep(input, i);\n if (this.have < this.need) return;\n const value =\n this.arrKind === ArrayKind.Fp32\n ? unpackFp32(this.scratch, 0)\n : unpackFp64(this.scratch, 0);\n if (this.arrKind === ArrayKind.Fp32) {\n const top = this.top();\n top.arrayFp32?.(this.id, this.arrIndex, value, top.fp32Raw ? this.scratch.subarray(0, 4) : undefined);\n } else this.top().arrayFp64?.(this.id, this.arrIndex, value);\n this.have = 0;\n this.advanceArray();\n break;\n }\n }\n }\n }\n\n /**\n * Report the terminal decode outcome (MESSAGE_SPEC §7) *without* promoting it\n * to an error. Returns {@link DecodeStatus.Complete} when the stream ended\n * exactly at a field boundary, or {@link DecodeStatus.Incomplete} when it\n * ended inside a field (a partial varint, an unfinished payload / array, or a\n * still-open nested sequence). This is a pure accessor — the finish-less spec\n * has no finalize step, and a trailing `Incomplete` is a truncation the caller\n * decides how to treat, not an error this machine raises. A genuinely\n * malformed message has already thrown from {@link push}.\n */\n finish(): DecodeStatus {\n const atBoundary =\n this.state === S.Header && this.vBytes === 0 && this.stack.length <= 1;\n return atBoundary ? DecodeStatus.Complete : DecodeStatus.Incomplete;\n }\n\n // --- helpers ------------------------------------------------------------\n\n private dispatch(type: number): void {\n switch (type) {\n case WireType.Unsigned:\n this.state = S.ScalarU;\n break;\n case WireType.Signed:\n this.state = S.ScalarS;\n break;\n case WireType.Fixlen:\n this.state = S.FixlenLen;\n break;\n case WireType.ArrayUnsigned:\n this.arrKind = ArrayKind.Unsigned;\n this.arrIsFixlen = false;\n this.state = S.ArrayCount;\n break;\n case WireType.ArraySigned:\n this.arrKind = ArrayKind.Signed;\n this.arrIsFixlen = false;\n this.state = S.ArrayCount;\n break;\n case WireType.ArrayFixlen:\n this.arrIsFixlen = true; // element kind resolved at the element-length word\n this.state = S.ArrayCount;\n break;\n case WireType.SequenceStart: {\n // §4.9/§6.2: reject nesting deeper than MAX_DEPTH. The stack always\n // holds the root visitor plus one entry per open sequence, so the\n // current depth is stack.length - 1.\n if (this.stack.length - 1 >= MAX_DEPTH) {\n throw invalidMsgError(`nesting exceeds MAX_DEPTH (${MAX_DEPTH})`);\n }\n const child = this.top().sequenceBegin?.(this.id);\n this.stack.push(child ?? this.top());\n this.state = S.Header;\n break;\n }\n default:\n throw invalidMsgError(`invalid wire type ${type}`);\n }\n }\n\n private endSequence(): void {\n if (this.stack.length <= 1) throw invalidMsgError(\"unbalanced sequence end\");\n this.top().sequenceEnd?.();\n this.stack.pop();\n this.state = S.Header;\n }\n\n private advanceArray(): void {\n this.arrIndex++;\n if (this.arrIndex === this.arrCount) {\n this.top().arrayEnd?.(this.id);\n this.state = S.Header;\n }\n }\n\n private emitBytes(chunk: Uint8Array): void {\n const v = this.top();\n if (this.fixSub === FixlenSubtype.String) v.string?.(this.id, this.fixLen, this.fixOff, chunk);\n else v.blob?.(this.id, this.fixLen, this.fixOff, chunk);\n }\n\n private top(): Visitor {\n return this.stack[this.stack.length - 1]!;\n }\n\n /**\n * Consume varint bytes from `input` at `i` into the {@link vLo} / {@link vHi}\n * accumulator, resuming across chunk boundaries; sets {@link vComplete} when a\n * terminator byte arrives. Number-only — no per-byte `bigint`.\n */\n private varintStep(input: Uint8Array, i: number): number {\n let lo = this.vLo;\n let hi = this.vHi;\n let k = this.vBytes;\n const n = input.length;\n while (i < n) {\n if (k >= VARINT_MAX_BYTES) throw invalidMsgError(\"varint overflow\");\n const b = input[i++]!;\n if (k < 4) lo |= (b & 0x7f) << (7 * k);\n else if (k === 4) {\n lo |= (b & 0x0f) << 28;\n hi |= (b >> 4) & 0x07;\n } else {\n // 10th byte (k === 9) has only bit 63 below 64; any higher payload\n // bit would spill past bit 63 and is a >64-bit overflow.\n if (k === 9 && ((b & 0x7f) >> 1) !== 0) throw invalidMsgError(\"varint overflow\");\n hi |= (b & 0x7f) << (7 * k - 32);\n }\n k++;\n if ((b & 0x80) === 0) {\n this.vLo = lo;\n this.vHi = hi;\n this.vBytes = k;\n this.vComplete = true;\n return i;\n }\n }\n this.vLo = lo;\n this.vHi = hi;\n this.vBytes = k;\n this.vComplete = false;\n return i;\n }\n\n private resetVarint(): void {\n this.vLo = 0;\n this.vHi = 0;\n this.vBytes = 0;\n this.vComplete = false;\n }\n\n /** The accumulated varint as a `bigint` (full 64-bit fidelity). */\n private vBig(): bigint {\n return this.vHi === 0\n ? BigInt(this.vLo >>> 0)\n : (BigInt(this.vHi >>> 0) << 32n) | BigInt(this.vLo >>> 0);\n }\n\n /**\n * The accumulated varint as an unsigned value, number-first: a `number` when\n * it fits exactly (`≤ 2^53-1`, which covers all ids, u8..u32 and small u64s),\n * a `bigint` only beyond that. Avoids a bigint allocation on the common path.\n */\n private vUnsigned(): number | bigint {\n // Unsigned: vHi's bit 31 must not read as negative. vHi ≤ 0x1fffff (2^21-1)\n // ⇔ vHi*2^32 + lo ≤ 2^53-1.\n const hi = this.vHi >>> 0;\n return hi <= 0x1fffff ? hi * TWO32 + (this.vLo >>> 0) : this.vBig();\n }\n\n /** The accumulated zig-zag varint as a signed value, number-first (see {@link vUnsigned}). */\n private vSigned(): number | bigint {\n const hi = this.vHi >>> 0;\n if (hi <= 0x1fffff) {\n const r = hi * TWO32 + (this.vLo >>> 0); // raw zig-zag, ≤ 2^53-1\n return r % 2 === 0 ? r / 2 : -(r + 1) / 2;\n }\n return zigzagDecode(this.vBig());\n }\n\n /** The accumulated varint as a JS number — exact for ids/lengths/counts. */\n private vNum(): number {\n return this.vHi * TWO32 + (this.vLo >>> 0);\n }\n\n /** The accumulated varint's low 3 tag bits (the wire type / fixlen subtype). */\n private vTag(): number {\n return this.vLo & 7;\n }\n\n /** The accumulated varint with its low 3 tag bits stripped (`value >> 3`). */\n private vUpper(): number {\n return (this.vHi >>> 0) * (TWO32 / 8) + (this.vLo >>> 3);\n }\n\n /** Accumulate `need` raw bytes into {@link scratch}. */\n private fpStep(input: Uint8Array, i: number): number {\n while (this.have < this.need && i < input.length) {\n this.scratch[this.have++] = input[i++]!;\n }\n return i;\n }\n}\n","/**\n * The SofaBuffers decoder.\n *\n * `IStream` is a push parser: feed it bytes with {@link IStream.feed} and it\n * drives a {@link Visitor}, calling one method per decoded field. It is a\n * resumable state machine, so the chunks you feed can be any size — a whole\n * message, a network packet, or a single byte — and a field that straddles a\n * chunk boundary is picked up seamlessly on the next call.\n *\n * Nesting is hierarchical: {@link Visitor.sequenceBegin} may return a child\n * visitor, and the decoder routes the nested fields to it until the matching\n * end. Generated message classes use this directly — a class implements\n * `Visitor`, and a nested-message field returns the child instance.\n *\n * There is no finish / finalize step (MESSAGE_SPEC §7): {@link IStream.feed}\n * throws only for a *malformed* message ({@link SofabErrorCode.InvalidMsg}); a\n * message that merely ends inside a field is reported — never thrown — by\n * {@link IStream.end}, which returns {@link DecodeStatus.Incomplete} rather than\n * {@link DecodeStatus.Complete}. The caller owns end-of-input and decides\n * whether a trailing `Incomplete` is a truncation error.\n */\n\nimport type { ArrayKind, DecodeStatus } from \"../constants.js\";\nimport { decodeContiguous } from \"./fast.js\";\nimport type { DecodeLimits } from \"./limits.js\";\nimport { DecoderState } from \"./state.js\";\n\n/**\n * Receives decoded fields from an {@link IStream}. Every method is optional and\n * defaults to a no-op, so a visitor implements only the fields it cares about\n * and silently skips the rest.\n *\n * String and blob payloads arrive as one or more `chunk`s, each tagged with the\n * field's `total` length and the `offset` of the chunk within the field, so a\n * large payload never has to be held in one piece. Array elements arrive one at\n * a time between {@link Visitor.arrayBegin} and {@link Visitor.arrayEnd}.\n */\nexport interface Visitor {\n /**\n * An unsigned integer field. Number-first: `value` is a `number` when it fits\n * exactly (`≤ 2^53-1`, covering ids, u8..u32 and small u64s) and a `bigint`\n * only beyond that, so the common case avoids a per-value bigint allocation.\n */\n unsigned?(id: number, value: number | bigint): void;\n /** A signed integer field. Number-first like {@link unsigned} (`|value| ≤ 2^53-1` ⇒ `number`). */\n signed?(id: number, value: number | bigint): void;\n /**\n * Opt in to the raw-bytes channel on {@link fp32} / {@link arrayFp32}. Off by\n * default so a value-only consumer pays nothing: when this is not `true` the\n * decoder never allocates the per-value little-endian view (which, per fp32\n * element, roughly quartered array-decode throughput in a microbenchmark). Set\n * it `true` only in a bit-exact consumer (transcode / raw-bits oracle) that\n * needs `raw` to preserve a signaling NaN.\n */\n readonly fp32Raw?: boolean;\n /**\n * An IEEE-754 32-bit float field. When you set {@link fp32Raw} to `true`,\n * `raw` is a zero-copy little-endian view of the exact 4 wire bytes; use it —\n * not `value` — when the bytes must round-trip bit-for-bit (§4.6). `value` is\n * a JS `number` (a 64-bit double), and widening a *signaling* NaN into a\n * double quiets it (sets the is-quiet bit), so `value` cannot represent an\n * fp32 sNaN faithfully. The view aliases the decoder's working buffer and is\n * valid only for the duration of the call — copy it if you retain it, exactly\n * as with a string/blob `chunk`. Without {@link fp32Raw}, `raw` is `undefined`\n * (no allocation). fp64 needs no such channel: a double holds all 64 bits\n * verbatim (see {@link fp64}).\n */\n fp32?(id: number, value: number, raw?: Uint8Array): void;\n /** An IEEE-754 64-bit double field. `value` is exact — a double is 64 bits wide. */\n fp64?(id: number, value: number): void;\n /** A chunk of a UTF-8 string field. */\n string?(id: number, total: number, offset: number, chunk: Uint8Array): void;\n /** A chunk of a blob field. */\n blob?(id: number, total: number, offset: number, chunk: Uint8Array): void;\n /** Start of an array; `count` elements of `kind` follow. */\n arrayBegin?(id: number, kind: ArrayKind, count: number): void;\n /** One unsigned array element. Number-first like {@link unsigned}. */\n arrayUnsigned?(id: number, index: number, value: number | bigint): void;\n /** One signed array element. Number-first like {@link signed}. */\n arraySigned?(id: number, index: number, value: number | bigint): void;\n /** One fp32 array element. `raw` (the element's 4 wire bytes) is present only under {@link fp32Raw} — see {@link fp32}. */\n arrayFp32?(id: number, index: number, value: number, raw?: Uint8Array): void;\n /** One fp64 array element. `value` is exact — see {@link fp64}. */\n arrayFp64?(id: number, index: number, value: number): void;\n /** End of an array. */\n arrayEnd?(id: number): void;\n /**\n * Start of a nested sequence. Return a {@link Visitor} to route the nested\n * fields to it (its {@link Visitor.sequenceEnd} fires at the matching end);\n * return nothing to keep using the current visitor.\n */\n sequenceBegin?(id: number): Visitor | void;\n /** End of the nested sequence this visitor was handling. */\n sequenceEnd?(): void;\n}\n\n/**\n * Push parser for the SofaBuffers wire format. Feed it bytes in chunks of any\n * size with {@link IStream.feed} and it drives a {@link Visitor}, one call per\n * decoded field, resuming cleanly across chunk boundaries. Call\n * {@link IStream.end} after the final chunk to read whether the message finished\n * on a field boundary. When the whole message is already in one buffer, prefer\n * the faster {@link decode}.\n */\nexport class IStream {\n private readonly state: DecoderState;\n\n /**\n * @param limits Optional opt-in decode caps ({@link DecodeLimits}). An\n * over-limit array count or string / blob length throws {@link SofabError}\n * (`LIMIT_EXCEEDED`) from {@link feed}, at the offending field's header and\n * before any of its payload is streamed to the visitor. Omit for no caps.\n */\n constructor(limits?: DecodeLimits) {\n this.state = new DecoderState(limits);\n }\n\n /**\n * Feed a chunk of bytes, dispatching decoded fields to `visitor`. Throws\n * {@link SofabError} (`INVALID_MSG`) only if the bytes are *malformed*;\n * running out of bytes mid-field is not an error — it simply suspends until\n * the next chunk (see {@link end}).\n */\n feed(chunk: Uint8Array, visitor: Visitor): void {\n this.state.push(chunk, visitor);\n }\n\n /**\n * Report whether the stream ended exactly at a field boundary. Call after the\n * final {@link feed}: returns {@link DecodeStatus.Complete} at a clean field\n * boundary, or {@link DecodeStatus.Incomplete} if the last chunk ended inside\n * a field (a partial varint, an unfinished payload / array, or a still-open\n * nested sequence).\n *\n * Per the finish-less spec (MESSAGE_SPEC §7) this is a pure accessor: it never\n * throws and never promotes an incomplete decode to an error — the caller owns\n * end-of-input and decides whether a trailing `Incomplete` is a truncation\n * error. (A *malformed* message has already thrown from {@link feed}.)\n */\n end(): DecodeStatus {\n return this.state.finish();\n }\n}\n\n/**\n * Decode a complete message held in one contiguous buffer, in a single call.\n *\n * This is the non-streaming convenience — and the fast path: with the whole\n * message in hand it advances one cursor over the buffer instead of running the\n * resumable per-byte state machine, so it is markedly faster than feeding the\n * same bytes through\n * {@link IStream}. Use {@link IStream} when the message arrives in chunks; use\n * this when you already have it whole.\n *\n * The whole buffer *is* the end of input, so the two failure outcomes both\n * throw a {@link SofabError} the caller tells apart by `code` (MESSAGE_SPEC §7):\n * malformed input throws `INVALID_MSG`, while input that ends inside a field —\n * truncation or an unclosed sequence — throws `INCOMPLETE`. A complete message\n * returns normally.\n *\n * Pass `limits` ({@link DecodeLimits}) to cap array counts and string / blob\n * lengths; an over-limit field throws `LIMIT_EXCEEDED` at its header, before it\n * is materialized. Omit for no caps (the default).\n */\nexport function decode(\n bytes: Uint8Array,\n visitor: Visitor,\n limits?: DecodeLimits,\n): void {\n decodeContiguous(bytes, visitor, limits);\n}\n","/**\n * The pull / cursor decoder: a monomorphic companion to {@link \"./fast\"}.\n *\n * {@link \"./fast\"}'s {@link decodeContiguous} is a *push* decoder — it drives the\n * buffer and calls a {@link Visitor} method per field. That is the right shape\n * for streaming and skip-subtree callers, but the visitor call sites go\n * megamorphic once a single decode routes through several differently-shaped\n * visitor objects (one per nested message type), which a JIT cannot inline.\n *\n * {@link Cursor} inverts control: it keeps one read cursor over the contiguous\n * {@link Uint8Array} and exposes *pull* primitives — {@link Cursor.readHeader}\n * plus a typed `read*` per wire type — so **generated code drives the loop** with\n * a single `switch (cursor.id)` that reads straight into its own fields. Every\n * call site is then monomorphic (the generated per-type decoder is the only\n * caller), which is what lets V8 inline the whole decode into a flat loop — the\n * same technique protobuf's generated `decode(reader)` uses.\n *\n * It shares {@link \"./fast\"}'s number-first varint core verbatim: each varint is\n * accumulated into two 32-bit JS *numbers* (`lo`/`hi`) and a `bigint` is\n * materialised only for a 64-bit *value* that does not fit in `2^53-1` (never for\n * ids, lengths or counts). String / blob payloads are returned as a single\n * zero-copy `subarray` view. It reports the same three-valued outcome as the\n * push path (MESSAGE_SPEC §7): malformed input throws a {@link SofabError} with\n * code `INVALID_MSG`, and a read that runs off the end of the buffer mid-field\n * throws `INCOMPLETE`.\n */\n\nimport {\n ARRAY_MAX,\n FIXLEN_MAX,\n FixlenSubtype,\n ID_MAX,\n MAX_DEPTH,\n WireType,\n} from \"../constants.js\";\nimport {\n incompleteError,\n invalidMsgError,\n limitExceededError,\n} from \"../errors.js\";\nimport { Long } from \"../long.js\";\nimport { zigzagDecode } from \"../varint/zigzag.js\";\nimport type { DecodeLimits } from \"./limits.js\";\n\nconst TWO32 = 0x1_0000_0000; // 2^32, for combining the 32-bit halves\n// Strict UTF-8 (MESSAGE_SPEC §8, CORELIB_PLAN §6.4): JavaScript strings are a\n// Unicode string type, so this target is always strict — the decoder builds the\n// string with the fatal TextDecoder, which throws on any invalid-UTF-8 payload\n// (overlong forms, surrogate code points, out-of-range, truncated or stray\n// bytes) rather than silently substituting U+FFFD. readString maps that throw to\n// the INVALID decode outcome. A lossy decoder is never used.\nconst _utf8 = new TextDecoder(\"utf-8\", { fatal: true });\n\n/**\n * A pull decoder over a complete message held in one contiguous buffer.\n *\n * Usage from generated code: loop on {@link readHeader}; for each field switch on\n * {@link id} and call the matching `read*` (which consumes that field's value and\n * advances the cursor); recurse into a child type's decoder on a nested sequence;\n * fall through to {@link skip} for an unknown id. See {@link readHeader}.\n *\n * Pass {@link DecodeLimits} to cap array counts and string / blob lengths; an\n * over-limit field throws {@link SofabError} (`LIMIT_EXCEEDED`) at its header,\n * before it is materialized. Omit for no caps (the default).\n */\nexport class Cursor {\n /** Field id of the header last accepted by {@link readHeader}. */\n id = 0;\n /** Wire type of the header last accepted by {@link readHeader}. */\n wire = 0;\n /**\n * Fixlen subtype of the header last accepted by {@link readHeader} — one of\n * {@link FixlenSubtype} — when its {@link wire} is {@link WireType.Fixlen} or\n * {@link WireType.ArrayFixlen}; `-1` otherwise (a non-fixlen field, or a\n * fixlen field whose subtype word is truncated away).\n *\n * The four fixlen subtypes (`fp32`, `fp64`, `string`, `blob`) all share one\n * {@link wire} type, so {@link wire} alone cannot separate them. This is the\n * companion accessor that can: a generated guard reads it right after\n * {@link readHeader} to skip a field whose delivered subtype contradicts the\n * schema (MESSAGE_SPEC §7.3), exactly as it already does on {@link wire} for\n * the other kinds:\n *\n * ```ts\n * case 9: if (c.wire !== WireType.Fixlen || c.fixSub !== FixlenSubtype.Fp64) {\n * c.skip(c.wire); break;\n * } o.somefp64 = c.readFp64(); break;\n * ```\n *\n * It is *peeked* — the subtype word is not consumed — so the matching typed\n * reader (or {@link skip}) still reads and validates it, and a malformed or\n * truncated word surfaces `INVALID` / `INCOMPLETE` there as before.\n */\n fixSub = -1;\n\n private readonly buf: Uint8Array;\n private readonly view: DataView;\n private readonly n: number;\n private p = 0;\n\n // Opt-in decode limits (corelib-ts#38). An unset limit is Infinity — no cap,\n // today's behavior. Enforced at the count / length header, before allocation.\n private readonly maxArrayCount: number;\n private readonly maxStringLen: number;\n private readonly maxBlobLen: number;\n\n // Last varint, as two unsigned 32-bit halves (see readVarint).\n private lo = 0;\n private hi = 0;\n\n // Number of nested sequences currently open (0 = root). Incremented when\n // readHeader accepts a SequenceStart, decremented when it consumes the matching\n // SequenceEnd (or when skip() discards a whole nested sequence). Lets the pull\n // parser tell a root-level dangling sequence-end (INVALID) and an unclosed\n // sequence at end-of-buffer (INCOMPLETE) apart from a clean boundary.\n private depth = 0;\n\n constructor(buf: Uint8Array, limits?: DecodeLimits) {\n this.buf = buf;\n this.n = buf.length;\n this.view = new DataView(buf.buffer, buf.byteOffset, buf.length);\n this.maxArrayCount = limits?.maxArrayCount ?? Infinity;\n this.maxStringLen = limits?.maxStringLen ?? Infinity;\n this.maxBlobLen = limits?.maxBlobLen ?? Infinity;\n }\n\n /**\n * Advance to the next field header. Returns `true` and sets {@link id} /\n * {@link wire} when a field follows; returns `false` — consuming the marker —\n * at the end of the buffer *or* at the sequence-end that closes the sequence\n * this decoder is reading. So a generated per-type decoder loops uniformly:\n *\n * ```ts\n * while (c.readHeader()) {\n * switch (c.id) {\n * case 4: this.u32 = Number(c.readUnsigned()); break;\n * case 10: this.child = Child.decodeFrom(c); break; // nested sequence\n * default: c.skip(c.wire); break; // unknown field\n * }\n * }\n * ```\n *\n * At the root the loop ends at end-of-buffer; inside a nested sequence it ends\n * at the matching {@link WireType.SequenceEnd} (which is consumed). A field\n * whose id is out of range throws {@link SofabError} (`INVALID_MSG`).\n */\n readHeader(): boolean {\n if (this.p >= this.n) {\n // End of buffer. At the root (depth 0) this is a clean, complete boundary;\n // inside an open sequence it is a truncated, unclosed sequence → INCOMPLETE\n // (§7), matching the fast path (fast.ts) which throws on `stack.length > 1`.\n if (this.depth > 0) {\n throw incompleteError(\"truncated message: unbalanced sequence\");\n }\n return false;\n }\n this.readVarint();\n const wire = this.lo & 7;\n if (wire === WireType.SequenceEnd) {\n // A sequence-end closes the current nested scope. At the root (depth 0)\n // there is no open sequence to close, so it is a dangling marker → INVALID\n // (mirrors fast.ts `stack.length <= 1` → \"unbalanced sequence end\").\n if (this.depth === 0) {\n throw invalidMsgError(\"unbalanced sequence end\");\n }\n this.depth--;\n return false;\n }\n const id = this.upper();\n if (id > ID_MAX) throw invalidMsgError(`field id ${id} out of range`);\n if (wire === WireType.SequenceStart) {\n // §4.9/§6.2: reject nesting deeper than MAX_DEPTH. `depth` counts open\n // sequences (0 = root), so the (MAX_DEPTH + 1)-th open is the first to\n // exceed the ceiling — mirrors fast.ts:197 / state.ts:334. INVALID\n // dominates the unclosed-at-EOF INCOMPLETE (documentation#17).\n if (this.depth >= MAX_DEPTH) {\n throw invalidMsgError(`nesting exceeds MAX_DEPTH (${MAX_DEPTH})`);\n }\n this.depth++;\n }\n this.id = id;\n this.wire = wire;\n this.fixSub = this.peekFixSub(wire);\n return true;\n }\n\n /** Read an unsigned scalar (wire {@link WireType.Unsigned}), number-first. */\n readUnsigned(): number | bigint {\n this.readVarint();\n return this.unsignedValue();\n }\n\n /** Read a signed scalar (wire {@link WireType.Signed}), zig-zag, number-first. */\n readSigned(): number | bigint {\n this.readVarint();\n return this.signedValue();\n }\n\n /** Read a 32-bit float scalar (wire {@link WireType.Fixlen}, subtype fp32). */\n readFp32(): number {\n this.fixlenHeader(FixlenSubtype.Fp32, 4);\n return this.rawFp32();\n }\n\n /**\n * Read a 32-bit float scalar as its raw 4 wire bytes (little-endian), zero-copy\n * — the bit-preserving companion to {@link readFp32}.\n *\n * {@link readFp32} returns a JS `number` (a 64-bit double), and widening an\n * fp32 *signaling* NaN into a double quiets it (0x7F800001 → 0x7FC00001), so a\n * value consumer can never round-trip one bit-for-bit (§4.6). Generated\n * bit-exact decode reads the bytes here instead and re-emits them verbatim with\n * {@link OStream.writeFixlen} (subtype fp32) — mirroring the visitor `raw`\n * channel on the push paths (fast.ts / state.ts), which the pull path was\n * missing (corelib-ts#66).\n *\n * The header (subtype fp32, length 4) is validated exactly as in\n * {@link readFp32}; the returned view aliases the source buffer, valid only\n * until it is reused, like {@link readBlob}.\n */\n readFp32Raw(): Uint8Array {\n this.fixlenHeader(FixlenSubtype.Fp32, 4);\n return this.take(4);\n }\n\n /** Read a 64-bit float scalar (wire {@link WireType.Fixlen}, subtype fp64). */\n readFp64(): number {\n this.fixlenHeader(FixlenSubtype.Fp64, 8);\n return this.rawFp64();\n }\n\n /**\n * Read a UTF-8 string scalar (wire {@link WireType.Fixlen}, subtype string).\n * Pass the schema `maxlen` (byte length) for a bounded string so an\n * over-length is rejected as `INVALID` at the header, before the payload is\n * taken (see {@link fixlenLen}); the wire length is exactly the UTF-8 byte\n * length, so the check is exact. Omit for an unbounded string.\n */\n readString(schemaMaxlen?: number): string {\n const len = this.fixlenLen(FixlenSubtype.String, schemaMaxlen);\n // take() (truncation → INCOMPLETE) runs before the decode, so a short\n // payload stays INCOMPLETE; only genuinely malformed UTF-8 bytes reach the\n // fatal decoder. Its TypeError becomes the INVALID outcome (§8/§6.4/§5.2).\n const bytes = this.take(len);\n try {\n return _utf8.decode(bytes);\n } catch {\n throw invalidMsgError(\"invalid UTF-8 in string\");\n }\n }\n\n /**\n * Read a blob scalar (wire {@link WireType.Fixlen}, subtype blob) as a\n * zero-copy {@link Uint8Array} view into the source buffer.\n */\n readBlob(schemaMaxlen?: number): Uint8Array {\n const len = this.fixlenLen(FixlenSubtype.Blob, schemaMaxlen);\n return this.take(len);\n }\n\n /**\n * Read an unsigned array (wire {@link WireType.ArrayUnsigned}), number-first\n * per element. Pass the schema `count` for a bounded array so an over-count is\n * rejected as `INVALID` at the header (see {@link arrayCount}); omit it for an\n * unbounded array (today's behavior).\n */\n readUnsignedArray(schemaCount?: number): (number | bigint)[] {\n const count = this.arrayCount(schemaCount);\n const out: (number | bigint)[] = new Array(count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n out[i] = this.unsignedValue();\n }\n return out;\n }\n\n /** Read a signed array (wire {@link WireType.ArraySigned}), zig-zag, number-first per element. */\n readSignedArray(schemaCount?: number): (number | bigint)[] {\n const count = this.arrayCount(schemaCount);\n const out: (number | bigint)[] = new Array(count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n out[i] = this.signedValue();\n }\n return out;\n }\n\n /**\n * Read an unsigned 64-bit array into {@link Long}[] — the `bigint`-free path.\n * Each element keeps the raw lo/hi halves; call {@link Long.toBigInt} to\n * materialise only the values the caller actually needs.\n */\n readUnsignedArrayLong(schemaCount?: number): Long[] {\n const count = this.arrayCount(schemaCount);\n const out = new Array<Long>(count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n out[i] = new Long(this.lo, this.hi);\n }\n return out;\n }\n\n /** Read a signed 64-bit array (zig-zag) into {@link Long}[] — the `bigint`-free path. */\n readSignedArrayLong(schemaCount?: number): Long[] {\n const count = this.arrayCount(schemaCount);\n const out = new Array<Long>(count);\n for (let i = 0; i < count; i++) {\n this.readVarint();\n const lo = this.lo >>> 0;\n const hi = this.hi >>> 0;\n const mask = (-(lo & 1)) >>> 0; // all ones when the zig-zag lsb is set\n out[i] = new Long((((lo >>> 1) | (hi << 31)) >>> 0) ^ mask, ((hi >>> 1) >>> 0) ^ mask);\n }\n return out;\n }\n\n /** Read an fp32 array (wire {@link WireType.ArrayFixlen}, element subtype fp32). */\n readFp32Array(schemaCount?: number): number[] {\n const count = this.arrayFixlenHeader(FixlenSubtype.Fp32, 4, schemaCount);\n const out: number[] = new Array(count);\n for (let i = 0; i < count; i++) out[i] = this.rawFp32();\n return out;\n }\n\n /**\n * Read an fp32 array as its raw little-endian element payload (`count * 4`\n * bytes), zero-copy — the bit-preserving companion to {@link readFp32Array}.\n * Widening each element to a JS `number` quiets an fp32 *signaling* NaN just as\n * on the scalar path (§4.6; see {@link readFp32Raw}), so bit-exact decode reads\n * the whole payload here and re-emits it with {@link OStream.writeFp32ArrayRaw}\n * (corelib-ts#66). The header (element subtype fp32, size 4) is validated\n * exactly as in {@link readFp32Array}; the returned view aliases the source\n * buffer, like {@link readBlob}.\n */\n readFp32ArrayRaw(schemaCount?: number): Uint8Array {\n const count = this.arrayFixlenHeader(FixlenSubtype.Fp32, 4, schemaCount);\n return this.take(count * 4);\n }\n\n /** Read an fp64 array (wire {@link WireType.ArrayFixlen}, element subtype fp64). */\n readFp64Array(schemaCount?: number): number[] {\n const count = this.arrayFixlenHeader(FixlenSubtype.Fp64, 8, schemaCount);\n const out: number[] = new Array(count);\n for (let i = 0; i < count; i++) out[i] = this.rawFp64();\n return out;\n }\n\n /**\n * Consume the value of the field whose header {@link readHeader} just accepted,\n * discarding it — for a `default:` branch that keeps the cursor in sync on an\n * unknown id. Pass {@link wire}. A {@link WireType.SequenceStart} skips the\n * whole nested sequence.\n */\n skip(wire: number): void {\n if (wire === WireType.SequenceStart) {\n // readHeader already counted this SequenceStart (depth++); skipSequence\n // consumes its whole balanced body incl. the matching end without going\n // through readHeader, so balance the count here.\n this.skipSequence();\n this.depth--;\n return;\n }\n this.skipValue(wire);\n }\n\n // --- value skipping -----------------------------------------------------\n\n private skipValue(wire: number): void {\n switch (wire) {\n case WireType.Unsigned:\n case WireType.Signed:\n this.readVarint();\n return;\n case WireType.Fixlen: {\n this.readVarint();\n const sub = this.lo & 7;\n const len = this.upper();\n // §4.6/§5.2: validate the fixlen word at the header, before the payload,\n // so a malformed word — a reserved subtype (0x4..0x7), or an fp32/fp64\n // whose declared length ≠ 4/8 — is INVALID even when the payload is also\n // truncated (INVALID takes precedence over INCOMPLETE). Mirrors the\n // known-field path ({@link fixlenHeader}) and fast.ts. A skip never\n // materializes the value, so string/blob keep only the len ≤ FIXLEN_MAX\n // bound — no opt-in length limit is enforced here (corelib-ts#49).\n if (sub > FixlenSubtype.Blob) throw invalidMsgError(`invalid fixlen subtype ${sub}`);\n if (sub === FixlenSubtype.Fp32 || sub === FixlenSubtype.Fp64) {\n if (len !== (sub === FixlenSubtype.Fp32 ? 4 : 8)) {\n throw invalidMsgError(\"fixlen float length mismatch\");\n }\n } else if (len > FIXLEN_MAX) {\n throw invalidMsgError(\"fixlen length out of range\");\n }\n this.take(len);\n return;\n }\n case WireType.ArrayUnsigned:\n case WireType.ArraySigned: {\n const count = this.arrayCount();\n for (let i = 0; i < count; i++) this.readVarint();\n return;\n }\n case WireType.ArrayFixlen: {\n // Read count and the element word, then validate the element type at the\n // header before taking the payload — a fixlen array carries only fp32\n // (size 4) or fp64 (size 8) elements (§4.8), so any other element word is\n // INVALID even when the payload is truncated (§5.2 precedence). This\n // deliberately does NOT use {@link arrayCount}'s count ≤ remaining-bytes\n // guard: that guard exists to bound allocation on the read paths, but the\n // skip path allocates nothing, and applying it here would report a\n // malformed-element array as INCOMPLETE instead of INVALID (corelib-ts#49).\n this.readVarint();\n const count = this.num();\n if (count > ARRAY_MAX) throw invalidMsgError(\"array count out of range\");\n if (count > this.maxArrayCount) {\n throw limitExceededError(\n `array count ${count} exceeds maxArrayCount ${this.maxArrayCount}`,\n );\n }\n this.readVarint();\n const sub = this.lo & 7;\n const size = this.upper();\n const ok =\n (sub === FixlenSubtype.Fp32 && size === 4) ||\n (sub === FixlenSubtype.Fp64 && size === 8);\n if (!ok) throw invalidMsgError(\"invalid fixlen array element type\");\n this.take(count * size);\n return;\n }\n default:\n throw invalidMsgError(`invalid wire type ${wire}`);\n }\n }\n\n private skipSequence(): void {\n let depth = 1;\n while (depth > 0) {\n if (this.p >= this.n) throw incompleteError(\"truncated message: unbalanced sequence\");\n this.readVarint();\n const wire = this.lo & 7;\n if (wire === WireType.SequenceEnd) {\n depth--;\n continue;\n }\n const id = this.upper();\n if (id > ID_MAX) throw invalidMsgError(`field id ${id} out of range`);\n if (wire === WireType.SequenceStart) {\n // §4.9/§6.2: the skip path must honour the same MAX_DEPTH ceiling as the\n // read path ({@link readHeader}), else a subtree skipped on a wire-type\n // mismatch could nest past MAX_DEPTH and fall through to the unbalanced-\n // at-EOF INCOMPLETE above instead of INVALID — the F-0029 divergence the\n // readHeader-only fix left in this path (corelib-ts#65). `this.depth`\n // counts the opens *above* this skip (readHeader already accepted the\n // entry sequence, which the local `depth == 1` aliases), so the true\n // nesting is `this.depth + depth - 1`; the next open must not exceed it.\n if (this.depth + depth - 1 >= MAX_DEPTH) {\n throw invalidMsgError(`nesting exceeds MAX_DEPTH (${MAX_DEPTH})`);\n }\n depth++;\n } else {\n this.skipValue(wire);\n }\n }\n }\n\n // --- field helpers ------------------------------------------------------\n\n /**\n * Peek the delivered fixlen subtype of the field {@link readHeader} just\n * accepted, **without advancing the cursor** — the readers / {@link skip}\n * still re-read and validate the word. Returns one of {@link FixlenSubtype}\n * (0..3), a reserved value (4..7), or `-1` when the wire is not a fixlen kind\n * or the subtype word is truncated away.\n *\n * The subtype is the low 3 bits of the fixlen sub-header word, and the low\n * bits of a LEB128 word live entirely in its **first** byte — so this only\n * reads one byte, it never decodes a varint.\n */\n private peekFixSub(wire: number): number {\n // Scalar fixlen: the sub-header is the byte right after the field header.\n if (wire === WireType.Fixlen) {\n return this.p < this.n ? this.buf[this.p]! & 7 : -1;\n }\n // Fixlen array: the element sub-header sits after the count varint (§4.8:\n // always present, even for count 0), so step over the count's bytes first —\n // a varint's last byte is the first one with the high bit clear.\n if (wire === WireType.ArrayFixlen) {\n let p = this.p;\n while (p < this.n && this.buf[p]! >= 0x80) p++;\n p++;\n return p < this.n ? this.buf[p]! & 7 : -1;\n }\n return -1; // not a fixlen field\n }\n\n /**\n * Read and validate an array count word (0..ARRAY_MAX; §4.7/§4.8). When a\n * `schemaCount` is given, a count above it is a schema-bound violation and is\n * rejected as `INVALID` — see the check below.\n */\n private arrayCount(schemaCount?: number): number {\n this.readVarint();\n const count = this.num();\n if (count > ARRAY_MAX) throw invalidMsgError(\"array count out of range\");\n // §5.2/§7 (corelib-ts#69): a count above the field's schema capacity is a\n // malformed message (INVALID) and MUST dominate the truncated-array\n // INCOMPLETE below — so the deciding count word is bound-checked here, at\n // the header, before the `count > remaining` guard a truncated over-count\n // would otherwise trip first (anti-folding: INVALID over INCOMPLETE). It\n // also precedes the LIMIT_EXCEEDED cap, keeping the precedence INVALID >\n // LIMIT_EXCEEDED > INCOMPLETE. An unset bound (skip paths, unbounded\n // arrays) preserves today's behavior; when the generator passes the schema\n // count this is a predicted-false integer compare on valid data — no hot-\n // path cost.\n if (schemaCount !== undefined && count > schemaCount) {\n throw invalidMsgError(\"array count above schema capacity\");\n }\n if (count > this.maxArrayCount) {\n throw limitExceededError(\n `array count ${count} exceeds maxArrayCount ${this.maxArrayCount}`,\n );\n }\n // Part A hardening (corelib-ts#38): a dynamic array needs at least one wire\n // byte per element (a varint element, or an fp element ≥ its size), so a\n // count larger than the bytes left in the buffer cannot be real — reject it\n // as truncation *before* sizing `new Array(count)`, so a hostile count can\n // never drive an allocation larger than the input. A tighter fixlen bound\n // (count * elemSize) is applied once the element word is read, in\n // {@link arrayFixlenHeader}.\n if (count > this.n - this.p) throw incompleteError(\"truncated array\");\n return count;\n }\n\n /** Read a scalar fixlen sub-header, asserting subtype and exact byte length (floats). */\n private fixlenHeader(wantSub: number, wantLen: number): void {\n this.readVarint();\n const sub = this.lo & 7;\n const len = this.upper();\n if (sub !== wantSub) throw invalidMsgError(`invalid fixlen subtype ${sub}`);\n if (len !== wantLen) throw invalidMsgError(\"fixlen float length mismatch\");\n }\n\n /**\n * Read a scalar fixlen sub-header for a string/blob, asserting subtype;\n * returns the byte length. When a `schemaMaxlen` is given, a length above it\n * is a schema-bound violation and is rejected as `INVALID` — see below.\n */\n private fixlenLen(wantSub: number, schemaMaxlen?: number): number {\n this.readVarint();\n const sub = this.lo & 7;\n const len = this.upper();\n if (sub !== wantSub) throw invalidMsgError(`invalid fixlen subtype ${sub}`);\n if (len > FIXLEN_MAX) throw invalidMsgError(\"fixlen length out of range\");\n // §5.2/§7.1 (corelib-ts#69): a declared length above the field's schema\n // maxlen is a malformed message (INVALID) and MUST dominate the truncated-\n // payload INCOMPLETE that take() raises below — so the deciding length word\n // is bound-checked here, before the payload is taken (anti-folding: INVALID\n // over INCOMPLETE), and before the LIMIT_EXCEEDED cap (INVALID > LIMIT_\n // EXCEEDED > INCOMPLETE). For a string the wire len is exactly its UTF-8\n // byte length, so this header check is exact. An unset bound preserves\n // today's behavior; a predicted-false compare on valid data.\n if (schemaMaxlen !== undefined && len > schemaMaxlen) {\n throw invalidMsgError(\"fixlen length above schema maxlen\");\n }\n // Opt-in length cap (corelib-ts#38), enforced at the header before the\n // payload is taken. wantSub tells string from blob, so the right limit\n // applies to each.\n const limit =\n wantSub === FixlenSubtype.String ? this.maxStringLen : this.maxBlobLen;\n if (len > limit) {\n const what = wantSub === FixlenSubtype.String ? \"string\" : \"blob\";\n const name =\n wantSub === FixlenSubtype.String ? \"maxStringLen\" : \"maxBlobLen\";\n throw limitExceededError(\n `${what} length ${len} exceeds ${name} ${limit}`,\n );\n }\n return len;\n }\n\n /**\n * Read an array fixlen element header (count + element type); returns the\n * count. When a `schemaCount` is given, a count above it is a schema-bound\n * violation and is rejected as `INVALID` — see below.\n */\n private arrayFixlenHeader(\n wantSub: number,\n wantSize: number,\n schemaCount?: number,\n ): number {\n // §4.8: a fixlen array always carries its element-length word — even when\n // empty — so the element kind stays known. count may then be 0.\n //\n // Read the count and validate the element word *before* the count ≤\n // remaining-bytes truncation guard, so a malformed element word on a\n // truncated array is INVALID, not INCOMPLETE (§5.2 precedence). This\n // deliberately inlines the count parse rather than calling {@link\n // arrayCount}, whose own `count > remaining` guard would otherwise fire\n // first — the same trap #49 sidestepped in skipValue's ArrayFixlen case\n // (corelib-ts#51, follow-up to #49).\n this.readVarint();\n const count = this.num();\n if (count > ARRAY_MAX) throw invalidMsgError(\"array count out of range\");\n // §5.2/§7 (corelib-ts#69): as in {@link arrayCount}, a count above the\n // field's schema capacity is INVALID and dominates both the LIMIT_EXCEEDED\n // cap and the truncated-array INCOMPLETE guard below. A coincident malformed\n // element word is likewise INVALID, so the outcome is unaffected by checking\n // the count before the element word is read.\n if (schemaCount !== undefined && count > schemaCount) {\n throw invalidMsgError(\"array count above schema capacity\");\n }\n if (count > this.maxArrayCount) {\n throw limitExceededError(\n `array count ${count} exceeds maxArrayCount ${this.maxArrayCount}`,\n );\n }\n this.readVarint();\n const sub = this.lo & 7;\n const size = this.upper();\n if (sub !== wantSub || size !== wantSize) {\n throw invalidMsgError(\"invalid fixlen array element type\");\n }\n // Part A hardening (corelib-ts#38): now the element size is known, a fixlen\n // array needs count * size payload bytes; a count claiming more than the\n // buffer holds is truncation — reject before sizing `new Array(count)`.\n // This tighter bound subsumes arrayCount's `count > remaining` guard.\n if (count > (this.n - this.p) / wantSize) {\n throw incompleteError(\"truncated fixlen array\");\n }\n return count;\n }\n\n /** Hand back a zero-copy view of the next `len` bytes, advancing the cursor. */\n private take(len: number): Uint8Array {\n const start = this.p;\n const end = start + len;\n if (end > this.n) throw incompleteError(\"truncated fixlen payload\");\n this.p = end;\n return this.buf.subarray(start, end);\n }\n\n private rawFp32(): number {\n const p = this.p;\n if (p + 4 > this.n) throw incompleteError(\"truncated fp32\");\n this.p = p + 4;\n return this.view.getFloat32(p, true);\n }\n\n private rawFp64(): number {\n const p = this.p;\n if (p + 8 > this.n) throw incompleteError(\"truncated fp64\");\n this.p = p + 8;\n return this.view.getFloat64(p, true);\n }\n\n // --- varint reading (shared verbatim with ./fast) -----------------------\n\n /**\n * The last varint's full value as a `bigint` (64-bit fidelity). Only ever\n * called from {@link unsignedValue} / {@link signedValue} on the `hi` overflow\n * path (`this.hi >>> 0 > 0x1fffff`), so `hi` is always non-zero here.\n */\n private big(): bigint {\n return (BigInt(this.hi >>> 0) << 32n) | BigInt(this.lo >>> 0);\n }\n\n /**\n * The last varint as an unsigned value, number-first: a `number` when it fits\n * exactly (`≤ 2^53-1`), a `bigint` only beyond that.\n */\n private unsignedValue(): number | bigint {\n const hi = this.hi >>> 0;\n return hi <= 0x1fffff ? hi * TWO32 + (this.lo >>> 0) : this.big();\n }\n\n /** The last zig-zag varint as a signed value, number-first. */\n private signedValue(): number | bigint {\n const hi = this.hi >>> 0;\n if (hi <= 0x1fffff) {\n const r = hi * TWO32 + (this.lo >>> 0); // raw zig-zag, ≤ 2^53-1\n return r % 2 === 0 ? r / 2 : -(r + 1) / 2;\n }\n return zigzagDecode(this.big());\n }\n\n /** The last varint's value as a JS number — exact for ids/lengths/counts. */\n private num(): number {\n return this.hi * TWO32 + (this.lo >>> 0);\n }\n\n /** The last varint with its low 3 tag bits stripped (`value >> 3`). */\n private upper(): number {\n return (this.hi >>> 0) * (TWO32 / 8) + (this.lo >>> 3);\n }\n\n /**\n * Decode one LEB128 varint at the cursor into {@link lo} / {@link hi} (each an\n * unsigned 32-bit half), advancing {@link p}. Throws on truncation or a value\n * spilling past 64 bits (>10 bytes). Unrolled, number-only — no `bigint`.\n */\n private readVarint(): void {\n const buf = this.buf;\n const n = this.n;\n let p = this.p;\n let b: number;\n let lo: number;\n let hi = 0;\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo = b & 0x7f;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 7;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 14;\n if (b < 0x80) return this.set(lo, 0, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x7f) << 21;\n if (b < 0x80) return this.set(lo, 0, p);\n\n // 5th byte straddles the 32-bit boundary: 4 bits to lo, 3 bits to hi.\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n lo |= (b & 0x0f) << 28;\n hi = (b >> 4) & 0x07;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 3;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 10;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 17;\n if (b < 0x80) return this.set(lo, hi, p);\n\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n hi |= (b & 0x7f) << 24;\n if (b < 0x80) return this.set(lo, hi, p);\n\n // 10th byte: only bit 63 (1 payload bit) remains below 64; any higher\n // payload bit, or a continuation into an 11th byte, is a >64-bit overflow.\n if (p >= n) throw incompleteError(\"truncated varint\");\n b = buf[p++]!;\n if (((b & 0x7f) >> 1) !== 0) throw invalidMsgError(\"varint overflow\");\n hi |= (b & 0x7f) << 31;\n if (b < 0x80) return this.set(lo, hi, p);\n\n throw invalidMsgError(\"varint overflow\");\n }\n\n private set(lo: number, hi: number, p: number): void {\n this.lo = lo;\n this.hi = hi;\n this.p = p;\n }\n}\n","/**\n * Optional native (N-API) acceleration loader.\n *\n * This module performs **no** work at import time and statically imports\n * nothing native, so pulling it into a browser or bundled build is harmless.\n * Call {@link loadNativeKernel} explicitly (only meaningful on Node.js /\n * Electron) to try to load the optional `@sofa-buffers/corelib-native` addon and\n * install it as the active {@link Kernel}. If the addon is absent or the host\n * is not Node, it returns `false` and the pure-JS kernel stays active.\n */\n\nimport { setKernel, type Kernel } from \"./kernel.js\";\n\n/** The package id of the optional native addon (an `optionalDependency`). */\nexport const NATIVE_PACKAGE = \"@sofa-buffers/corelib-native\";\n\nfunction isNode(): boolean {\n return (\n typeof process !== \"undefined\" &&\n !!(process as { versions?: { node?: string } }).versions?.node\n );\n}\n\n/**\n * Attempt to load and install the native kernel.\n *\n * @returns `true` if a valid native kernel was installed, `false` if it could\n * not be loaded (not on Node, addon not installed, or wrong shape). Never\n * throws for a missing addon — the JS kernel remains the fallback.\n */\nexport async function loadNativeKernel(): Promise<boolean> {\n if (!isNode()) return false;\n try {\n const { createRequire } = await import(\"node:module\");\n const require = createRequire(import.meta.url);\n const mod = require(NATIVE_PACKAGE) as { kernel?: Kernel } | Kernel;\n const kernel = (mod as { kernel?: Kernel }).kernel ?? (mod as Kernel);\n setKernel(kernel);\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * Optional WebAssembly acceleration loader.\n *\n * Unlike the native addon, a WASM kernel runs in the browser too. This module\n * does nothing at import time; call {@link loadWasmKernel} with the compiled\n * module's bytes (or a streaming source) to instantiate it and install it as\n * the active {@link Kernel}. A real WASM build is shipped separately; this\n * loader is the stable entry point the rest of the library is wired through.\n */\n\nimport { setKernel, type Kernel } from \"./kernel.js\";\n\n/** A factory the WASM glue exposes: given the instance exports, build a Kernel. */\nexport type WasmKernelFactory = (\n exports: WebAssembly.Exports,\n) => Kernel;\n\n/**\n * Instantiate a WASM module and install the kernel it produces.\n *\n * @param source compiled-module bytes, a `Response`/stream, or a ready module.\n * @param factory wraps the instance exports into a {@link Kernel}.\n * @returns `true` once installed; throws only if instantiation itself fails.\n */\nexport async function loadWasmKernel(\n source: BufferSource | Response | PromiseLike<Response> | WebAssembly.Module,\n factory: WasmKernelFactory,\n imports: WebAssembly.Imports = {},\n): Promise<boolean> {\n let instance: WebAssembly.Instance;\n if (source instanceof WebAssembly.Module) {\n instance = await WebAssembly.instantiate(source, imports);\n } else if (\n typeof Response !== \"undefined\" &&\n (source instanceof Response || isThenable(source))\n ) {\n const result = await WebAssembly.instantiateStreaming(\n source as Response | PromiseLike<Response>,\n imports,\n );\n instance = result.instance;\n } else {\n const result = await WebAssembly.instantiate(source as BufferSource, imports);\n instance = result.instance;\n }\n setKernel(factory(instance.exports));\n return true;\n}\n\nfunction isThenable(x: unknown): x is PromiseLike<unknown> {\n return (\n typeof x === \"object\" &&\n x !== null &&\n typeof (x as { then?: unknown }).then === \"function\"\n );\n}\n"]}
|