@sheetwrite/wasm 0.4.0 → 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 +154 -28
- package/pkg/sheetwrite_wasm.js +5 -1834
- package/pkg/sheetwrite_wasm_bg.wasm +0 -0
- package/pkg/sheetwrite_wasm_bg.wasm.d.ts +23 -6
- 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 packed cell data (row-major over `rows x cols`)
|
|
108
|
-
*
|
|
109
|
-
* crossing 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,6 +476,7 @@ export class WindowView {
|
|
|
368
476
|
private constructor();
|
|
369
477
|
free(): void;
|
|
370
478
|
[Symbol.dispose](): void;
|
|
479
|
+
stringPoolEpoch(): number;
|
|
371
480
|
/**
|
|
372
481
|
* Consume the complete fixed-width window payload. The returned
|
|
373
482
|
* `Uint8Array` is copied by wasm-bindgen into JS-owned memory.
|
|
@@ -386,6 +495,7 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
|
|
|
386
495
|
export interface InitOutput {
|
|
387
496
|
readonly memory: WebAssembly.Memory;
|
|
388
497
|
readonly __wbg_cellout_free: (a: number, b: number) => void;
|
|
498
|
+
readonly __wbg_cellsnapshot_free: (a: number, b: number) => void;
|
|
389
499
|
readonly __wbg_cellstore_free: (a: number, b: number) => void;
|
|
390
500
|
readonly __wbg_distinctcolumn_free: (a: number, b: number) => void;
|
|
391
501
|
readonly __wbg_rangesnapshot_free: (a: number, b: number) => void;
|
|
@@ -395,10 +505,16 @@ export interface InitOutput {
|
|
|
395
505
|
readonly cellout_num: (a: number) => number;
|
|
396
506
|
readonly cellout_string: (a: number) => [number, number];
|
|
397
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];
|
|
398
513
|
readonly cellstore_acknowledgeRevision: (a: number, b: bigint) => void;
|
|
399
514
|
readonly cellstore_addPagedSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
400
515
|
readonly cellstore_addRows: (a: number, b: number, c: number, d: number) => void;
|
|
401
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;
|
|
402
518
|
readonly cellstore_aggregate: (a: number, b: number, c: number, d: number) => number;
|
|
403
519
|
readonly cellstore_beginMutation: (a: number) => bigint;
|
|
404
520
|
readonly cellstore_beginPageLoad: (a: number) => void;
|
|
@@ -407,31 +523,36 @@ export interface InitOutput {
|
|
|
407
523
|
readonly cellstore_captureReferences: (a: number, b: number, c: number) => number;
|
|
408
524
|
readonly cellstore_captureSources: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
409
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;
|
|
410
527
|
readonly cellstore_cellState: (a: number, b: number, c: number, d: number) => number;
|
|
411
528
|
readonly cellstore_clearCell: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
412
529
|
readonly cellstore_clearRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
|
|
413
530
|
readonly cellstore_colCount: (a: number, b: number) => number;
|
|
414
531
|
readonly cellstore_columnsFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
532
|
+
readonly cellstore_commitSources: (a: number) => void;
|
|
415
533
|
readonly cellstore_compactStringStorage: (a: number) => void;
|
|
416
534
|
readonly cellstore_dataEdge: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
417
535
|
readonly cellstore_dataEdgeOrdered: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
|
|
418
536
|
readonly cellstore_dirtyRevision: (a: number, b: number, c: number, d: number) => bigint;
|
|
419
537
|
readonly cellstore_distinctValues: (a: number, b: number, c: number, d: number) => number;
|
|
420
|
-
readonly
|
|
421
|
-
readonly cellstore_endPageLoad: (a: number) => void;
|
|
538
|
+
readonly cellstore_exportMemoryState: (a: number) => [number, number];
|
|
422
539
|
readonly cellstore_filterRows: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
423
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];
|
|
424
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];
|
|
425
543
|
readonly cellstore_formulaSource: (a: number, b: number, c: number, d: number) => [number, number];
|
|
426
544
|
readonly cellstore_getCell: (a: number, b: number, c: number, d: number) => number;
|
|
427
545
|
readonly cellstore_getWindow: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
428
546
|
readonly cellstore_getWindowRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
429
547
|
readonly cellstore_hydratePageNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
|
|
430
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;
|
|
431
551
|
readonly cellstore_insertCols: (a: number, b: number, c: number, d: number) => void;
|
|
432
552
|
readonly cellstore_isFullyLoaded: (a: number, b: number) => number;
|
|
433
553
|
readonly cellstore_isPaged: (a: number, b: number) => number;
|
|
434
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];
|
|
435
556
|
readonly cellstore_markCellCleanRevision: (a: number, b: number, c: number, d: number, e: bigint) => number;
|
|
436
557
|
readonly cellstore_markRangeClean: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
437
558
|
readonly cellstore_memoryStats: (a: number) => [number, number];
|
|
@@ -440,12 +561,13 @@ export interface InitOutput {
|
|
|
440
561
|
readonly cellstore_pagedStats: (a: number, b: number) => [number, number];
|
|
441
562
|
readonly cellstore_persistedCellData: (a: number, b: number) => [number, number];
|
|
442
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;
|
|
443
566
|
readonly cellstore_poolStrings: (a: number, b: number, c: number) => [number, number];
|
|
444
567
|
readonly cellstore_queryResourceStats: (a: number) => [number, number];
|
|
445
568
|
readonly cellstore_rangeFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
446
569
|
readonly cellstore_rangeStyleIds: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
447
570
|
readonly cellstore_recompute: (a: number, b: number) => void;
|
|
448
|
-
readonly cellstore_recomputeChanged: (a: number) => void;
|
|
449
571
|
readonly cellstore_recomputeVolatile: (a: number, b: number) => number;
|
|
450
572
|
readonly cellstore_referenceTarget: (a: number, b: number, c: number, d: number) => [number, number];
|
|
451
573
|
readonly cellstore_referencesTargeting: (a: number, b: number, c: number) => [number, number];
|
|
@@ -461,8 +583,9 @@ export interface InitOutput {
|
|
|
461
583
|
readonly cellstore_restoreRange: (a: number, b: number, c: number, d: number, e: number) => number;
|
|
462
584
|
readonly cellstore_rowCount: (a: number, b: number) => number;
|
|
463
585
|
readonly cellstore_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
464
|
-
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;
|
|
465
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;
|
|
466
589
|
readonly cellstore_setColumnNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
467
590
|
readonly cellstore_setColumnStrings: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
468
591
|
readonly cellstore_setColumnStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
|
|
@@ -483,12 +606,14 @@ export interface InitOutput {
|
|
|
483
606
|
readonly cellstore_spillAnchorRow: (a: number, b: number, c: number, d: number) => number;
|
|
484
607
|
readonly cellstore_spillDerivedMask: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
485
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;
|
|
486
610
|
readonly cellstore_styleIdAt: (a: number, b: number, c: number, d: number) => number;
|
|
487
611
|
readonly cellstore_wasmCommittedBytes: (a: number) => number;
|
|
488
612
|
readonly distinctcolumn_takeKinds: (a: number) => [number, number];
|
|
489
613
|
readonly distinctcolumn_takeNumbers: (a: number) => [number, number];
|
|
490
614
|
readonly distinctcolumn_takeTexts: (a: number) => [number, number];
|
|
491
615
|
readonly rangesnapshot_byteLength: (a: number) => number;
|
|
616
|
+
readonly rangesnapshot_exportMemoryState: (a: number, b: number) => [number, number];
|
|
492
617
|
readonly rangesnapshot_formulaOffsets: (a: number) => [number, number];
|
|
493
618
|
readonly rangesnapshot_formulaSources: (a: number) => [number, number];
|
|
494
619
|
readonly rangesnapshot_kinds: (a: number) => [number, number];
|
|
@@ -502,15 +627,16 @@ export interface InitOutput {
|
|
|
502
627
|
readonly sourcesnapshot_referenceTargets: (a: number) => [number, number];
|
|
503
628
|
readonly sourcesnapshot_spillDerived: (a: number) => [number, number];
|
|
504
629
|
readonly windowview_nCols: (a: number) => number;
|
|
630
|
+
readonly windowview_nRows: (a: number) => number;
|
|
505
631
|
readonly windowview_takeStrings: (a: number) => [number, number];
|
|
632
|
+
readonly windowview_stringPoolEpoch: (a: number) => number;
|
|
506
633
|
readonly windowview_takePacked: (a: number) => [number, number];
|
|
507
|
-
readonly windowview_nRows: (a: number) => number;
|
|
508
634
|
readonly __wbindgen_malloc: (a: number, b: number) => number;
|
|
509
635
|
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
|
510
636
|
readonly __wbindgen_externrefs: WebAssembly.Table;
|
|
511
637
|
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
|
|
512
|
-
readonly __externref_table_alloc: () => number;
|
|
513
638
|
readonly __externref_drop_slice: (a: number, b: number) => void;
|
|
639
|
+
readonly __externref_table_alloc: () => number;
|
|
514
640
|
readonly __wbindgen_start: () => void;
|
|
515
641
|
}
|
|
516
642
|
|