@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.
@@ -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
- return { load, isLoaded };
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.1",
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
  }
@@ -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
- * Release geometric growth slack after a bounded bulk ingest.
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
- endMutation(): void;
90
- endPageLoad(): void;
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 typed arrays (row-major over `rows x cols`) plus the unique
108
- * strings referenced by the window, so the host paints without crossing
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 so each formula cell is evaluated at most once even
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
- * Formula/reference offsets are sparse row-major exceptions. Reference
216
- * targets are packed `[sheet_handle, row, col]` triples. The compact
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
- setBlock(sheet: number, start_row: number, start_col: number, rows: number, cols: number, kinds: Uint8Array, numbers: Float64Array, texts: string[], styles: Uint32Array, formula_offsets: Uint32Array, formula_sources: string[], reference_offsets: Uint32Array, reference_targets: Uint32Array): number;
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 an arithmetic formula at `(row, col)`.
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. The returned value is the previous cached value until that
253
- * barrier recompute runs, and the store facade ignores it for batched edits.
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. String payloads remain interned in
332
- * the owning `CellStore`, so snapshots must only be restored into that store.
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 and return per-cell conditional-format rule bitmasks; empty
373
- * when the sheet has no rules.
481
+ * Consume the complete fixed-width window payload. The returned
482
+ * `Uint8Array` is copied by wasm-bindgen into JS-owned memory.
374
483
  */
375
- takeCondMatches(): Uint32Array;
484
+ takePacked(): Uint8Array;
376
485
  /**
377
- * Consume and return the per-cell tag array: 0 empty, 1 number, 2 string.
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 cellstore_endMutation: (a: number) => void;
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 cellstore_setBlock: (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) => number;
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 windowview_takeStyleDict: (a: number) => [number, number];
536
- readonly windowview_takeStyleIndex: (a: number) => [number, number];
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