@sheetwrite/wasm 0.3.1 → 0.5.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/loader-browser.mjs +9 -0
- package/loader-node.mjs +19 -0
- package/loader-state.mjs +26 -1
- package/loader.d.ts +17 -0
- package/package.json +3 -2
- package/pkg/sheetwrite_wasm.d.ts +158 -63
- package/pkg/sheetwrite_wasm.js +5 -1909
- package/pkg/sheetwrite_wasm_bg.wasm +0 -0
- package/pkg/sheetwrite_wasm_bg.wasm.d.ts +23 -12
- package/pkg/sheetwrite_wasm_factory.js +2185 -0
package/loader-browser.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createLoader } from "./loader-state.mjs";
|
|
2
2
|
import init from "./pkg/sheetwrite_wasm.js";
|
|
3
|
+
import { adoptPublishedModule, createInstance } from "./pkg/sheetwrite_wasm_factory.js";
|
|
3
4
|
|
|
4
5
|
export * from "./pkg/sheetwrite_wasm.js";
|
|
5
6
|
|
|
@@ -12,3 +13,11 @@ const loader = createLoader(async (source) => {
|
|
|
12
13
|
});
|
|
13
14
|
|
|
14
15
|
export const { load, isLoaded } = loader;
|
|
16
|
+
|
|
17
|
+
/** Create an independently collectible engine, optionally reusing compiled code. */
|
|
18
|
+
export async function createEngine(source) {
|
|
19
|
+
const engine = createInstance();
|
|
20
|
+
await engine.init(source === undefined ? undefined : { module_or_path: source });
|
|
21
|
+
await loader.adopt(source, () => adoptPublishedModule(engine.getModule()));
|
|
22
|
+
return engine;
|
|
23
|
+
}
|
package/loader-node.mjs
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
|
+
|
|
2
3
|
import { createLoader } from "./loader-state.mjs";
|
|
3
4
|
import init, { initSync } from "./pkg/sheetwrite_wasm.js";
|
|
5
|
+
import { adoptPublishedModule, createInstance } from "./pkg/sheetwrite_wasm_factory.js";
|
|
4
6
|
|
|
5
7
|
export * from "./pkg/sheetwrite_wasm.js";
|
|
6
8
|
|
|
@@ -15,3 +17,20 @@ const loader = createLoader(async (source) => {
|
|
|
15
17
|
});
|
|
16
18
|
|
|
17
19
|
export const { load, isLoaded } = loader;
|
|
20
|
+
|
|
21
|
+
/** Create an independently collectible engine, optionally reusing compiled code. */
|
|
22
|
+
export async function createEngine(source) {
|
|
23
|
+
const engine = createInstance();
|
|
24
|
+
|
|
25
|
+
if (source === undefined) {
|
|
26
|
+
engine.initSync({
|
|
27
|
+
module: await readFile(new URL("./pkg/sheetwrite_wasm_bg.wasm", import.meta.url)),
|
|
28
|
+
});
|
|
29
|
+
} else {
|
|
30
|
+
await engine.init({ module_or_path: source });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
await loader.adopt(source, () => adoptPublishedModule(engine.getModule()));
|
|
34
|
+
|
|
35
|
+
return engine;
|
|
36
|
+
}
|
package/loader-state.mjs
CHANGED
|
@@ -23,6 +23,7 @@ export function createLoader(initialize) {
|
|
|
23
23
|
if (source !== undefined && source !== selectedSource) {
|
|
24
24
|
console.warn(DIFFERENT_SOURCE_AFTER_INIT);
|
|
25
25
|
}
|
|
26
|
+
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -30,6 +31,7 @@ export function createLoader(initialize) {
|
|
|
30
31
|
if (source !== undefined && source !== selectedSource) {
|
|
31
32
|
throw new Error(DIFFERENT_SOURCE_IN_FLIGHT);
|
|
32
33
|
}
|
|
34
|
+
|
|
33
35
|
return inFlight;
|
|
34
36
|
}
|
|
35
37
|
|
|
@@ -50,5 +52,28 @@ export function createLoader(initialize) {
|
|
|
50
52
|
return ready;
|
|
51
53
|
}
|
|
52
54
|
|
|
53
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Mark the published exports ready from an engine instance that already compiled the module.
|
|
57
|
+
* A load() in flight wins; `publish` runs only when this call makes the loader ready.
|
|
58
|
+
*
|
|
59
|
+
* @param {BufferSource | URL | string | Request | WebAssembly.Module | undefined} source
|
|
60
|
+
* @param {() => void} publish
|
|
61
|
+
*/
|
|
62
|
+
async function adopt(source, publish) {
|
|
63
|
+
if (inFlight) {
|
|
64
|
+
try {
|
|
65
|
+
await inFlight;
|
|
66
|
+
} catch {
|
|
67
|
+
// A failed load() leaves the loader free for this instance to adopt.
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (ready) return;
|
|
72
|
+
|
|
73
|
+
publish();
|
|
74
|
+
selectedSource = source;
|
|
75
|
+
ready = true;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return { load, isLoaded, adopt };
|
|
54
79
|
}
|
package/loader.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type * as WasmExports from "./pkg/sheetwrite_wasm.js";
|
|
2
|
+
|
|
1
3
|
export * from "./pkg/sheetwrite_wasm.js";
|
|
2
4
|
|
|
3
5
|
/** Sources accepted by asynchronous initialization: a fetchable URL/request/response, raw module bytes, or a precompiled `WebAssembly.Module`. */
|
|
@@ -22,3 +24,18 @@ export declare function load(
|
|
|
22
24
|
|
|
23
25
|
/** Whether the WASM module has finished initializing. */
|
|
24
26
|
export declare function isLoaded(): boolean;
|
|
27
|
+
|
|
28
|
+
/** Engine objects and caches owned by one independently collectible WASM instance. */
|
|
29
|
+
export type EngineInstance = Omit<typeof WasmExports, "default"> & {
|
|
30
|
+
getModule(): WebAssembly.Module;
|
|
31
|
+
|
|
32
|
+
getMemory(): WebAssembly.Memory;
|
|
33
|
+
|
|
34
|
+
/** Drop all glue roots after releasing owned resources. This instance is then unusable. */
|
|
35
|
+
retire(): void;
|
|
36
|
+
|
|
37
|
+
functionNames?: () => string[];
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/** Initialize a fresh engine; a compiled module can be reused without retaining its memory. */
|
|
41
|
+
export declare function createEngine(source?: Parameters<typeof load>[0]): Promise<EngineInstance>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sheetwrite/wasm",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Sheetwrite columnar store and data engine (Rust/WASM).",
|
|
6
6
|
"license": "MIT",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"loader-state.mjs",
|
|
40
40
|
"loader.d.ts",
|
|
41
41
|
"pkg/sheetwrite_wasm.js",
|
|
42
|
+
"pkg/sheetwrite_wasm_factory.js",
|
|
42
43
|
"pkg/sheetwrite_wasm.d.ts",
|
|
43
44
|
"pkg/sheetwrite_wasm_bg.wasm",
|
|
44
45
|
"pkg/sheetwrite_wasm_bg.wasm.d.ts"
|
|
@@ -49,7 +50,7 @@
|
|
|
49
50
|
},
|
|
50
51
|
"sideEffects": false,
|
|
51
52
|
"scripts": {
|
|
52
|
-
"build": "wasm-pack build --target web --out-dir pkg",
|
|
53
|
+
"build": "wasm-pack build --target web --out-dir pkg && bun ../../scripts/wasm-factory.ts .",
|
|
53
54
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
54
55
|
"clean": "rm -rf pkg target"
|
|
55
56
|
}
|
package/pkg/sheetwrite_wasm.d.ts
CHANGED
|
@@ -14,6 +14,27 @@ export class CellOut {
|
|
|
14
14
|
readonly style: number;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Resolved values of a sparse coordinate batch, one entry per requested cell.
|
|
19
|
+
*
|
|
20
|
+
* Every list holds one entry per cell, in the requested order. Text is stored
|
|
21
|
+
* once: `text_index` names the cell's entry in `strings`, or `-1` when the cell
|
|
22
|
+
* has no text, exactly like [`CellOut::string`] reports it.
|
|
23
|
+
*/
|
|
24
|
+
export class CellSnapshot {
|
|
25
|
+
private constructor();
|
|
26
|
+
free(): void;
|
|
27
|
+
[Symbol.dispose](): void;
|
|
28
|
+
readonly kinds: Uint8Array;
|
|
29
|
+
readonly numbers: Float64Array;
|
|
30
|
+
readonly strings: string[];
|
|
31
|
+
readonly styles: Uint32Array;
|
|
32
|
+
/**
|
|
33
|
+
* Entry in [`Self::strings`] per cell, or `-1` for a cell without text.
|
|
34
|
+
*/
|
|
35
|
+
readonly textIndex: Int32Array;
|
|
36
|
+
}
|
|
37
|
+
|
|
17
38
|
/**
|
|
18
39
|
* The workbook-wide store: every sheet, one string pool.
|
|
19
40
|
*/
|
|
@@ -30,6 +51,11 @@ export class CellStore {
|
|
|
30
51
|
* Allocate a sheet grid and return its numeric handle.
|
|
31
52
|
*/
|
|
32
53
|
addSheet(n_cols: number, row_count: number): number;
|
|
54
|
+
/**
|
|
55
|
+
* Whether a source rectangle can replace its spill cells without cutting
|
|
56
|
+
* an installed spill away from its anchor. No owner window crosses WASM.
|
|
57
|
+
*/
|
|
58
|
+
admitSourceRange(sheet: number, r0: number, c0: number, r1: number, c1: number): boolean;
|
|
33
59
|
/**
|
|
34
60
|
* Column aggregate over numeric cells. op: 0 sum, 1 avg, 2 min, 3 max, 4 count.
|
|
35
61
|
*/
|
|
@@ -57,6 +83,15 @@ export class CellStore {
|
|
|
57
83
|
* follow the caller's row-major coordinate order.
|
|
58
84
|
*/
|
|
59
85
|
captureSourcesForRows(sheet: number, rows: Uint32Array, cols: Uint32Array): SourceSnapshot | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* Resolved values of a sparse coordinate list in one batched read.
|
|
88
|
+
*
|
|
89
|
+
* `rows` and `cols` are absolute coordinates and must have the same length;
|
|
90
|
+
* otherwise the result carries no cells. Every entry reads exactly like
|
|
91
|
+
* [`Self::get_cell`], so a batched capture reports the values a per-cell
|
|
92
|
+
* read would.
|
|
93
|
+
*/
|
|
94
|
+
cellSnapshots(sheet: number, rows: Uint32Array, cols: Uint32Array): CellSnapshot | undefined;
|
|
60
95
|
/**
|
|
61
96
|
* 0 unloaded, 1 loaded-empty, 2 loaded-value, 3 dirty local edit.
|
|
62
97
|
*/
|
|
@@ -69,7 +104,14 @@ export class CellStore {
|
|
|
69
104
|
colCount(sheet: number): number;
|
|
70
105
|
columnsFullyLoaded(sheet: number, start_row: number, end_row: number, cols: Uint32Array): boolean;
|
|
71
106
|
/**
|
|
72
|
-
*
|
|
107
|
+
* Commit staged user or host sources. Admission metadata must be staged
|
|
108
|
+
* before this barrier; derived values and string roots are complete on return.
|
|
109
|
+
* Beginning a page load suppresses local dirty tracking until this commit.
|
|
110
|
+
*/
|
|
111
|
+
commitSources(): void;
|
|
112
|
+
/**
|
|
113
|
+
* Reclaim unreachable text and release growth slack at a transaction barrier.
|
|
114
|
+
* Raw pool IDs must be discarded when `stringPoolEpoch` changes.
|
|
73
115
|
*/
|
|
74
116
|
compactStringStorage(): void;
|
|
75
117
|
/**
|
|
@@ -86,8 +128,10 @@ export class CellStore {
|
|
|
86
128
|
dataEdgeOrdered(sheet: number, order: Uint32Array, row: number, col: number, d_row: number, d_col: number): number;
|
|
87
129
|
dirtyRevision(sheet: number, row: number, col: number): bigint;
|
|
88
130
|
distinctValues(sheet: number, col: number, limit: number): DistinctColumn;
|
|
89
|
-
|
|
90
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Export only live state, not allocator slack or a dependency-index cache.
|
|
133
|
+
*/
|
|
134
|
+
exportMemoryState(): Uint8Array;
|
|
91
135
|
/**
|
|
92
136
|
* Data-row indices whose column text contains `needle` (case-insensitive).
|
|
93
137
|
*/
|
|
@@ -97,6 +141,20 @@ export class CellStore {
|
|
|
97
141
|
* Benchmark diagnostic: `[current matrix bytes, peak matrix bytes, allocations]`.
|
|
98
142
|
*/
|
|
99
143
|
formulaMatrixResourceStats(): Float64Array;
|
|
144
|
+
/**
|
|
145
|
+
* Same-sheet calculation prerequisites for `start_row..end_row` × `cols`,
|
|
146
|
+
* as flat `[row_start, row_end, col_start, col_end)` rectangles.
|
|
147
|
+
*
|
|
148
|
+
* The walk follows each read into the formula cells it reaches, so for
|
|
149
|
+
* `H = F - G` and `F = D - E` it reports `D`, `E`, `F`, and `G`.
|
|
150
|
+
* Spill children follow their anchor; attempted spill destinations are also
|
|
151
|
+
* prerequisites because admission must establish that source cells are empty.
|
|
152
|
+
* Reads of other sheets are skipped. `max_cells` bounds the walk: a read larger than
|
|
153
|
+
* the remaining budget is skipped, so one whole-column range cannot make a
|
|
154
|
+
* window demand the full column. Rectangles are disjoint and ascend by
|
|
155
|
+
* column, then by row.
|
|
156
|
+
*/
|
|
157
|
+
formulaReadBands(sheet: number, start_row: number, end_row: number, cols: Uint32Array, max_cells: number): Uint32Array;
|
|
100
158
|
formulaSource(sheet: number, row: number, col: number): string | undefined;
|
|
101
159
|
/**
|
|
102
160
|
* Single-cell read for interactions/tests — never the render hot path.
|
|
@@ -104,9 +162,8 @@ export class CellStore {
|
|
|
104
162
|
getCell(sheet: number, row: number, col: number): CellOut;
|
|
105
163
|
/**
|
|
106
164
|
* One bulk read of a rectangular window for the renderer. Returns
|
|
107
|
-
* contiguous
|
|
108
|
-
*
|
|
109
|
-
* the boundary per cell.
|
|
165
|
+
* contiguous packed cell data (row-major over `rows x cols`) with pool IDs
|
|
166
|
+
* and window-local formula-error strings, avoiding per-cell boundary reads.
|
|
110
167
|
*/
|
|
111
168
|
getWindow(sheet: number, row_start: number, row_end: number, cols: Uint32Array): WindowView;
|
|
112
169
|
/**
|
|
@@ -124,10 +181,25 @@ export class CellStore {
|
|
|
124
181
|
* Packed-string counterpart to [`CellStore::hydrate_page_numbers`].
|
|
125
182
|
*/
|
|
126
183
|
hydratePageStringsPacked(sheet: number, col: number, start_row: number, buf: string, utf16_lens: Uint32Array, style: number, protected_offsets: Uint32Array): void;
|
|
184
|
+
/**
|
|
185
|
+
* Import into a fresh instance; failure never mutates the source store.
|
|
186
|
+
*/
|
|
187
|
+
static importMemoryState(bytes: Uint8Array): CellStore;
|
|
188
|
+
importRangeMemoryState(bytes: Uint8Array, sheet: number, row_start: number, col_start: number): RangeSnapshot;
|
|
127
189
|
insertCols(sheet: number, at: number, count: number): void;
|
|
128
190
|
isFullyLoaded(sheet: number): boolean;
|
|
129
191
|
isPaged(sheet: number): boolean;
|
|
130
192
|
isSheetAlive(sheet: number): boolean;
|
|
193
|
+
/**
|
|
194
|
+
* Loaded row runs of one column inside `start_row..end_row`, as flat
|
|
195
|
+
* `[start, end)` pairs in ascending, disjoint order.
|
|
196
|
+
*
|
|
197
|
+
* A row belongs to a run only when [`Self::columns_fully_loaded`] would
|
|
198
|
+
* report it loaded, so a caller can reconcile a whole column with one call
|
|
199
|
+
* instead of probing the band row by row. Rows outside the sheet and empty
|
|
200
|
+
* requests produce no pairs.
|
|
201
|
+
*/
|
|
202
|
+
loadedSpans(sheet: number, start_row: number, end_row: number, col: number): Uint32Array;
|
|
131
203
|
markCellCleanRevision(sheet: number, row: number, col: number, revision: bigint): boolean;
|
|
132
204
|
markRangeClean(sheet: number, start_row: number, end_row: number, start_col: number, end_col: number): void;
|
|
133
205
|
memoryStats(): Float64Array;
|
|
@@ -145,7 +217,19 @@ export class CellStore {
|
|
|
145
217
|
* cells and source bytes, never the logical sheet rectangle.
|
|
146
218
|
*/
|
|
147
219
|
persistedCellData(sheet: number): Float64Array;
|
|
220
|
+
/**
|
|
221
|
+
* Replaces caller-owned persistent pins; empty row ranges leave them unchanged.
|
|
222
|
+
*/
|
|
148
223
|
pinRange(sheet: number, start_row: number, end_row: number, cols: Uint32Array): void;
|
|
224
|
+
/**
|
|
225
|
+
* Replaces transient read protection without changing explicit or viewport pins.
|
|
226
|
+
* Nonempty `rows` are backing row IDs; otherwise `[start_row, end_row)` is used.
|
|
227
|
+
*/
|
|
228
|
+
pinReadWindow(sheet: number, start_row: number, end_row: number, rows: Uint32Array, cols: Uint32Array): void;
|
|
229
|
+
/**
|
|
230
|
+
* Replaces viewport-owned protection independently of transient read pins.
|
|
231
|
+
*/
|
|
232
|
+
pinViewportBands(sheet: number, bands: Uint32Array): void;
|
|
149
233
|
poolStrings(ids: Uint32Array): string[];
|
|
150
234
|
/**
|
|
151
235
|
* `[contains cache constructions, owned distinct strings]`.
|
|
@@ -161,15 +245,9 @@ export class CellStore {
|
|
|
161
245
|
*
|
|
162
246
|
* The pass first grows the dirty cell set through formula read-sets to find
|
|
163
247
|
* all dependent formulas. It then evaluates only those formulas, using a
|
|
164
|
-
* per-pass memo table
|
|
165
|
-
* when many downstream formulas reference it.
|
|
248
|
+
* per-pass memo table to reuse formula results across dependent reads.
|
|
166
249
|
*/
|
|
167
250
|
recompute(sheet: number): void;
|
|
168
|
-
/**
|
|
169
|
-
* Recompute the union of every dirty sheet once at the host transaction
|
|
170
|
-
* barrier, including cross-sheet formula and plain-reference dependents.
|
|
171
|
-
*/
|
|
172
|
-
recomputeChanged(): void;
|
|
173
251
|
/**
|
|
174
252
|
* Explicit volatile barrier. `serial` is a UTC spreadsheet serial using
|
|
175
253
|
* the 1899-12-30 epoch; only TODAY/NOW formulas and their dependents dirty.
|
|
@@ -211,14 +289,31 @@ export class CellStore {
|
|
|
211
289
|
*/
|
|
212
290
|
search(sheet: number, cols: Uint32Array, query: string, case_insensitive: boolean, whole_cell: boolean): Uint32Array;
|
|
213
291
|
/**
|
|
214
|
-
* Atomically write one row-major mixed literal/formula/reference block
|
|
215
|
-
*
|
|
216
|
-
*
|
|
292
|
+
* Atomically write one row-major mixed literal/formula/reference block
|
|
293
|
+
* whose text payload arrives packed instead of once per cell.
|
|
294
|
+
*
|
|
295
|
+
* `text_buf` holds the UTF-8 bytes of every `KIND_STRING` cell of `kinds`
|
|
296
|
+
* in cell-offset order. `text_offsets` carries their byte boundaries: the
|
|
297
|
+
* n-th string cell owns `text_offsets[n]..text_offsets[n + 1]`, and the
|
|
298
|
+
* last entry equals the buffer length, so a block without strings passes an
|
|
299
|
+
* empty buffer and `&[0]`. Literal strings are interned in cell-offset order;
|
|
300
|
+
* source-owned text slots are consumed without interning. The compact
|
|
217
301
|
* status is `0` success, `1` invalid shape/bounds, `2` invalid or duplicate
|
|
218
302
|
* source metadata, and `3` paged dirty-capacity rejection.
|
|
219
303
|
*/
|
|
220
|
-
|
|
304
|
+
setBlockPacked(sheet: number, start_row: number, start_col: number, rows: number, cols: number, kinds: Uint8Array, numbers: Float64Array, text_buf: Uint8Array, text_offsets: Uint32Array, styles: Uint32Array, formula_offsets: Uint32Array, formula_sources: string[], reference_offsets: Uint32Array, reference_targets: Uint32Array): number;
|
|
221
305
|
setBool(sheet: number, row: number, col: number, value: boolean, style: number): void;
|
|
306
|
+
/**
|
|
307
|
+
* Atomically write one column-major mixed literal/formula/reference block
|
|
308
|
+
* whose text payload arrives packed.
|
|
309
|
+
*
|
|
310
|
+
* This is [`Self::set_block_packed`] with the flat input arrays in the
|
|
311
|
+
* store's own column-major order: cell `(row, col)` sits at
|
|
312
|
+
* `col * rows + row`, so a columnar import can fill them column by column.
|
|
313
|
+
* Text packing, source metadata and every status code behave exactly as in
|
|
314
|
+
* [`Self::set_block_packed`].
|
|
315
|
+
*/
|
|
316
|
+
setColumnBlockPacked(sheet: number, start_row: number, start_col: number, rows: number, cols: number, kinds: Uint8Array, numbers: Float64Array, text_buf: Uint8Array, text_offsets: Uint32Array, styles: Uint32Array, formula_offsets: Uint32Array, formula_sources: string[], reference_offsets: Uint32Array, reference_targets: Uint32Array): number;
|
|
222
317
|
/**
|
|
223
318
|
* Bulk-load one column with numbers starting at `start_row`.
|
|
224
319
|
*/
|
|
@@ -244,13 +339,18 @@ export class CellStore {
|
|
|
244
339
|
*/
|
|
245
340
|
setConditionalRules(sheet: number, kinds: Uint8Array, bounds: Uint32Array, nums: Float64Array, strs: string[], flags: Uint8Array): void;
|
|
246
341
|
/**
|
|
247
|
-
* Parse and store
|
|
342
|
+
* Parse and store a formula at `(row, col)`.
|
|
248
343
|
*
|
|
249
344
|
* Setters only mark cells dirty; they do not recompute formulas. The host
|
|
250
345
|
* calls `recompute(sheet)` once at the transaction barrier so a multi-cell
|
|
251
346
|
* edit performs one dependency-scoped pass instead of one full-sheet pass
|
|
252
|
-
* per setter.
|
|
253
|
-
*
|
|
347
|
+
* per setter. A successful parse returns the pre-write cached scalar; a
|
|
348
|
+
* parse rejection returns `0.0`, and a rejected write returns `NaN`.
|
|
349
|
+
*
|
|
350
|
+
* The dependency index is invalidated only when the rewrite changes what
|
|
351
|
+
* the formula reads or whether it produces an array. A constant-only edit
|
|
352
|
+
* keeps the cached index, so its next recompute visits just the edited
|
|
353
|
+
* formula and its dependents instead of every formula in the workbook.
|
|
254
354
|
*/
|
|
255
355
|
setFormula(sheet: number, row: number, col: number, src: string, style: number): number;
|
|
256
356
|
setNamedRange(name: string, scope: number, sheet: number, row_start: number, col_start: number, row_end: number, col_end: number): boolean;
|
|
@@ -292,6 +392,10 @@ export class CellStore {
|
|
|
292
392
|
* Packed row-major `[anchor_row, anchor_col, ...]` owner coordinates.
|
|
293
393
|
*/
|
|
294
394
|
spillOwnerCoordinates(sheet: number, row_start: number, row_end: number, cols: Uint32Array): Uint32Array;
|
|
395
|
+
/**
|
|
396
|
+
* Raw string IDs are valid only within this epoch, including window IDs.
|
|
397
|
+
*/
|
|
398
|
+
stringPoolEpoch(): number;
|
|
295
399
|
/**
|
|
296
400
|
* Current style-dictionary id at a cell; `0` when out of bounds. Used by
|
|
297
401
|
* the host to write derived (reference-shadow) values without disturbing
|
|
@@ -328,14 +432,18 @@ export class DistinctColumn {
|
|
|
328
432
|
* Opaque, store-local history payload for one dense rectangular cell block.
|
|
329
433
|
*
|
|
330
434
|
* The host may retain this object in undo history, but it is deliberately not
|
|
331
|
-
* part of the serialized document protocol.
|
|
332
|
-
*
|
|
435
|
+
* part of the serialized document protocol. A deduplicated local dictionary
|
|
436
|
+
* owns captured text independently of the store's pool epoch.
|
|
333
437
|
*/
|
|
334
438
|
export class RangeSnapshot {
|
|
335
439
|
private constructor();
|
|
336
440
|
free(): void;
|
|
337
441
|
[Symbol.dispose](): void;
|
|
338
442
|
byteLength(): number;
|
|
443
|
+
/**
|
|
444
|
+
* Transfer packed scalars and the local dictionary, never JS cell patches.
|
|
445
|
+
*/
|
|
446
|
+
exportMemoryState(sheet: number): Uint8Array;
|
|
339
447
|
formulaOffsets(): Uint32Array;
|
|
340
448
|
formulaSources(): string[];
|
|
341
449
|
kinds(): Uint8Array;
|
|
@@ -368,40 +476,16 @@ export class WindowView {
|
|
|
368
476
|
private constructor();
|
|
369
477
|
free(): void;
|
|
370
478
|
[Symbol.dispose](): void;
|
|
479
|
+
stringPoolEpoch(): number;
|
|
371
480
|
/**
|
|
372
|
-
* Consume
|
|
373
|
-
*
|
|
481
|
+
* Consume the complete fixed-width window payload. The returned
|
|
482
|
+
* `Uint8Array` is copied by wasm-bindgen into JS-owned memory.
|
|
374
483
|
*/
|
|
375
|
-
|
|
484
|
+
takePacked(): Uint8Array;
|
|
376
485
|
/**
|
|
377
|
-
* Consume
|
|
378
|
-
*/
|
|
379
|
-
takeKinds(): Uint8Array;
|
|
380
|
-
/**
|
|
381
|
-
* Consume and return per-cell numeric payloads (valid where kind == 1).
|
|
382
|
-
*/
|
|
383
|
-
takeNumbers(): Float64Array;
|
|
384
|
-
/**
|
|
385
|
-
* Consume and return per-cell GLOBAL string-pool ids; `u32::MAX` means none.
|
|
386
|
-
*/
|
|
387
|
-
takeStringIds(): Uint32Array;
|
|
388
|
-
/**
|
|
389
|
-
* Consume and return per-cell indices into `strings` (string cells only).
|
|
390
|
-
*/
|
|
391
|
-
takeStringIndex(): Int32Array;
|
|
392
|
-
/**
|
|
393
|
-
* Consume and return unique strings referenced by this window.
|
|
486
|
+
* Consume formula-error sentinel strings referenced by the packed data.
|
|
394
487
|
*/
|
|
395
488
|
takeStrings(): string[];
|
|
396
|
-
/**
|
|
397
|
-
* Consume and return the unique global style-dictionary ids referenced by
|
|
398
|
-
* this window, in local-index order; the host maps each to a `CellStyle`.
|
|
399
|
-
*/
|
|
400
|
-
takeStyleDict(): Uint32Array;
|
|
401
|
-
/**
|
|
402
|
-
* Consume and return per-cell WINDOW-LOCAL style indices into the dict.
|
|
403
|
-
*/
|
|
404
|
-
takeStyleIndex(): Uint32Array;
|
|
405
489
|
readonly nCols: number;
|
|
406
490
|
readonly nRows: number;
|
|
407
491
|
}
|
|
@@ -411,6 +495,7 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
|
|
|
411
495
|
export interface InitOutput {
|
|
412
496
|
readonly memory: WebAssembly.Memory;
|
|
413
497
|
readonly __wbg_cellout_free: (a: number, b: number) => void;
|
|
498
|
+
readonly __wbg_cellsnapshot_free: (a: number, b: number) => void;
|
|
414
499
|
readonly __wbg_cellstore_free: (a: number, b: number) => void;
|
|
415
500
|
readonly __wbg_distinctcolumn_free: (a: number, b: number) => void;
|
|
416
501
|
readonly __wbg_rangesnapshot_free: (a: number, b: number) => void;
|
|
@@ -420,10 +505,16 @@ export interface InitOutput {
|
|
|
420
505
|
readonly cellout_num: (a: number) => number;
|
|
421
506
|
readonly cellout_string: (a: number) => [number, number];
|
|
422
507
|
readonly cellout_style: (a: number) => number;
|
|
508
|
+
readonly cellsnapshot_kinds: (a: number) => [number, number];
|
|
509
|
+
readonly cellsnapshot_numbers: (a: number) => [number, number];
|
|
510
|
+
readonly cellsnapshot_strings: (a: number) => [number, number];
|
|
511
|
+
readonly cellsnapshot_styles: (a: number) => [number, number];
|
|
512
|
+
readonly cellsnapshot_textIndex: (a: number) => [number, number];
|
|
423
513
|
readonly cellstore_acknowledgeRevision: (a: number, b: bigint) => void;
|
|
424
514
|
readonly cellstore_addPagedSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
425
515
|
readonly cellstore_addRows: (a: number, b: number, c: number, d: number) => void;
|
|
426
516
|
readonly cellstore_addSheet: (a: number, b: number, c: number) => number;
|
|
517
|
+
readonly cellstore_admitSourceRange: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
427
518
|
readonly cellstore_aggregate: (a: number, b: number, c: number, d: number) => number;
|
|
428
519
|
readonly cellstore_beginMutation: (a: number) => bigint;
|
|
429
520
|
readonly cellstore_beginPageLoad: (a: number) => void;
|
|
@@ -432,31 +523,36 @@ export interface InitOutput {
|
|
|
432
523
|
readonly cellstore_captureReferences: (a: number, b: number, c: number) => number;
|
|
433
524
|
readonly cellstore_captureSources: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
434
525
|
readonly cellstore_captureSourcesForRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
526
|
+
readonly cellstore_cellSnapshots: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
435
527
|
readonly cellstore_cellState: (a: number, b: number, c: number, d: number) => number;
|
|
436
528
|
readonly cellstore_clearCell: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
437
529
|
readonly cellstore_clearRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
|
|
438
530
|
readonly cellstore_colCount: (a: number, b: number) => number;
|
|
439
531
|
readonly cellstore_columnsFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
532
|
+
readonly cellstore_commitSources: (a: number) => void;
|
|
440
533
|
readonly cellstore_compactStringStorage: (a: number) => void;
|
|
441
534
|
readonly cellstore_dataEdge: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
442
535
|
readonly cellstore_dataEdgeOrdered: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
|
|
443
536
|
readonly cellstore_dirtyRevision: (a: number, b: number, c: number, d: number) => bigint;
|
|
444
537
|
readonly cellstore_distinctValues: (a: number, b: number, c: number, d: number) => number;
|
|
445
|
-
readonly
|
|
446
|
-
readonly cellstore_endPageLoad: (a: number) => void;
|
|
538
|
+
readonly cellstore_exportMemoryState: (a: number) => [number, number];
|
|
447
539
|
readonly cellstore_filterRows: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
448
540
|
readonly cellstore_filterRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number) => [number, number];
|
|
449
541
|
readonly cellstore_formulaMatrixResourceStats: (a: number) => [number, number];
|
|
542
|
+
readonly cellstore_formulaReadBands: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
450
543
|
readonly cellstore_formulaSource: (a: number, b: number, c: number, d: number) => [number, number];
|
|
451
544
|
readonly cellstore_getCell: (a: number, b: number, c: number, d: number) => number;
|
|
452
545
|
readonly cellstore_getWindow: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
453
546
|
readonly cellstore_getWindowRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
454
547
|
readonly cellstore_hydratePageNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
|
|
455
548
|
readonly cellstore_hydratePageStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => void;
|
|
549
|
+
readonly cellstore_importMemoryState: (a: any) => number;
|
|
550
|
+
readonly cellstore_importRangeMemoryState: (a: number, b: any, c: number, d: number, e: number) => number;
|
|
456
551
|
readonly cellstore_insertCols: (a: number, b: number, c: number, d: number) => void;
|
|
457
552
|
readonly cellstore_isFullyLoaded: (a: number, b: number) => number;
|
|
458
553
|
readonly cellstore_isPaged: (a: number, b: number) => number;
|
|
459
554
|
readonly cellstore_isSheetAlive: (a: number, b: number) => number;
|
|
555
|
+
readonly cellstore_loadedSpans: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
460
556
|
readonly cellstore_markCellCleanRevision: (a: number, b: number, c: number, d: number, e: bigint) => number;
|
|
461
557
|
readonly cellstore_markRangeClean: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
462
558
|
readonly cellstore_memoryStats: (a: number) => [number, number];
|
|
@@ -465,12 +561,13 @@ export interface InitOutput {
|
|
|
465
561
|
readonly cellstore_pagedStats: (a: number, b: number) => [number, number];
|
|
466
562
|
readonly cellstore_persistedCellData: (a: number, b: number) => [number, number];
|
|
467
563
|
readonly cellstore_pinRange: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
564
|
+
readonly cellstore_pinReadWindow: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
|
|
565
|
+
readonly cellstore_pinViewportBands: (a: number, b: number, c: number, d: number) => void;
|
|
468
566
|
readonly cellstore_poolStrings: (a: number, b: number, c: number) => [number, number];
|
|
469
567
|
readonly cellstore_queryResourceStats: (a: number) => [number, number];
|
|
470
568
|
readonly cellstore_rangeFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
471
569
|
readonly cellstore_rangeStyleIds: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
472
570
|
readonly cellstore_recompute: (a: number, b: number) => void;
|
|
473
|
-
readonly cellstore_recomputeChanged: (a: number) => void;
|
|
474
571
|
readonly cellstore_recomputeVolatile: (a: number, b: number) => number;
|
|
475
572
|
readonly cellstore_referenceTarget: (a: number, b: number, c: number, d: number) => [number, number];
|
|
476
573
|
readonly cellstore_referencesTargeting: (a: number, b: number, c: number) => [number, number];
|
|
@@ -486,8 +583,9 @@ export interface InitOutput {
|
|
|
486
583
|
readonly cellstore_restoreRange: (a: number, b: number, c: number, d: number, e: number) => number;
|
|
487
584
|
readonly cellstore_rowCount: (a: number, b: number) => number;
|
|
488
585
|
readonly cellstore_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
489
|
-
readonly
|
|
586
|
+
readonly cellstore_setBlockPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number) => number;
|
|
490
587
|
readonly cellstore_setBool: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
588
|
+
readonly cellstore_setColumnBlockPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number) => number;
|
|
491
589
|
readonly cellstore_setColumnNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
492
590
|
readonly cellstore_setColumnStrings: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
493
591
|
readonly cellstore_setColumnStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
|
|
@@ -508,12 +606,14 @@ export interface InitOutput {
|
|
|
508
606
|
readonly cellstore_spillAnchorRow: (a: number, b: number, c: number, d: number) => number;
|
|
509
607
|
readonly cellstore_spillDerivedMask: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
510
608
|
readonly cellstore_spillOwnerCoordinates: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
609
|
+
readonly cellstore_stringPoolEpoch: (a: number) => number;
|
|
511
610
|
readonly cellstore_styleIdAt: (a: number, b: number, c: number, d: number) => number;
|
|
512
611
|
readonly cellstore_wasmCommittedBytes: (a: number) => number;
|
|
513
612
|
readonly distinctcolumn_takeKinds: (a: number) => [number, number];
|
|
514
613
|
readonly distinctcolumn_takeNumbers: (a: number) => [number, number];
|
|
515
614
|
readonly distinctcolumn_takeTexts: (a: number) => [number, number];
|
|
516
615
|
readonly rangesnapshot_byteLength: (a: number) => number;
|
|
616
|
+
readonly rangesnapshot_exportMemoryState: (a: number, b: number) => [number, number];
|
|
517
617
|
readonly rangesnapshot_formulaOffsets: (a: number) => [number, number];
|
|
518
618
|
readonly rangesnapshot_formulaSources: (a: number) => [number, number];
|
|
519
619
|
readonly rangesnapshot_kinds: (a: number) => [number, number];
|
|
@@ -528,20 +628,15 @@ export interface InitOutput {
|
|
|
528
628
|
readonly sourcesnapshot_spillDerived: (a: number) => [number, number];
|
|
529
629
|
readonly windowview_nCols: (a: number) => number;
|
|
530
630
|
readonly windowview_nRows: (a: number) => number;
|
|
531
|
-
readonly windowview_takeCondMatches: (a: number) => [number, number];
|
|
532
|
-
readonly windowview_takeStringIds: (a: number) => [number, number];
|
|
533
|
-
readonly windowview_takeStringIndex: (a: number) => [number, number];
|
|
534
631
|
readonly windowview_takeStrings: (a: number) => [number, number];
|
|
535
|
-
readonly
|
|
536
|
-
readonly
|
|
537
|
-
readonly windowview_takeKinds: (a: number) => [number, number];
|
|
538
|
-
readonly windowview_takeNumbers: (a: number) => [number, number];
|
|
632
|
+
readonly windowview_stringPoolEpoch: (a: number) => number;
|
|
633
|
+
readonly windowview_takePacked: (a: number) => [number, number];
|
|
539
634
|
readonly __wbindgen_malloc: (a: number, b: number) => number;
|
|
540
635
|
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
|
541
636
|
readonly __wbindgen_externrefs: WebAssembly.Table;
|
|
542
637
|
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
|
|
543
|
-
readonly __externref_table_alloc: () => number;
|
|
544
638
|
readonly __externref_drop_slice: (a: number, b: number) => void;
|
|
639
|
+
readonly __externref_table_alloc: () => number;
|
|
545
640
|
readonly __wbindgen_start: () => void;
|
|
546
641
|
}
|
|
547
642
|
|