Skip to content
Sheetwrite

Sheetwrite / Documentation

SheetwriteStore@sheetwrite/core

Stable public facade and the sole transaction, epoch, policy, and event barrier.

Stable public facade and the sole transaction, epoch, policy, and event barrier.

Members 51

constructor
constructor(workbook: Workbook, data?: ColumnarData, options?: SheetwriteStoreOptions);
acknowledgeOperations Release paged dirty pins after server acknowledgement.
acknowledgeOperations: (operations: readonly DocumentOp[]) => void;
aggregate
aggregate: (sheet: SheetId, col: number, op: AggregateOp) => number;
applyTransaction Apply a low-level storage transaction.
applyTransaction: (tx: Transaction, reasonOrOptions?: CommitReason | TransactionApplicationOptions) => ApplyTransactionResult;

Apply a low-level storage transaction.

This bypasses Grid read-only checks and Grid undo/redo history. Use Grid.applyTransaction for normal host-driven edits. Queued and flushed at a barrier — never reentrant.

canApplyLocally
canApplyLocally: (patch: DocumentOp) => boolean;
captureRangeHistory
captureRangeHistory: (input: Range) => CompactRangeHistory | null;
clearView
clearView: (sheet: SheetId) => void;
columnFilters
columnFilters: (sheet: SheetId) => ReadonlyMap<number, ColumnFilter>;
dataEdge
dataEdge: (sheet: SheetId, row: number, col: number, dRow: number, dCol: number) => number;
dataRowAt
dataRowAt: (sheet: SheetId, viewRow: number) => number;
dispose
dispose: () => void;
distinctValues
distinctValues: (sheet: SheetId, col: number, limit?: number) => CellScalar[];
ensureColumns Ensure a sheet can address at least columns.length columns without producing user changes or dirty patches.
ensureColumns: (sheet: SheetId, columns: readonly Column[]) => void;

Ensure a sheet can address at least `columns.length` columns without producing user changes or dirty patches. Used for presentation padding.

exportSnapshot Deterministic, JSON-safe authoritative runtime document.
exportSnapshot: () => WorkbookSnapshot;
filterBy
filterBy: (sheet: SheetId, col: number, needle: string) => void;
getCell Single-cell read for interactions, API reads, and tests.
getCell: (addr: CellAddress) => ResolvedCell;

Single-cell read for interactions, API reads, and tests. NOT for the render hot path — renderers use `getVisibleWindow`.

getCellLoadState Loaded/empty/local state; dense stores always return a loaded state.
getCellLoadState: (addr: CellAddress) => CellLoadState;
getClipboardWindow Optional packed clipboard read.
getClipboardWindow: (sheet: SheetId, viewRows: { start: number; end: number; }, cols: readonly number[]) => ClipboardWindowView;

Optional packed clipboard read. Custom stores may omit it; the controller preserves the per-cell Store fallback contract.

getDataWindow Optional packed canonical data-row window used by file export.
getDataWindow: (sheet: SheetId, rows: { start: number; end: number; }, cols: readonly number[]) => VisibleWindowView;

Optional packed canonical data-row window used by file export. Unlike `getVisibleWindow`, sort/filter state never remaps `rows`.

getFormula Formula source at addr, or null when the cell is not a formula.
getFormula: (addr: CellAddress) => string | null;
getPagedStats
getPagedStats: (sheet: SheetId) => PagedStoreStats;
getRangeMutationAllocationStats
getRangeMutationAllocationStats: () => RangeMutationAllocationStats;
getRefTarget Plain-reference target at addr, or null when the cell is not a ref.
getRefTarget: (addr: CellAddress) => CellAddress | null;
getVisibleWindow Bulk read of a visible window; the only read a renderer should use per frame.
getVisibleWindow: (sheet: SheetId, rows: { start: number; end: number; }, cols: readonly number[]) => VisibleWindowView;
getWorkbook
getWorkbook: () => Workbook;
groupRows
groupRows: (sheet: SheetId, start: number, end: number) => void;
hasView
hasView: (sheet: SheetId) => boolean;
hiddenRows
hiddenRows: (sheet: SheetId) => number[];
hideRows
hideRows: (sheet: SheetId, rows: readonly number[]) => void;
isPaged
isPaged: (sheet: SheetId) => boolean;
isRangeFullyLoaded
isRangeFullyLoaded: (input: Range) => boolean;
loadRows
loadRows: (sheet: SheetId, start: number, rows: readonly RowData[], protect?: (addr: CellAddress) => boolean) => void;
on
on: (_evt: "change", fn: ChangeListener) => () => void;
queryCapability Explicit partial-data state for paged datasource stores.
queryCapability: (sheet: SheetId) => QueryCapability;
recalculateVolatile Recompute volatile formulas (TODAY/NOW) from one captured instant.
recalculateVolatile: (now?: Date) => void;

Recompute volatile formulas (`TODAY`/`NOW`) from one captured instant. The supplied Date is interpreted as an absolute UTC instant.

removeSheetFormulaIdentity
removeSheetFormulaIdentity: (sheet: SheetId) => boolean;
renameSheetFormulaIdentity
renameSheetFormulaIdentity: (sheet: SheetId, name: string) => boolean;
resetRangeMutationAllocationStats
resetRangeMutationAllocationStats: () => void;
rowGroups
rowGroups: (sheet: SheetId) => readonly RowGroup[];
searchCells
searchCells: (sheet: SheetId, query: string, opts?: { matchCase?: boolean; wholeCell?: boolean; columns?: number[]; }) => CellAddress[];
searchCellsFlat
searchCellsFlat: (sheet: SheetId, query: string, opts?: { matchCase?: boolean; wholeCell?: boolean; columns?: number[]; }) => Uint32Array;
setColumnFilter
setColumnFilter: (sheet: SheetId, col: number, filter: ColumnFilter | null) => void;
setGroupCollapsed
setGroupCollapsed: (sheet: SheetId, start: number, collapsed: boolean) => void;
setProtectionResolver Configure host-owned protected-range permissions.
setProtectionResolver: (resolver: ProtectionResolver | undefined, mode?: MutationPolicyMode) => void;

Configure host-owned protected-range permissions. The resolver is synchronous so every local mutation ingress shares one atomic commit barrier.

showRows
showRows: (sheet: SheetId, rows?: readonly number[]) => void;
sortBy
sortBy: (sheet: SheetId, col: number, ascending: boolean) => void;
sortByMulti
sortByMulti: (sheet: SheetId, keys: readonly SortKey[]) => void;
ungroupRows
ungroupRows: (sheet: SheetId, start: number, end: number) => void;
viewRowCount Displayed row count after any active sort/filter view.
viewRowCount: (sheet: SheetId) => number;
viewRowOf
viewRowOf: (sheet: SheetId, dataRow: number) => number | null;
fromSnapshot
static fromSnapshot: (input: unknown, options?: SheetwriteStoreOptions) => SheetwriteStore

Declaration

View full TypeScript declaration
class SheetwriteStore implements Store {
constructor(
workbook: Workbook,
data?: ColumnarData,
options?: SheetwriteStoreOptions,
);
acknowledgeOperations: (operations: readonly DocumentOp[]) => void;
aggregate: (sheet: SheetId, col: number, op: AggregateOp) => number;
applyTransaction: (
tx: Transaction,
reasonOrOptions?: CommitReason | TransactionApplicationOptions,
) => ApplyTransactionResult;
canApplyLocally: (patch: DocumentOp) => boolean;
captureRangeHistory: (input: Range) => CompactRangeHistory | null;
clearView: (sheet: SheetId) => void;
columnFilters: (sheet: SheetId) => ReadonlyMap<number, ColumnFilter>;
dataEdge: (
sheet: SheetId,
row: number,
col: number,
dRow: number,
dCol: number,
) => number;
dataRowAt: (sheet: SheetId, viewRow: number) => number;
dispose: () => void;
distinctValues: (
sheet: SheetId,
col: number,
limit?: number,
) => CellScalar[];
ensureColumns: (sheet: SheetId, columns: readonly Column[]) => void;
exportSnapshot: () => WorkbookSnapshot;
filterBy: (sheet: SheetId, col: number, needle: string) => void;
getCell: (addr: CellAddress) => ResolvedCell;
getCellLoadState: (addr: CellAddress) => CellLoadState;
getClipboardWindow: (
sheet: SheetId,
viewRows: {
start: number;
end: number;
},
cols: readonly number[],
) => ClipboardWindowView;
getDataWindow: (
sheet: SheetId,
rows: {
start: number;
end: number;
},
cols: readonly number[],
) => VisibleWindowView;
getFormula: (addr: CellAddress) => string | null;
getPagedStats: (sheet: SheetId) => PagedStoreStats;
getRangeMutationAllocationStats: () => RangeMutationAllocationStats;
getRefTarget: (addr: CellAddress) => CellAddress | null;
getVisibleWindow: (
sheet: SheetId,
rows: {
start: number;
end: number;
},
cols: readonly number[],
) => VisibleWindowView;
getWorkbook: () => Workbook;
groupRows: (sheet: SheetId, start: number, end: number) => void;
hasView: (sheet: SheetId) => boolean;
hiddenRows: (sheet: SheetId) => number[];
hideRows: (sheet: SheetId, rows: readonly number[]) => void;
isPaged: (sheet: SheetId) => boolean;
isRangeFullyLoaded: (input: Range) => boolean;
loadRows: (
sheet: SheetId,
start: number,
rows: readonly RowData[],
protect?: (addr: CellAddress) => boolean,
) => void;
on: (_evt: "change", fn: ChangeListener) => () => void;
queryCapability: (sheet: SheetId) => QueryCapability;
recalculateVolatile: (now?: Date) => void;
removeSheetFormulaIdentity: (sheet: SheetId) => boolean;
renameSheetFormulaIdentity: (sheet: SheetId, name: string) => boolean;
resetRangeMutationAllocationStats: () => void;
rowGroups: (sheet: SheetId) => readonly RowGroup[];
searchCells: (
sheet: SheetId,
query: string,
opts?: {
matchCase?: boolean;
wholeCell?: boolean;
columns?: number[];
},
) => CellAddress[];
searchCellsFlat: (
sheet: SheetId,
query: string,
opts?: {
matchCase?: boolean;
wholeCell?: boolean;
columns?: number[];
},
) => Uint32Array;
setColumnFilter: (
sheet: SheetId,
col: number,
filter: ColumnFilter | null,
) => void;
setGroupCollapsed: (
sheet: SheetId,
start: number,
collapsed: boolean,
) => void;
setProtectionResolver: (
resolver: ProtectionResolver | undefined,
mode?: MutationPolicyMode,
) => void;
showRows: (sheet: SheetId, rows?: readonly number[]) => void;
sortBy: (sheet: SheetId, col: number, ascending: boolean) => void;
sortByMulti: (sheet: SheetId, keys: readonly SortKey[]) => void;
ungroupRows: (sheet: SheetId, start: number, end: number) => void;
viewRowCount: (sheet: SheetId) => number;
viewRowOf: (sheet: SheetId, dataRow: number) => number | null;
static fromSnapshot: (
input: unknown,
options?: SheetwriteStoreOptions,
) => SheetwriteStore;
}