tabulark 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +215 -110
- package/THIRD_PARTY_NOTICES.md +37 -0
- package/dist/adapters.d.ts +62 -0
- package/dist/arrow.d.ts +3 -0
- package/dist/arrow.js +2 -0
- package/dist/arrow.js.map +7 -0
- package/dist/client.d.ts +76 -0
- package/dist/errors.d.ts +19 -0
- package/dist/excel.d.ts +3 -0
- package/dist/excel.js +2 -0
- package/dist/excel.js.map +7 -0
- package/dist/experimental.d.ts +13 -0
- package/dist/experimental.js +2 -0
- package/dist/experimental.js.map +7 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +7 -0
- package/dist/model.d.ts +389 -0
- package/dist/official-adapter-manifest.d.ts +31 -0
- package/dist/parquet.d.ts +3 -0
- package/dist/parquet.js +2 -0
- package/dist/parquet.js.map +7 -0
- package/dist/protocol.d.ts +54 -0
- package/dist/range-cache.d.ts +28 -0
- package/dist/rpc-client.d.ts +18 -0
- package/dist/view/accessible-grid.d.ts +36 -0
- package/dist/view/canvas-painter.d.ts +91 -0
- package/dist/view/canvas-table-view-public.d.ts +58 -0
- package/dist/view/canvas-table-view.d.ts +32 -0
- package/dist/view/controller.d.ts +34 -0
- package/dist/view/layout.d.ts +34 -0
- package/dist/view/selection.d.ts +7 -0
- package/dist/view/types.d.ts +184 -0
- package/dist/wasm/arrow/tabulark_arrow.d.ts +126 -0
- package/dist/wasm/arrow/tabulark_arrow.js +771 -0
- package/dist/wasm/arrow/tabulark_arrow_bg.wasm +0 -0
- package/dist/wasm/arrow/tabulark_arrow_bg.wasm.d.ts +25 -0
- package/dist/wasm/delimited/tabulark_delimited.d.ts +131 -0
- package/dist/wasm/delimited/tabulark_delimited.js +845 -0
- package/dist/wasm/delimited/tabulark_delimited_bg.wasm +0 -0
- package/dist/wasm/delimited/tabulark_delimited_bg.wasm.d.ts +26 -0
- package/dist/wasm/excel/tabulark_excel.d.ts +121 -0
- package/dist/wasm/excel/tabulark_excel.js +766 -0
- package/dist/wasm/excel/tabulark_excel_bg.wasm +0 -0
- package/dist/wasm/excel/tabulark_excel_bg.wasm.d.ts +25 -0
- package/dist/wasm/parquet/tabulark_parquet.d.ts +121 -0
- package/dist/wasm/parquet/tabulark_parquet.js +754 -0
- package/dist/wasm/parquet/tabulark_parquet_bg.wasm +0 -0
- package/dist/wasm/parquet/tabulark_parquet_bg.wasm.d.ts +25 -0
- package/dist/worker/wasm-adapter.d.ts +57 -0
- package/dist/worker/worker-errors.d.ts +9 -0
- package/dist/worker.d.ts +1 -0
- package/dist/worker.js +2 -0
- package/dist/worker.js.map +7 -0
- package/package.json +55 -12
- package/js/index.d.ts +0 -18
- package/js/index.js +0 -26
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../js/protocol.ts", "../js/errors.ts", "../js/model.ts", "../js/range-cache.ts", "../js/worker/worker-errors.ts", "../js/worker/wasm-adapter.ts", "../js/official-adapters.json", "../js/official-adapter-manifest.ts", "../js/worker.ts"],
|
|
4
|
+
"sourcesContent": ["/** Version 3 introduces multi-table presentation and discriminated adapter steps. */\nexport const PROTOCOL_VERSION = 3 as const;\n\n/** Version of the private, built-in Rust adapter contract. */\nexport const ADAPTER_API_VERSION = 2 as const;\n\n/** Version of the descriptor + deduplicated-buffer batch transport. */\nexport const BATCH_LAYOUT_VERSION = 1 as const;\n\nexport type ProtocolVersion = typeof PROTOCOL_VERSION;\n\nexport type Operation =\n | \"hello\"\n | \"openSource\"\n | \"listTables\"\n | \"openTable\"\n | \"getMetadata\"\n | \"getPresentation\"\n | \"readPresentationRange\"\n | \"readRange\"\n | \"cancel\"\n | \"closeTable\"\n | \"closeSource\"\n | \"shutdown\";\n\nexport interface ProtocolRequest<T = unknown> {\n readonly protocolVersion: ProtocolVersion;\n readonly requestId: string;\n readonly op: Operation;\n readonly payload: T;\n}\n\nexport type ResponseKind =\n | \"hello\"\n | \"dataset\"\n | \"tables\"\n | \"table\"\n | \"metadata\"\n | \"presentation\"\n | \"presentationRange\"\n | \"batch\"\n | \"acknowledged\";\n\nexport interface ProtocolResult<T = unknown> {\n readonly kind: ResponseKind;\n readonly data?: T;\n}\n\nexport interface ProtocolSuccess<T = unknown> {\n readonly protocolVersion: ProtocolVersion;\n readonly requestId: string;\n readonly status: \"success\";\n readonly result: ProtocolResult<T>;\n}\n\nexport interface SerializedError {\n readonly code: string;\n readonly message: string;\n readonly retryable: boolean;\n readonly details?: unknown;\n}\n\nexport interface ProtocolFailure {\n readonly protocolVersion: ProtocolVersion;\n readonly requestId: string;\n readonly status: \"failure\";\n readonly error: SerializedError;\n}\n\nexport type ProtocolResponse<T = unknown> =\n | ProtocolSuccess<T>\n | ProtocolFailure;\n\nexport type RuntimeEventName =\n | \"progress\"\n | \"metadata\"\n | \"warning\"\n | \"closed\"\n | \"runtimeError\";\n\nexport interface ProtocolEvent<T = unknown> {\n readonly protocolVersion: ProtocolVersion;\n readonly requestId?: string;\n readonly event: RuntimeEventName;\n /** Required for dataset/table events; omitted only by a process-wide runtimeError. */\n readonly datasetHandle?: string;\n readonly tableHandle?: string;\n readonly tableId?: string;\n /** Revision associated with a table-scoped event, when known. */\n readonly revision?: number;\n readonly payload: T;\n}\n\nexport function isProtocolResponse(value: unknown): value is ProtocolResponse {\n if (!isRecord(value)) {\n return false;\n }\n\n return (\n value.protocolVersion === PROTOCOL_VERSION &&\n typeof value.requestId === \"string\" &&\n (value.status === \"success\" || value.status === \"failure\")\n );\n}\n\nexport function isProtocolEvent(value: unknown): value is ProtocolEvent {\n if (!isRecord(value)) {\n return false;\n }\n\n return (\n value.protocolVersion === PROTOCOL_VERSION &&\n typeof value.event === \"string\" &&\n \"payload\" in value\n );\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n", "import type { SerializedError } from \"./protocol.js\";\n\nexport type TabularkErrorCode =\n | \"INVALID_ARGUMENT\"\n | \"INVALID_RANGE\"\n | \"RANGE_NOT_INDEXED\"\n | \"RESOURCE_LIMIT\"\n | \"CANCELLED\"\n | \"HANDLE_CLOSED\"\n | \"PROTOCOL_INCOMPATIBLE\"\n | \"PARSE_FAILED\"\n | \"UNSUPPORTED_FEATURE\"\n | \"UNSUPPORTED_RUNTIME\"\n | \"RUNTIME_FAILURE\"\n | (string & {});\n\n/** A stable, serializable error returned by Tabulark. */\nexport class TabularkError extends Error {\n readonly code: TabularkErrorCode;\n readonly retryable: boolean;\n readonly details?: unknown;\n\n constructor(\n code: TabularkErrorCode,\n message: string,\n options: { retryable?: boolean; details?: unknown; cause?: unknown } = {},\n ) {\n super(message, { cause: options.cause });\n this.name = \"TabularkError\";\n this.code = code;\n this.retryable = options.retryable ?? false;\n this.details = code === \"RESOURCE_LIMIT\"\n ? normalizeResourceLimitDetails(options.details)\n : options.details;\n }\n\n static fromSerialized(error: SerializedError): TabularkError {\n return new TabularkError(error.code, error.message, {\n retryable: error.retryable,\n details: error.details,\n });\n }\n}\n\n/** @internal Ensures every resource-limit error has a stable capacity shape. */\nexport function normalizeResourceLimitDetails(details: unknown): Readonly<Record<string, unknown>> {\n const raw = isRecord(details) ? details : {};\n const resource = typeof raw.resource === \"string\" && raw.resource.length > 0\n ? raw.resource\n : typeof raw.resourceCategory === \"string\" && raw.resourceCategory.length > 0\n ? raw.resourceCategory\n : inferResource(raw);\n if (isQuantity(raw.requiredBytes) && isQuantity(raw.availableBytes)) {\n return Object.freeze({ ...raw, resource });\n }\n if (isQuantity(raw.required) && isQuantity(raw.available)) {\n return Object.freeze({ ...raw, resource });\n }\n\n const byteLimit = firstQuantity(raw, [\n \"maxDecodedBytes\",\n \"maxOutputBytes\",\n \"maxMetadataBytes\",\n \"maxBlockBytes\",\n \"maxDisplayCellBytes\",\n \"maxDisplayBytes\",\n \"maxSourceBytes\",\n \"maxFieldBytes\",\n \"maxBatchBytes\",\n \"maxOperationBytes\",\n \"maxZipEntryBytes\",\n \"maxZipUncompressedBytes\",\n \"maxCfbStreamBytes\",\n ]);\n if (byteLimit !== undefined) {\n const requiredBytes = firstQuantity(raw, [\n \"decodedBytes\",\n \"outputBytes\",\n \"metadataBytes\",\n \"blockBytes\",\n \"displayCellBytes\",\n \"displayBytes\",\n \"sourceBytes\",\n \"fieldBytes\",\n \"batchBytes\",\n \"operationBytes\",\n ]) ?? byteLimit + 1;\n return Object.freeze({\n ...raw,\n resource,\n requiredBytes,\n availableBytes: byteLimit,\n });\n }\n\n const available = firstQuantity(raw, [\n \"limit\",\n \"maxCells\",\n \"maxRangeCells\",\n \"maxSources\",\n \"maxActiveRanges\",\n \"maxRangeWaiters\",\n \"maxColumns\",\n \"maxFields\",\n \"maxNestingDepth\",\n \"maxWorksheetRows\",\n \"maxWorksheetColumns\",\n \"maxStyles\",\n \"maxMergedRegions\",\n ]) ?? 0;\n const required = firstQuantity(raw, [\n \"cells\",\n \"cellCount\",\n \"visibleCellCount\",\n \"sources\",\n \"activeRanges\",\n \"rangeWaiters\",\n \"columns\",\n \"fields\",\n \"nestingDepth\",\n \"worksheetRows\",\n \"worksheetColumns\",\n \"styles\",\n \"mergedRegions\",\n ]) ?? available + 1;\n return Object.freeze({ ...raw, resource, required, available });\n}\n\nfunction inferResource(details: Record<string, unknown>): string {\n const keys = Object.keys(details).join(\" \").toLowerCase();\n if (keys.includes(\"source\")) return keys.includes(\"byte\") ? \"source-staging\" : \"source-slots\";\n if (keys.includes(\"metadata\")) return \"metadata\";\n if (keys.includes(\"decoded\") || keys.includes(\"decompress\")) return \"decompression\";\n if (keys.includes(\"display\")) return \"display-values\";\n if (keys.includes(\"field\")) return \"field\";\n if (keys.includes(\"batch\")) return \"batch\";\n if (keys.includes(\"range\") || keys.includes(\"cell\")) return \"range-cells\";\n if (keys.includes(\"column\")) return \"columns\";\n if (keys.includes(\"nest\")) return \"descriptor-nesting\";\n if (keys.includes(\"worksheet\")) return \"worksheet-dimensions\";\n return \"adapter-resource\";\n}\n\nfunction firstQuantity(\n details: Record<string, unknown>,\n names: readonly string[],\n): number | undefined {\n for (const name of names) {\n if (isQuantity(details[name])) return details[name] as number;\n }\n return undefined;\n}\n\nfunction isQuantity(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function cancelledError(): TabularkError {\n return new TabularkError(\"CANCELLED\", \"The operation was cancelled\");\n}\n\nexport function closedError(resource: string): TabularkError {\n return new TabularkError(\"HANDLE_CLOSED\", `${resource} is closed`);\n}\n\nexport function invalidArgument(message: string, details?: unknown): TabularkError {\n return new TabularkError(\"INVALID_ARGUMENT\", message, { details });\n}\n", "import { TabularkError, invalidArgument } from \"./errors.js\";\nimport { BATCH_LAYOUT_VERSION } from \"./protocol.js\";\n\nexport const DEFAULT_MEMORY_BUDGET_BYTES = 256 * 1024 * 1024;\nexport const MAX_ARRAY_BUFFER_BYTES = 128 * 1024 * 1024;\nexport const MAX_RANGE_CELLS = 250_000;\nexport const DEFAULT_TO_ROWS_CELL_LIMIT = 10_000;\nexport const MAX_NESTING_DEPTH = 64;\n\nconst INDEX_BUDGET_MAX_BYTES = 64 * 1024 * 1024;\nconst WORKER_RANGE_CACHE_MAX_BYTES = 96 * 1024 * 1024;\nconst MAIN_THREAD_RANGE_CACHE_MAX_BYTES = 32 * 1024 * 1024;\nconst FIELD_AND_BATCH_MAX_BYTES = 8 * 1024 * 1024;\n\nexport const MAX_SOURCES = 2;\nexport const MAX_ACTIVE_RANGES = 2;\nexport const MAX_RANGE_WAITERS = 8;\n\nexport interface MemoryBudgetLimits {\n readonly memoryBudgetBytes: number;\n /** Shared retained capacity allocated among the adapters actually registered. */\n readonly adapterRuntimePoolBytes: number;\n /** Maximum transient/decoded budget retained by one active adapter operation. */\n readonly operationBudgetBytes: number;\n readonly indexBudgetBytes: number;\n readonly adapterTileCacheBudgetBytes: number;\n readonly workerRangeCacheBytes: number;\n readonly workerDatasetRangeCacheBytes: number;\n readonly mainThreadRangeCacheBytes: number;\n readonly maxFieldBytes: number;\n readonly maxBatchBytes: number;\n readonly maxArrayBufferBytes: number;\n readonly maxSources: number;\n readonly maxActiveRanges: number;\n readonly maxRangeWaiters: number;\n}\n\n/** Derives every bounded runtime allocation from one engine-wide budget. */\nexport function deriveMemoryBudgetLimits(memoryBudgetBytes: number): MemoryBudgetLimits {\n assertPositiveSafeInteger(memoryBudgetBytes, \"memoryBudgetBytes\");\n const oneEighth = Math.floor(memoryBudgetBytes / 8);\n const oneThirtySecond = Math.floor(memoryBudgetBytes / 32);\n // The Worker allocates this pool through one reservation ledger using the\n // adapters actually registered for an engine. This deliberately avoids a\n // hard-coded split based on a historic number of built-in adapters.\n const adapterRuntimePoolBytes = Math.max(1, Math.floor(memoryBudgetBytes / 2));\n const operationBudgetBytes = Math.max(1, Math.floor(memoryBudgetBytes / 8));\n const workerRangeCacheBytes = Math.min(\n WORKER_RANGE_CACHE_MAX_BYTES,\n Math.floor((memoryBudgetBytes / 8) * 3),\n );\n return Object.freeze({\n memoryBudgetBytes,\n adapterRuntimePoolBytes,\n operationBudgetBytes,\n indexBudgetBytes: Math.min(INDEX_BUDGET_MAX_BYTES, oneEighth),\n adapterTileCacheBudgetBytes: Math.min(WORKER_RANGE_CACHE_MAX_BYTES, operationBudgetBytes),\n workerRangeCacheBytes,\n workerDatasetRangeCacheBytes: Math.floor(workerRangeCacheBytes / MAX_SOURCES),\n mainThreadRangeCacheBytes: Math.min(MAIN_THREAD_RANGE_CACHE_MAX_BYTES, oneEighth),\n maxFieldBytes: Math.min(FIELD_AND_BATCH_MAX_BYTES, oneThirtySecond),\n maxBatchBytes: Math.min(FIELD_AND_BATCH_MAX_BYTES, oneThirtySecond),\n maxArrayBufferBytes: Math.min(MAX_ARRAY_BUFFER_BYTES, Math.floor(memoryBudgetBytes / 2)),\n maxSources: MAX_SOURCES,\n maxActiveRanges: MAX_ACTIVE_RANGES,\n maxRangeWaiters: MAX_RANGE_WAITERS,\n });\n}\n\nexport type MemoryResourceKind =\n | \"adapter-runtime\"\n | \"source-staging\"\n | \"compressed-page\"\n | \"decompression\"\n | \"opened-worksheet\"\n | \"batch\"\n | \"range-cache\";\n\nexport interface MemoryReservation {\n readonly resource: MemoryResourceKind;\n readonly bytes: number;\n release(): void;\n}\n\n/**\n * Single-accounting ledger for Worker-owned bounded allocations.\n *\n * A reservation is deliberately idempotent so cancellation, close and failure\n * races can all execute their normal cleanup paths without double accounting.\n */\nexport class MemoryReservationLedger {\n readonly #capacityBytes: number;\n #usedBytes = 0;\n\n constructor(capacityBytes: number) {\n assertPositiveSafeInteger(capacityBytes, \"capacityBytes\");\n this.#capacityBytes = capacityBytes;\n }\n\n get capacityBytes(): number {\n return this.#capacityBytes;\n }\n\n get usedBytes(): number {\n return this.#usedBytes;\n }\n\n get availableBytes(): number {\n return this.#capacityBytes - this.#usedBytes;\n }\n\n reserve(resource: MemoryResourceKind, bytes: number): MemoryReservation {\n if (!Number.isSafeInteger(bytes) || bytes < 0) {\n throw invalidArgument(\"Reservation bytes must be a non-negative safe integer\");\n }\n const availableBytes = this.availableBytes;\n if (bytes > availableBytes) {\n throw new TabularkError(\n \"RESOURCE_LIMIT\",\n `Insufficient memory reservation capacity for ${resource}`,\n { details: { resource, requiredBytes: bytes, availableBytes } },\n );\n }\n this.#usedBytes += bytes;\n let released = false;\n return Object.freeze({\n resource,\n bytes,\n release: () => {\n if (released) return;\n released = true;\n this.#usedBytes -= bytes;\n },\n });\n }\n}\n\nexport type AxisExtent =\n | Readonly<{ kind: \"exact\"; value: number }>\n | Readonly<{ kind: \"at-least\"; value: number }>\n | Readonly<{ kind: \"unknown\" }>;\n\nexport interface TableExtent {\n readonly rows: AxisExtent;\n readonly columns: AxisExtent;\n}\n\nexport type TimeUnit = \"second\" | \"millisecond\" | \"microsecond\" | \"nanosecond\";\nexport type IntervalUnit = \"year-month\" | \"day-time\" | \"month-day-nano\";\n\nexport interface ArrowField {\n readonly name: string;\n readonly nullable: boolean;\n readonly dataType: ArrowDataType;\n readonly metadata?: Readonly<Record<string, string>>;\n}\n\ninterface SimpleDataType<Type extends string> {\n readonly type: Type;\n}\n\n/** A recursive representation of every arrow-schema 59.1.0 built-in DataType. */\nexport type ArrowDataType =\n | SimpleDataType<\n | \"null\"\n | \"unknown\"\n | \"boolean\"\n | \"int8\"\n | \"int16\"\n | \"int32\"\n | \"int64\"\n | \"uint8\"\n | \"uint16\"\n | \"uint32\"\n | \"uint64\"\n | \"float16\"\n | \"float32\"\n | \"float64\"\n | \"date32\"\n | \"date64\"\n | \"binary\"\n | \"large-binary\"\n | \"binary-view\"\n | \"utf8\"\n | \"large-utf8\"\n | \"utf8-view\"\n >\n | Readonly<{ type: \"timestamp\"; unit: TimeUnit; timezone?: string }>\n | Readonly<{ type: \"time32\" | \"time64\" | \"duration\"; unit: TimeUnit }>\n | Readonly<{ type: \"interval\"; unit: IntervalUnit }>\n | Readonly<{ type: \"fixed-size-binary\"; byteWidth: number }>\n | Readonly<{ type: \"decimal32\" | \"decimal64\" | \"decimal128\" | \"decimal256\"; precision: number; scale: number }>\n | Readonly<{ type: \"list\" | \"large-list\" | \"list-view\" | \"large-list-view\"; field: ArrowField }>\n | Readonly<{ type: \"fixed-size-list\"; field: ArrowField; listSize: number }>\n | Readonly<{ type: \"struct\"; fields: readonly ArrowField[] }>\n | Readonly<{\n type: \"union\";\n mode: \"sparse\" | \"dense\";\n fields: readonly Readonly<{ typeId: number; field: ArrowField }>[];\n }>\n | Readonly<{\n type: \"dictionary\";\n indexType: ArrowDataType;\n valueType: ArrowDataType;\n ordered?: boolean;\n }>\n | Readonly<{ type: \"map\"; entries: ArrowField; keysSorted: boolean }>\n | Readonly<{ type: \"run-end-encoded\"; runEnds: ArrowField; values: ArrowField }>\n | Readonly<{\n type: \"extension\";\n name: string;\n metadata?: string;\n storageType: ArrowDataType;\n }>;\n\nexport interface ColumnSchema {\n readonly id: string;\n readonly name: string;\n readonly index: number;\n readonly dataType: ArrowDataType;\n readonly nullable: boolean;\n readonly metadata?: Readonly<Record<string, string>>;\n}\n\nexport interface TableCapabilities {\n readonly randomAccess: \"indexed-prefix\" | \"full\";\n readonly typedValues: boolean;\n readonly search: boolean;\n readonly sort: boolean;\n readonly filter: boolean;\n readonly multiTable: boolean;\n readonly [name: string]: unknown;\n}\n\nexport interface TableMetadata {\n readonly tableId: string;\n readonly name: string;\n readonly revision: number;\n readonly extent: Readonly<TableExtent>;\n readonly schema: Readonly<{\n readonly version: number;\n readonly columns: readonly Readonly<ColumnSchema>[];\n }>;\n readonly capabilities: Readonly<TableCapabilities>;\n}\n\nexport type WorksheetVisibility = \"visible\" | \"hidden\" | \"very-hidden\";\n\n/** One sparse row or column override supplied by a spreadsheet presentation. */\nexport interface PresentationAxisEntry {\n readonly index: number;\n /** CSS pixel extent when the source supplies an explicit dimension. */\n readonly size?: number;\n readonly hidden?: boolean;\n}\n\nexport interface PresentationColor {\n /** CSS-compatible resolved color, when the workbook supplied one. */\n readonly css?: string;\n}\n\nexport interface PresentationFont {\n readonly family?: string;\n readonly size?: number;\n readonly bold?: boolean;\n readonly italic?: boolean;\n readonly underline?: boolean;\n readonly color?: PresentationColor;\n}\n\nexport interface PresentationBorderSide {\n readonly style?: \"none\" | \"thin\" | \"medium\" | \"thick\" | \"dashed\" | \"dotted\" | \"double\";\n readonly color?: PresentationColor;\n}\n\n/** Static cell styling that 0.1 preserves from spreadsheet input. */\nexport interface PresentationStyle {\n readonly numberFormat?: string;\n readonly font?: PresentationFont;\n readonly foregroundColor?: PresentationColor;\n readonly backgroundColor?: PresentationColor;\n readonly fillColor?: PresentationColor;\n readonly borders?: Readonly<{\n readonly top?: PresentationBorderSide;\n readonly right?: PresentationBorderSide;\n readonly bottom?: PresentationBorderSide;\n readonly left?: PresentationBorderSide;\n }>;\n readonly horizontalAlignment?: \"general\" | \"left\" | \"center\" | \"right\" | \"justify\";\n readonly verticalAlignment?: \"top\" | \"center\" | \"bottom\" | \"justify\";\n readonly wrapText?: boolean;\n}\n\nexport interface MergedCellRegion {\n readonly rowStart: number;\n readonly rowEnd: number;\n readonly columnStart: number;\n readonly columnEnd: number;\n}\n\n/**\n * Presentation metadata for a worksheet. It is intentionally static: formula\n * calculation and document round-tripping are outside the 0.1 contract.\n */\nexport interface SpreadsheetPresentation {\n readonly kind: \"spreadsheet-v1\";\n readonly tableId: string;\n readonly revision: number;\n readonly visibility: WorksheetVisibility;\n readonly frozenRows: number;\n readonly frozenColumns: number;\n readonly rows: readonly PresentationAxisEntry[];\n readonly columns: readonly PresentationAxisEntry[];\n /** Deduplicated styles addressed by `SpreadsheetPresentationRange.styleIds`. */\n readonly styles: readonly PresentationStyle[];\n}\n\nexport type TablePresentation = SpreadsheetPresentation;\n\nexport interface SpreadsheetPresentationRange {\n readonly kind: \"spreadsheet-v1\";\n readonly tableId: string;\n readonly revision: number;\n readonly range: Readonly<ReturnedRange>;\n /** Rows and columns are exactly aligned with `range`; null means no style. */\n readonly styleIds: readonly (readonly (number | null)[])[];\n readonly mergedCells: readonly MergedCellRegion[];\n /** Sparse layout entries that intersect this requested range. */\n readonly rows: readonly PresentationAxisEntry[];\n readonly columns: readonly PresentationAxisEntry[];\n}\n\nexport type PresentationRange = SpreadsheetPresentationRange;\n\nexport interface TableDescriptor {\n readonly id: string;\n readonly name: string;\n}\n\nexport interface RangeRequest {\n readonly rowStart: number;\n readonly rowCount: number;\n readonly columnStart: number;\n readonly columnCount: number;\n}\n\nexport interface ReturnedRange extends RangeRequest {}\n\n/** A byte region in the batch's deduplicated buffer pool. */\nexport interface BatchBufferRegion {\n readonly buffer: number;\n readonly byteOffset?: number;\n readonly byteLength?: number;\n /** First bit for bitmap regions; ignored for byte-oriented regions. */\n readonly bitOffset?: number;\n}\n\n/** UTF-8 text generated by Rust for rendering, ARIA, width measurement and copy. */\nexport interface DisplayColumnDescriptor {\n readonly encoding: \"utf8\";\n readonly data: BatchBufferRegion;\n readonly offsets: BatchBufferRegion;\n readonly validity?: BatchBufferRegion;\n /** Logical offset into the display arrays, for sliced batches. */\n readonly offset?: number;\n}\n\n/**\n * Recursive Arrow ArrayData layout. Buffer regions always point into the\n * enclosing TableBatch buffer pool; encoded dictionaries and run ends remain\n * visible in this descriptor even though `toRows()` returns logical values.\n */\nexport interface NativeColumnDescriptor {\n /** Rust ArrayData layout encoding (for example `dictionary` or `run-end-encoded`). */\n readonly encoding?: string;\n readonly dataType: ArrowDataType;\n readonly length: number;\n readonly offset?: number;\n readonly validity?: BatchBufferRegion;\n readonly values?: BatchBufferRegion;\n readonly offsets?: BatchBufferRegion;\n readonly sizes?: BatchBufferRegion;\n readonly data?: BatchBufferRegion;\n readonly typeIds?: BatchBufferRegion;\n readonly unionOffsets?: BatchBufferRegion;\n readonly variadicBuffers?: readonly BatchBufferRegion[];\n readonly children?: readonly NativeColumnDescriptor[];\n readonly dictionary?: NativeColumnDescriptor;\n readonly runEnds?: NativeColumnDescriptor;\n readonly typeId?: number;\n}\n\n/** @internal Layout-v1 column descriptor received from an official WASM runtime. */\nexport interface WireTableBatchColumn {\n readonly columnId: string;\n readonly native: NativeColumnDescriptor;\n readonly display: DisplayColumnDescriptor;\n}\n\nexport interface DecimalValue {\n readonly kind: \"decimal\";\n readonly unscaled: bigint;\n readonly precision: number;\n readonly scale: number;\n}\n\nexport interface TemporalValue {\n readonly kind: \"date32\" | \"date64\" | \"time32\" | \"time64\" | \"timestamp\" | \"duration\";\n readonly value: number | bigint;\n readonly unit?: TimeUnit;\n readonly timezone?: string;\n}\n\nexport interface IntervalValue {\n readonly kind: \"interval\";\n readonly unit: IntervalUnit;\n readonly months?: number;\n readonly days?: number;\n readonly milliseconds?: number;\n readonly nanoseconds?: bigint;\n}\n\nexport interface UnionValue {\n readonly kind: \"union\";\n readonly typeId: number;\n readonly value: NativeValue | null;\n}\n\nexport interface MapEntryValue {\n readonly key: NativeValue | null;\n readonly value: NativeValue | null;\n}\n\nexport interface NativeListValue extends ReadonlyArray<NativeValue | null> {}\nexport interface NativeStructValue {\n readonly [name: string]: NativeValue | null;\n}\nexport interface NativeMapValue extends ReadonlyArray<Readonly<MapEntryValue>> {}\n\nexport type NativeValue =\n | boolean\n | number\n | bigint\n | string\n | Uint8Array\n | DecimalValue\n | TemporalValue\n | IntervalValue\n | UnionValue\n | NativeListValue\n | NativeStructValue\n | NativeMapValue;\n\nexport interface ToRowsOptions {\n /** Maximum decoded cells. Defaults to 10,000. */\n readonly maxCells?: number;\n}\n\n/**\n * Logical, column-oriented access to one returned batch column.\n *\n * Values are indexed relative to `TableBatch.range.rowStart`; physical buffer\n * regions and adapter transport details intentionally remain private.\n */\nexport interface TableBatchColumn {\n readonly columnId: string;\n readonly columnIndex: number;\n readonly rowCount: number;\n getValue(rowOffset: number): NativeValue | null;\n getDisplayValue(rowOffset: number): string | null;\n toValues(options?: ToRowsOptions): (NativeValue | null)[];\n toDisplayValues(options?: ToRowsOptions): (string | null)[];\n}\n\n/** Stable logical batch contract. Wire buffers and ABI layout stay private. */\nexport interface TableBatch {\n readonly tableId: string;\n readonly revision: number;\n readonly schemaVersion: number;\n readonly range: Readonly<ReturnedRange>;\n readonly columns: readonly TableBatchColumn[];\n readonly complete: boolean;\n toRows(options?: ToRowsOptions): (NativeValue | null)[][];\n toDisplayRows(options?: ToRowsOptions): (string | null)[][];\n}\n\nexport type WireBatchBuffer = ArrayBuffer | ArrayBufferView;\n\nexport interface WireTableBatch {\n readonly layoutVersion: typeof BATCH_LAYOUT_VERSION;\n readonly tableId: string;\n readonly revision: number;\n readonly schemaVersion: number;\n readonly range: ReturnedRange;\n readonly buffers: readonly WireBatchBuffer[];\n readonly columns: readonly WireTableBatchColumn[];\n readonly complete: boolean;\n}\n\n/** Owns and validates one generic layout-v1 batch received from the Worker. */\nexport class ColumnarTableBatch implements TableBatch {\n readonly tableId: string;\n readonly revision: number;\n readonly schemaVersion: number;\n readonly range: Readonly<ReturnedRange>;\n readonly columns: readonly TableBatchColumn[];\n readonly complete: boolean;\n readonly #buffers: readonly Uint8Array[];\n readonly #wireColumns: readonly WireTableBatchColumn[];\n\n constructor(value: WireTableBatch) {\n if (value.layoutVersion !== BATCH_LAYOUT_VERSION) {\n throw invalidArgument(\n `Batch layout ${String(value.layoutVersion)} is incompatible with layout ${BATCH_LAYOUT_VERSION}`,\n );\n }\n this.tableId = value.tableId;\n this.revision = value.revision;\n this.schemaVersion = value.schemaVersion;\n this.range = Object.freeze({ ...value.range });\n this.#buffers = Object.freeze(value.buffers.map(asUint8Array));\n this.#wireColumns = Object.freeze(value.columns.map((column) => freezeWireColumn(column)));\n this.complete = value.complete;\n validateWireBatch(this.range, this.#buffers, this.#wireColumns);\n this.columns = Object.freeze(this.#wireColumns.map((column, index) => new LogicalBatchColumn(\n column,\n this.#buffers,\n this.range.rowCount,\n this.range.columnStart + index,\n )));\n }\n\n toRows(options: ToRowsOptions = {}): (NativeValue | null)[][] {\n const maxCells = normalizeCellLimit(options.maxCells);\n assertCellLimit(this.range.rowCount, this.columns.length, maxCells);\n const rows: (NativeValue | null)[][] = Array.from(\n { length: this.range.rowCount },\n () => Array<NativeValue | null>(this.columns.length),\n );\n for (let columnIndex = 0; columnIndex < this.columns.length; columnIndex += 1) {\n for (let rowIndex = 0; rowIndex < this.range.rowCount; rowIndex += 1) {\n rows[rowIndex]![columnIndex] = this.columns[columnIndex]!.getValue(rowIndex);\n }\n }\n return rows;\n }\n\n toDisplayRows(options: ToRowsOptions = {}): (string | null)[][] {\n const maxCells = normalizeCellLimit(options.maxCells);\n assertCellLimit(this.range.rowCount, this.columns.length, maxCells);\n const rows: (string | null)[][] = Array.from(\n { length: this.range.rowCount },\n () => Array<string | null>(this.columns.length),\n );\n\n for (let columnIndex = 0; columnIndex < this.columns.length; columnIndex += 1) {\n for (let rowIndex = 0; rowIndex < this.range.rowCount; rowIndex += 1) {\n rows[rowIndex]![columnIndex] = this.columns[columnIndex]!.getDisplayValue(rowIndex);\n }\n }\n return rows;\n }\n}\n\nclass LogicalBatchColumn implements TableBatchColumn {\n readonly columnId: string;\n readonly columnIndex: number;\n readonly rowCount: number;\n readonly #wire: WireTableBatchColumn;\n readonly #buffers: readonly Uint8Array[];\n\n constructor(\n wire: WireTableBatchColumn,\n buffers: readonly Uint8Array[],\n rowCount: number,\n columnIndex: number,\n ) {\n this.columnId = wire.columnId;\n this.columnIndex = columnIndex;\n this.rowCount = rowCount;\n this.#wire = wire;\n this.#buffers = buffers;\n Object.freeze(this);\n }\n\n getValue(rowOffset: number): NativeValue | null {\n assertBatchRowOffset(rowOffset, this.rowCount);\n return decodeNativeValue(this.#wire.native, rowOffset, this.#buffers, 0);\n }\n\n getDisplayValue(rowOffset: number): string | null {\n assertBatchRowOffset(rowOffset, this.rowCount);\n return decodeDisplayValue(this.#wire.display, rowOffset, this.#buffers, this.columnId);\n }\n\n toValues(options: ToRowsOptions = {}): (NativeValue | null)[] {\n const maxCells = normalizeCellLimit(options.maxCells);\n assertCellLimit(this.rowCount, 1, maxCells);\n return Array.from({ length: this.rowCount }, (_, index) => this.getValue(index));\n }\n\n toDisplayValues(options: ToRowsOptions = {}): (string | null)[] {\n const maxCells = normalizeCellLimit(options.maxCells);\n assertCellLimit(this.rowCount, 1, maxCells);\n return Array.from({ length: this.rowCount }, (_, index) => this.getDisplayValue(index));\n }\n}\n\nfunction assertBatchRowOffset(rowOffset: number, rowCount: number): void {\n if (!Number.isSafeInteger(rowOffset) || rowOffset < 0 || rowOffset >= rowCount) {\n throw invalidArgument(`Batch row offset must be an integer from 0 through ${Math.max(0, rowCount - 1)}`);\n }\n}\n\nfunction decodeDisplayValue(\n display: DisplayColumnDescriptor,\n rowOffset: number,\n buffers: readonly Uint8Array[],\n columnId: string,\n): string | null {\n const physicalIndex = (display.offset ?? 0) + rowOffset;\n if (!validAt(display.validity, physicalIndex, buffers)) {\n return null;\n }\n const offsets = regionView(display.offsets, buffers, \"display offsets\");\n const data = regionView(display.data, buffers, \"display data\");\n const start = readUnsignedOffset(offsets, physicalIndex, 4);\n const end = readUnsignedOffset(offsets, physicalIndex + 1, 4);\n if (end < start || end > data.byteLength) {\n throw invalidArgument(`Column ${columnId} has invalid display offsets`);\n }\n return new TextDecoder().decode(data.subarray(start, end));\n}\n\nexport function validateRange(request: RangeRequest): RangeRequest {\n for (const [name, value] of Object.entries(request)) {\n assertNonNegativeSafeInteger(value, name);\n }\n if (\n !Number.isSafeInteger(request.rowStart + request.rowCount)\n || !Number.isSafeInteger(request.columnStart + request.columnCount)\n ) {\n throw new TabularkError(\"INVALID_RANGE\", \"Range end must be a safe integer\");\n }\n const cells = request.rowCount * request.columnCount;\n if (!Number.isSafeInteger(cells) || cells > MAX_RANGE_CELLS) {\n throw new TabularkError(\n \"RESOURCE_LIMIT\",\n `A range may contain at most ${MAX_RANGE_CELLS} cells`,\n {\n details: {\n resource: \"range-cells\",\n required: cells,\n available: MAX_RANGE_CELLS,\n cells,\n limit: MAX_RANGE_CELLS,\n },\n },\n );\n }\n return Object.freeze({ ...request });\n}\n\nexport function normalizeMetadata(value: TableMetadata): Readonly<TableMetadata> {\n return Object.freeze({\n ...value,\n extent: Object.freeze({\n rows: Object.freeze({ ...value.extent.rows }),\n columns: Object.freeze({ ...value.extent.columns }),\n }),\n schema: Object.freeze({\n version: value.schema.version,\n columns: Object.freeze(value.schema.columns.map((column) => Object.freeze({\n ...column,\n dataType: freezeDataType(column.dataType),\n ...(column.metadata ? { metadata: Object.freeze({ ...column.metadata }) } : {}),\n }))),\n }),\n capabilities: Object.freeze({ ...value.capabilities }),\n });\n}\n\n/** Normalizes a protocol DataType and rejects cycles or excessive nesting. */\nexport function normalizeDataType(value: unknown, depth = 0): ArrowDataType {\n if (depth >= MAX_NESTING_DEPTH) {\n throw invalidArgument(`Arrow data type nesting may not exceed ${MAX_NESTING_DEPTH}`);\n }\n if (!isRecord(value) || typeof value.type !== \"string\") {\n throw invalidArgument(\"Column dataType must be a recursive Arrow data type descriptor\");\n }\n const type: string = ({\n \"u-int8\": \"uint8\",\n \"u-int16\": \"uint16\",\n \"u-int32\": \"uint32\",\n \"u-int64\": \"uint64\",\n } as const)[value.type as \"u-int8\" | \"u-int16\" | \"u-int32\" | \"u-int64\"] ?? value.type;\n const simple = new Set([\n \"unknown\", \"null\", \"boolean\", \"int8\", \"int16\", \"int32\", \"int64\", \"uint8\", \"uint16\", \"uint32\", \"uint64\",\n \"float16\", \"float32\", \"float64\", \"date32\", \"date64\", \"binary\", \"large-binary\", \"binary-view\",\n \"utf8\", \"large-utf8\", \"utf8-view\",\n ]);\n if (simple.has(type)) {\n return Object.freeze({ type }) as ArrowDataType;\n }\n if (type === \"timestamp\") {\n return Object.freeze({\n type,\n unit: timeUnit(value.unit),\n ...(typeof value.timezone === \"string\" ? { timezone: value.timezone } : {}),\n });\n }\n if (type === \"time32\" || type === \"time64\" || type === \"duration\") {\n return Object.freeze({ type, unit: timeUnit(value.unit) });\n }\n if (type === \"interval\") {\n return Object.freeze({ type, unit: intervalUnit(value.unit) });\n }\n if (type === \"fixed-size-binary\") {\n return Object.freeze({\n type,\n byteWidth: positiveInteger(value.byteWidth ?? value.byte_width, \"byteWidth\"),\n });\n }\n if (type === \"decimal32\" || type === \"decimal64\" || type === \"decimal128\" || type === \"decimal256\") {\n return Object.freeze({\n type,\n precision: positiveInteger(value.precision, \"precision\"),\n scale: integer(value.scale, \"scale\"),\n });\n }\n if (type === \"list\" || type === \"large-list\" || type === \"list-view\" || type === \"large-list-view\") {\n return Object.freeze({ type, field: normalizeField(value.field, depth + 1) });\n }\n if (type === \"fixed-size-list\") {\n return Object.freeze({\n type,\n field: normalizeField(value.field, depth + 1),\n listSize: positiveInteger(value.listSize ?? value.list_size, \"listSize\"),\n });\n }\n if (type === \"struct\") {\n if (!Array.isArray(value.fields)) {\n throw invalidArgument(\"Struct fields must be an array\");\n }\n return Object.freeze({\n type,\n fields: Object.freeze(value.fields.map((field) => normalizeField(field, depth + 1))),\n });\n }\n if (type === \"union\") {\n if (!Array.isArray(value.fields) || (value.mode !== \"sparse\" && value.mode !== \"dense\")) {\n throw invalidArgument(\"Union dataType requires a mode and fields\");\n }\n return Object.freeze({\n type,\n mode: value.mode,\n fields: Object.freeze(value.fields.map((entry) => {\n if (!isRecord(entry)) {\n throw invalidArgument(\"Union field entries must be objects\");\n }\n return Object.freeze({\n typeId: integer(entry.typeId, \"typeId\"),\n field: normalizeField(entry.field, depth + 1),\n });\n })),\n });\n }\n if (type === \"dictionary\") {\n return Object.freeze({\n type,\n indexType: normalizeDataType(value.indexType, depth + 1),\n valueType: normalizeDataType(value.valueType, depth + 1),\n ...(value.ordered === true ? { ordered: true } : {}),\n });\n }\n if (type === \"map\") {\n return Object.freeze({\n type,\n entries: normalizeField(value.entries, depth + 1),\n keysSorted: value.keysSorted === true || value.keys_sorted === true,\n });\n }\n if (type === \"run-end-encoded\") {\n return Object.freeze({\n type,\n runEnds: normalizeField(value.runEnds ?? value.run_ends, depth + 1),\n values: normalizeField(value.values, depth + 1),\n });\n }\n if (type === \"extension\") {\n if (typeof value.name !== \"string\" || value.name.length === 0) {\n throw invalidArgument(\"Arrow extension name must be a non-empty string\");\n }\n return Object.freeze({\n type,\n name: value.name,\n ...(typeof value.metadata === \"string\" ? { metadata: value.metadata } : {}),\n storageType: normalizeDataType(value.storageType, depth + 1),\n });\n }\n throw invalidArgument(`Unknown Arrow data type: ${type}`);\n}\n\nfunction normalizeField(value: unknown, depth: number): ArrowField {\n if (!isRecord(value)) {\n throw invalidArgument(\"Arrow field must be an object\");\n }\n const metadata = isRecord(value.metadata)\n ? Object.freeze(Object.fromEntries(Object.entries(value.metadata).map(([key, entry]) => [key, String(entry)])))\n : undefined;\n return Object.freeze({\n name: typeof value.name === \"string\" ? value.name : \"\",\n nullable: value.nullable !== false,\n dataType: normalizeDataType(value.dataType, depth),\n ...(metadata ? { metadata } : {}),\n });\n}\n\nfunction validateWireBatch(\n range: Readonly<ReturnedRange>,\n buffers: readonly Uint8Array[],\n columns: readonly WireTableBatchColumn[],\n): void {\n validateRange(range);\n if (columns.length !== range.columnCount) {\n throw invalidArgument(\n `Batch has ${columns.length} columns; expected ${range.columnCount}`,\n );\n }\n for (const [index, column] of columns.entries()) {\n validateDisplay(column.display, range.rowCount, buffers, column.columnId);\n validateNative(column.native, buffers, 0, `columns[${index}].native`);\n if (column.native.length < range.rowCount) {\n throw invalidArgument(`Column ${column.columnId} is shorter than the returned range`);\n }\n }\n}\n\nfunction validateDisplay(\n display: DisplayColumnDescriptor,\n rows: number,\n buffers: readonly Uint8Array[],\n columnId: string,\n): void {\n const offset = display.offset ?? 0;\n assertNonNegativeSafeInteger(offset, \"display offset\");\n const offsets = regionView(display.offsets, buffers, \"display offsets\");\n if (offsets.byteLength < (offset + rows + 1) * 4) {\n throw invalidArgument(`Column ${columnId} has incomplete display offsets`);\n }\n const data = regionView(display.data, buffers, \"display data\");\n if (display.validity) {\n const validity = regionView(display.validity, buffers, \"display validity\");\n if (validity.byteLength < Math.ceil((offset + rows) / 8)) {\n throw invalidArgument(`Column ${columnId} has an incomplete display validity bitmap`);\n }\n }\n let previous = 0;\n for (let index = offset; index <= offset + rows; index += 1) {\n const next = readUnsignedOffset(offsets, index, 4);\n if (next < previous || next > data.byteLength) {\n throw invalidArgument(`Column ${columnId} has invalid display offsets`);\n }\n previous = next;\n }\n}\n\nfunction validateNative(\n descriptor: NativeColumnDescriptor,\n buffers: readonly Uint8Array[],\n depth: number,\n name: string,\n): void {\n if (depth >= MAX_NESTING_DEPTH) {\n throw invalidArgument(`Native column nesting may not exceed ${MAX_NESTING_DEPTH}`);\n }\n assertNonNegativeSafeInteger(descriptor.length, `${name}.length`);\n assertNonNegativeSafeInteger(descriptor.offset ?? 0, `${name}.offset`);\n normalizeDataType(descriptor.dataType, depth);\n const regions = [\n descriptor.validity,\n descriptor.values,\n descriptor.offsets,\n descriptor.sizes,\n descriptor.data,\n descriptor.typeIds,\n descriptor.unionOffsets,\n ...(descriptor.variadicBuffers ?? []),\n ];\n for (const region of regions) {\n if (region) {\n regionView(region, buffers, name);\n }\n }\n for (const [index, child] of (descriptor.children ?? []).entries()) {\n validateNative(child, buffers, depth + 1, `${name}.children[${index}]`);\n }\n if (descriptor.dictionary) {\n validateNative(descriptor.dictionary, buffers, depth + 1, `${name}.dictionary`);\n }\n if (descriptor.runEnds) {\n validateNative(descriptor.runEnds, buffers, depth + 1, `${name}.runEnds`);\n }\n}\n\nfunction decodeNativeValue(\n descriptor: NativeColumnDescriptor,\n logicalIndex: number,\n buffers: readonly Uint8Array[],\n depth: number,\n): NativeValue | null {\n if (depth >= MAX_NESTING_DEPTH) {\n throw invalidArgument(`Native value nesting may not exceed ${MAX_NESTING_DEPTH}`);\n }\n if (logicalIndex < 0 || logicalIndex >= descriptor.length) {\n throw invalidArgument(\"Native value index is outside its descriptor\");\n }\n const physicalIndex = (descriptor.offset ?? 0) + logicalIndex;\n if (!validAt(descriptor.validity, physicalIndex, buffers)) {\n return null;\n }\n const type = unwrapExtension(descriptor.dataType);\n switch (type.type) {\n case \"null\":\n return null;\n case \"unknown\": {\n const bytes = decodeVariableBytes(descriptor, buffers, physicalIndex, 4);\n return new TextDecoder().decode(bytes);\n }\n case \"boolean\": {\n const values = requiredRegion(descriptor.values, buffers, \"boolean values\");\n const bitIndex = (descriptor.values?.bitOffset ?? 0) + physicalIndex;\n return (values[bitIndex >>> 3]! & (1 << (bitIndex & 7))) !== 0;\n }\n case \"int8\": return readNumber(descriptor, buffers, physicalIndex, 1, \"signed\");\n case \"uint8\": return readNumber(descriptor, buffers, physicalIndex, 1, \"unsigned\");\n case \"int16\": return readNumber(descriptor, buffers, physicalIndex, 2, \"signed\");\n case \"uint16\": return readNumber(descriptor, buffers, physicalIndex, 2, \"unsigned\");\n case \"int32\": return readNumber(descriptor, buffers, physicalIndex, 4, \"signed\");\n case \"uint32\": return readNumber(descriptor, buffers, physicalIndex, 4, \"unsigned\");\n case \"int64\": return readBigInt(descriptor, buffers, physicalIndex, true);\n case \"uint64\": return readBigInt(descriptor, buffers, physicalIndex, false);\n case \"float16\": return decodeFloat16(readNumber(descriptor, buffers, physicalIndex, 2, \"unsigned\"));\n case \"float32\": return readFloat(descriptor, buffers, physicalIndex, 4);\n case \"float64\": return readFloat(descriptor, buffers, physicalIndex, 8);\n case \"utf8\":\n case \"large-utf8\": {\n const bytes = decodeVariableBytes(descriptor, buffers, physicalIndex, type.type === \"large-utf8\" ? 8 : 4);\n return new TextDecoder().decode(bytes);\n }\n case \"binary\":\n case \"large-binary\":\n return decodeVariableBytes(descriptor, buffers, physicalIndex, type.type === \"large-binary\" ? 8 : 4).slice();\n case \"utf8-view\":\n return new TextDecoder().decode(decodeViewBytes(descriptor, buffers, physicalIndex));\n case \"binary-view\":\n return decodeViewBytes(descriptor, buffers, physicalIndex).slice();\n case \"fixed-size-binary\": {\n const data = requiredRegion(descriptor.data ?? descriptor.values, buffers, \"fixed-size binary data\");\n const start = physicalIndex * type.byteWidth;\n return checkedSlice(data, start, start + type.byteWidth, \"fixed-size binary data\").slice();\n }\n case \"decimal32\":\n case \"decimal64\":\n case \"decimal128\":\n case \"decimal256\": {\n const width = { decimal32: 4, decimal64: 8, decimal128: 16, decimal256: 32 }[type.type];\n return Object.freeze({\n kind: \"decimal\",\n unscaled: readSignedLittleEndian(requiredRegion(descriptor.values, buffers, \"decimal values\"), physicalIndex * width, width),\n precision: type.precision,\n scale: type.scale,\n });\n }\n case \"date32\":\n return Object.freeze({ kind: \"date32\", value: readNumber(descriptor, buffers, physicalIndex, 4, \"signed\") });\n case \"date64\":\n return Object.freeze({ kind: \"date64\", value: readBigInt(descriptor, buffers, physicalIndex, true), unit: \"millisecond\" });\n case \"time32\":\n return Object.freeze({ kind: \"time32\", value: readNumber(descriptor, buffers, physicalIndex, 4, \"signed\"), unit: type.unit });\n case \"time64\":\n return Object.freeze({ kind: \"time64\", value: readBigInt(descriptor, buffers, physicalIndex, true), unit: type.unit });\n case \"timestamp\":\n return Object.freeze({\n kind: \"timestamp\",\n value: readBigInt(descriptor, buffers, physicalIndex, true),\n unit: type.unit,\n ...(type.timezone === undefined ? {} : { timezone: type.timezone }),\n });\n case \"duration\":\n return Object.freeze({ kind: \"duration\", value: readBigInt(descriptor, buffers, physicalIndex, true), unit: type.unit });\n case \"interval\":\n return decodeInterval(descriptor, buffers, physicalIndex, type.unit);\n case \"list\":\n case \"large-list\":\n case \"list-view\":\n case \"large-list-view\":\n case \"map\":\n return decodeListLike(descriptor, buffers, physicalIndex, type, depth);\n case \"fixed-size-list\": {\n const child = requiredChild(descriptor, 0, \"fixed-size list\");\n const start = physicalIndex * type.listSize;\n return Object.freeze(Array.from(\n { length: type.listSize },\n (_, index) => decodeNativeValue(child, start + index - (child.offset ?? 0), buffers, depth + 1),\n ));\n }\n case \"struct\": {\n const result: Record<string, NativeValue | null> = {};\n for (let index = 0; index < type.fields.length; index += 1) {\n const child = requiredChild(descriptor, index, \"struct\");\n result[type.fields[index]!.name] = decodeNativeValue(\n child,\n physicalIndex - (child.offset ?? 0),\n buffers,\n depth + 1,\n );\n }\n return Object.freeze(result);\n }\n case \"union\": {\n const typeIds = requiredRegion(descriptor.typeIds, buffers, \"union type ids\");\n if (physicalIndex >= typeIds.byteLength) {\n throw invalidArgument(\"Union type id is out of bounds\");\n }\n const typeId = new DataView(typeIds.buffer, typeIds.byteOffset, typeIds.byteLength).getInt8(physicalIndex);\n const fieldIndex = type.fields.findIndex((entry) => entry.typeId === typeId);\n if (fieldIndex < 0) {\n throw invalidArgument(`Union type id ${typeId} has no child`);\n }\n const child = requiredChild(descriptor, fieldIndex, \"union\");\n const childPhysical = type.mode === \"dense\"\n ? readSignedOffset(requiredRegion(descriptor.unionOffsets ?? descriptor.offsets, buffers, \"union offsets\"), physicalIndex, 4)\n : physicalIndex;\n return Object.freeze({\n kind: \"union\",\n typeId,\n value: decodeNativeValue(child, childPhysical - (child.offset ?? 0), buffers, depth + 1),\n });\n }\n case \"dictionary\": {\n const keys = descriptor.children?.[0] ?? descriptor;\n const dictionary = descriptor.dictionary ?? descriptor.children?.[1];\n if (!dictionary || !keys) {\n throw invalidArgument(\"Dictionary descriptor has no dictionary values\");\n }\n const index = readIndex(keys, buffers, physicalIndex, type.indexType);\n if (index < 0 || index >= dictionary.length) {\n throw invalidArgument(\"Dictionary index is out of bounds\");\n }\n return decodeNativeValue(dictionary, index, buffers, depth + 1);\n }\n case \"run-end-encoded\": {\n const runEnds = descriptor.runEnds ?? descriptor.children?.[0];\n const values = descriptor.children?.[descriptor.runEnds ? 0 : 1];\n if (!runEnds || !values) {\n throw invalidArgument(\"Run-end encoded descriptor is incomplete\");\n }\n const logicalPosition = physicalIndex + 1;\n let run = 0;\n while (run < runEnds.length && numericIndexValue(runEnds, buffers, run) < logicalPosition) {\n run += 1;\n }\n if (run >= values.length) {\n throw invalidArgument(\"Run-end encoded value is out of bounds\");\n }\n return decodeNativeValue(values, run, buffers, depth + 1);\n }\n case \"extension\":\n // unwrapExtension makes this unreachable while retaining exhaustive typing.\n throw invalidArgument(\"Nested extension data type could not be unwrapped\");\n }\n}\n\nfunction decodeListLike(\n descriptor: NativeColumnDescriptor,\n buffers: readonly Uint8Array[],\n physicalIndex: number,\n type: Extract<ArrowDataType, { type: \"list\" | \"large-list\" | \"list-view\" | \"large-list-view\" | \"map\" }>,\n depth: number,\n): NativeValue {\n const width = type.type === \"large-list\" || type.type === \"large-list-view\" ? 8 : 4;\n const offsets = requiredRegion(descriptor.offsets, buffers, \"list offsets\");\n const start = readSignedOffset(offsets, physicalIndex, width);\n const end = type.type === \"list-view\" || type.type === \"large-list-view\"\n ? start + readSignedOffset(requiredRegion(descriptor.sizes, buffers, \"list sizes\"), physicalIndex, width)\n : readSignedOffset(offsets, physicalIndex + 1, width);\n if (start < 0 || end < start) {\n throw invalidArgument(\"List offsets are invalid\");\n }\n const child = requiredChild(descriptor, 0, type.type);\n const values: NativeListValue = Object.freeze(Array.from(\n { length: end - start },\n (_, index) => decodeNativeValue(child, start + index - (child.offset ?? 0), buffers, depth + 1),\n ));\n if (type.type !== \"map\") {\n return values;\n }\n return Object.freeze(values.map((entry: NativeValue | null) => {\n if (!isRecord(entry)) {\n throw invalidArgument(\"Map entries must decode from a struct\");\n }\n const record = entry as NativeStructValue;\n const entryType = type.entries.dataType;\n const fields = entryType.type === \"struct\" ? entryType.fields : [];\n const keyName = fields[0]?.name ?? \"key\";\n const valueName = fields[1]?.name ?? \"value\";\n return Object.freeze({\n key: record[keyName] ?? null,\n value: record[valueName] ?? null,\n });\n }));\n}\n\nfunction decodeInterval(\n descriptor: NativeColumnDescriptor,\n buffers: readonly Uint8Array[],\n index: number,\n unit: IntervalUnit,\n): IntervalValue {\n const values = requiredRegion(descriptor.values, buffers, \"interval values\");\n const view = new DataView(values.buffer, values.byteOffset, values.byteLength);\n if (unit === \"year-month\") {\n ensureViewRange(view, index * 4, 4, \"year-month interval\");\n return Object.freeze({ kind: \"interval\", unit, months: view.getInt32(index * 4, true) });\n }\n if (unit === \"day-time\") {\n const offset = index * 8;\n ensureViewRange(view, offset, 8, \"day-time interval\");\n return Object.freeze({\n kind: \"interval\",\n unit,\n days: view.getInt32(offset, true),\n milliseconds: view.getInt32(offset + 4, true),\n });\n }\n const offset = index * 16;\n ensureViewRange(view, offset, 16, \"month-day-nano interval\");\n return Object.freeze({\n kind: \"interval\",\n unit,\n months: view.getInt32(offset, true),\n days: view.getInt32(offset + 4, true),\n nanoseconds: view.getBigInt64(offset + 8, true),\n });\n}\n\nfunction decodeVariableBytes(\n descriptor: NativeColumnDescriptor,\n buffers: readonly Uint8Array[],\n index: number,\n offsetWidth: 4 | 8,\n): Uint8Array {\n const offsets = requiredRegion(descriptor.offsets, buffers, \"variable offsets\");\n const data = requiredRegion(descriptor.data ?? descriptor.values, buffers, \"variable data\");\n const start = readUnsignedOffset(offsets, index, offsetWidth);\n const end = readUnsignedOffset(offsets, index + 1, offsetWidth);\n return checkedSlice(data, start, end, \"variable data\");\n}\n\nfunction decodeViewBytes(\n descriptor: NativeColumnDescriptor,\n buffers: readonly Uint8Array[],\n index: number,\n): Uint8Array {\n const views = requiredRegion(descriptor.values, buffers, \"view values\");\n const view = new DataView(views.buffer, views.byteOffset, views.byteLength);\n const offset = index * 16;\n ensureViewRange(view, offset, 16, \"view value\");\n const length = view.getInt32(offset, true);\n if (length < 0) {\n throw invalidArgument(\"View length must be non-negative\");\n }\n if (length <= 12) {\n return checkedSlice(views, offset + 4, offset + 4 + length, \"inline view\");\n }\n const bufferIndex = view.getInt32(offset + 8, true);\n const dataOffset = view.getInt32(offset + 12, true);\n const data = descriptor.variadicBuffers?.[bufferIndex];\n if (!data || dataOffset < 0) {\n throw invalidArgument(\"View references an invalid variadic buffer\");\n }\n return checkedSlice(regionView(data, buffers, \"view data\"), dataOffset, dataOffset + length, \"view data\");\n}\n\nfunction readNumber(\n descriptor: NativeColumnDescriptor,\n buffers: readonly Uint8Array[],\n index: number,\n width: 1 | 2 | 4,\n signedness: \"signed\" | \"unsigned\",\n): number {\n const values = requiredRegion(descriptor.values, buffers, \"numeric values\");\n const view = new DataView(values.buffer, values.byteOffset, values.byteLength);\n const offset = index * width;\n ensureViewRange(view, offset, width, \"numeric value\");\n if (width === 1) return signedness === \"signed\" ? view.getInt8(offset) : view.getUint8(offset);\n if (width === 2) return signedness === \"signed\" ? view.getInt16(offset, true) : view.getUint16(offset, true);\n return signedness === \"signed\" ? view.getInt32(offset, true) : view.getUint32(offset, true);\n}\n\nfunction readFloat(\n descriptor: NativeColumnDescriptor,\n buffers: readonly Uint8Array[],\n index: number,\n width: 4 | 8,\n): number {\n const values = requiredRegion(descriptor.values, buffers, \"floating-point values\");\n const view = new DataView(values.buffer, values.byteOffset, values.byteLength);\n const offset = index * width;\n ensureViewRange(view, offset, width, \"floating-point value\");\n return width === 4 ? view.getFloat32(offset, true) : view.getFloat64(offset, true);\n}\n\nfunction readBigInt(\n descriptor: NativeColumnDescriptor,\n buffers: readonly Uint8Array[],\n index: number,\n signed: boolean,\n): bigint {\n const values = requiredRegion(descriptor.values, buffers, \"64-bit values\");\n const view = new DataView(values.buffer, values.byteOffset, values.byteLength);\n const offset = index * 8;\n ensureViewRange(view, offset, 8, \"64-bit value\");\n return signed ? view.getBigInt64(offset, true) : view.getBigUint64(offset, true);\n}\n\nfunction readIndex(\n descriptor: NativeColumnDescriptor,\n buffers: readonly Uint8Array[],\n index: number,\n dataType: ArrowDataType,\n): number {\n const type = unwrapExtension(dataType).type;\n let value: number | bigint;\n if (type === \"int8\") value = readNumber(descriptor, buffers, index, 1, \"signed\");\n else if (type === \"uint8\") value = readNumber(descriptor, buffers, index, 1, \"unsigned\");\n else if (type === \"int16\") value = readNumber(descriptor, buffers, index, 2, \"signed\");\n else if (type === \"uint16\") value = readNumber(descriptor, buffers, index, 2, \"unsigned\");\n else if (type === \"int32\") value = readNumber(descriptor, buffers, index, 4, \"signed\");\n else if (type === \"uint32\") value = readNumber(descriptor, buffers, index, 4, \"unsigned\");\n else if (type === \"int64\") value = readBigInt(descriptor, buffers, index, true);\n else if (type === \"uint64\") value = readBigInt(descriptor, buffers, index, false);\n else throw invalidArgument(\"Dictionary index type must be an integer\");\n const numeric = typeof value === \"bigint\" ? Number(value) : value;\n if (!Number.isSafeInteger(numeric)) {\n throw invalidArgument(\"Dictionary index exceeds the JavaScript safe integer range\");\n }\n return numeric;\n}\n\nfunction numericIndexValue(\n descriptor: NativeColumnDescriptor,\n buffers: readonly Uint8Array[],\n index: number,\n): number {\n const type = unwrapExtension(descriptor.dataType);\n return readIndex({ ...descriptor, dataType: { type: \"dictionary\", indexType: type, valueType: { type: \"null\" } } }, buffers, index, type);\n}\n\nfunction readSignedLittleEndian(bytes: Uint8Array, offset: number, width: number): bigint {\n const slice = checkedSlice(bytes, offset, offset + width, \"signed integer\");\n let value = 0n;\n for (let index = slice.byteLength - 1; index >= 0; index -= 1) {\n value = (value << 8n) | BigInt(slice[index]!);\n }\n const sign = 1n << BigInt(width * 8 - 1);\n return (value & sign) === 0n ? value : value - (1n << BigInt(width * 8));\n}\n\nfunction readUnsignedOffset(bytes: Uint8Array, index: number, width: 4 | 8): number {\n const value = readOffset(bytes, index, width, false);\n if (value < 0) {\n throw invalidArgument(\"Offset must be non-negative\");\n }\n return value;\n}\n\nfunction readSignedOffset(bytes: Uint8Array, index: number, width: 4 | 8): number {\n return readOffset(bytes, index, width, true);\n}\n\nfunction readOffset(bytes: Uint8Array, index: number, width: 4 | 8, signed: boolean): number {\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const offset = index * width;\n ensureViewRange(view, offset, width, \"offset\");\n const value = width === 4\n ? signed ? view.getInt32(offset, true) : view.getUint32(offset, true)\n : signed ? view.getBigInt64(offset, true) : view.getBigUint64(offset, true);\n const numeric = typeof value === \"bigint\" ? Number(value) : value;\n if (!Number.isSafeInteger(numeric)) {\n throw invalidArgument(\"Offset exceeds the JavaScript safe integer range\");\n }\n return numeric;\n}\n\nfunction validAt(\n validity: BatchBufferRegion | undefined,\n index: number,\n buffers: readonly Uint8Array[],\n): boolean {\n if (!validity) return true;\n const bitmap = regionView(validity, buffers, \"validity bitmap\");\n const bitIndex = (validity.bitOffset ?? 0) + index;\n if (bitIndex < 0 || (bitIndex >>> 3) >= bitmap.byteLength) {\n throw invalidArgument(\"Validity bitmap index is out of bounds\");\n }\n return (bitmap[bitIndex >>> 3]! & (1 << (bitIndex & 7))) !== 0;\n}\n\nfunction requiredRegion(\n region: BatchBufferRegion | undefined,\n buffers: readonly Uint8Array[],\n name: string,\n): Uint8Array {\n if (!region) throw invalidArgument(`${name} are missing`);\n return regionView(region, buffers, name);\n}\n\nfunction regionView(\n region: BatchBufferRegion,\n buffers: readonly Uint8Array[],\n name: string,\n): Uint8Array {\n if (!isRecord(region) || !Number.isSafeInteger(region.buffer) || region.buffer < 0) {\n throw invalidArgument(`${name} references an invalid buffer`);\n }\n const buffer = buffers[region.buffer];\n if (!buffer) throw invalidArgument(`${name} references a missing buffer`);\n const byteOffset = region.byteOffset ?? 0;\n const byteLength = region.byteLength ?? buffer.byteLength - byteOffset;\n if (\n !Number.isSafeInteger(byteOffset)\n || byteOffset < 0\n || !Number.isSafeInteger(byteLength)\n || byteLength < 0\n || byteOffset + byteLength > buffer.byteLength\n ) {\n throw invalidArgument(`${name} region is outside its buffer`);\n }\n return buffer.subarray(byteOffset, byteOffset + byteLength);\n}\n\nfunction requiredChild(descriptor: NativeColumnDescriptor, index: number, name: string): NativeColumnDescriptor {\n const child = descriptor.children?.[index];\n if (!child) throw invalidArgument(`${name} descriptor has no child ${index}`);\n return child;\n}\n\nfunction checkedSlice(bytes: Uint8Array, start: number, end: number, name: string): Uint8Array {\n if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start < 0 || end < start || end > bytes.byteLength) {\n throw invalidArgument(`${name} slice is out of bounds`);\n }\n return bytes.subarray(start, end);\n}\n\nfunction ensureViewRange(view: DataView, offset: number, width: number, name: string): void {\n if (offset < 0 || offset + width > view.byteLength) {\n throw invalidArgument(`${name} is out of bounds`);\n }\n}\n\nfunction unwrapExtension(dataType: ArrowDataType): ArrowDataType {\n let current = dataType;\n for (let depth = 0; current.type === \"extension\"; depth += 1) {\n if (depth >= MAX_NESTING_DEPTH) throw invalidArgument(\"Extension nesting is too deep\");\n current = current.storageType;\n }\n return current;\n}\n\nfunction freezeWireColumn(column: WireTableBatchColumn): WireTableBatchColumn {\n return Object.freeze({\n columnId: column.columnId,\n native: freezeNative(column.native),\n display: Object.freeze({\n ...column.display,\n data: freezeRegion(column.display.data),\n offsets: freezeRegion(column.display.offsets),\n ...(column.display.validity ? { validity: freezeRegion(column.display.validity) } : {}),\n }),\n });\n}\n\nfunction freezeNative(descriptor: NativeColumnDescriptor): NativeColumnDescriptor {\n const freezeOptionalRegion = (region: BatchBufferRegion | undefined) => region ? freezeRegion(region) : undefined;\n return Object.freeze({\n ...descriptor,\n dataType: freezeDataType(descriptor.dataType),\n ...(freezeOptionalRegion(descriptor.validity) ? { validity: freezeOptionalRegion(descriptor.validity)! } : {}),\n ...(freezeOptionalRegion(descriptor.values) ? { values: freezeOptionalRegion(descriptor.values)! } : {}),\n ...(freezeOptionalRegion(descriptor.offsets) ? { offsets: freezeOptionalRegion(descriptor.offsets)! } : {}),\n ...(freezeOptionalRegion(descriptor.sizes) ? { sizes: freezeOptionalRegion(descriptor.sizes)! } : {}),\n ...(freezeOptionalRegion(descriptor.data) ? { data: freezeOptionalRegion(descriptor.data)! } : {}),\n ...(freezeOptionalRegion(descriptor.typeIds) ? { typeIds: freezeOptionalRegion(descriptor.typeIds)! } : {}),\n ...(freezeOptionalRegion(descriptor.unionOffsets) ? { unionOffsets: freezeOptionalRegion(descriptor.unionOffsets)! } : {}),\n ...(descriptor.variadicBuffers\n ? { variadicBuffers: Object.freeze(descriptor.variadicBuffers.map(freezeRegion)) }\n : {}),\n ...(descriptor.children\n ? { children: Object.freeze(descriptor.children.map(freezeNative)) }\n : {}),\n ...(descriptor.dictionary ? { dictionary: freezeNative(descriptor.dictionary) } : {}),\n ...(descriptor.runEnds ? { runEnds: freezeNative(descriptor.runEnds) } : {}),\n });\n}\n\nfunction freezeRegion(region: BatchBufferRegion): BatchBufferRegion {\n return Object.freeze({ ...region });\n}\n\nfunction freezeDataType(dataType: ArrowDataType): ArrowDataType {\n return normalizeDataTypeUnchecked(dataType, 0);\n}\n\nfunction normalizeDataTypeUnchecked(value: ArrowDataType, depth: number): ArrowDataType {\n // Public construction already validates; metadata/batch normalization may\n // arrive from protocol values, so use the same validator for one canonical shape.\n return normalizeDataType(value, depth);\n}\n\nfunction timeUnit(value: unknown): TimeUnit {\n if (value === \"second\" || value === \"millisecond\" || value === \"microsecond\" || value === \"nanosecond\") {\n return value;\n }\n throw invalidArgument(\"Arrow time unit is invalid\");\n}\n\nfunction intervalUnit(value: unknown): IntervalUnit {\n if (value === \"year-month\" || value === \"day-time\" || value === \"month-day-nano\") return value;\n throw invalidArgument(\"Arrow interval unit is invalid\");\n}\n\nfunction decodeFloat16(bits: number): number {\n const sign = (bits & 0x8000) === 0 ? 1 : -1;\n const exponent = (bits >>> 10) & 0x1f;\n const fraction = bits & 0x03ff;\n if (exponent === 0) return sign * 2 ** -14 * (fraction / 1024);\n if (exponent === 0x1f) return fraction === 0 ? sign * Infinity : Number.NaN;\n return sign * 2 ** (exponent - 15) * (1 + fraction / 1024);\n}\n\nfunction normalizeCellLimit(value: number | undefined): number {\n const maxCells = value ?? DEFAULT_TO_ROWS_CELL_LIMIT;\n assertPositiveSafeInteger(maxCells, \"maxCells\");\n return maxCells;\n}\n\nfunction assertCellLimit(rows: number, columns: number, maxCells: number): void {\n const cellCount = rows * columns;\n if (!Number.isSafeInteger(cellCount) || cellCount > maxCells) {\n throw new TabularkError(\n \"RESOURCE_LIMIT\",\n `Decoding ${cellCount} cells exceeds the toRows limit of ${maxCells}`,\n {\n details: {\n resource: \"row-materialization-cells\",\n required: cellCount,\n available: maxCells,\n cellCount,\n maxCells,\n },\n },\n );\n }\n}\n\nfunction integer(value: unknown, name: string): number {\n if (!Number.isSafeInteger(value)) throw invalidArgument(`${name} must be a safe integer`);\n return value as number;\n}\n\nfunction positiveInteger(value: unknown, name: string): number {\n const result = integer(value, name);\n if (result <= 0) throw invalidArgument(`${name} must be positive`);\n return result;\n}\n\nfunction asUint8Array(value: WireBatchBuffer): Uint8Array {\n if (value instanceof ArrayBuffer) return new Uint8Array(value);\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n}\n\nfunction isRecord(value: unknown): value is Record<string, any> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport function assertNonNegativeSafeInteger(value: unknown, name: string): asserts value is number {\n if (!Number.isSafeInteger(value) || (value as number) < 0) {\n throw invalidArgument(`${name} must be a non-negative safe integer`, { name, value });\n }\n}\n\nexport function assertPositiveSafeInteger(value: unknown, name: string): asserts value is number {\n if (!Number.isSafeInteger(value) || (value as number) <= 0) {\n throw invalidArgument(`${name} must be a positive safe integer`, { name, value });\n }\n}\n", "import type { RangeRequest, WireTableBatch } from \"./model.js\";\n\ninterface CacheEntry<T> {\n readonly value: T;\n readonly byteLength: number;\n}\n\ninterface PermitWaiter {\n readonly key: string;\n readonly resolve: (release: () => void) => void;\n readonly reject: (reason: unknown) => void;\n}\n\nexport class PermitQueueFullError extends Error {\n constructor(readonly maxWaiters: number) {\n super(`The permit queue already has ${maxWaiters} waiters`);\n this.name = \"PermitQueueFullError\";\n }\n}\n\n/** A small FIFO permit queue whose pending acquisitions can be cancelled by key. */\nexport class AsyncPermitQueue {\n readonly #maxActive: number;\n readonly #maxWaiters: number;\n readonly #waiters: PermitWaiter[] = [];\n #active = 0;\n\n constructor(maxActive: number, maxWaiters: number) {\n if (!Number.isSafeInteger(maxActive) || maxActive <= 0) {\n throw new RangeError(\"maxActive must be a positive safe integer\");\n }\n if (!Number.isSafeInteger(maxWaiters) || maxWaiters < 0) {\n throw new RangeError(\"maxWaiters must be a non-negative safe integer\");\n }\n this.#maxActive = maxActive;\n this.#maxWaiters = maxWaiters;\n }\n\n acquire(key: string): Promise<() => void> {\n if (this.#active < this.#maxActive) {\n this.#active += 1;\n return Promise.resolve(this.#releaseOnce());\n }\n if (this.#waiters.length >= this.#maxWaiters) {\n return Promise.reject(new PermitQueueFullError(this.#maxWaiters));\n }\n return new Promise<() => void>((resolve, reject) => {\n this.#waiters.push({ key, resolve, reject });\n });\n }\n\n cancel(key: string, reason: unknown): boolean {\n const index = this.#waiters.findIndex((waiter) => waiter.key === key);\n if (index < 0) {\n return false;\n }\n const [waiter] = this.#waiters.splice(index, 1);\n waiter!.reject(reason);\n this.#wakeWaiters();\n return true;\n }\n\n #releaseOnce(): () => void {\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n this.#active -= 1;\n this.#wakeWaiters();\n };\n }\n\n #wakeWaiters(): void {\n while (this.#active < this.#maxActive && this.#waiters.length > 0) {\n const waiter = this.#waiters.shift()!;\n this.#active += 1;\n waiter.resolve(this.#releaseOnce());\n }\n }\n}\n\n/** A byte-bounded least-recently-used cache. */\nexport class ByteLruCache<T> {\n readonly #maxBytes: number;\n readonly #entries = new Map<string, CacheEntry<T>>();\n readonly #onRemove: ((key: string, value: T, byteLength: number) => void) | undefined;\n #byteLength = 0;\n\n constructor(\n maxBytes: number,\n options: Readonly<{\n onRemove?: (key: string, value: T, byteLength: number) => void;\n }> = {},\n ) {\n if (!Number.isSafeInteger(maxBytes) || maxBytes < 0) {\n throw new RangeError(\"maxBytes must be a non-negative safe integer\");\n }\n this.#maxBytes = maxBytes;\n this.#onRemove = options.onRemove;\n }\n\n get maxBytes(): number {\n return this.#maxBytes;\n }\n\n get(key: string): T | undefined {\n const entry = this.#entries.get(key);\n if (!entry) {\n return undefined;\n }\n this.#entries.delete(key);\n this.#entries.set(key, entry);\n return entry.value;\n }\n\n set(key: string, value: T, byteLength: number): void {\n if (!Number.isSafeInteger(byteLength) || byteLength < 0) {\n throw new RangeError(\"byteLength must be a non-negative safe integer\");\n }\n if (byteLength > this.#maxBytes) {\n return;\n }\n\n const existing = this.#entries.get(key);\n if (existing) {\n this.#remove(key, existing);\n }\n\n while (this.#byteLength + byteLength > this.#maxBytes) {\n const oldestKey = this.#entries.keys().next().value as string | undefined;\n if (oldestKey === undefined) {\n break;\n }\n const oldest = this.#entries.get(oldestKey)!;\n this.#remove(oldestKey, oldest);\n }\n\n this.#entries.set(key, { value, byteLength });\n this.#byteLength += byteLength;\n }\n\n deleteWhere(predicate: (key: string, value: T) => boolean): void {\n for (const [key, entry] of this.#entries) {\n if (!predicate(key, entry.value)) {\n continue;\n }\n this.#remove(key, entry);\n }\n }\n\n clear(): void {\n for (const [key, entry] of this.#entries) {\n this.#onRemove?.(key, entry.value, entry.byteLength);\n }\n this.#entries.clear();\n this.#byteLength = 0;\n }\n\n #remove(key: string, entry: CacheEntry<T>): void {\n this.#entries.delete(key);\n this.#byteLength -= entry.byteLength;\n this.#onRemove?.(key, entry.value, entry.byteLength);\n }\n}\n\nexport function rangeCacheKey(\n owner: string,\n revision: number,\n schemaVersion: number,\n range: RangeRequest,\n): string {\n return JSON.stringify([\n owner,\n revision,\n schemaVersion,\n range.rowStart,\n range.rowCount,\n range.columnStart,\n range.columnCount,\n ]);\n}\n\nexport function rangeCacheKeyBelongsTo(key: string, owner: string): boolean {\n return key.startsWith(`[${JSON.stringify(owner)},`);\n}\n\nexport function cloneWireTableBatch(batch: WireTableBatch): WireTableBatch {\n return {\n layoutVersion: batch.layoutVersion,\n tableId: batch.tableId,\n revision: batch.revision,\n schemaVersion: batch.schemaVersion,\n range: { ...batch.range },\n // Clone each pool entry exactly once. Descriptor buffer indexes remain\n // valid and native/display aliases stay deduplicated.\n buffers: batch.buffers.map((buffer) => Uint8Array.from(asUint8Array(buffer)).buffer),\n columns: batch.columns,\n complete: batch.complete,\n };\n}\n\nexport function wireBatchByteLength(batch: WireTableBatch): number {\n return batch.buffers.reduce((total, buffer) => total + buffer.byteLength, 0);\n}\n\nfunction asUint8Array(value: ArrayBuffer | ArrayBufferView): Uint8Array {\n return value instanceof ArrayBuffer\n ? new Uint8Array(value)\n : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n}\n", "import type { SerializedError } from \"../protocol.js\";\nimport { isRecord } from \"../protocol.js\";\nimport { normalizeResourceLimitDetails } from \"../errors.js\";\n\nexport class ProtocolFault extends Error {\n readonly code: string;\n readonly retryable: boolean;\n readonly details?: unknown;\n\n constructor(\n code: string,\n message: string,\n retryable = false,\n details?: unknown,\n cause?: unknown,\n ) {\n super(message, { cause });\n this.name = \"ProtocolFault\";\n this.code = code;\n this.retryable = retryable;\n this.details = code === \"RESOURCE_LIMIT\"\n ? normalizeResourceLimitDetails(details)\n : details;\n }\n}\n\nexport function faultFromUnknown(error: unknown, fallback: string): ProtocolFault {\n if (error instanceof ProtocolFault) {\n return error;\n }\n if (isRecord(error)) {\n return new ProtocolFault(\n typeof error.code === \"string\" ? error.code : \"RUNTIME_FAILURE\",\n typeof error.message === \"string\" ? error.message : fallback,\n error.retryable === true,\n error.details,\n error,\n );\n }\n if (error instanceof Error) {\n return new ProtocolFault(\"RUNTIME_FAILURE\", error.message || fallback, false, undefined, error);\n }\n return new ProtocolFault(\"RUNTIME_FAILURE\", fallback, false, { value: String(error) });\n}\n\nexport function serializeFault(error: unknown, fallback: string): SerializedError {\n const fault = faultFromUnknown(error, fallback);\n const details = fault.code === \"RESOURCE_LIMIT\"\n ? normalizeResourceLimitDetails(fault.details)\n : fault.details;\n return {\n code: fault.code,\n message: fault.message,\n retryable: fault.retryable,\n ...(details === undefined\n ? {}\n : { details: normalizeFaultDetails(fault.code, details) }),\n };\n}\n\n/**\n * Keep legacy Rust adapter diagnostics legible while the v2 adapters converge\n * on the public resource vocabulary. Counts intentionally remain `required` /\n * `available`; byte reservations use the explicit `*Bytes` names.\n */\nfunction normalizeFaultDetails(code: string, details: unknown): unknown {\n if (code !== \"RESOURCE_LIMIT\" || !isRecord(details)) {\n return details;\n }\n const resource = typeof details.resource === \"string\"\n ? details.resource\n : typeof details.resourceCategory === \"string\"\n ? details.resourceCategory\n : undefined;\n if (resource === undefined || details.resource === resource) {\n return details;\n }\n const { resourceCategory: _legacyResourceCategory, ...rest } = details;\n return { ...rest, resource };\n}\n", "import { ProtocolFault, faultFromUnknown } from \"./worker-errors.js\";\nimport {\n ADAPTER_API_VERSION,\n BATCH_LAYOUT_VERSION,\n PROTOCOL_VERSION,\n} from \"../protocol.js\";\nimport type { OfficialAdapterId } from \"../adapters.js\";\n\ninterface RawWasmRuntime {\n protocolVersion(): number;\n adapterApiVersion(): number;\n batchLayoutVersion(): number;\n adapterId(): string;\n beginOpen(options: unknown, sourceLength: number): unknown;\n continueOperation(\n operationHandle: string | number,\n absoluteOffset: number,\n bytes: Uint8Array,\n eof: boolean,\n ): unknown;\n openTable(sourceHandle: string | number, tableId: string): unknown;\n metadata(handle: string | number): unknown;\n presentation(handle: string | number): unknown;\n readPresentationRange(handle: string | number, request: unknown): unknown;\n beginRead(tableHandle: string | number, request: unknown): unknown;\n cancelOperation(operationHandle: string | number): unknown;\n closeTable(tableHandle: string | number): unknown;\n closeSource(sourceHandle: string | number): unknown;\n shutdown(): unknown;\n free?(): void;\n}\n\ninterface WasmBindings {\n default(input?: unknown): Promise<unknown> | unknown;\n WasmRuntime?: new (config: unknown) => RawWasmRuntime;\n}\n\ninterface AdapterPendingRead {\n readonly operationHandle: string | number;\n readonly action: Readonly<{\n readonly kind: \"read-bytes\";\n readonly offset: number;\n readonly length: number;\n }>;\n}\n\nexport interface AdapterReadBytesStep extends AdapterPendingRead {\n readonly kind: \"read-bytes\";\n}\n\nexport interface AdapterOpenProgressStep extends AdapterPendingRead {\n readonly kind: \"open-progress\";\n readonly sourceHandle: string | number;\n readonly tables: unknown;\n readonly metadata: unknown;\n readonly progress: unknown;\n readonly warnings?: unknown;\n}\n\nexport interface AdapterOpenCompleteStep {\n readonly kind: \"open-complete\";\n readonly sourceHandle: string | number;\n readonly tables: unknown;\n readonly metadata: unknown;\n readonly progress?: unknown;\n readonly warnings?: unknown;\n}\n\nexport interface AdapterReadCompleteStep {\n readonly kind: \"read-complete\";\n readonly batch: unknown;\n}\n\nexport type AdapterOpenStep = AdapterReadBytesStep | AdapterOpenProgressStep | AdapterOpenCompleteStep;\nexport type AdapterReadStep = AdapterReadBytesStep | AdapterReadCompleteStep;\nexport type AdapterOperationStep = AdapterOpenStep | AdapterReadStep;\n\n/**\n * The sole translation layer between the Worker protocol and wasm-bindgen.\n * Bulk arrays are copied by the Worker before they are transferred, never by\n * this adapter, so the runtime may safely return views into WebAssembly memory.\n */\nexport class WasmAdapter {\n readonly #runtime: RawWasmRuntime;\n\n private constructor(runtime: RawWasmRuntime) {\n this.#runtime = runtime;\n }\n\n static async load(\n moduleUrl: string,\n expectedAdapterId: OfficialAdapterId,\n config: unknown,\n ): Promise<WasmAdapter> {\n let bindings: WasmBindings;\n try {\n bindings = (await import(/* @vite-ignore */ moduleUrl)) as WasmBindings;\n if (typeof bindings.default !== \"function\") {\n throw new TypeError(\"The WebAssembly module does not export a default initializer\");\n }\n await bindings.default();\n const Runtime = bindings.WasmRuntime;\n if (typeof Runtime !== \"function\") {\n throw new ProtocolFault(\n \"PROTOCOL_INCOMPATIBLE\",\n `The ${expectedAdapterId} artifact does not export its official runtime class`,\n );\n }\n const adapter = new WasmAdapter(new Runtime(config));\n try {\n adapter.#validateContract(expectedAdapterId);\n } catch (error) {\n try {\n adapter.dispose();\n } catch {\n // Preserve the ABI validation fault after making a best-effort\n // release of the just-constructed wasm-bindgen runtime.\n }\n throw error;\n }\n return adapter;\n } catch (error) {\n if (error instanceof ProtocolFault) {\n throw error;\n }\n throw new ProtocolFault(\n \"RUNTIME_FAILURE\",\n \"Failed to initialize the Tabulark WebAssembly runtime\",\n false,\n { moduleUrl },\n error,\n );\n }\n }\n\n metadata(sourceHandle: string | number): unknown {\n return this.#call(\"metadata\", () => this.#runtime.metadata(sourceHandle));\n }\n\n presentation(tableHandle: string | number): unknown {\n return this.#call(\"presentation\", () => this.#runtime.presentation(tableHandle));\n }\n\n readPresentationRange(tableHandle: string | number, request: unknown): unknown {\n return this.#call(\n \"readPresentationRange\",\n () => this.#runtime.readPresentationRange(tableHandle, request),\n );\n }\n\n beginOpen(options: unknown, sourceLength: number): AdapterOpenStep {\n return this.#call(\"beginOpen\", () => this.#runtime.beginOpen(options, sourceLength));\n }\n\n continueOperation(\n operationHandle: string | number,\n absoluteOffset: number,\n bytes: Uint8Array,\n eof: boolean,\n ): AdapterOperationStep {\n return this.#call(\"continueOperation\", () =>\n this.#runtime.continueOperation(operationHandle, absoluteOffset, bytes, eof),\n );\n }\n\n openTable(sourceHandle: string | number, tableId: string): unknown {\n return this.#call(\"openTable\", () => this.#runtime.openTable(sourceHandle, tableId));\n }\n\n beginRead(tableHandle: string | number, request: unknown): AdapterReadStep {\n return this.#call(\"beginRead\", () => this.#runtime.beginRead(tableHandle, request));\n }\n\n cancelOperation(operationHandle: string | number): void {\n this.#call(\"cancelOperation\", () => this.#runtime.cancelOperation(operationHandle));\n }\n\n closeTable(tableHandle: string | number): void {\n this.#call(\"closeTable\", () => this.#runtime.closeTable(tableHandle));\n }\n\n closeSource(sourceHandle: string | number): void {\n this.#call(\"closeSource\", () => this.#runtime.closeSource(sourceHandle));\n }\n\n dispose(): void {\n try {\n this.#runtime.shutdown();\n } catch {\n // free() still owns the wasm-bindgen allocation after shutdown failure.\n }\n this.#runtime.free?.();\n }\n\n #validateContract(expectedAdapterId: OfficialAdapterId): void {\n const runtime = this.#runtime as Partial<RawWasmRuntime>;\n const required = [\n \"protocolVersion\",\n \"adapterApiVersion\",\n \"batchLayoutVersion\",\n \"adapterId\",\n \"beginOpen\",\n \"continueOperation\",\n \"openTable\",\n \"metadata\",\n \"presentation\",\n \"readPresentationRange\",\n \"beginRead\",\n \"cancelOperation\",\n \"closeTable\",\n \"closeSource\",\n \"shutdown\",\n ] as const;\n for (const name of required) {\n if (typeof runtime[name] !== \"function\") {\n throw new ProtocolFault(\n \"PROTOCOL_INCOMPATIBLE\",\n `WebAssembly adapter does not export ${name}`,\n );\n }\n }\n const protocolVersion = this.#call(\"protocolVersion\", () => this.#runtime.protocolVersion());\n const adapterVersion = this.#call(\"adapterApiVersion\", () => this.#runtime.adapterApiVersion());\n const layoutVersion = this.#call(\"batchLayoutVersion\", () => this.#runtime.batchLayoutVersion());\n const adapterId = this.#call(\"adapterId\", () => this.#runtime.adapterId());\n if (\n protocolVersion !== PROTOCOL_VERSION\n || adapterVersion !== ADAPTER_API_VERSION\n || layoutVersion !== BATCH_LAYOUT_VERSION\n || adapterId !== expectedAdapterId\n ) {\n throw new ProtocolFault(\n \"PROTOCOL_INCOMPATIBLE\",\n `Adapter ${adapterId} protocol/ABI/layout ${protocolVersion}/${adapterVersion}/${layoutVersion} is incompatible with ${expectedAdapterId} ${PROTOCOL_VERSION}/${ADAPTER_API_VERSION}/${BATCH_LAYOUT_VERSION}`,\n );\n }\n }\n\n #call<T>(operation: string, call: () => unknown): T {\n try {\n return call() as T;\n } catch (error) {\n throw faultFromUnknown(error, `WebAssembly ${operation} failed`);\n }\n }\n}\n", "{\n \"manifestVersion\": 1,\n \"adapters\": [\n {\n \"id\": \"tabulark:delimited\",\n \"entrypoint\": \".\",\n \"exportName\": \"delimitedAdapter\",\n \"wasm\": {\n \"packageName\": \"tabulark-delimited-wasm\",\n \"crateArtifact\": \"tabulark_delimited\",\n \"outputName\": \"tabulark_delimited\",\n \"outputDirectory\": \"dist/wasm/delimited\",\n \"modulePath\": \"./wasm/delimited/tabulark_delimited.js\",\n \"runtimeExport\": \"WasmRuntime\"\n },\n \"options\": {\n \"allowedKeys\": [\"dialect\", \"header\", \"mode\", \"delimiter\", \"sourceName\"]\n },\n \"resources\": {\n \"sourceAccess\": \"streaming\",\n \"supportsPresentation\": false,\n \"runtimeWeight\": 1\n }\n },\n {\n \"id\": \"tabulark:arrow-ipc\",\n \"entrypoint\": \"./arrow\",\n \"exportName\": \"arrowIpcAdapter\",\n \"wasm\": {\n \"packageName\": \"tabulark-arrow-wasm\",\n \"crateArtifact\": \"tabulark_arrow\",\n \"outputName\": \"tabulark_arrow\",\n \"outputDirectory\": \"dist/wasm/arrow\",\n \"modulePath\": \"./wasm/arrow/tabulark_arrow.js\",\n \"runtimeExport\": \"WasmRuntime\"\n },\n \"options\": {\n \"allowedKeys\": [\"container\", \"sourceName\"]\n },\n \"resources\": {\n \"sourceAccess\": \"range\",\n \"supportsPresentation\": false,\n \"runtimeWeight\": 1\n }\n },\n {\n \"id\": \"tabulark:parquet\",\n \"entrypoint\": \"./parquet\",\n \"exportName\": \"parquetAdapter\",\n \"wasm\": {\n \"packageName\": \"tabulark-parquet-wasm\",\n \"crateArtifact\": \"tabulark_parquet\",\n \"outputName\": \"tabulark_parquet\",\n \"outputDirectory\": \"dist/wasm/parquet\",\n \"modulePath\": \"./wasm/parquet/tabulark_parquet.js\",\n \"runtimeExport\": \"WasmRuntime\"\n },\n \"options\": {\n \"allowedKeys\": [\"sourceName\"]\n },\n \"resources\": {\n \"sourceAccess\": \"range\",\n \"supportsPresentation\": false,\n \"runtimeWeight\": 2\n }\n },\n {\n \"id\": \"tabulark:excel\",\n \"entrypoint\": \"./excel\",\n \"exportName\": \"excelAdapter\",\n \"wasm\": {\n \"packageName\": \"tabulark-excel-wasm\",\n \"crateArtifact\": \"tabulark_excel\",\n \"outputName\": \"tabulark_excel\",\n \"outputDirectory\": \"dist/wasm/excel\",\n \"modulePath\": \"./wasm/excel/tabulark_excel.js\",\n \"runtimeExport\": \"WasmRuntime\"\n },\n \"options\": {\n \"allowedKeys\": [\"format\", \"sourceName\"]\n },\n \"resources\": {\n \"sourceAccess\": \"staged\",\n \"supportsPresentation\": true,\n \"runtimeWeight\": 2\n }\n }\n ]\n}\n", "import manifestJson from \"./official-adapters.json\" with { type: \"json\" };\n\nexport type OfficialAdapterId =\n | \"tabulark:delimited\"\n | \"tabulark:arrow-ipc\"\n | \"tabulark:parquet\"\n | \"tabulark:excel\";\nexport type OfficialSourceAccess = \"streaming\" | \"range\" | \"staged\";\n\nexport interface OfficialAdapterManifestEntry {\n readonly id: OfficialAdapterId;\n readonly entrypoint: \".\" | \"./arrow\" | \"./parquet\" | \"./excel\";\n readonly exportName: string;\n readonly wasm: Readonly<{\n readonly packageName: string;\n readonly crateArtifact: string;\n readonly outputName: string;\n readonly outputDirectory: string;\n readonly modulePath: string;\n readonly runtimeExport: \"WasmRuntime\";\n }>;\n readonly options: Readonly<{ readonly allowedKeys: readonly string[] }>;\n readonly resources: Readonly<{\n readonly sourceAccess: OfficialSourceAccess;\n readonly supportsPresentation: boolean;\n readonly runtimeWeight: number;\n }>;\n}\n\nconst manifestEntries = validateManifest(manifestJson);\n\n/** Runtime IDs are derived from the manifest rather than repeated in code. */\nexport const OFFICIAL_ADAPTER_IDS: readonly OfficialAdapterId[] = Object.freeze(\n manifestEntries.map((entry) => entry.id),\n);\n\n/** The sole internal source of truth for built-in IDs, artifacts and host policy. */\nexport const OFFICIAL_ADAPTER_MANIFEST: readonly OfficialAdapterManifestEntry[] = Object.freeze(\n manifestEntries.map((entry) => Object.freeze({\n ...entry,\n wasm: Object.freeze({ ...entry.wasm }),\n options: Object.freeze({\n allowedKeys: Object.freeze([...entry.options.allowedKeys]),\n }),\n resources: Object.freeze({ ...entry.resources }),\n })),\n);\n\nconst byId = new Map(OFFICIAL_ADAPTER_MANIFEST.map((entry) => [entry.id, entry]));\n\nexport function isOfficialAdapterId(value: unknown): value is OfficialAdapterId {\n return typeof value === \"string\" && byId.has(value as OfficialAdapterId);\n}\n\nexport function officialAdapterManifestEntry(id: OfficialAdapterId): OfficialAdapterManifestEntry {\n const entry = byId.get(id);\n if (!entry) {\n throw new TypeError(`Unknown official adapter: ${id}`);\n }\n return entry;\n}\n\n/** Resolves an official wrapper relative to the bundle that hosts this code. */\nexport function officialAdapterModuleUrl(id: OfficialAdapterId): string {\n return new URL(officialAdapterManifestEntry(id).wasm.modulePath, import.meta.url).href;\n}\n\nfunction validateManifest(value: unknown): readonly OfficialAdapterManifestEntry[] {\n if (!isRecord(value) || value.manifestVersion !== 1 || !Array.isArray(value.adapters)) {\n throw new TypeError(\"The official adapter manifest has an unsupported shape or version\");\n }\n if (value.adapters.length === 0) {\n throw new TypeError(\"The official adapter manifest must contain at least one adapter\");\n }\n const ids = new Set<string>();\n const entrypoints = new Set<string>();\n const outputDirectories = new Set<string>();\n return value.adapters.map((candidate, index) => {\n if (!isRecord(candidate)) {\n throw new TypeError(`Official adapter manifest entry ${index} must be an object`);\n }\n const { id, entrypoint, exportName, wasm, options, resources } = candidate;\n if (!isKnownOfficialAdapterId(id) || ids.has(id)) {\n throw new TypeError(`Official adapter manifest entry ${index} has an invalid or duplicate id`);\n }\n if (\n (entrypoint !== \".\" && entrypoint !== \"./arrow\" && entrypoint !== \"./parquet\" && entrypoint !== \"./excel\")\n || entrypoints.has(entrypoint)\n || typeof exportName !== \"string\"\n || exportName.length === 0\n ) {\n throw new TypeError(`Official adapter manifest entry ${index} has an invalid entrypoint or export`);\n }\n if (\n !isRecord(wasm)\n || typeof wasm.packageName !== \"string\"\n || typeof wasm.crateArtifact !== \"string\"\n || typeof wasm.outputName !== \"string\"\n || typeof wasm.outputDirectory !== \"string\"\n || !wasm.outputDirectory.startsWith(\"dist/wasm/\")\n || wasm.outputDirectory.includes(\"..\")\n || outputDirectories.has(wasm.outputDirectory)\n || typeof wasm.modulePath !== \"string\"\n || !wasm.modulePath.startsWith(\"./wasm/\")\n || wasm.modulePath.includes(\"..\")\n || wasm.modulePath.includes(\"?\")\n || wasm.modulePath.includes(\"#\")\n || wasm.runtimeExport !== \"WasmRuntime\"\n || wasm.modulePath !== `./${wasm.outputDirectory.replace(/^dist\\//u, \"\")}/${wasm.outputName}.js`\n ) {\n throw new TypeError(`Official adapter manifest entry ${index} has an invalid WASM artifact`);\n }\n if (\n !isRecord(options)\n || !Array.isArray(options.allowedKeys)\n || options.allowedKeys.some((key) => typeof key !== \"string\")\n || new Set(options.allowedKeys).size !== options.allowedKeys.length\n ) {\n throw new TypeError(`Official adapter manifest entry ${index} has invalid option keys`);\n }\n if (\n !isRecord(resources)\n || (resources.sourceAccess !== \"streaming\"\n && resources.sourceAccess !== \"range\"\n && resources.sourceAccess !== \"staged\")\n || typeof resources.supportsPresentation !== \"boolean\"\n || !Number.isSafeInteger(resources.runtimeWeight)\n || (resources.runtimeWeight as number) <= 0\n ) {\n throw new TypeError(`Official adapter manifest entry ${index} has an invalid resource policy`);\n }\n ids.add(id);\n entrypoints.add(entrypoint);\n outputDirectories.add(wasm.outputDirectory);\n return candidate as unknown as OfficialAdapterManifestEntry;\n });\n}\n\nfunction isKnownOfficialAdapterId(value: unknown): value is OfficialAdapterId {\n return value === \"tabulark:delimited\"\n || value === \"tabulark:arrow-ipc\"\n || value === \"tabulark:parquet\"\n || value === \"tabulark:excel\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n", "/// <reference lib=\"webworker\" />\n\nimport {\n ADAPTER_API_VERSION,\n BATCH_LAYOUT_VERSION,\n PROTOCOL_VERSION,\n isRecord,\n type Operation,\n type ProtocolEvent,\n type ProtocolRequest,\n type ProtocolResponse,\n} from \"./protocol.js\";\nimport type {\n RangeRequest,\n ReturnedRange,\n TableDescriptor,\n TableMetadata,\n NativeColumnDescriptor,\n DisplayColumnDescriptor,\n WireTableBatch,\n} from \"./model.js\";\nimport {\n ColumnarTableBatch,\n deriveMemoryBudgetLimits,\n MemoryReservationLedger,\n normalizeDataType,\n MAX_ACTIVE_RANGES,\n MAX_RANGE_WAITERS,\n type MemoryBudgetLimits,\n type MemoryReservation,\n} from \"./model.js\";\nimport {\n AsyncPermitQueue,\n ByteLruCache,\n PermitQueueFullError,\n cloneWireTableBatch,\n rangeCacheKey,\n wireBatchByteLength,\n} from \"./range-cache.js\";\nimport { WasmAdapter } from \"./worker/wasm-adapter.js\";\nimport { ProtocolFault, serializeFault } from \"./worker/worker-errors.js\";\nimport {\n isOfficialAdapterId,\n officialAdapterModuleUrl,\n officialAdapterManifestEntry,\n type OfficialAdapterId,\n} from \"./official-adapter-manifest.js\";\n\nconst CHUNK_BYTES = 1024 * 1024;\n// wasm32 address arithmetic and Rust `usize` cap one Blob source below 4 GiB.\n// This is a format-addressability bound, not an allocation reservation: Arrow\n// File opens retain only footer/index state and fetch bounded blocks on demand.\nconst MAX_ARROW_SOURCE_BYTES = 0xffff_ffff;\nconst INITIAL_READ_LIMIT_BYTES = 8 * CHUNK_BYTES;\nconst INITIAL_ROW_TARGET = 256;\nconst MAX_IN_FLIGHT_RANGES = MAX_ACTIVE_RANGES + MAX_RANGE_WAITERS;\n\nconst scope = globalThis as unknown as DedicatedWorkerGlobalScope;\n\ninterface DatasetState {\n readonly handle: string;\n readonly openRequestId: string;\n readonly source: Blob;\n readonly adapterId: OfficialAdapterId;\n readonly adapter: WasmAdapter;\n readonly sourceHandle: string | number;\n tables: readonly TableDescriptor[];\n metadata: TableMetadata;\n scanOffset: number;\n scanDone: boolean;\n scanError?: ProtocolFault;\n scanPromise?: Promise<void>;\n /** Pending adapter-v2 open action owned by the background indexer. */\n scanStep?: Record<string, unknown>;\n scanOperationHandle?: string | number;\n pendingProgress?: ScanProgress;\n closed: boolean;\n eventsReady: boolean;\n readonly pendingWarnings: unknown[];\n readonly waiters: Set<() => void>;\n readonly rangeCache: ByteLruCache<CachedRangeBatch>;\n /** Excel keeps its staged workbook bytes alive after open completes. */\n readonly openedWorksheetReservation?: MemoryReservation;\n /** Releases the engine-wide source slot exactly once. */\n readonly releaseSourceSlot: () => void;\n}\n\ninterface ScanProgress {\n readonly bytesScanned: number;\n readonly rowsDiscovered: number;\n readonly done: boolean;\n}\n\ninterface OpenTableState {\n readonly handle: string;\n readonly datasetHandle: string;\n readonly tableId: string;\n readonly adapterTableHandle: string | number;\n metadata: TableMetadata;\n closed: boolean;\n}\n\ninterface CachedRangeBatch {\n readonly batch: WireTableBatch;\n readonly reservation: MemoryReservation;\n}\n\ninterface ActiveOpenRequest {\n readonly requestId: string;\n readonly kind: \"open\";\n datasetHandle?: string;\n adapter?: WasmAdapter;\n operationHandle?: string | number;\n openedWorksheetReservation?: MemoryReservation;\n cancelled: boolean;\n readonly cancellation: RequestCancellation;\n}\n\ninterface ActiveRangeRequest {\n readonly requestId: string;\n readonly kind: \"range\";\n readonly datasetHandle: string;\n readonly tableHandle: string;\n cancelled: boolean;\n failure?: ProtocolFault;\n adapter?: WasmAdapter;\n operationHandle?: string | number;\n readonly cancellation: RequestCancellation;\n}\n\ntype ActiveRequest = ActiveOpenRequest | ActiveRangeRequest;\n\ninterface RequestCancellation {\n readonly promise: Promise<void>;\n readonly resolve: () => void;\n}\n\ninterface HelloPayload {\n readonly adapters: readonly HelloAdapterPayload[];\n readonly memoryBudgetBytes: number;\n}\n\ninterface HelloAdapterPayload {\n readonly id: OfficialAdapterId;\n}\n\ninterface AdapterRegistrationPayload {\n readonly id: OfficialAdapterId;\n readonly moduleUrl: string;\n}\n\ninterface ReservedBlobRead {\n readonly buffer: ArrayBuffer;\n readonly release: () => void;\n}\n\ninterface OpenSourcePayload {\n readonly source: Blob | ArrayBuffer;\n readonly adapterId: OfficialAdapterId;\n readonly options: Record<string, unknown>;\n}\n\nlet shuttingDown = false;\nlet nextDatasetHandle = 1;\nlet nextTableHandle = 1;\nlet rangeCacheBudgetBytes = 0;\nlet memoryLimits: MemoryBudgetLimits | undefined;\nlet memoryLedger: MemoryReservationLedger | undefined;\nlet sourceSlotsInUse = 0;\nlet rangeRequestsInFlight = 0;\nlet adapterRegistrations = new Map<string, AdapterRegistrationPayload>();\nconst adapterLoads = new Map<string, Promise<WasmAdapter>>();\nconst loadedAdapters = new Map<string, WasmAdapter>();\nconst adapterRuntimeReservations = new Map<string, MemoryReservation>();\nconst datasets = new Map<string, DatasetState>();\nconst tables = new Map<string, OpenTableState>();\nconst activeRequests = new Map<string, ActiveRequest>();\nconst openedDatasetsByRequest = new Map<string, string>();\nconst rangePermits = new AsyncPermitQueue(MAX_ACTIVE_RANGES, MAX_RANGE_WAITERS);\n\nscope.addEventListener(\"message\", (event: MessageEvent<unknown>) => {\n void dispatch(event.data);\n});\n\nasync function dispatch(value: unknown): Promise<void> {\n if (!isRequest(value)) {\n return;\n }\n\n const request = value;\n if (request.protocolVersion !== PROTOCOL_VERSION) {\n postFailure(\n request.requestId,\n new ProtocolFault(\n \"PROTOCOL_INCOMPATIBLE\",\n `Worker protocol ${PROTOCOL_VERSION} cannot serve protocol ${String(request.protocolVersion)}`,\n ),\n );\n return;\n }\n\n try {\n const result = await runOperation(request);\n try {\n postSuccess(request.requestId, result.kind, result.data, result.transfer);\n } finally {\n result.release?.();\n }\n if (request.op === \"listTables\") {\n flushPendingDatasetEvents(request.payload);\n }\n if (request.op === \"shutdown\") {\n setTimeout(() => scope.close(), 0);\n }\n } catch (error) {\n postFailure(request.requestId, error);\n }\n}\n\nasync function runOperation(\n request: ProtocolRequest,\n): Promise<{\n kind: Parameters<typeof postSuccess>[1];\n data?: unknown;\n transfer?: Transferable[];\n release?: () => void;\n}> {\n switch (request.op) {\n case \"hello\":\n return { kind: \"hello\", data: await hello(request.payload) };\n case \"openSource\":\n return { kind: \"dataset\", data: await openSource(request.requestId, request.payload) };\n case \"listTables\":\n return { kind: \"tables\", data: listTables(request.payload) };\n case \"openTable\":\n return { kind: \"table\", data: openTable(request.payload) };\n case \"getMetadata\":\n return { kind: \"metadata\", data: getMetadata(request.payload) };\n case \"getPresentation\":\n return { kind: \"presentation\", data: getPresentation(request.payload) };\n case \"readPresentationRange\":\n return { kind: \"presentationRange\", data: readPresentationRange(request.payload) };\n case \"readRange\":\n return readRange(request.requestId, request.payload);\n case \"cancel\":\n cancel(request.payload);\n return { kind: \"acknowledged\" };\n case \"closeTable\":\n closeTable(request.payload);\n return { kind: \"acknowledged\" };\n case \"closeSource\":\n closeSource(request.payload);\n return { kind: \"acknowledged\" };\n case \"shutdown\":\n shutdown();\n return { kind: \"acknowledged\" };\n default:\n throw new ProtocolFault(\"INVALID_ARGUMENT\", `Unknown operation: ${String(request.op)}`);\n }\n}\n\nasync function hello(value: unknown): Promise<unknown> {\n const payload = expectRecord(value, \"hello payload\") as unknown as HelloPayload;\n if (!Number.isSafeInteger(payload.memoryBudgetBytes) || payload.memoryBudgetBytes <= 0) {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"memoryBudgetBytes must be a positive safe integer\");\n }\n if (!Array.isArray(payload.adapters) || payload.adapters.length === 0) {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"hello adapters must be a non-empty array\");\n }\n const registrations = new Map<string, AdapterRegistrationPayload>();\n for (const entry of payload.adapters) {\n if (\n !isRecord(entry)\n || !isOfficialAdapterId(entry.id)\n || Object.keys(entry).some((key) => key !== \"id\")\n ) {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"hello contains an invalid official adapter\");\n }\n if (registrations.has(entry.id)) {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", `Adapter ${entry.id} is registered more than once`);\n }\n registrations.set(entry.id, Object.freeze({\n id: entry.id,\n moduleUrl: adapterModuleUrl(entry.id),\n }));\n }\n\n if (memoryLimits) {\n const sameIds = registrations.size === adapterRegistrations.size\n && [...registrations.keys()].every((id) => adapterRegistrations.has(id));\n if (payload.memoryBudgetBytes !== memoryLimits.memoryBudgetBytes || !sameIds) {\n throw new ProtocolFault(\n \"INVALID_ARGUMENT\",\n \"The Worker hello handshake cannot be reconfigured after initialization\",\n );\n }\n return helloResult();\n }\n\n const limits = deriveMemoryBudgetLimits(payload.memoryBudgetBytes);\n adapterRegistrations = registrations;\n memoryLimits = limits;\n memoryLedger = new MemoryReservationLedger(payload.memoryBudgetBytes);\n rangeCacheBudgetBytes = limits.workerDatasetRangeCacheBytes;\n return helloResult();\n}\n\nfunction helloResult(): unknown {\n return {\n protocolVersion: PROTOCOL_VERSION,\n adapterApiVersion: ADAPTER_API_VERSION,\n batchLayoutVersion: BATCH_LAYOUT_VERSION,\n adapters: Object.freeze([...adapterRegistrations.keys()]),\n transferableBatches: true,\n };\n}\n\nfunction createActiveOpenRequest(requestId: string): ActiveOpenRequest {\n return {\n requestId,\n kind: \"open\",\n cancelled: false,\n cancellation: createRequestCancellation(),\n };\n}\n\nfunction createRequestCancellation(): RequestCancellation {\n let resolveCancellation!: () => void;\n const promise = new Promise<void>((resolve) => {\n resolveCancellation = resolve;\n });\n return { promise, resolve: resolveCancellation };\n}\n\nasync function openSource(requestId: string, value: unknown): Promise<unknown> {\n const active = createActiveOpenRequest(requestId);\n activeRequests.set(requestId, active);\n let dataset: DatasetState | undefined;\n let sourceHandle: string | number | undefined;\n let releaseSourceSlot: (() => void) | undefined;\n let opened = false;\n\n try {\n const limits = requireMemoryLimits();\n const payload = expectRecord(value, \"openSource payload\") as unknown as OpenSourcePayload;\n if (!isOfficialAdapterId(payload.adapterId)) {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"openSource adapterId is not registered\");\n }\n if (!isRecord(payload.options) || Array.isArray(payload.options)) {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"openSource options must be an object\");\n }\n let source: Blob;\n if (payload.source instanceof Blob) {\n source = payload.source;\n } else if (payload.source instanceof ArrayBuffer) {\n if (payload.source.byteLength > limits.maxArrayBufferBytes) {\n throw new ProtocolFault(\n \"RESOURCE_LIMIT\",\n `ArrayBuffer sources larger than ${limits.maxArrayBufferBytes} bytes must be supplied as a Blob`,\n false,\n {\n resource: \"source-staging\",\n requiredBytes: payload.source.byteLength,\n availableBytes: limits.maxArrayBufferBytes,\n },\n );\n }\n source = new Blob([payload.source]);\n } else {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"source must be a Blob or ArrayBuffer\");\n }\n releaseSourceSlot = reserveSourceSlot();\n\n const runtime = await awaitOperationStep(loadAdapter(payload.adapterId), active);\n active.adapter = runtime;\n\n const initialStep = runtime.beginOpen(adapterOpenOptions(payload, limits), source.size);\n const openRaw = await runOpenUntilPublished(\n runtime,\n source,\n initialStep,\n active,\n payload.adapterId,\n );\n const progressiveOpen = isProgressiveOpenStep(openRaw);\n if (openRaw.sourceHandle === undefined || openRaw.sourceHandle === null) {\n throw new ProtocolFault(\"RUNTIME_FAILURE\", \"Adapter open did not return a sourceHandle\");\n }\n sourceHandle = operationHandle(openRaw.sourceHandle, \"sourceHandle\");\n throwIfCancelled(active);\n\n const datasetHandle = `d${nextDatasetHandle++}`;\n const initialMetadata = normalizeMetadata(\n openRaw.metadata,\n normalizeDescriptor(openRaw.table, 0),\n );\n const initialTables = normalizeDescriptors(\n Array.isArray(openRaw.tables) ? openRaw.tables : undefined,\n openRaw.table,\n initialMetadata,\n );\n const openedDataset: DatasetState = {\n handle: datasetHandle,\n openRequestId: requestId,\n source,\n adapterId: payload.adapterId,\n adapter: runtime,\n sourceHandle,\n tables: initialTables,\n metadata: initialMetadata,\n scanOffset: progressiveOpen ? 0 : source.size,\n scanDone: !progressiveOpen,\n closed: false,\n eventsReady: false,\n pendingWarnings: progressiveOpen\n ? []\n : Array.isArray(openRaw.warnings) ? [...openRaw.warnings] : [],\n waiters: new Set(),\n rangeCache: createRangeCache(),\n ...(active.openedWorksheetReservation === undefined\n ? {}\n : { openedWorksheetReservation: active.openedWorksheetReservation }),\n releaseSourceSlot,\n };\n dataset = openedDataset;\n delete active.openedWorksheetReservation;\n datasets.set(datasetHandle, openedDataset);\n releaseSourceSlot = undefined;\n active.datasetHandle = datasetHandle;\n\n if (progressiveOpen) {\n applyProgressiveOpenStep(openedDataset, openRaw, false);\n await scanInitialPrefix(openedDataset, active);\n throwIfCancelled(active);\n delete active.operationHandle;\n if (!openedDataset.scanDone) {\n openedDataset.scanPromise = scanOpenToEnd(openedDataset);\n } else {\n openedDataset.pendingProgress = scanProgress(openedDataset);\n }\n }\n\n openedDatasetsByRequest.set(requestId, datasetHandle);\n opened = true;\n return { datasetHandle };\n } finally {\n activeRequests.delete(requestId);\n if (!opened) {\n if (dataset && !dataset.closed) {\n closeDatasetState(dataset, false);\n } else if (!dataset && sourceHandle !== undefined) {\n try {\n active.adapter?.closeSource(sourceHandle);\n } catch {\n // Preserve the original open or cancellation failure.\n }\n }\n }\n active.openedWorksheetReservation?.release();\n releaseSourceSlot?.();\n }\n}\n\nfunction adapterOpenOptions(\n payload: OpenSourcePayload,\n limits: MemoryBudgetLimits,\n): Readonly<Record<string, unknown>> {\n const sourceName = typeof payload.options.sourceName === \"string\" && payload.options.sourceName.length > 0\n ? payload.options.sourceName\n : undefined;\n if (payload.adapterId === \"tabulark:delimited\") {\n const delimiter = payload.options.delimiter;\n const header = payload.options.header;\n const mode = payload.options.mode;\n if (!isValidDelimiter(delimiter)) {\n throw new ProtocolFault(\n \"INVALID_ARGUMENT\",\n \"Delimited adapter delimiter must be one non-NUL ASCII byte other than CR, LF, or quote\",\n );\n }\n if (header !== \"first-row\" && header !== \"none\") {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"Delimited adapter header must be first-row or none\");\n }\n if (mode !== \"lenient\" && mode !== \"strict\") {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"Delimited adapter mode must be lenient or strict\");\n }\n return Object.freeze({\n delimiter,\n header: header === \"first-row\",\n mode,\n checkpointInterval: 1_024,\n tableName: sourceName ?? \"Table 1\",\n limits: Object.freeze({\n maxFieldBytes: limits.maxFieldBytes,\n maxColumns: 16_384,\n maxCellsPerRange: 250_000,\n maxBatchBytes: limits.maxBatchBytes,\n maxDiagnostics: 1_000,\n }),\n });\n }\n\n if (payload.adapterId === \"tabulark:arrow-ipc\") {\n const container = payload.options.container;\n if (container !== \"auto\" && container !== \"file\" && container !== \"stream\") {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"Arrow adapter container must be auto, file, or stream\");\n }\n return Object.freeze({\n container,\n tableName: sourceName ?? \"Arrow IPC\",\n limits: Object.freeze({\n maxSourceBytes: MAX_ARROW_SOURCE_BYTES,\n maxDecodedBytes: limits.operationBudgetBytes,\n maxOutputBytes: limits.maxBatchBytes,\n maxMetadataBytes: limits.maxFieldBytes,\n maxBlockBytes: Math.min(\n 64 * 1024 * 1024,\n Math.max(1, Math.floor(limits.operationBudgetBytes / 4)),\n ),\n streamChunkBytes: Math.min(\n 32 * 1024,\n Math.max(1, Math.floor(limits.operationBudgetBytes / 16)),\n ),\n maxFields: 16_384,\n maxNestingDepth: 64,\n maxRangeCells: 250_000,\n maxDisplayCellBytes: Math.min(\n 1024 * 1024,\n Math.max(1, Math.floor(limits.operationBudgetBytes / 16)),\n ),\n }),\n });\n }\n\n if (payload.adapterId === \"tabulark:parquet\") {\n return Object.freeze({\n sourceName: sourceName ?? \"Parquet\",\n });\n }\n\n const format = payload.options.format;\n if (format !== \"auto\" && format !== \"xls\" && format !== \"xlsx\") {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"Excel adapter format must be auto, xls, or xlsx\");\n }\n return Object.freeze({\n format,\n ...(sourceName === undefined ? {} : { sourceName }),\n });\n}\n\nfunction listTables(value: unknown): unknown {\n const payload = expectRecord(value, \"listTables payload\");\n const dataset = requireDataset(payload.datasetHandle);\n return dataset.tables;\n}\n\nfunction openTable(value: unknown): unknown {\n const payload = expectRecord(value, \"openTable payload\");\n const dataset = requireDataset(payload.datasetHandle);\n if (typeof payload.tableId !== \"string\") {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"tableId must be a string\");\n }\n if (!dataset.tables.some((table) => table.id === payload.tableId)) {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", `Unknown table: ${payload.tableId}`);\n }\n\n const tableHandle = `t${nextTableHandle++}`;\n const result = dataset.adapter.openTable(dataset.sourceHandle, payload.tableId);\n const raw = isRecord(result) ? result : {};\n const adapterTableHandle = operationHandle(\n raw.tableHandle ?? raw.handle ?? result,\n \"openTable tableHandle\",\n );\n const descriptor = dataset.tables.find((candidate) => candidate.id === payload.tableId)\n ?? { id: payload.tableId, name: payload.tableId };\n const metadata = normalizeMetadata(\n raw.metadata ?? dataset.adapter.metadata(adapterTableHandle),\n descriptor,\n );\n tables.set(tableHandle, {\n handle: tableHandle,\n datasetHandle: dataset.handle,\n tableId: payload.tableId,\n adapterTableHandle,\n metadata,\n closed: false,\n });\n return {\n id: payload.tableId,\n name: dataset.tables.find((descriptor) => descriptor.id === payload.tableId)?.name ?? payload.tableId,\n tableHandle,\n };\n}\n\nfunction getMetadata(value: unknown): unknown {\n const payload = expectRecord(value, \"getMetadata payload\");\n const table = requireTable(payload.tableHandle);\n const dataset = requireDataset(table.datasetHandle);\n const metadata = normalizeMetadata(\n dataset.adapter.metadata(table.adapterTableHandle),\n { id: table.tableId, name: table.metadata.name },\n );\n table.metadata = metadata;\n return metadata;\n}\n\nfunction getPresentation(value: unknown): unknown {\n const payload = expectRecord(value, \"getPresentation payload\");\n const table = requireTable(payload.tableHandle);\n const dataset = requireDataset(table.datasetHandle);\n return normalizePresentationResult(\n dataset.adapter.presentation(table.adapterTableHandle),\n table,\n );\n}\n\nfunction readPresentationRange(value: unknown): unknown {\n const payload = expectRecord(value, \"readPresentationRange payload\");\n const table = requireTable(payload.tableHandle);\n const dataset = requireDataset(table.datasetHandle);\n const range = normalizeRange(payload.range);\n const result = dataset.adapter.readPresentationRange(table.adapterTableHandle, range);\n return normalizePresentationRangeResult(result, table, range);\n}\n\nfunction normalizePresentationResult(value: unknown, table: OpenTableState): unknown {\n if (value === null || value === undefined) return null;\n const raw = expectRecord(value, \"table presentation\");\n if (raw.kind !== \"spreadsheet-v1\") {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter returned an unknown presentation kind\");\n }\n if (raw.tableId !== undefined && raw.tableId !== table.tableId) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter presentation belongs to another table\");\n }\n return {\n ...raw,\n kind: \"spreadsheet-v1\",\n tableId: table.tableId,\n revision: numberOr(raw.revision, table.metadata.revision),\n };\n}\n\nfunction normalizePresentationRangeResult(\n value: unknown,\n table: OpenTableState,\n requested: RangeRequest,\n): unknown {\n if (value === null || value === undefined) return null;\n const raw = expectRecord(value, \"presentation range\");\n if (raw.kind !== \"spreadsheet-v1\") {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter returned an unknown presentation range kind\");\n }\n if (raw.tableId !== undefined && raw.tableId !== table.tableId) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter presentation range belongs to another table\");\n }\n const range = isRecord(raw.range) ? normalizeRange(raw.range) : requested;\n if (\n range.rowStart !== requested.rowStart\n || range.rowCount !== requested.rowCount\n || range.columnStart !== requested.columnStart\n || range.columnCount !== requested.columnCount\n ) {\n throw new ProtocolFault(\n \"PROTOCOL_INCOMPATIBLE\",\n \"Adapter presentation range is not aligned with the requested range\",\n );\n }\n return {\n ...raw,\n kind: \"spreadsheet-v1\",\n tableId: table.tableId,\n revision: numberOr(raw.revision, table.metadata.revision),\n range,\n };\n}\n\n/** Adapter ABI v2 may publish a readable indexed prefix beside its next byte action. */\nfunction isProgressiveOpenStep(value: unknown): boolean {\n if (!isRecord(value) || value.kind !== \"open-progress\" || !isRecord(value.action)) {\n return false;\n }\n return value.action.kind === \"read-bytes\"\n && value.sourceHandle !== undefined\n && value.metadata !== undefined\n && isRecord(value.progress);\n}\n\nfunction applyProgressiveOpenStep(\n dataset: DatasetState,\n value: Record<string, unknown>,\n emitEvents: boolean,\n): void {\n const sourceHandle = operationHandle(value.sourceHandle, \"sourceHandle\");\n if (sourceHandle !== dataset.sourceHandle) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter open changed its sourceHandle\");\n }\n const metadata = normalizeMetadata(value.metadata, dataset.tables[0]);\n const progress = value.progress === undefined && value.kind === \"open-complete\"\n ? Object.freeze({\n bytesScanned: dataset.source.size,\n rowsDiscovered: discoveredRows(metadata),\n done: true,\n })\n : normalizeOpenProgress(value.progress, dataset.source.size);\n if (progress.bytesScanned < dataset.scanOffset) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter scan bytes regressed\");\n }\n\n const previousMetadata = JSON.stringify(dataset.metadata);\n const tableDescriptors = normalizeDescriptors(\n Array.isArray(value.tables) ? value.tables : undefined,\n value.table,\n metadata,\n );\n const complete = value.kind === \"open-complete\";\n if (complete !== progress.done) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter completion and progress disagree\");\n }\n if (progress.rowsDiscovered !== discoveredRows(metadata)) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter progress and metadata row counts disagree\");\n }\n\n const action = isRecord(value.action) ? value.action : undefined;\n if (!progress.done && !action) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter scan returned neither progress action nor completion\");\n }\n if (progress.done && action) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Completed adapter scan returned another read action\");\n }\n if (\n action\n && nonNegativeSafeInteger(action.offset, \"read-bytes offset\") !== progress.bytesScanned\n ) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter action does not begin at the scanned prefix\");\n }\n\n dataset.metadata = metadata;\n dataset.tables = tableDescriptors;\n dataset.scanOffset = progress.bytesScanned;\n dataset.scanDone = progress.done;\n if (action) {\n dataset.scanOperationHandle = operationHandle(value.operationHandle, \"operationHandle\");\n dataset.scanStep = value;\n } else {\n delete dataset.scanOperationHandle;\n delete dataset.scanStep;\n }\n\n if (emitEvents && dataset.eventsReady && JSON.stringify(metadata) !== previousMetadata) {\n emitMetadataUpdate(dataset);\n }\n const warnings = Array.isArray(value.warnings)\n ? value.warnings\n : value.warning === undefined ? [] : [value.warning];\n if (!emitEvents || !dataset.eventsReady) {\n dataset.pendingWarnings.push(...warnings);\n } else {\n emitWarnings(dataset, warnings);\n }\n if (emitEvents) {\n publishScanProgress(dataset);\n }\n notifyScanWaiters(dataset);\n}\n\nasync function scanInitialPrefix(dataset: DatasetState, active: ActiveOpenRequest): Promise<void> {\n while (\n !dataset.closed\n && !dataset.scanDone\n && dataset.scanOffset < Math.min(dataset.source.size, INITIAL_READ_LIMIT_BYTES)\n && discoveredRows(dataset.metadata) < INITIAL_ROW_TARGET\n ) {\n await scanOpenNextChunk(dataset, active, false);\n }\n if (!dataset.closed && dataset.source.size === 0 && !dataset.scanDone) {\n await scanOpenNextChunk(dataset, active, false);\n }\n throwIfCancelled(active);\n if (dataset.closed) {\n throw new ProtocolFault(\"HANDLE_CLOSED\", \"The source was closed while opening\");\n }\n}\n\nasync function scanOpenToEnd(dataset: DatasetState): Promise<void> {\n try {\n while (!dataset.closed && !dataset.scanDone) {\n await scanOpenNextChunk(dataset, undefined, true);\n }\n } catch (error) {\n if (dataset.closed) {\n return;\n }\n const failure = error instanceof ProtocolFault\n ? error\n : new ProtocolFault(\"RUNTIME_FAILURE\", \"Background source scanning failed\", false, undefined, error);\n dataset.scanError = failure;\n dataset.scanDone = true;\n delete dataset.scanStep;\n delete dataset.scanOperationHandle;\n notifyScanWaiters(dataset);\n try {\n emit({\n event: \"runtimeError\",\n datasetHandle: dataset.handle,\n tableId: dataset.metadata.tableId,\n revision: dataset.metadata.revision,\n payload: serializeFault(failure, \"Background source scanning failed\"),\n });\n } finally {\n // A delayed scan failure is terminal for this source but must not poison\n // another loaded adapter or a separate source in the same engine.\n closeDatasetState(dataset, true, failure);\n }\n }\n}\n\nasync function scanOpenNextChunk(\n dataset: DatasetState,\n active: ActiveOpenRequest | undefined,\n emitEvents: boolean,\n): Promise<void> {\n if (dataset.closed || dataset.scanDone) {\n return;\n }\n const step = dataset.scanStep;\n if (!step) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter scan has no pending read action\");\n }\n if (step.kind !== \"open-progress\") {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter scan did not return an open-progress step\");\n }\n const action = isRecord(step.action) ? step.action : undefined;\n if (!action || action.kind !== \"read-bytes\") {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter scan requested an unsupported action\");\n }\n const operation = operationHandle(step.operationHandle, \"operationHandle\");\n const offset = nonNegativeSafeInteger(action.offset, \"read-bytes offset\");\n const length = nonNegativeSafeInteger(action.length, \"read-bytes length\");\n const limits = requireMemoryLimits();\n const readLimit = operationReadLimit(dataset.adapterId, limits);\n if (\n length > readLimit\n || !Number.isSafeInteger(offset + length)\n || offset + length > dataset.source.size\n ) {\n throw new ProtocolFault(\n \"RESOURCE_LIMIT\",\n \"Adapter scan read-bytes action exceeds the source or engine memory budget\",\n false,\n {\n resource: operationResource(dataset.adapterId),\n requiredBytes: length,\n availableBytes: readLimit,\n offset,\n sourceLength: dataset.source.size,\n },\n );\n }\n dataset.scanOperationHandle = operation;\n if (active) {\n active.operationHandle = operation;\n throwIfCancelled(active);\n }\n const reservation = reserveOperationMemory(dataset.adapterId, length);\n const read = await acquireReservedBlobRead(\n dataset.source.slice(offset, offset + length),\n reservation,\n active,\n );\n let next: Record<string, unknown>;\n try {\n const bytes = new Uint8Array(read.buffer);\n if (dataset.closed) {\n return;\n }\n if (active) {\n throwIfCancelled(active);\n }\n next = expectRecord(\n dataset.adapter.continueOperation(operation, offset, bytes, offset + length >= dataset.source.size),\n \"adapter scan result\",\n );\n } finally {\n read.release();\n }\n if (dataset.closed) {\n return;\n }\n applyProgressiveOpenStep(dataset, next, emitEvents);\n if (active) {\n active.operationHandle = dataset.scanOperationHandle;\n }\n}\n\nfunction normalizeOpenProgress(value: unknown, sourceSize: number): ScanProgress {\n const raw = expectRecord(value, \"adapter scan progress\");\n const bytesScanned = nonNegativeSafeInteger(raw.bytesScanned, \"progress bytesScanned\");\n const rowsDiscovered = nonNegativeSafeInteger(raw.rowsDiscovered, \"progress rowsDiscovered\");\n if (bytesScanned > sourceSize || typeof raw.done !== \"boolean\") {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Delimited scan progress is invalid\");\n }\n return Object.freeze({ bytesScanned, rowsDiscovered, done: raw.done });\n}\n\nfunction discoveredRows(metadata: TableMetadata): number {\n return metadata.extent.rows.kind === \"unknown\" ? 0 : metadata.extent.rows.value;\n}\n\nfunction scanProgress(dataset: DatasetState): ScanProgress {\n return Object.freeze({\n bytesScanned: dataset.scanOffset,\n rowsDiscovered: discoveredRows(dataset.metadata),\n done: dataset.scanDone,\n });\n}\n\nfunction publishScanProgress(dataset: DatasetState): void {\n const progress = scanProgress(dataset);\n if (!dataset.eventsReady) {\n dataset.pendingProgress = progress;\n return;\n }\n emit({\n event: \"progress\",\n datasetHandle: dataset.handle,\n tableId: dataset.metadata.tableId,\n revision: dataset.metadata.revision,\n payload: {\n sourceHandle: dataset.handle,\n tableId: dataset.metadata.tableId,\n revision: dataset.metadata.revision,\n ...progress,\n },\n });\n}\n\nfunction emitMetadataUpdate(dataset: DatasetState): void {\n emit({\n event: \"metadata\",\n datasetHandle: dataset.handle,\n tableId: dataset.metadata.tableId,\n revision: dataset.metadata.revision,\n payload: dataset.metadata,\n });\n for (const table of tables.values()) {\n if (\n table.datasetHandle === dataset.handle\n && table.tableId === dataset.metadata.tableId\n && !table.closed\n ) {\n table.metadata = dataset.metadata;\n emit({\n event: \"metadata\",\n datasetHandle: dataset.handle,\n tableHandle: table.handle,\n tableId: table.tableId,\n revision: dataset.metadata.revision,\n payload: dataset.metadata,\n });\n }\n }\n}\n\nasync function waitUntilIndexed(\n dataset: DatasetState,\n request: RangeRequest,\n active: ActiveRangeRequest,\n): Promise<void> {\n if (request.rowCount === 0) {\n return;\n }\n while (!dataset.scanDone && discoveredRows(dataset.metadata) <= request.rowStart) {\n throwIfCancelled(active);\n await new Promise<void>((resolve) => dataset.waiters.add(resolve));\n }\n throwIfCancelled(active);\n if (dataset.scanError) {\n throw dataset.scanError;\n }\n}\n\nfunction notifyScanWaiters(dataset: DatasetState): void {\n const waiters = [...dataset.waiters];\n dataset.waiters.clear();\n for (const resolve of waiters) {\n resolve();\n }\n}\n\nasync function readRange(\n requestId: string,\n value: unknown,\n): Promise<{\n kind: \"batch\";\n data: WireTableBatch;\n transfer: Transferable[];\n release?: () => void;\n}> {\n const payload = expectRecord(value, \"readRange payload\");\n const table = requireTable(payload.tableHandle);\n const dataset = requireDataset(table.datasetHandle);\n const runtime = dataset.adapter;\n const request = normalizeRange(payload.range);\n const key = rangeCacheKey(\n table.tableId,\n table.metadata.revision,\n table.metadata.schema.version,\n request,\n );\n const cached = dataset.rangeCache.get(key);\n if (cached) {\n const reservation = requireMemoryLedger().reserve(\n \"batch\",\n wireBatchByteLength(cached.batch),\n );\n try {\n const batch = cloneWireTableBatch(cached.batch);\n return {\n kind: \"batch\",\n data: batch,\n transfer: collectBatchTransfers(batch),\n release: reservation.release,\n };\n } catch (error) {\n reservation.release();\n throw error;\n }\n }\n if (rangeRequestsInFlight >= MAX_IN_FLIGHT_RANGES) {\n throw new ProtocolFault(\n \"RESOURCE_LIMIT\",\n `The engine may have at most ${MAX_IN_FLIGHT_RANGES} in-flight range requests`,\n false,\n {\n resource: \"range-request-slots\",\n required: rangeRequestsInFlight + 1,\n available: MAX_IN_FLIGHT_RANGES,\n maxActiveRanges: MAX_ACTIVE_RANGES,\n maxRangeWaiters: MAX_RANGE_WAITERS,\n },\n );\n }\n rangeRequestsInFlight += 1;\n const active: ActiveRequest = {\n requestId,\n kind: \"range\",\n datasetHandle: dataset.handle,\n tableHandle: table.handle,\n adapter: runtime,\n cancelled: false,\n cancellation: createRequestCancellation(),\n };\n activeRequests.set(requestId, active);\n\n let releasePermit: (() => void) | undefined;\n try {\n await waitUntilIndexed(dataset, request, active);\n throwIfCancelled(active);\n try {\n releasePermit = await rangePermits.acquire(requestId);\n } catch (error) {\n if (error instanceof PermitQueueFullError) {\n throw new ProtocolFault(\n \"RESOURCE_LIMIT\",\n `The range queue may contain at most ${error.maxWaiters} waiters`,\n false,\n {\n resource: \"range-waiter-slots\",\n required: error.maxWaiters + 1,\n available: error.maxWaiters,\n maxActiveRanges: MAX_ACTIVE_RANGES,\n maxRangeWaiters: error.maxWaiters,\n },\n );\n }\n throw error;\n }\n throwIfCancelled(active);\n const rawBatch = await runAdapterOperation(\n runtime,\n dataset.source,\n runtime.beginRead(table.adapterTableHandle, request),\n active,\n dataset.adapterId,\n );\n\n throwIfCancelled(active);\n const rawBatchBytes = rawBatchByteLength(rawBatch);\n const batchReservation = requireMemoryLedger().reserve(\"batch\", rawBatchBytes);\n let batch: WireTableBatch;\n try {\n batch = copyBatch(rawBatch, table, dataset, request);\n } catch (error) {\n batchReservation.release();\n throw error;\n }\n // A range truncated at the current indexed prefix must be re-read after\n // the Stream grows; retaining it under the original request would turn a\n // transient prefix boundary into a stale permanent cache hit.\n if (batch.complete) {\n cacheBatch(dataset, table, request, batch);\n }\n const transfer = collectBatchTransfers(batch);\n return { kind: \"batch\", data: batch, transfer, release: batchReservation.release };\n } finally {\n activeRequests.delete(requestId);\n releasePermit?.();\n rangeRequestsInFlight -= 1;\n }\n}\n\nfunction cancel(value: unknown): unknown {\n const payload = expectRecord(value, \"cancel payload\");\n if (typeof payload.targetRequestId !== \"string\") {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"cancel targetRequestId must be a string\");\n }\n const active = activeRequests.get(payload.targetRequestId);\n if (active) {\n cancelActive(active);\n return { cancelled: true };\n }\n const datasetHandle = openedDatasetsByRequest.get(payload.targetRequestId);\n if (!datasetHandle) {\n return { cancelled: false };\n }\n const dataset = datasets.get(datasetHandle);\n if (!dataset || dataset.closed) {\n openedDatasetsByRequest.delete(payload.targetRequestId);\n return { cancelled: false };\n }\n closeDatasetState(dataset, false);\n return { cancelled: true };\n}\n\nfunction closeTable(value: unknown): unknown {\n const payload = expectRecord(value, \"closeTable payload\");\n if (typeof payload.tableHandle !== \"string\") {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"tableHandle must be a string\");\n }\n const table = tables.get(payload.tableHandle);\n if (!table || table.closed) {\n return { closed: true };\n }\n closeTableState(table, true);\n return { closed: true };\n}\n\nfunction closeSource(value: unknown): unknown {\n const payload = expectRecord(value, \"closeSource payload\");\n if (typeof payload.datasetHandle !== \"string\") {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"datasetHandle must be a string\");\n }\n const dataset = datasets.get(payload.datasetHandle);\n if (!dataset || dataset.closed) {\n return { closed: true };\n }\n closeDatasetState(dataset, true);\n return { closed: true };\n}\n\nfunction shutdown(): unknown {\n if (shuttingDown) {\n return { closed: true };\n }\n shuttingDown = true;\n for (const dataset of [...datasets.values()]) {\n closeDatasetState(dataset, false);\n }\n for (const adapter of loadedAdapters.values()) {\n adapter.dispose();\n }\n for (const reservation of adapterRuntimeReservations.values()) {\n reservation.release();\n }\n adapterRuntimeReservations.clear();\n loadedAdapters.clear();\n adapterLoads.clear();\n adapterRegistrations.clear();\n return { closed: true };\n}\n\nfunction reserveSourceSlot(): () => void {\n const limits = requireMemoryLimits();\n if (sourceSlotsInUse >= limits.maxSources) {\n throw new ProtocolFault(\n \"RESOURCE_LIMIT\",\n `The engine may retain at most ${limits.maxSources} sources or in-flight opens`,\n false,\n {\n resource: \"source-slots\",\n required: sourceSlotsInUse + 1,\n available: limits.maxSources,\n maxSources: limits.maxSources,\n },\n );\n }\n sourceSlotsInUse += 1;\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n sourceSlotsInUse -= 1;\n };\n}\n\nfunction awaitOperationStep<T>(operation: Promise<T>, active: ActiveRequest): Promise<T> {\n return Promise.race([\n operation,\n active.cancellation.promise.then<never>(() => {\n throw new ProtocolFault(\n \"CANCELLED\",\n active.kind === \"open\" ? \"The open request was cancelled\" : \"The range request was cancelled\",\n );\n }),\n ]);\n}\n\n/**\n * Acquires a Blob read while keeping its reservation attached to the actual\n * read lifetime. Blob.arrayBuffer() cannot be cancelled: if the request loses\n * the cancellation race, the lease is released only after that read settles.\n */\nasync function acquireReservedBlobRead(\n blob: Blob,\n reservation: MemoryReservation,\n active?: ActiveRequest,\n): Promise<ReservedBlobRead> {\n let operation: Promise<ArrayBuffer>;\n try {\n operation = blob.arrayBuffer();\n } catch (error) {\n reservation.release();\n throw error;\n }\n try {\n const buffer = active === undefined\n ? await operation\n : await awaitOperationStep(operation, active);\n return Object.freeze({ buffer, release: reservation.release });\n } catch (error) {\n if (active?.cancelled) {\n void operation.then(\n () => reservation.release(),\n () => reservation.release(),\n );\n } else {\n reservation.release();\n }\n throw error;\n }\n}\n\nfunction flushPendingDatasetEvents(value: unknown): void {\n const payload = isRecord(value) ? value : {};\n if (typeof payload.datasetHandle !== \"string\") {\n return;\n }\n const dataset = datasets.get(payload.datasetHandle);\n if (!dataset || dataset.closed || dataset.eventsReady) {\n return;\n }\n dataset.eventsReady = true;\n emitWarnings(dataset, dataset.pendingWarnings.splice(0));\n if (dataset.pendingProgress) {\n const progress = dataset.pendingProgress;\n delete dataset.pendingProgress;\n emit({\n event: \"progress\",\n datasetHandle: dataset.handle,\n tableId: dataset.metadata.tableId,\n revision: dataset.metadata.revision,\n payload: {\n sourceHandle: dataset.handle,\n tableId: dataset.metadata.tableId,\n revision: dataset.metadata.revision,\n ...progress,\n },\n });\n }\n}\n\nfunction emitWarnings(dataset: DatasetState, warnings: readonly unknown[]): void {\n for (const warning of warnings) {\n emit({\n event: \"warning\",\n datasetHandle: dataset.handle,\n tableId: dataset.metadata.tableId,\n payload: {\n handle: dataset.handle,\n ...(isRecord(warning) ? warning : { kind: \"warning\", message: String(warning) }),\n },\n });\n }\n}\n\nfunction cancelActive(active: ActiveRequest, failure?: ProtocolFault): void {\n if (active.cancelled) {\n if (active.kind === \"range\" && active.failure === undefined && failure !== undefined) {\n active.failure = failure;\n }\n return;\n }\n active.cancelled = true;\n if (active.operationHandle !== undefined) {\n try {\n active.adapter?.cancelOperation(active.operationHandle);\n } catch {\n // The request loop still observes the cancelled flag.\n }\n }\n active.cancellation.resolve();\n if (active.kind === \"open\") {\n if (active.datasetHandle) {\n const dataset = datasets.get(active.datasetHandle);\n if (dataset && !dataset.closed) {\n closeDatasetState(dataset, false);\n }\n }\n return;\n }\n if (failure !== undefined) {\n active.failure = failure;\n }\n rangePermits.cancel(\n active.requestId,\n failure ?? new ProtocolFault(\"CANCELLED\", \"The range request was cancelled\"),\n );\n const dataset = datasets.get(active.datasetHandle);\n if (dataset) {\n notifyScanWaiters(dataset);\n }\n}\n\nfunction throwIfCancelled(active: ActiveRequest): void {\n if (active.cancelled) {\n if (active.kind === \"range\" && active.failure !== undefined) {\n throw active.failure;\n }\n throw new ProtocolFault(\n \"CANCELLED\",\n active.kind === \"open\" ? \"The open request was cancelled\" : \"The range request was cancelled\",\n );\n }\n}\n\nfunction closeTableState(\n table: OpenTableState,\n emitEvent: boolean,\n failure?: ProtocolFault,\n): void {\n table.closed = true;\n for (const active of activeRequests.values()) {\n if (active.kind === \"range\" && active.tableHandle === table.handle) {\n cancelActive(active, failure);\n }\n }\n tables.delete(table.handle);\n const dataset = datasets.get(table.datasetHandle);\n if (dataset) {\n try {\n dataset.adapter.closeTable(table.adapterTableHandle);\n } catch {\n // A close notification remains idempotent if the adapter already closed it.\n }\n }\n if (emitEvent) {\n emit({\n event: \"closed\",\n datasetHandle: table.datasetHandle,\n tableHandle: table.handle,\n tableId: table.tableId,\n revision: table.metadata.revision,\n payload: { handle: table.handle, kind: \"table\" },\n });\n }\n}\n\nfunction closeDatasetState(\n dataset: DatasetState,\n emitEvent: boolean,\n failure?: ProtocolFault,\n): void {\n dataset.closed = true;\n dataset.pendingWarnings.length = 0;\n delete dataset.pendingProgress;\n openedDatasetsByRequest.delete(dataset.openRequestId);\n dataset.rangeCache.clear();\n dataset.openedWorksheetReservation?.release();\n notifyScanWaiters(dataset);\n if (dataset.scanOperationHandle !== undefined) {\n try {\n dataset.adapter.cancelOperation(dataset.scanOperationHandle);\n } catch {\n // closeSource below remains authoritative and idempotent.\n }\n delete dataset.scanOperationHandle;\n delete dataset.scanStep;\n }\n for (const table of [...tables.values()]) {\n if (table.datasetHandle === dataset.handle) {\n closeTableState(table, emitEvent, failure);\n }\n }\n for (const active of activeRequests.values()) {\n if (active.datasetHandle === dataset.handle) {\n cancelActive(active, failure);\n }\n }\n datasets.delete(dataset.handle);\n dataset.releaseSourceSlot();\n try {\n dataset.adapter.closeSource(dataset.sourceHandle);\n } catch {\n // close() is intentionally idempotent and best effort.\n }\n if (emitEvent) {\n emit({\n event: \"closed\",\n datasetHandle: dataset.handle,\n tableId: dataset.metadata.tableId,\n revision: dataset.metadata.revision,\n payload: { handle: dataset.handle, kind: \"source\" },\n });\n }\n}\n\nfunction copyBatch(\n value: unknown,\n table: OpenTableState,\n dataset: DatasetState,\n request: RangeRequest,\n): WireTableBatch {\n const raw = expectRecord(value, \"range batch\");\n if (!Array.isArray(raw.columns)) {\n throw new ProtocolFault(\"RUNTIME_FAILURE\", \"Range batch columns must be an array\");\n }\n const rawRange = isRecord(raw.range) ? raw.range : {};\n const range: ReturnedRange = {\n rowStart: numberOr(rawRange.rowStart, request.rowStart),\n rowCount: numberOr(rawRange.rowCount, 0),\n columnStart: numberOr(rawRange.columnStart, request.columnStart),\n columnCount: numberOr(rawRange.columnCount, raw.columns.length),\n };\n if (raw.layoutVersion !== BATCH_LAYOUT_VERSION) {\n throw new ProtocolFault(\n \"PROTOCOL_INCOMPATIBLE\",\n `Adapter returned batch layout ${String(raw.layoutVersion)}; expected ${BATCH_LAYOUT_VERSION}`,\n );\n }\n const buffers = copyBufferPool(raw.buffers);\n const columns = raw.columns.map((column, index) =>\n copyGenericColumn(column, range.rowCount, index));\n const batch: WireTableBatch = {\n layoutVersion: BATCH_LAYOUT_VERSION,\n tableId: typeof raw.tableId === \"string\" ? raw.tableId : table.tableId,\n revision: numberOr(raw.revision, table.metadata.revision),\n schemaVersion: numberOr(raw.schemaVersion, table.metadata.schema.version),\n range,\n buffers,\n columns,\n complete: raw.complete !== false,\n };\n // The Worker validates all descriptor boundaries before caching or transfer.\n new ColumnarTableBatch(batch);\n return batch;\n}\n\nfunction rawBatchByteLength(value: unknown): number {\n const raw = expectRecord(value, \"range batch\");\n if (!Array.isArray(raw.buffers)) {\n throw new ProtocolFault(\"RUNTIME_FAILURE\", \"Layout-v1 batch buffers must be an array\");\n }\n let total = 0;\n for (const [index, buffer] of raw.buffers.entries()) {\n const bytes = buffer instanceof ArrayBuffer\n ? buffer.byteLength\n : ArrayBuffer.isView(buffer) ? buffer.byteLength : undefined;\n if (bytes === undefined) {\n throw new ProtocolFault(\"RUNTIME_FAILURE\", `batch buffer ${index} must be a Uint8Array`);\n }\n total += bytes;\n if (!Number.isSafeInteger(total)) {\n throw new ProtocolFault(\n \"RESOURCE_LIMIT\",\n \"Batch buffers exceed the safe integer range\",\n false,\n {\n resource: \"batch\",\n requiredBytes: total,\n availableBytes: Number.MAX_SAFE_INTEGER,\n },\n );\n }\n }\n return total;\n}\n\nfunction createRangeCache(): ByteLruCache<CachedRangeBatch> {\n return new ByteLruCache(rangeCacheBudgetBytes, {\n onRemove: (_key, entry) => entry.reservation.release(),\n });\n}\n\nfunction cacheBatch(\n dataset: DatasetState,\n table: OpenTableState,\n request: RangeRequest,\n batch: WireTableBatch,\n): void {\n const byteLength = wireBatchByteLength(batch);\n if (byteLength > dataset.rangeCache.maxBytes) {\n return;\n }\n let reservation: MemoryReservation;\n try {\n reservation = requireMemoryLedger().reserve(\"range-cache\", byteLength);\n } catch {\n // Cache admission is optional; the completed read remains usable even\n // when live adapter, staging and batch reservations consume the budget.\n return;\n }\n try {\n const cachedBatch = cloneWireTableBatch(batch);\n dataset.rangeCache.set(\n rangeCacheKey(table.tableId, batch.revision, batch.schemaVersion, request),\n Object.freeze({ batch: cachedBatch, reservation }),\n byteLength,\n );\n } catch (error) {\n reservation.release();\n throw error;\n }\n}\n\nfunction copyBufferPool(value: unknown): ArrayBuffer[] {\n if (!Array.isArray(value)) {\n throw new ProtocolFault(\"RUNTIME_FAILURE\", \"Layout-v1 batch buffers must be an array\");\n }\n return value.map((entry, index) => copyBytes(entry, `batch buffer ${index}`).buffer as ArrayBuffer);\n}\n\nfunction copyGenericColumn(\n value: unknown,\n rows: number,\n index: number,\n): WireTableBatch[\"columns\"][number] {\n const raw = expectRecord(value, \"batch column\");\n return Object.freeze({\n columnId: typeof raw.columnId === \"string\" ? raw.columnId : `c${index}`,\n native: copyNativeDescriptor(raw.native, rows, 0),\n display: copyDisplayDescriptor(raw.display),\n });\n}\n\nfunction copyNativeDescriptor(value: unknown, fallbackLength: number, depth: number): NativeColumnDescriptor {\n if (depth >= 64) {\n throw new ProtocolFault(\n \"RESOURCE_LIMIT\",\n \"Native descriptor nesting may not exceed 64\",\n false,\n { resource: \"descriptor-nesting\", required: depth + 1, available: 64 },\n );\n }\n const raw = expectRecord(value, \"native column descriptor\");\n const encoding = typeof raw.encoding === \"string\" ? raw.encoding : \"\";\n const common = {\n ...(encoding.length === 0 ? {} : { encoding }),\n dataType: raw.dataType as NativeColumnDescriptor[\"dataType\"],\n length: numberOr(raw.length, fallbackLength),\n ...(raw.validity === undefined ? {} : { validity: copyRegion(raw.validity, \"validity\") }),\n } satisfies Pick<NativeColumnDescriptor, \"dataType\" | \"length\"> & Partial<NativeColumnDescriptor>;\n switch (encoding) {\n case \"null\":\n return Object.freeze(common);\n case \"bitmap\":\n return Object.freeze({ ...common, values: copyRegion(raw.values, \"bitmap values\") });\n case \"fixed-width\":\n return Object.freeze({ ...common, values: copyRegion(raw.values, \"fixed-width values\") });\n case \"variable-width\":\n return Object.freeze({\n ...common,\n offsets: copyRegion(raw.offsets, \"variable-width offsets\"),\n data: copyRegion(raw.values, \"variable-width values\"),\n });\n case \"view\":\n return Object.freeze({\n ...common,\n values: copyRegion(raw.views, \"view records\"),\n variadicBuffers: Object.freeze(\n (Array.isArray(raw.buffers) ? raw.buffers : []).map((entry) => copyRegion(entry, \"view buffer\")),\n ),\n });\n case \"list\":\n return Object.freeze({\n ...common,\n offsets: copyRegion(raw.offsets, \"list offsets\"),\n children: Object.freeze([copyNativeDescriptor(raw.values, 0, depth + 1)]),\n });\n case \"list-view\":\n return Object.freeze({\n ...common,\n offsets: copyRegion(raw.offsets, \"list-view offsets\"),\n sizes: copyRegion(raw.sizes, \"list-view sizes\"),\n children: Object.freeze([copyNativeDescriptor(raw.values, 0, depth + 1)]),\n });\n case \"fixed-size-list\":\n return Object.freeze({\n ...common,\n children: Object.freeze([copyNativeDescriptor(raw.values, 0, depth + 1)]),\n });\n case \"struct\":\n return Object.freeze({\n ...common,\n children: Object.freeze(\n (Array.isArray(raw.fields) ? raw.fields : []).map((field) => copyNativeDescriptor(field, 0, depth + 1)),\n ),\n });\n case \"union\": {\n const fields = Array.isArray(raw.fields) ? raw.fields : [];\n return Object.freeze({\n ...common,\n // ArrayLayout is an internally tagged Rust enum. Its variant names are\n // kebab-cased, while fields inside struct variants retain their Rust\n // snake_case names unless they are explicitly renamed. Accept both\n // spellings so this generic copier remains compatible with the exact\n // serde-wasm-bindgen envelope as well as canonical JS fixtures.\n typeIds: copyRegion(raw.typeIds ?? raw.type_ids, \"union type ids\"),\n ...(raw.offsets === undefined ? {} : { unionOffsets: copyRegion(raw.offsets, \"union offsets\") }),\n children: Object.freeze(fields.map((field) => {\n const entry = expectRecord(field, \"union child\");\n return Object.freeze({\n ...copyNativeDescriptor(entry.values, 0, depth + 1),\n typeId: numberOr(entry.typeId, 0),\n });\n })),\n });\n }\n case \"dictionary\":\n return Object.freeze({\n ...common,\n children: Object.freeze([\n copyNativeDescriptor(raw.keys, common.length, depth + 1),\n copyNativeDescriptor(raw.values, 0, depth + 1),\n ]),\n dictionary: copyNativeDescriptor(raw.values, 0, depth + 1),\n });\n case \"run-end-encoded\":\n return Object.freeze({\n ...common,\n runEnds: copyNativeDescriptor(raw.runEnds ?? raw.run_ends, 0, depth + 1),\n children: Object.freeze([copyNativeDescriptor(raw.values, 0, depth + 1)]),\n });\n default:\n throw new ProtocolFault(\n \"PROTOCOL_INCOMPATIBLE\",\n `Adapter returned an unknown native array encoding: ${encoding || \"<missing>\"}`,\n );\n }\n}\n\nfunction copyDisplayDescriptor(value: unknown): DisplayColumnDescriptor {\n const raw = expectRecord(value, \"display column descriptor\");\n if (raw.encoding !== \"variable-width\") {\n throw new ProtocolFault(\n \"PROTOCOL_INCOMPATIBLE\",\n \"Adapter display columns must use the UTF-8 variable-width layout\",\n );\n }\n return Object.freeze({\n encoding: \"utf8\",\n data: copyRegion(raw.values, \"display values\"),\n offsets: copyRegion(raw.offsets, \"display offsets\"),\n ...(raw.validity === undefined ? {} : { validity: copyRegion(raw.validity, \"display validity\") }),\n });\n}\n\nfunction copyRegion(\n value: unknown,\n name: string,\n): { buffer: number; byteOffset?: number; byteLength?: number; bitOffset?: number } {\n const wrapper = expectRecord(value, `${name} region`);\n const raw = isRecord(wrapper.buffer) ? wrapper.buffer : wrapper;\n if (!Number.isSafeInteger(raw.buffer) || (raw.buffer as number) < 0) {\n throw new ProtocolFault(\"RUNTIME_FAILURE\", `${name} region has an invalid buffer index`);\n }\n return Object.freeze({\n buffer: raw.buffer as number,\n ...(raw.byteOffset === undefined ? {} : { byteOffset: numberOr(raw.byteOffset, 0) }),\n ...(raw.byteLength === undefined ? {} : { byteLength: numberOr(raw.byteLength, 0) }),\n ...(wrapper.bitOffset === undefined ? {} : { bitOffset: numberOr(wrapper.bitOffset, 0) }),\n });\n}\n\nfunction copyBytes(value: unknown, name: string): Uint8Array {\n if (value instanceof ArrayBuffer) {\n return Uint8Array.from(new Uint8Array(value));\n }\n if (ArrayBuffer.isView(value)) {\n return Uint8Array.from(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));\n }\n throw new ProtocolFault(\"RUNTIME_FAILURE\", `${name} must be a Uint8Array`);\n}\n\nfunction collectBatchTransfers(batch: WireTableBatch): Transferable[] {\n const transfers = new Set<ArrayBuffer>();\n for (const buffer of batch.buffers) {\n transfers.add(buffer instanceof ArrayBuffer ? buffer : buffer.buffer as ArrayBuffer);\n }\n return [...transfers];\n}\n\nfunction normalizeMetadata(value: unknown, fallback?: TableDescriptor): TableMetadata {\n const raw = isRecord(value) ? value : {};\n const rawExtent = isRecord(raw.extent) ? raw.extent : {};\n const rawSchema = isRecord(raw.schema) ? raw.schema : {};\n const columns = Array.isArray(rawSchema.columns)\n ? rawSchema.columns.map((column, index) => normalizeColumn(column, index))\n : [];\n return {\n tableId: typeof raw.tableId === \"string\" ? raw.tableId : fallback?.id ?? \"table-0\",\n name: typeof raw.name === \"string\" ? raw.name : fallback?.name ?? \"Table 1\",\n revision: numberOr(raw.revision, 0),\n extent: {\n rows: normalizeAxis(rawExtent.rows, \"at-least\", 0),\n columns: normalizeAxis(rawExtent.columns, \"exact\", columns.length),\n },\n schema: {\n version: numberOr(rawSchema.version, 0),\n columns,\n },\n capabilities: isRecord(raw.capabilities)\n ? {\n ...raw.capabilities,\n randomAccess: raw.capabilities.randomAccess === \"full\" ? \"full\" : \"indexed-prefix\",\n typedValues: raw.capabilities.typedValues === true,\n search: raw.capabilities.search === true,\n sort: raw.capabilities.sort === true,\n filter: raw.capabilities.filter === true,\n multiTable: raw.capabilities.multiTable === true,\n }\n : {\n randomAccess: \"indexed-prefix\",\n typedValues: false,\n search: false,\n sort: false,\n filter: false,\n multiTable: false,\n },\n };\n}\n\nfunction normalizeColumn(value: unknown, index: number): TableMetadata[\"schema\"][\"columns\"][number] {\n const raw = isRecord(value) ? value : {};\n return {\n id: typeof raw.id === \"string\" ? raw.id : `c${index}`,\n name: typeof raw.name === \"string\" ? raw.name : `column_${index + 1}`,\n index: numberOr(raw.index, index),\n dataType: normalizeDataType(raw.dataType ?? { type: \"unknown\" }),\n nullable: raw.nullable !== false,\n ...(isRecord(raw.metadata)\n ? { metadata: Object.freeze(Object.fromEntries(\n Object.entries(raw.metadata).map(([key, entry]) => [key, String(entry)]),\n )) }\n : {}),\n };\n}\n\nfunction normalizeAxis(\n value: unknown,\n fallbackKind: \"exact\" | \"at-least\",\n fallbackValue: number,\n): TableMetadata[\"extent\"][\"rows\"] {\n if (isRecord(value)) {\n if (value.kind === \"unknown\") {\n return { kind: \"unknown\" };\n }\n if (\n (value.kind === \"exact\" || value.kind === \"at-least\")\n && Number.isSafeInteger(value.value)\n && (value.value as number) >= 0\n ) {\n return { kind: value.kind, value: value.value as number };\n }\n }\n return { kind: fallbackKind, value: fallbackValue };\n}\n\nfunction isValidDelimiter(value: unknown): value is string {\n if (typeof value !== \"string\" || value.length !== 1) {\n return false;\n }\n const byte = value.charCodeAt(0);\n return byte <= 0x7f && byte !== 0 && byte !== 0x0d && byte !== 0x0a && byte !== 0x22;\n}\n\nfunction normalizeDescriptors(\n value: readonly unknown[] | undefined,\n single: unknown,\n metadata: TableMetadata,\n): readonly TableDescriptor[] {\n const candidates = Array.isArray(value) && value.length > 0 ? value : single === undefined ? [] : [single];\n const descriptors = candidates.map((entry, index) => normalizeDescriptor(entry, index));\n return descriptors.length > 0 ? descriptors : [{ id: metadata.tableId, name: metadata.name }];\n}\n\nfunction normalizeDescriptor(value: unknown, index: number): TableDescriptor {\n const raw = isRecord(value) ? value : {};\n return {\n id: typeof raw.id === \"string\" ? raw.id : `table-${index}`,\n name: typeof raw.name === \"string\" ? raw.name : `Table ${index + 1}`,\n };\n}\n\nfunction normalizeRange(value: unknown): RangeRequest {\n const raw = expectRecord(value, \"range request\");\n const request = {\n rowStart: raw.rowStart,\n rowCount: raw.rowCount,\n columnStart: raw.columnStart,\n columnCount: raw.columnCount,\n };\n for (const [name, field] of Object.entries(request)) {\n if (!Number.isSafeInteger(field) || (field as number) < 0) {\n throw new ProtocolFault(\"INVALID_RANGE\", `${name} must be a non-negative safe integer`);\n }\n }\n return request as RangeRequest;\n}\n\nfunction numberOr(value: unknown, fallback: number): number {\n return Number.isSafeInteger(value) && (value as number) >= 0 ? value as number : fallback;\n}\n\nfunction adapterModuleUrl(id: OfficialAdapterId): string {\n const testUrls = (globalThis as unknown as {\n readonly __tabularkTestOnlyAdapterModuleUrls?: Readonly<Record<string, unknown>>;\n }).__tabularkTestOnlyAdapterModuleUrls;\n const testUrl = testUrls?.[id];\n // This hook is Worker-global rather than protocol-visible. It lets\n // same-realm tests substitute bindings without accepting caller URLs.\n return typeof testUrl === \"string\" && testUrl.length > 0\n ? testUrl\n : officialAdapterModuleUrl(id);\n}\n\nasync function loadAdapter(id: string): Promise<WasmAdapter> {\n if (shuttingDown) {\n throw new ProtocolFault(\"HANDLE_CLOSED\", \"The Worker runtime is not available\");\n }\n const registration = adapterRegistrations.get(id);\n if (!registration) {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", `Adapter ${id} is not registered`);\n }\n const existing = adapterLoads.get(id);\n if (existing) return existing;\n const limits = requireMemoryLimits();\n if (!isOfficialAdapterId(id)) {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", `Adapter ${id} is not official`);\n }\n const runtimeBudgetBytes = adapterRuntimeBudget(id, limits);\n const reservation = requireMemoryLedger().reserve(\"adapter-runtime\", runtimeBudgetBytes);\n adapterRuntimeReservations.set(id, reservation);\n const loading = WasmAdapter.load(registration.moduleUrl, registration.id, {\n memoryBudgetBytes: runtimeBudgetBytes,\n indexBudgetBytes: Math.min(limits.indexBudgetBytes, Math.floor(runtimeBudgetBytes / 2)),\n tileCacheBudgetBytes: Math.min(limits.adapterTileCacheBudgetBytes, Math.floor(runtimeBudgetBytes / 2)),\n chunkBytes: Math.min(CHUNK_BYTES, limits.operationBudgetBytes),\n checkpointRows: 1_024,\n maxFieldBytes: limits.maxFieldBytes,\n maxColumns: 16_384,\n maxRangeCells: 250_000,\n maxBatchBytes: limits.maxBatchBytes,\n maxSources: limits.maxSources,\n maxActiveRanges: limits.maxActiveRanges,\n }).then((loaded) => {\n loadedAdapters.set(id, loaded);\n return loaded;\n }).catch((error) => {\n adapterLoads.delete(id);\n loadedAdapters.delete(id);\n adapterRuntimeReservations.get(id)?.release();\n adapterRuntimeReservations.delete(id);\n throw error;\n });\n adapterLoads.set(id, loading);\n return loading;\n}\n\nfunction adapterRuntimeBudget(id: OfficialAdapterId, limits: MemoryBudgetLimits): number {\n const registrations = [...adapterRegistrations.keys()].filter(isOfficialAdapterId);\n const totalWeight = registrations.reduce(\n (total, adapterId) => total + officialAdapterManifestEntry(adapterId).resources.runtimeWeight,\n 0,\n );\n const weight = officialAdapterManifestEntry(id).resources.runtimeWeight;\n return Math.max(1, Math.floor(limits.adapterRuntimePoolBytes * weight / Math.max(1, totalWeight)));\n}\n\nfunction operationResource(id: OfficialAdapterId): \"source-staging\" | \"compressed-page\" {\n return id === \"tabulark:parquet\" ? \"compressed-page\" : \"source-staging\";\n}\n\nfunction operationReadLimit(id: OfficialAdapterId, limits: MemoryBudgetLimits): number {\n return id === \"tabulark:excel\" ? limits.maxArrayBufferBytes : limits.operationBudgetBytes;\n}\n\nfunction reserveOperationMemory(id: OfficialAdapterId, bytes: number): MemoryReservation {\n return requireMemoryLedger().reserve(operationResource(id), bytes);\n}\n\n/**\n * Drives an open only until it either completes or publishes a readable\n * indexed prefix. Unlike a range operation, a published open keeps ownership\n * of its operation handle so the dataset can continue indexing in background.\n */\nasync function runOpenUntilPublished(\n adapter: WasmAdapter,\n source: Blob,\n initial: unknown,\n active: ActiveOpenRequest,\n adapterId: OfficialAdapterId,\n): Promise<Record<string, unknown>> {\n let step = initial;\n let complete = false;\n let published = false;\n try {\n for (;;) {\n throwIfCancelled(active);\n const raw = expectRecord(step, \"adapter open result\");\n if (isProgressiveOpenStep(raw)) {\n published = true;\n return raw;\n }\n if (raw.kind === \"open-complete\") {\n complete = true;\n delete active.operationHandle;\n return raw;\n }\n if (raw.kind !== \"read-bytes\") {\n throw new ProtocolFault(\n \"PROTOCOL_INCOMPATIBLE\",\n \"Adapter open returned an invalid discriminated step\",\n );\n }\n const action = isRecord(raw.action) ? raw.action : undefined;\n if (!action) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter read-bytes step has no action\");\n }\n if (action.kind !== \"read-bytes\") {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter requested an unsupported action\");\n }\n active.operationHandle = operationHandle(raw.operationHandle, \"operationHandle\");\n const offset = nonNegativeSafeInteger(action.offset, \"read-bytes offset\");\n const length = nonNegativeSafeInteger(action.length, \"read-bytes length\");\n const limits = requireMemoryLimits();\n const readLimit = operationReadLimit(adapterId, limits);\n if (\n length > readLimit\n || !Number.isSafeInteger(offset + length)\n || offset + length > source.size\n ) {\n throw new ProtocolFault(\n \"RESOURCE_LIMIT\",\n \"Adapter read-bytes action exceeds the source or engine memory budget\",\n false,\n {\n resource: operationResource(adapterId),\n requiredBytes: length,\n availableBytes: readLimit,\n offset,\n sourceLength: source.size,\n },\n );\n }\n const reservation = reserveOperationMemory(adapterId, length);\n const read = await acquireReservedBlobRead(\n source.slice(offset, offset + length),\n reservation,\n active,\n );\n try {\n const bytes = new Uint8Array(read.buffer);\n throwIfCancelled(active);\n if (\n adapterId === \"tabulark:excel\"\n && active.openedWorksheetReservation === undefined\n ) {\n // Excel retains the staged workbook after the one-shot source read;\n // keep that ownership visible to the same global ledger after the\n // transient source-staging reservation is released.\n active.openedWorksheetReservation = requireMemoryLedger().reserve(\n \"opened-worksheet\",\n source.size,\n );\n }\n step = adapter.continueOperation(\n active.operationHandle,\n offset,\n bytes,\n offset + length >= source.size,\n );\n } finally {\n read.release();\n }\n }\n } finally {\n if (!complete && !published && active.operationHandle !== undefined) {\n try {\n adapter.cancelOperation(active.operationHandle);\n } catch {\n // Preserve the open failure while still making cleanup best effort.\n }\n delete active.operationHandle;\n }\n }\n}\n\nasync function runAdapterOperation(\n adapter: WasmAdapter,\n source: Blob,\n initial: unknown,\n active: ActiveOpenRequest | ActiveRangeRequest,\n adapterId: OfficialAdapterId,\n): Promise<unknown> {\n let step = initial;\n let complete = false;\n try {\n for (;;) {\n throwIfCancelled(active);\n const raw = expectRecord(step, \"adapter operation result\");\n if (raw.kind === \"read-complete\") {\n complete = true;\n delete active.operationHandle;\n return raw.batch;\n }\n if (raw.kind !== \"read-bytes\") {\n throw new ProtocolFault(\n \"PROTOCOL_INCOMPATIBLE\",\n \"Adapter read returned an invalid discriminated step\",\n );\n }\n const action = isRecord(raw.action) ? raw.action : undefined;\n if (!action) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter read-bytes step has no action\");\n }\n if (action.kind !== \"read-bytes\") {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", \"Adapter requested an unsupported action\");\n }\n active.operationHandle = operationHandle(raw.operationHandle, \"operationHandle\");\n const offset = nonNegativeSafeInteger(action.offset, \"read-bytes offset\");\n const length = nonNegativeSafeInteger(action.length, \"read-bytes length\");\n const limits = requireMemoryLimits();\n const readLimit = operationReadLimit(adapterId, limits);\n if (\n length > readLimit\n || !Number.isSafeInteger(offset + length)\n || offset + length > source.size\n ) {\n throw new ProtocolFault(\n \"RESOURCE_LIMIT\",\n \"Adapter read-bytes action exceeds the source or engine memory budget\",\n false,\n {\n resource: operationResource(adapterId),\n requiredBytes: length,\n availableBytes: readLimit,\n offset,\n sourceLength: source.size,\n },\n );\n }\n const reservation = reserveOperationMemory(adapterId, length);\n const read = await acquireReservedBlobRead(\n source.slice(offset, offset + length),\n reservation,\n active,\n );\n try {\n const bytes = new Uint8Array(read.buffer);\n throwIfCancelled(active);\n step = adapter.continueOperation(\n active.operationHandle,\n offset,\n bytes,\n offset + length >= source.size,\n );\n } finally {\n read.release();\n }\n }\n } finally {\n if (!complete && active.operationHandle !== undefined) {\n try {\n adapter.cancelOperation(active.operationHandle);\n } catch {\n // Preserve the operation failure while still making cleanup best effort.\n }\n delete active.operationHandle;\n }\n }\n}\n\nfunction operationHandle(value: unknown, name: string): string | number {\n if (typeof value === \"string\" && value.length > 0) return value;\n if (Number.isSafeInteger(value) && (value as number) >= 0) return value as number;\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", `${name} must be a handle`);\n}\n\nfunction nonNegativeSafeInteger(value: unknown, name: string): number {\n if (!Number.isSafeInteger(value) || (value as number) < 0) {\n throw new ProtocolFault(\"PROTOCOL_INCOMPATIBLE\", `${name} must be a non-negative safe integer`);\n }\n return value as number;\n}\n\nfunction requireMemoryLimits(): MemoryBudgetLimits {\n if (!memoryLimits) {\n throw new ProtocolFault(\"HANDLE_CLOSED\", \"The Worker runtime is not available\");\n }\n return memoryLimits;\n}\n\nfunction requireMemoryLedger(): MemoryReservationLedger {\n if (!memoryLedger) {\n throw new ProtocolFault(\"HANDLE_CLOSED\", \"The Worker memory ledger is not available\");\n }\n return memoryLedger;\n}\n\nfunction requireDataset(value: unknown): DatasetState {\n if (typeof value !== \"string\") {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"datasetHandle must be a string\");\n }\n const dataset = datasets.get(value);\n if (!dataset || dataset.closed) {\n throw new ProtocolFault(\"HANDLE_CLOSED\", \"The dataset is closed\");\n }\n return dataset;\n}\n\nfunction requireTable(value: unknown): OpenTableState {\n if (typeof value !== \"string\") {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", \"tableHandle must be a string\");\n }\n const table = tables.get(value);\n if (!table || table.closed) {\n throw new ProtocolFault(\"HANDLE_CLOSED\", \"The table is closed\");\n }\n return table;\n}\n\nfunction expectRecord(value: unknown, name: string): Record<string, unknown> {\n if (!isRecord(value)) {\n throw new ProtocolFault(\"INVALID_ARGUMENT\", `${name} must be an object`);\n }\n return value;\n}\n\nfunction isRequest(value: unknown): value is ProtocolRequest {\n return (\n isRecord(value) &&\n typeof value.requestId === \"string\" &&\n typeof value.op === \"string\" &&\n \"payload\" in value\n );\n}\n\nfunction postSuccess(\n requestId: string,\n kind:\n | \"hello\"\n | \"dataset\"\n | \"tables\"\n | \"table\"\n | \"metadata\"\n | \"presentation\"\n | \"presentationRange\"\n | \"batch\"\n | \"acknowledged\",\n data: unknown,\n transfer: Transferable[] = [],\n): void {\n const response: ProtocolResponse = {\n protocolVersion: PROTOCOL_VERSION,\n requestId,\n status: \"success\",\n result: data === undefined ? { kind } : { kind, data },\n };\n scope.postMessage(response, transfer);\n}\n\nfunction postFailure(requestId: string, error: unknown): void {\n const response: ProtocolResponse = {\n protocolVersion: PROTOCOL_VERSION,\n requestId,\n status: \"failure\",\n error: serializeFault(error, \"Worker operation failed\"),\n };\n scope.postMessage(response);\n}\n\nfunction emit(\n event: Omit<ProtocolEvent, \"protocolVersion\">,\n): void {\n scope.postMessage({ protocolVersion: PROTOCOL_VERSION, ...event });\n}\n\n// Keep the operation type checked even though dispatch validates it at runtime.\nconst _operations: readonly Operation[] = [\n \"hello\",\n \"openSource\",\n \"listTables\",\n \"openTable\",\n \"getMetadata\",\n \"getPresentation\",\n \"readPresentationRange\",\n \"readRange\",\n \"cancel\",\n \"closeTable\",\n \"closeSource\",\n \"shutdown\",\n];\nvoid _operations;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["isRecord", "isRecord", "offset", "waiter", "asUint8Array", "operationHandle", "isRecord", "descriptor", "dataset"]
|
|
7
|
+
}
|