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.
- package/CHANGELOG.md +67 -2
- package/README.md +125 -42
- package/dist/client.d.ts +71 -2
- package/dist/errors.d.ts +7 -1
- package/dist/experimental.js +1 -1
- package/dist/experimental.js.map +2 -2
- package/dist/http.d.ts +65 -0
- package/dist/http.js +2 -0
- package/dist/http.js.map +7 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +4 -4
- package/dist/model.d.ts +6 -3
- package/dist/protocol.d.ts +3 -3
- package/dist/range-cache.d.ts +24 -5
- package/dist/range-source.d.ts +64 -0
- package/dist/rpc-client.d.ts +15 -2
- package/dist/source.d.ts +13 -0
- package/dist/view/canvas-table-view-public.d.ts +6 -0
- package/dist/view/canvas-table-view.d.ts +8 -0
- package/dist/wasm/arrow/tabulark_arrow.d.ts +33 -6
- package/dist/wasm/arrow/tabulark_arrow.js +129 -17
- package/dist/wasm/arrow/tabulark_arrow_bg.wasm +0 -0
- package/dist/wasm/arrow/tabulark_arrow_bg.wasm.d.ts +6 -1
- package/dist/wasm/delimited/tabulark_delimited.d.ts +31 -5
- package/dist/wasm/delimited/tabulark_delimited.js +115 -8
- package/dist/wasm/delimited/tabulark_delimited_bg.wasm +0 -0
- package/dist/wasm/delimited/tabulark_delimited_bg.wasm.d.ts +6 -1
- package/dist/wasm/excel/tabulark_excel.d.ts +33 -8
- package/dist/wasm/excel/tabulark_excel.js +129 -19
- package/dist/wasm/excel/tabulark_excel_bg.wasm +0 -0
- package/dist/wasm/excel/tabulark_excel_bg.wasm.d.ts +6 -1
- package/dist/wasm/parquet/tabulark_parquet.d.ts +31 -6
- package/dist/wasm/parquet/tabulark_parquet.js +135 -17
- package/dist/wasm/parquet/tabulark_parquet_bg.wasm +0 -0
- package/dist/wasm/parquet/tabulark_parquet_bg.wasm.d.ts +6 -1
- package/dist/worker/blob-source-accessor.d.ts +10 -0
- package/dist/worker/source-accessor.d.ts +76 -0
- package/dist/worker/wasm-adapter.d.ts +39 -38
- package/dist/worker-range-source.d.ts +1 -0
- package/dist/worker-range-source.js +2 -0
- package/dist/worker-range-source.js.map +7 -0
- package/dist/worker.js +1 -1
- package/dist/worker.js.map +4 -4
- 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
|
|
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
|
|
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
|
-
*
|
|
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}
|
|
355
|
-
* @param {
|
|
356
|
-
* @param {boolean} eof
|
|
436
|
+
* @param {number} operation_revision
|
|
437
|
+
* @param {Array<any>} results
|
|
357
438
|
* @returns {any}
|
|
358
439
|
*/
|
|
359
|
-
continueOperation(operation_handle,
|
|
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,
|
|
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
|
|
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);
|
|
Binary file
|
|
@@ -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
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
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
|
|
14
|
-
readonly
|
|
15
|
-
readonly
|
|
16
|
-
readonly
|
|
17
|
-
readonly
|
|
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
|
|
30
|
-
readonly kind: "
|
|
31
|
-
readonly
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
beginRead(tableHandle: string | number, request: unknown):
|
|
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
|