tabulark 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +67 -2
  2. package/README.md +125 -42
  3. package/dist/client.d.ts +71 -2
  4. package/dist/errors.d.ts +7 -1
  5. package/dist/experimental.js +1 -1
  6. package/dist/experimental.js.map +2 -2
  7. package/dist/http.d.ts +65 -0
  8. package/dist/http.js +2 -0
  9. package/dist/http.js.map +7 -0
  10. package/dist/index.d.ts +2 -1
  11. package/dist/index.js +2 -1
  12. package/dist/index.js.map +4 -4
  13. package/dist/model.d.ts +6 -3
  14. package/dist/protocol.d.ts +3 -3
  15. package/dist/range-cache.d.ts +24 -5
  16. package/dist/range-source.d.ts +64 -0
  17. package/dist/rpc-client.d.ts +15 -2
  18. package/dist/source.d.ts +13 -0
  19. package/dist/view/canvas-table-view-public.d.ts +6 -0
  20. package/dist/view/canvas-table-view.d.ts +8 -0
  21. package/dist/wasm/arrow/tabulark_arrow.d.ts +33 -6
  22. package/dist/wasm/arrow/tabulark_arrow.js +129 -17
  23. package/dist/wasm/arrow/tabulark_arrow_bg.wasm +0 -0
  24. package/dist/wasm/arrow/tabulark_arrow_bg.wasm.d.ts +6 -1
  25. package/dist/wasm/delimited/tabulark_delimited.d.ts +31 -5
  26. package/dist/wasm/delimited/tabulark_delimited.js +115 -8
  27. package/dist/wasm/delimited/tabulark_delimited_bg.wasm +0 -0
  28. package/dist/wasm/delimited/tabulark_delimited_bg.wasm.d.ts +6 -1
  29. package/dist/wasm/excel/tabulark_excel.d.ts +33 -8
  30. package/dist/wasm/excel/tabulark_excel.js +129 -19
  31. package/dist/wasm/excel/tabulark_excel_bg.wasm +0 -0
  32. package/dist/wasm/excel/tabulark_excel_bg.wasm.d.ts +6 -1
  33. package/dist/wasm/parquet/tabulark_parquet.d.ts +31 -6
  34. package/dist/wasm/parquet/tabulark_parquet.js +135 -17
  35. package/dist/wasm/parquet/tabulark_parquet_bg.wasm +0 -0
  36. package/dist/wasm/parquet/tabulark_parquet_bg.wasm.d.ts +6 -1
  37. package/dist/worker/blob-source-accessor.d.ts +10 -0
  38. package/dist/worker/source-accessor.d.ts +76 -0
  39. package/dist/worker/wasm-adapter.d.ts +39 -38
  40. package/dist/worker-range-source.d.ts +1 -0
  41. package/dist/worker-range-source.js +2 -0
  42. package/dist/worker-range-source.js.map +7 -0
  43. package/dist/worker.js +1 -1
  44. package/dist/worker.js.map +4 -4
  45. package/package.json +8 -1
@@ -91,6 +91,14 @@ function addHeapObject(obj) {
91
91
  return idx;
92
92
  }
93
93
 
94
+ function handleError(f, args) {
95
+ try {
96
+ return f.apply(this, args);
97
+ } catch (e) {
98
+ wasm.__wbindgen_export_2(addHeapObject(e));
99
+ }
100
+ }
101
+
94
102
  function dropObject(idx) {
95
103
  if (idx < 132) return;
96
104
  heap[idx] = heap_next;
@@ -103,14 +111,6 @@ function takeObject(idx) {
103
111
  return ret;
104
112
  }
105
113
 
106
- function handleError(f, args) {
107
- try {
108
- return f.apply(this, args);
109
- } catch (e) {
110
- wasm.__wbindgen_export_2(addHeapObject(e));
111
- }
112
- }
113
-
114
114
  function isLikeNone(x) {
115
115
  return x === undefined || x === null;
116
116
  }
@@ -193,7 +193,7 @@ const WasmRuntimeFinalization = (typeof FinalizationRegistry === 'undefined')
193
193
  ? { register: () => {}, unregister: () => {} }
194
194
  : new FinalizationRegistry(ptr => wasm.__wbg_wasmruntime_free(ptr >>> 0, 1));
195
195
  /**
196
- * Official Parquet runtime implementing adapter ABI v2.
196
+ * Official Parquet runtime implementing adapter ABI v3.
197
197
  */
198
198
  export class WasmRuntime {
199
199
 
@@ -331,6 +331,49 @@ export class WasmRuntime {
331
331
  wasm.__wbindgen_add_to_stack_pointer(16);
332
332
  }
333
333
  }
334
+ /**
335
+ * Starts and completes an ABI-v3 metadata operation.
336
+ * @param {number} table_handle
337
+ * @returns {any}
338
+ */
339
+ beginMetadata(table_handle) {
340
+ try {
341
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
342
+ wasm.wasmruntime_beginMetadata(retptr, this.__wbg_ptr, table_handle);
343
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
344
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
345
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
346
+ if (r2) {
347
+ throw takeObject(r1);
348
+ }
349
+ return takeObject(r0);
350
+ } finally {
351
+ wasm.__wbindgen_add_to_stack_pointer(16);
352
+ }
353
+ }
354
+ /**
355
+ * Starts and completes an ABI-v3 open-table operation.
356
+ * @param {number} source_handle
357
+ * @param {string} table_id
358
+ * @returns {any}
359
+ */
360
+ beginOpenTable(source_handle, table_id) {
361
+ try {
362
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
363
+ const ptr0 = passStringToWasm0(table_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
364
+ const len0 = WASM_VECTOR_LEN;
365
+ wasm.wasmruntime_beginOpenTable(retptr, this.__wbg_ptr, source_handle, ptr0, len0);
366
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
367
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
368
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
369
+ if (r2) {
370
+ throw takeObject(r1);
371
+ }
372
+ return takeObject(r0);
373
+ } finally {
374
+ wasm.__wbindgen_add_to_stack_pointer(16);
375
+ }
376
+ }
334
377
  /**
335
378
  * Cancels and releases one pending operation.
336
379
  * @param {number} operation_handle
@@ -341,7 +384,7 @@ export class WasmRuntime {
341
384
  return ret !== 0;
342
385
  }
343
386
  /**
344
- * Returns Worker protocol version three.
387
+ * Returns Worker protocol version four.
345
388
  * @returns {number}
346
389
  */
347
390
  protocolVersion() {
@@ -349,17 +392,55 @@ export class WasmRuntime {
349
392
  return ret >>> 0;
350
393
  }
351
394
  /**
352
- * Supplies one exact source range to an open or range-read operation.
395
+ * Returns the private adapter-owned resource ledger snapshot.
396
+ * @returns {any}
397
+ */
398
+ resourceSnapshot() {
399
+ try {
400
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
401
+ wasm.wasmruntime_resourceSnapshot(retptr, this.__wbg_ptr);
402
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
403
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
404
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
405
+ if (r2) {
406
+ throw takeObject(r1);
407
+ }
408
+ return takeObject(r0);
409
+ } finally {
410
+ wasm.__wbindgen_add_to_stack_pointer(16);
411
+ }
412
+ }
413
+ /**
414
+ * Starts and completes an ABI-v3 static-presentation operation.
415
+ * @param {number} table_handle
416
+ * @returns {any}
417
+ */
418
+ beginPresentation(table_handle) {
419
+ try {
420
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
421
+ wasm.wasmruntime_beginPresentation(retptr, this.__wbg_ptr, table_handle);
422
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
423
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
424
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
425
+ if (r2) {
426
+ throw takeObject(r1);
427
+ }
428
+ return takeObject(r0);
429
+ } finally {
430
+ wasm.__wbindgen_add_to_stack_pointer(16);
431
+ }
432
+ }
433
+ /**
434
+ * Supplies one complete revision-matched source result set.
353
435
  * @param {number} operation_handle
354
- * @param {number} absolute_offset
355
- * @param {Uint8Array} bytes
356
- * @param {boolean} eof
436
+ * @param {number} operation_revision
437
+ * @param {Array<any>} results
357
438
  * @returns {any}
358
439
  */
359
- continueOperation(operation_handle, absolute_offset, bytes, eof) {
440
+ continueOperation(operation_handle, operation_revision, results) {
360
441
  try {
361
442
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
362
- wasm.wasmruntime_continueOperation(retptr, this.__wbg_ptr, operation_handle, absolute_offset, addHeapObject(bytes), eof);
443
+ wasm.wasmruntime_continueOperation(retptr, this.__wbg_ptr, operation_handle, operation_revision, addHeapObject(results));
363
444
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
364
445
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
365
446
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
@@ -372,7 +453,7 @@ export class WasmRuntime {
372
453
  }
373
454
  }
374
455
  /**
375
- * Returns official adapter ABI version two.
456
+ * Returns official adapter ABI version three.
376
457
  * @returns {number}
377
458
  */
378
459
  adapterApiVersion() {
@@ -408,6 +489,27 @@ export class WasmRuntime {
408
489
  wasm.__wbindgen_add_to_stack_pointer(16);
409
490
  }
410
491
  }
492
+ /**
493
+ * Starts and completes an ABI-v3 range-presentation operation.
494
+ * @param {number} table_handle
495
+ * @param {any} request
496
+ * @returns {any}
497
+ */
498
+ beginPresentationRange(table_handle, request) {
499
+ try {
500
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
501
+ wasm.wasmruntime_beginPresentationRange(retptr, this.__wbg_ptr, table_handle, addHeapObject(request));
502
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
503
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
504
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
505
+ if (r2) {
506
+ throw takeObject(r1);
507
+ }
508
+ return takeObject(r0);
509
+ } finally {
510
+ wasm.__wbindgen_add_to_stack_pointer(16);
511
+ }
512
+ }
411
513
  /**
412
514
  * Creates an empty Parquet adapter runtime.
413
515
  * @param {any} config
@@ -502,6 +604,18 @@ function __wbg_get_imports() {
502
604
  const ret = getObject(arg0).buffer;
503
605
  return addHeapObject(ret);
504
606
  };
607
+ imports.wbg.__wbg_byteLength_ea52ac3de882b483 = function(arg0) {
608
+ const ret = getObject(arg0).byteLength;
609
+ return ret;
610
+ };
611
+ imports.wbg.__wbg_get_67b2ba62fc30de12 = function() { return handleError(function (arg0, arg1) {
612
+ const ret = Reflect.get(getObject(arg0), getObject(arg1));
613
+ return addHeapObject(ret);
614
+ }, arguments) };
615
+ imports.wbg.__wbg_get_b9b93047fe3cf45b = function(arg0, arg1) {
616
+ const ret = getObject(arg0)[arg1 >>> 0];
617
+ return addHeapObject(ret);
618
+ };
505
619
  imports.wbg.__wbg_getwithrefkey_1dc361bd10053bfe = function(arg0, arg1) {
506
620
  const ret = getObject(arg0)[getObject(arg1)];
507
621
  return addHeapObject(ret);
@@ -534,6 +648,10 @@ function __wbg_get_imports() {
534
648
  const ret = getObject(arg0).length;
535
649
  return ret;
536
650
  };
651
+ imports.wbg.__wbg_length_e2d2a49132c1b256 = function(arg0) {
652
+ const ret = getObject(arg0).length;
653
+ return ret;
654
+ };
537
655
  imports.wbg.__wbg_new_405e22f390576ce2 = function() {
538
656
  const ret = new Object();
539
657
  return addHeapObject(ret);
@@ -5,18 +5,23 @@ export const __wbg_wasmruntime_free: (a: number, b: number) => void;
5
5
  export const wasmruntime_adapterApiVersion: (a: number) => number;
6
6
  export const wasmruntime_adapterId: (a: number, b: number) => void;
7
7
  export const wasmruntime_batchLayoutVersion: (a: number) => number;
8
+ export const wasmruntime_beginMetadata: (a: number, b: number, c: number) => void;
8
9
  export const wasmruntime_beginOpen: (a: number, b: number, c: number, d: number) => void;
10
+ export const wasmruntime_beginOpenTable: (a: number, b: number, c: number, d: number, e: number) => void;
11
+ export const wasmruntime_beginPresentation: (a: number, b: number, c: number) => void;
12
+ export const wasmruntime_beginPresentationRange: (a: number, b: number, c: number, d: number) => void;
9
13
  export const wasmruntime_beginRead: (a: number, b: number, c: number, d: number) => void;
10
14
  export const wasmruntime_cancelOperation: (a: number, b: number) => number;
11
15
  export const wasmruntime_closeSource: (a: number, b: number) => number;
12
16
  export const wasmruntime_closeTable: (a: number, b: number) => number;
13
- export const wasmruntime_continueOperation: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
17
+ export const wasmruntime_continueOperation: (a: number, b: number, c: number, d: number, e: number) => void;
14
18
  export const wasmruntime_metadata: (a: number, b: number, c: number) => void;
15
19
  export const wasmruntime_new: (a: number, b: number) => void;
16
20
  export const wasmruntime_openTable: (a: number, b: number, c: number, d: number, e: number) => void;
17
21
  export const wasmruntime_presentation: (a: number, b: number, c: number) => void;
18
22
  export const wasmruntime_protocolVersion: (a: number) => number;
19
23
  export const wasmruntime_readPresentationRange: (a: number, b: number, c: number, d: number) => void;
24
+ export const wasmruntime_resourceSnapshot: (a: number, b: number) => void;
20
25
  export const wasmruntime_shutdown: (a: number) => void;
21
26
  export const __wbindgen_export_0: (a: number, b: number) => number;
22
27
  export const __wbindgen_export_1: (a: number, b: number, c: number, d: number) => number;
@@ -0,0 +1,10 @@
1
+ import type { SourceAccessor, SourceReadOptions } from "./source-accessor.js";
2
+ /** Local Blob/File accessor kept in the eager Worker path. */
3
+ export declare class BlobSourceAccessor implements SourceAccessor {
4
+ #private;
5
+ readonly kind: "blob";
6
+ readonly size: number;
7
+ constructor(blob: Blob);
8
+ read(offset: number, length: number, options?: SourceReadOptions): Promise<ArrayBuffer>;
9
+ close(): void;
10
+ }
@@ -0,0 +1,76 @@
1
+ import { MAX_RANGE_SOURCE_BYTES } from "../range-source.js";
2
+ /** The largest source address representable by the wasm32 adapter boundary. */
3
+ export { MAX_RANGE_SOURCE_BYTES };
4
+ /** A cancellation hook understood by the worker source broker. */
5
+ export interface SourceReadOptions {
6
+ /** Resolves when the owning operation is cancelled. */
7
+ readonly cancellation?: Promise<void>;
8
+ /** Records one actual provider/Blob read after exact-length validation. */
9
+ readonly onProviderRead?: (bytes: number) => void;
10
+ /** Records bytes served without another provider read. */
11
+ readonly onCacheHit?: (bytes: number) => void;
12
+ /** Internal lifetime hook fired when the underlying read settles. */
13
+ readonly onSettled?: () => void;
14
+ }
15
+ export interface SourceAccessor {
16
+ readonly kind: "blob" | "range";
17
+ readonly size: number;
18
+ read(offset: number, length: number, options?: SourceReadOptions): Promise<ArrayBuffer>;
19
+ readMany?(requests: readonly Readonly<{
20
+ readonly offset: number;
21
+ readonly end: number;
22
+ }>[], options?: SourceReadOptions): Promise<readonly ArrayBuffer[]>;
23
+ /** Releases provider state and all retained range bytes. Idempotent. */
24
+ close(): void;
25
+ }
26
+ interface BrokerSourceDescriptor {
27
+ readonly kind: "range";
28
+ readonly handle: string;
29
+ readonly size: number;
30
+ readonly maxConcurrency?: number;
31
+ }
32
+ interface ReadInterval {
33
+ readonly offset: number;
34
+ readonly end: number;
35
+ }
36
+ /**
37
+ * The host-side half of the private Worker source broker.
38
+ *
39
+ * The host never gives callbacks to the Worker. It receives a small request
40
+ * DTO and sends back one transferable buffer, which keeps network/fetch state
41
+ * and credentials entirely on the main thread.
42
+ */
43
+ export declare class WorkerSourceBroker {
44
+ #private;
45
+ constructor(scope: DedicatedWorkerGlobalScope);
46
+ request(sourceHandle: string, offset: number, length: number, options?: SourceReadOptions): Promise<ArrayBuffer>;
47
+ /** Handles a message delivered from the main-thread broker. */
48
+ handle(value: unknown): boolean;
49
+ close(sourceHandle: string): void;
50
+ shutdown(): void;
51
+ }
52
+ /** A local Blob/File accessor. Blob.slice remains the only source operation. */
53
+ export declare class BlobSourceAccessor implements SourceAccessor {
54
+ #private;
55
+ readonly kind: "blob";
56
+ readonly size: number;
57
+ constructor(blob: Blob);
58
+ read(offset: number, length: number, options?: SourceReadOptions): Promise<ArrayBuffer>;
59
+ close(): void;
60
+ }
61
+ /**
62
+ * A remote range accessor. The interval cache is deliberately scoped to this
63
+ * accessor, which is one reader/dataset, so closing the dataset drops all
64
+ * retained bytes and pending singleflight state.
65
+ */
66
+ export declare class RangeSourceAccessor implements SourceAccessor {
67
+ #private;
68
+ readonly kind: "range";
69
+ readonly size: number;
70
+ constructor(descriptor: BrokerSourceDescriptor, broker: WorkerSourceBroker, maxCacheBytes: number, maxReadBytes: number);
71
+ read(offset: number, length: number, options?: SourceReadOptions): Promise<ArrayBuffer>;
72
+ /** Reads a step's actions after merging overlaps and direct adjacency. */
73
+ readMany(requests: readonly ReadInterval[], options?: SourceReadOptions): Promise<readonly ArrayBuffer[]>;
74
+ close(): void;
75
+ }
76
+ export declare function validateRangeDescriptor(value: unknown): asserts value is BrokerSourceDescriptor;
@@ -1,57 +1,58 @@
1
1
  import type { OfficialAdapterId } from "../adapters.js";
2
- interface AdapterPendingRead {
3
- readonly operationHandle: string | number;
4
- readonly action: Readonly<{
5
- readonly kind: "read-bytes";
6
- readonly offset: number;
7
- readonly length: number;
8
- }>;
2
+ /** Private runtime seam shared by the compiled adapters. */
3
+ export interface AdapterRuntime {
4
+ beginOpen(options: unknown, sourceLength: number): unknown | Promise<unknown>;
5
+ beginOpenTable(sourceHandle: string | number, tableId: string): unknown | Promise<unknown>;
6
+ beginMetadata(tableHandle: string | number): unknown | Promise<unknown>;
7
+ beginPresentation(tableHandle: string | number): unknown | Promise<unknown>;
8
+ beginPresentationRange(tableHandle: string | number, request: unknown): unknown | Promise<unknown>;
9
+ continueOperation(operationHandle: string | number, operationRevision: number, results: readonly AdapterActionResult[]): unknown | Promise<unknown>;
10
+ beginRead(tableHandle: string | number, request: unknown): unknown | Promise<unknown>;
11
+ cancelOperation(operationHandle: string | number): unknown;
12
+ closeTable(tableHandle: string | number): unknown;
13
+ closeSource(sourceHandle: string | number): unknown;
14
+ shutdown(): unknown;
15
+ dispose?(): void;
9
16
  }
10
- export interface AdapterReadBytesStep extends AdapterPendingRead {
17
+ export interface AdapterReadAction {
11
18
  readonly kind: "read-bytes";
19
+ readonly actionIndex: number;
20
+ readonly offset: number;
21
+ readonly length: number;
12
22
  }
13
- export interface AdapterOpenProgressStep extends AdapterPendingRead {
14
- readonly kind: "open-progress";
15
- readonly sourceHandle: string | number;
16
- readonly tables: unknown;
17
- readonly metadata: unknown;
18
- readonly progress: unknown;
19
- readonly warnings?: unknown;
20
- }
21
- export interface AdapterOpenCompleteStep {
22
- readonly kind: "open-complete";
23
- readonly sourceHandle: string | number;
24
- readonly tables: unknown;
25
- readonly metadata: unknown;
26
- readonly progress?: unknown;
27
- readonly warnings?: unknown;
23
+ export interface AdapterActionResult {
24
+ readonly actionIndex: number;
25
+ readonly offset: number;
26
+ readonly bytes: Uint8Array;
27
+ readonly eof: boolean;
28
28
  }
29
- export interface AdapterReadCompleteStep {
30
- readonly kind: "read-complete";
31
- readonly batch: unknown;
29
+ export interface AdapterOperationStep {
30
+ readonly kind: "pending" | "progress" | "complete";
31
+ readonly operationHandle: string | number;
32
+ readonly operationRevision: number;
33
+ readonly actions: readonly AdapterReadAction[];
34
+ readonly cooperativeYield: boolean;
35
+ readonly payload?: unknown;
32
36
  }
33
- export type AdapterOpenStep = AdapterReadBytesStep | AdapterOpenProgressStep | AdapterOpenCompleteStep;
34
- export type AdapterReadStep = AdapterReadBytesStep | AdapterReadCompleteStep;
35
- export type AdapterOperationStep = AdapterOpenStep | AdapterReadStep;
36
37
  /**
37
38
  * The sole translation layer between the Worker protocol and wasm-bindgen.
38
39
  * Bulk arrays are copied by the Worker before they are transferred, never by
39
40
  * this adapter, so the runtime may safely return views into WebAssembly memory.
40
41
  */
41
- export declare class WasmAdapter {
42
+ export declare class WasmAdapter implements AdapterRuntime {
42
43
  #private;
43
44
  private constructor();
44
45
  static load(moduleUrl: string, expectedAdapterId: OfficialAdapterId, config: unknown): Promise<WasmAdapter>;
45
- metadata(sourceHandle: string | number): unknown;
46
- presentation(tableHandle: string | number): unknown;
47
- readPresentationRange(tableHandle: string | number, request: unknown): unknown;
48
- beginOpen(options: unknown, sourceLength: number): AdapterOpenStep;
49
- continueOperation(operationHandle: string | number, absoluteOffset: number, bytes: Uint8Array, eof: boolean): AdapterOperationStep;
50
- openTable(sourceHandle: string | number, tableId: string): unknown;
51
- beginRead(tableHandle: string | number, request: unknown): AdapterReadStep;
46
+ beginOpen(options: unknown, sourceLength: number): AdapterOperationStep | Promise<AdapterOperationStep>;
47
+ beginOpenTable(sourceHandle: string | number, tableId: string): AdapterOperationStep | Promise<AdapterOperationStep>;
48
+ beginMetadata(tableHandle: string | number): AdapterOperationStep | Promise<AdapterOperationStep>;
49
+ beginPresentation(tableHandle: string | number): AdapterOperationStep | Promise<AdapterOperationStep>;
50
+ beginPresentationRange(tableHandle: string | number, request: unknown): AdapterOperationStep | Promise<AdapterOperationStep>;
51
+ continueOperation(operationHandle: string | number, operationRevision: number, results: readonly AdapterActionResult[]): AdapterOperationStep | Promise<AdapterOperationStep>;
52
+ beginRead(tableHandle: string | number, request: unknown): AdapterOperationStep | Promise<AdapterOperationStep>;
52
53
  cancelOperation(operationHandle: string | number): void;
53
54
  closeTable(tableHandle: string | number): void;
54
55
  closeSource(sourceHandle: string | number): void;
56
+ shutdown(): void;
55
57
  dispose(): void;
56
58
  }
57
- export {};
@@ -0,0 +1 @@
1
+ export { RangeSourceAccessor, WorkerSourceBroker, validateRangeDescriptor, } from "./worker/source-accessor.js";
@@ -0,0 +1,2 @@
1
+ function I(n){let e=S(n)?n:{},r=typeof e.resource=="string"&&e.resource.length>0?e.resource:typeof e.resourceCategory=="string"&&e.resourceCategory.length>0?e.resourceCategory:B(e);if(g(e.requiredBytes)&&g(e.availableBytes))return Object.freeze({...e,resource:r});if(g(e.required)&&g(e.available))return Object.freeze({...e,resource:r});let s=w(e,["maxDecodedBytes","maxOutputBytes","maxMetadataBytes","maxBlockBytes","maxDisplayCellBytes","maxDisplayBytes","maxSourceBytes","maxFieldBytes","maxBatchBytes","maxOperationBytes","maxZipEntryBytes","maxZipUncompressedBytes","maxCfbStreamBytes"]);if(s!==void 0){let i=w(e,["decodedBytes","outputBytes","metadataBytes","blockBytes","displayCellBytes","displayBytes","sourceBytes","fieldBytes","batchBytes","operationBytes"])??s+1;return Object.freeze({...e,resource:r,requiredBytes:i,availableBytes:s})}let o=w(e,["limit","maxCells","maxRangeCells","maxSources","maxActiveRanges","maxRangeWaiters","maxColumns","maxFields","maxNestingDepth","maxWorksheetRows","maxWorksheetColumns","maxStyles","maxMergedRegions"])??0,a=w(e,["cells","cellCount","visibleCellCount","sources","activeRanges","rangeWaiters","columns","fields","nestingDepth","worksheetRows","worksheetColumns","styles","mergedRegions"])??o+1;return Object.freeze({...e,resource:r,required:a,available:o})}function B(n){let e=Object.keys(n).join(" ").toLowerCase();return e.includes("source")?e.includes("byte")?"source-staging":"source-slots":e.includes("metadata")?"metadata":e.includes("decoded")||e.includes("decompress")?"decompression":e.includes("display")?"display-values":e.includes("field")?"field":e.includes("batch")?"batch":e.includes("range")||e.includes("cell")?"range-cells":e.includes("column")?"columns":e.includes("nest")?"descriptor-nesting":e.includes("worksheet")?"worksheet-dimensions":"adapter-resource"}function w(n,e){for(let r of e)if(g(n[r]))return n[r]}function g(n){return typeof n=="number"&&Number.isFinite(n)&&n>=0}function S(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}var c=class extends Error{code;retryable;details;constructor(e,r,s=!1,o,a){super(r,{cause:a}),this.name="ProtocolFault",this.code=e,this.retryable=s,this.details=e==="RESOURCE_LIMIT"?I(o):o}};var R=class{#s;#e=new Map;#i=1;#n=!1;constructor(e){this.#s=e}request(e,r,s,o={}){if(typeof e!="string"||e.length===0||!Number.isSafeInteger(r)||r<0||!Number.isSafeInteger(s)||s<0||r>4294967295||s>4294967295||r+s>4294967295)return Promise.reject(new c("RANGE_UNSUPPORTED","The source range is invalid"));if(this.#n)return Promise.reject(new c("HANDLE_CLOSED","The source broker is closed"));let a=`s${this.#i++}`;return new Promise((i,t)=>{let u={requestId:a,sourceHandle:e,offset:r,length:s,resolve:i,reject:t};this.#e.set(a,u);let f=!1,d=()=>{f||this.#e.get(a)!==u||(f=!0,this.#e.delete(a),this.#t(a,e),t(new c("CANCELLED","The source read was cancelled")))};o.cancellation&&o.cancellation.then(d,d);try{let l={type:"source-read",requestId:a,sourceHandle:e,offset:r,length:s};this.#s.postMessage(l)}catch(l){this.#e.delete(a),t(new c("SOURCE_UNAVAILABLE","The source provider could not receive a range request",!0,void 0,l))}})}handle(e){if(!E(e)||e.type!=="source-read-result"&&e.type!=="source-read-failure"&&e.type!=="source-read-error")return!1;if(typeof e.requestId!="string")return!0;let r=this.#e.get(e.requestId);if(!r)return!0;if(this.#e.delete(e.requestId),e.sourceHandle!==r.sourceHandle||e.offset!==r.offset||e.length!==r.length)return this.#t(r.requestId,r.sourceHandle),r.reject(new c("PROTOCOL_INCOMPATIBLE","The source provider returned a range for another request")),!0;if(e.type!=="source-read-result"||e.error!==void 0||e.ok===!1)return r.reject(P(e.error)),!0;try{r.resolve(_(e.buffer,r.length))}catch(s){r.reject(s instanceof c?s:new c("RUNTIME_FAILURE","The source provider returned invalid bytes",!1,void 0,s))}return!0}close(e){for(let[r,s]of this.#e)s.sourceHandle===e&&(this.#e.delete(r),this.#t(r,e),s.reject(new c("HANDLE_CLOSED","The source was closed")));if(!this.#n)try{this.#s.postMessage({type:"source-close",sourceHandle:e})}catch{}}shutdown(){if(!this.#n){this.#n=!0;for(let e of this.#e.values())this.#t(e.requestId,e.sourceHandle),e.reject(new c("HANDLE_CLOSED","The source broker was shut down"));this.#e.clear()}}#t(e,r){try{this.#s.postMessage({type:"source-read-cancel",requestId:e,sourceHandle:r})}catch{}}};var p=class{kind="range";size;#s;#e;#i;#n;#t;#r=[];#a=[];#c=[];#u=0;#f=0;#l=0;#o=!1;constructor(e,r,s,o){U(e),this.size=e.size,this.#e=e.handle,this.#s=r,this.#t=e.maxConcurrency===void 0?1:e.maxConcurrency,this.#i=Number.isSafeInteger(s)&&s>0?s:0,this.#n=Number.isSafeInteger(o)&&o>0?o:1}async read(e,r,s={}){try{return await this.#h(e,r,s)}finally{s.onSettled?.()}}async#h(e,r,s={}){let o=L(e,r,this.size);if(o===void 0)throw new c("RANGE_UNSUPPORTED","The requested source range is outside the source");if(this.#o)throw new c("HANDLE_CLOSED","The source is closed");if(r===0)return new ArrayBuffer(0);let a=this.#p(e,o),i=()=>{a>0&&s.onCacheHit?.(a),a=0};if(r>this.#n){let u=[],f=e;for(;f<o;){let h=Math.min(o,f+this.#n);u.push(await this.#h(f,h-f,s)),f=h}let d=new Uint8Array(r),l=0;for(let h of u)d.set(new Uint8Array(h),l),l+=h.byteLength;return d.buffer}let t=[];for(;;){if(this.#o)throw new c("HANDLE_CLOSED","The source is closed");let u=this.#d(e,o,t);if(u)return i(),u;let f=this.#a.filter(y=>y.waiters>0&&y.offset<o&&y.end>e);if(f.length>0){for(let m of f)m.waiters+=1;let y=[];try{y=await N(Promise.all(f.map(m=>m.promise)),s.cancellation)}finally{for(let m of f)this.#g(m)}t.push(...y);let C=this.#d(e,o,t);if(C!==void 0)return i(),C;continue}i();let d={offset:e,end:o,promise:Promise.resolve({offset:e,end:o,bytes:new ArrayBuffer(0)}),cancellation:x(),waiters:1,settled:!1},l=this.#E(e,o,d.cancellation.promise,s.onProviderRead,t);d.promise=l,this.#a.push(d),l.then(y=>{d.coverage=y,this.#m(d)},()=>this.#m(d));let h;try{h=await N(l,s.cancellation)}finally{this.#g(d)}return h.bytes}}async readMany(e,r={}){if(e.length===0)return Object.freeze([]);let s=e.map(i=>{let t=L(i.offset,i.end-i.offset,this.size);if(t===void 0)throw new c("RANGE_UNSUPPORTED","The requested source range is outside the source");return{offset:i.offset,end:t}}),o=O(s).flatMap(i=>D(i,this.#n)),a=[];return await T(o,this.#t,async i=>{let t=await this.read(i.offset,i.end-i.offset,r);a.push({offset:i.offset,end:i.end,bytes:t})}),Object.freeze(s.map(i=>{if(i.offset===i.end)return new ArrayBuffer(0);let t=this.#d(i.offset,i.end,a);if(!t)throw new c("SOURCE_UNAVAILABLE","The source provider returned no bytes",!0);return t}))}close(){if(!this.#o){this.#o=!0,this.#r.length=0,this.#f=0;for(let e of this.#a)e.waiters=0,e.cancellation.resolve();this.#a.length=0;for(let e of this.#c.splice(0))e.cancelled=!0,e.reject(new c("HANDLE_CLOSED","The source is closed"));this.#s.close(this.#e)}}async#w(e){if(this.#o)throw new c("HANDLE_CLOSED","The source is closed");return this.#u<this.#t?(this.#u+=1,()=>this.#y()):new Promise((r,s)=>{let o={resolve:r,reject:s,cancellation:e,cancelled:!1,granted:!1},a=()=>{if(o.cancelled||o.granted)return;o.cancelled=!0;let i=this.#c.indexOf(o);i>=0&&this.#c.splice(i,1),s(new c("CANCELLED","The source read was cancelled"))};e.then(a,a),this.#c.push(o)})}#y(){for(this.#u=Math.max(0,this.#u-1);this.#c.length>0;){let e=this.#c.shift();if(!e.cancelled){if(this.#o){e.cancelled=!0,e.reject(new c("HANDLE_CLOSED","The source is closed"));continue}this.#u+=1,e.granted=!0,e.resolve(()=>this.#y());return}}}async#E(e,r,s,o,a=[]){let i=this.#R(e,r,a),t=[];await T(i,this.#t,async d=>{let l=await this.#w(s),h;try{h=await this.#s.request(this.#e,d.offset,d.end-d.offset,{cancellation:s})}finally{l()}if(o?.(h.byteLength),this.#o)throw new c("HANDLE_CLOSED","The source is closed");t.push({offset:d.offset,end:d.end,bytes:h}),this.#A(d.offset,h)});let f=(a.length===0&&t.length===1&&t[0].offset===e&&t[0].end===r?t[0].bytes:void 0)??this.#d(e,r,[...a,...t]);if(f===void 0)throw new c("SOURCE_UNAVAILABLE","The source provider returned no bytes",!0);return{offset:e,end:r,bytes:f}}#R(e,r,s=[]){let o=this.#r.filter(t=>t.end>e&&t.offset<r).map(t=>({offset:Math.max(e,t.offset),end:Math.min(r,t.end)})).concat(s.filter(t=>t.end>e&&t.offset<r).map(t=>({offset:Math.max(e,t.offset),end:Math.min(r,t.end)}))).sort((t,u)=>t.offset-u.offset||t.end-u.end),a=[],i=e;for(let t of o)if(!(t.end<=i)&&(t.offset>i&&a.push({offset:i,end:t.offset}),i=Math.max(i,t.end),i>=r))break;return i<r&&a.push({offset:i,end:r}),a}#I(e,r){return this.#d(e,r,[])}#d(e,r,s){if(r===e)return new ArrayBuffer(0);let o=[];for(let t of this.#r)t.end<=e||t.offset>=r||(t.lastUsed=++this.#l,o.push({offset:t.offset,end:t.end,bytes:t.bytes}));for(let t of s)t.end>e&&t.offset<r&&o.push(t);o.sort((t,u)=>t.offset-u.offset||t.end-u.end);let a=new Uint8Array(r-e),i=e;for(let t of o){if(t.end<=i)continue;if(t.offset>i)return;let u=Math.max(i,t.offset),f=Math.min(r,t.end),d=u-t.offset,l=f-u;if(a.set(new Uint8Array(t.bytes,d,l),u-e),i=f,i>=r)break}return i>=r?a.buffer:void 0}#p(e,r,s=[]){let o=this.#r.filter(t=>t.end>e&&t.offset<r).map(t=>({offset:Math.max(e,t.offset),end:Math.min(r,t.end)})).concat(s.filter(t=>t.end>e&&t.offset<r).map(t=>({offset:Math.max(e,t.offset),end:Math.min(r,t.end)}))).sort((t,u)=>t.offset-u.offset||t.end-u.end),a=0,i=e;for(let t of o){let u=Math.max(i,t.offset);if(!(t.end<=u)&&(a+=t.end-u,i=t.end,i>=r))break}return a}#A(e,r){let s=r.byteLength;if(s===0||this.#i<=0||s>this.#i)return;let o=e+s,a={offset:e,end:o,bytes:r,lastUsed:++this.#l};for(this.#r.push(a),this.#f+=a.bytes.byteLength;this.#f>this.#i&&this.#r.length>0;){let i=this.#r[0];for(let t of this.#r)t.lastUsed<i.lastUsed&&(i=t);this.#C(i)}}#C(e){let r=this.#r.indexOf(e);r<0||(this.#r.splice(r,1),this.#f-=e.bytes.byteLength)}#m(e){e.settled=!0,e.waiters===0&&this.#b(e)}#g(e){e.waiters>0&&(e.waiters-=1),e.waiters===0&&!e.settled?e.cancellation.resolve():e.waiters===0&&this.#b(e)}#b(e){let r=this.#a.indexOf(e);r>=0&&this.#a.splice(r,1)}};function U(n){if(!E(n)||n.kind!=="range")throw new c("INVALID_ARGUMENT","source must be a range descriptor");if(Object.keys(n).some(s=>s!=="kind"&&s!=="handle"&&s!=="size"&&s!=="maxConcurrency"))throw new c("INVALID_ARGUMENT","range source descriptor contains private fields");let e=n.handle,r=n.size;if(typeof e!="string"||e.length===0||e.length>256)throw new c("INVALID_ARGUMENT","range source handle must be a non-empty string");if(!Number.isSafeInteger(r)||r<0||r>4294967295)throw new c("RESOURCE_LIMIT",`Range sources support at most ${4294967295} bytes`,!1,{resource:"source-staging",requiredBytes:A(r),availableBytes:4294967295});if(n.maxConcurrency!==void 0&&(!Number.isSafeInteger(n.maxConcurrency)||n.maxConcurrency<1||n.maxConcurrency>4))throw new c("INVALID_ARGUMENT","range source maxConcurrency must be between 1 and 4")}function P(n){if(E(n)&&typeof n.code=="string"){let e=n.code==="SOURCE_CHANGED"||n.code==="SOURCE_UNAVAILABLE"||n.code==="RANGE_UNSUPPORTED"||n.code==="RUNTIME_FAILURE"||n.code==="RESOURCE_LIMIT"||n.code==="CANCELLED"||n.code==="HANDLE_CLOSED"?n.code:"SOURCE_UNAVAILABLE",r=k(e);return new c(e,r,n.retryable===!0,e==="RESOURCE_LIMIT"?v(n.details):void 0)}return new c("SOURCE_UNAVAILABLE","The source provider failed to read bytes",!0)}function k(n){switch(n){case"SOURCE_CHANGED":return"The source changed while it was open";case"RANGE_UNSUPPORTED":return"The source does not support the requested byte range";case"RUNTIME_FAILURE":return"The source provider returned invalid bytes";case"RESOURCE_LIMIT":return"The source exceeds its configured limit";case"HANDLE_CLOSED":return"The source is closed";case"CANCELLED":return"The source read was cancelled";default:return"The source provider is unavailable"}}function v(n){return E(n)?{resource:typeof n.resource=="string"&&/^[A-Za-z0-9_.:-]{1,64}$/u.test(n.resource)?n.resource:"source-staging",requiredBytes:A(n.requiredBytes),availableBytes:A(n.availableBytes)}:{resource:"source-staging",requiredBytes:0,availableBytes:0}}function _(n,e){if(n instanceof ArrayBuffer){if(n.byteLength!==e)throw new c("RUNTIME_FAILURE","The source provider returned an invalid byte length");return n}if(ArrayBuffer.isView(n)){if(n.byteLength!==e)throw new c("RUNTIME_FAILURE","The source provider returned an invalid byte length");let r=new Uint8Array(e);return r.set(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)),r.buffer}throw new c("RUNTIME_FAILURE","The source provider returned no byte buffer")}function L(n,e,r){if(!(!Number.isSafeInteger(n)||!Number.isSafeInteger(e)||n<0||e<0||!Number.isSafeInteger(r)||r<0||n>r||e>r-n))return n+e}function O(n){let e=[...n].sort((s,o)=>s.offset-o.offset||s.end-o.end),r=[];for(let s of e){let o=r[r.length-1];o&&s.offset<=o.end?s.end>o.end&&(r[r.length-1]={offset:o.offset,end:s.end}):r.push({...s})}return r}function D(n,e){if(n.end<=n.offset)return[{...n}];let r=[],s=n.offset;for(;s<n.end;){let o=Math.min(n.end,s+e);r.push({offset:s,end:o}),s=o}return r}async function T(n,e,r){let s=0,o,a=!1,i=async()=>{for(;;){if(a)return;let t=s++;if(t>=n.length)return;try{await r(n[t])}catch(u){a||(o=u,a=!0)}}};if(await Promise.all(Array.from({length:Math.min(e,n.length)},i)),a)throw o}function N(n,e){return e?Promise.race([n,e.then(()=>{throw new c("CANCELLED","The source read was cancelled")})]):n}function x(){let n;return{promise:new Promise(r=>{n=r}),resolve:n}}function A(n){return typeof n=="number"&&Number.isFinite(n)&&n>=0?Math.min(Math.floor(n),Number.MAX_SAFE_INTEGER):Number.MAX_SAFE_INTEGER}function E(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}export{p as RangeSourceAccessor,R as WorkerSourceBroker,U as validateRangeDescriptor};
2
+ //# sourceMappingURL=worker-range-source.js.map