Skip to content
v3.3.0

UndoRedo

Manages undo/redo stacks for all spreadsheet operations.

oldData: Preserving Formula ASTs Across Irreversible Transformations

Section titled “oldData: Preserving Formula ASTs Across Irreversible Transformations”

Some structural operations (e.g., removing rows/columns, moving cells) destroy formula information that cannot be reconstructed from the transformation alone. For example, when a row is removed, formulas referencing that row are rewritten to #REF! — an irreversible change.

To support undo of such operations, oldData stores snapshots of formula AST hashes keyed by the LazilyTransformingAstService version at which the irreversible transformation was applied. Each entry maps a version number to an array of [cellAddress, astHash] pairs that can be used to restore the original formula from the parser cache.

Without cleanup, oldData grows indefinitely as undo entries are evicted but their oldData keys remain. Three mechanisms prevent this:

  1. Eviction cleanup: When undo entries are evicted (due to undoLimit), cleanupOldDataForEntries() deletes their referenced oldData keys (unless still needed by entries on the other stack).
  2. Orphan cleanup: Compaction may force lazy formula evaluation, which writes new oldData entries for already-evicted undo entries. After compaction, cleanupOrphanedOldData() removes any keys not referenced by entries on either stack or the in-progress batch.
  3. Short-circuit: When undoLimit is 0 (undo disabled), storeDataForVersion() returns immediately to avoid storing data that would never be used.

+ new UndoRedo(config: Config, operations: Operations): UndoRedo

Defined in src/UndoRedo.ts:505

Parameters:

NameType
configConfig
operationsOperations

Returns: UndoRedo

oldData: Map‹number, [SimpleCellAddress, string][]› = new Map()

Defined in src/UndoRedo.ts:501

beginBatchMode(): void

Defined in src/UndoRedo.ts:522

Returns: void


cleanupOrphanedOldData(): void

Defined in src/UndoRedo.ts:880

Removes oldData entries whose version keys are not referenced by any entry on the undo stack, redo stack, or in-progress batch. Called after compaction forces lazy formula evaluation, which may insert oldData for already-evicted entries.

Returns: void


clearRedoStack(): void

Defined in src/UndoRedo.ts:550

Clears the redo stack and removes oldData entries no longer referenced by any remaining entry.

Returns: void


clearUndoStack(): void

Defined in src/UndoRedo.ts:556

Clears the undo stack and removes oldData entries no longer referenced by any remaining entry.

Returns: void


commitBatchMode(): void

Defined in src/UndoRedo.ts:526

Returns: void


isRedoStackEmpty(): boolean

Defined in src/UndoRedo.ts:565

Returns: boolean


isUndoStackEmpty(): boolean

Defined in src/UndoRedo.ts:561

Returns: boolean


redo(): void

Defined in src/UndoRedo.ts:756

Returns: void


redoAddColumns(operation: AddColumnsUndoEntry): void

Defined in src/UndoRedo.ts:808

Parameters:

NameType
operationAddColumnsUndoEntry

Returns: void


redoAddNamedExpression(operation: AddNamedExpressionUndoEntry): void

Defined in src/UndoRedo.ts:841

Parameters:

NameType
operationAddNamedExpressionUndoEntry

Returns: void


redoAddRows(operation: AddRowsUndoEntry): void

Defined in src/UndoRedo.ts:804

Parameters:

NameType
operationAddRowsUndoEntry

Returns: void


redoAddSheet(operation: AddSheetUndoEntry): void

Defined in src/UndoRedo.ts:816

Parameters:

NameType
operationAddSheetUndoEntry

Returns: void


redoBatch(batchOperation: BatchUndoEntry): void

Defined in src/UndoRedo.ts:768

Parameters:

NameType
batchOperationBatchUndoEntry

Returns: void


redoChangeNamedExpression(operation: ChangeNamedExpressionUndoEntry): void

Defined in src/UndoRedo.ts:849

Parameters:

NameType
operationChangeNamedExpressionUndoEntry

Returns: void


redoClearSheet(operation: ClearSheetUndoEntry): void

Defined in src/UndoRedo.ts:832

Parameters:

NameType
operationClearSheetUndoEntry

Returns: void


redoMoveCells(operation: MoveCellsUndoEntry): void

Defined in src/UndoRedo.ts:778

Parameters:

NameType
operationMoveCellsUndoEntry

Returns: void


redoMoveColumns(operation: MoveColumnsUndoEntry): void

Defined in src/UndoRedo.ts:828

Parameters:

NameType
operationMoveColumnsUndoEntry

Returns: void


redoMoveRows(operation: MoveRowsUndoEntry): void

Defined in src/UndoRedo.ts:824

Parameters:

NameType
operationMoveRowsUndoEntry

Returns: void


redoPaste(operation: PasteUndoEntry): void

Defined in src/UndoRedo.ts:786

Parameters:

NameType
operationPasteUndoEntry

Returns: void


redoRemoveColumns(operation: RemoveColumnsUndoEntry): void

Defined in src/UndoRedo.ts:782

Parameters:

NameType
operationRemoveColumnsUndoEntry

Returns: void


redoRemoveNamedExpression(operation: RemoveNamedExpressionUndoEntry): void

Defined in src/UndoRedo.ts:845

Parameters:

NameType
operationRemoveNamedExpressionUndoEntry

Returns: void


redoRemoveRows(operation: RemoveRowsUndoEntry): void

Defined in src/UndoRedo.ts:774

Parameters:

NameType
operationRemoveRowsUndoEntry

Returns: void


redoRemoveSheet(operation: RemoveSheetUndoEntry): void

Defined in src/UndoRedo.ts:812

Parameters:

NameType
operationRemoveSheetUndoEntry

Returns: void


redoRenameSheet(operation: RenameSheetUndoEntry): void

Defined in src/UndoRedo.ts:820

Parameters:

NameType
operationRenameSheetUndoEntry

Returns: void


redoSetCellContents(operation: SetCellContentsUndoEntry): void

Defined in src/UndoRedo.ts:798

Parameters:

NameType
operationSetCellContentsUndoEntry

Returns: void


redoSetColumnOrder(operation: SetColumnOrderUndoEntry): void

Defined in src/UndoRedo.ts:857

Parameters:

NameType
operationSetColumnOrderUndoEntry

Returns: void


redoSetRowOrder(operation: SetRowOrderUndoEntry): void

Defined in src/UndoRedo.ts:853

Parameters:

NameType
operationSetRowOrderUndoEntry

Returns: void


redoSetSheetContent(operation: SetSheetContentUndoEntry): void

Defined in src/UndoRedo.ts:836

Parameters:

NameType
operationSetSheetContentUndoEntry

Returns: void


saveOperation(operation: UndoEntry): void

Defined in src/UndoRedo.ts:514

Parameters:

NameType
operationUndoEntry

Returns: void


storeDataForVersion(version: number, address: SimpleCellAddress, astHash: string): void

Defined in src/UndoRedo.ts:538

Stores a formula AST hash snapshot for the given LazilyTransformingAstService version. Skipped when undoLimit is 0 (undo disabled) to avoid storing data that would never be used.

Parameters:

NameType
versionnumber
addressSimpleCellAddress
astHashstring

Returns: void


undo(): void

Defined in src/UndoRedo.ts:569

Returns: void


undoAddColumns(operation: AddColumnsUndoEntry): void

Defined in src/UndoRedo.ts:626

Parameters:

NameType
operationAddColumnsUndoEntry

Returns: void


undoAddNamedExpression(operation: AddNamedExpressionUndoEntry): void

Defined in src/UndoRedo.ts:736

Parameters:

NameType
operationAddNamedExpressionUndoEntry

Returns: void


undoAddRows(operation: AddRowsUndoEntry): void

Defined in src/UndoRedo.ts:618

Parameters:

NameType
operationAddRowsUndoEntry

Returns: void


undoAddSheet(operation: AddSheetUndoEntry): void

Defined in src/UndoRedo.ts:678

Parameters:

NameType
operationAddSheetUndoEntry

Returns: void


undoBatch(batchOperation: BatchUndoEntry): void

Defined in src/UndoRedo.ts:580

Parameters:

NameType
batchOperationBatchUndoEntry

Returns: void


undoChangeNamedExpression(operation: ChangeNamedExpressionUndoEntry): void

Defined in src/UndoRedo.ts:744

Parameters:

NameType
operationChangeNamedExpressionUndoEntry

Returns: void


undoClearSheet(operation: ClearSheetUndoEntry): void

Defined in src/UndoRedo.ts:711

Parameters:

NameType
operationClearSheetUndoEntry

Returns: void


undoMoveCells(operation: MoveCellsUndoEntry): void

Defined in src/UndoRedo.ts:666

Parameters:

NameType
operationMoveCellsUndoEntry

Returns: void


undoMoveColumns(operation: MoveColumnsUndoEntry): void

Defined in src/UndoRedo.ts:659

Parameters:

NameType
operationMoveColumnsUndoEntry

Returns: void


undoMoveRows(operation: MoveRowsUndoEntry): void

Defined in src/UndoRedo.ts:652

Parameters:

NameType
operationMoveRowsUndoEntry

Returns: void


undoPaste(operation: PasteUndoEntry): void

Defined in src/UndoRedo.ts:645

Parameters:

NameType
operationPasteUndoEntry

Returns: void


undoRemoveColumns(operation: RemoveColumnsUndoEntry): void

Defined in src/UndoRedo.ts:602

Parameters:

NameType
operationRemoveColumnsUndoEntry

Returns: void


undoRemoveNamedExpression(operation: RemoveNamedExpressionUndoEntry): void

Defined in src/UndoRedo.ts:740

Parameters:

NameType
operationRemoveNamedExpressionUndoEntry

Returns: void


undoRemoveRows(operation: RemoveRowsUndoEntry): void

Defined in src/UndoRedo.ts:586

Parameters:

NameType
operationRemoveRowsUndoEntry

Returns: void


undoRemoveSheet(operation: RemoveSheetUndoEntry): void

Defined in src/UndoRedo.ts:683

Parameters:

NameType
operationRemoveSheetUndoEntry

Returns: void


undoRenameSheet(operation: RenameSheetUndoEntry): void

Defined in src/UndoRedo.ts:701

Parameters:

NameType
operationRenameSheetUndoEntry

Returns: void


undoSetCellContents(operation: SetCellContentsUndoEntry): void

Defined in src/UndoRedo.ts:634

Parameters:

NameType
operationSetCellContentsUndoEntry

Returns: void


undoSetColumnOrder(operation: SetColumnOrderUndoEntry): void

Defined in src/UndoRedo.ts:752

Parameters:

NameType
operationSetColumnOrderUndoEntry

Returns: void


undoSetRowOrder(operation: SetRowOrderUndoEntry): void

Defined in src/UndoRedo.ts:748

Parameters:

NameType
operationSetRowOrderUndoEntry

Returns: void


undoSetSheetContent(operation: SetSheetContentUndoEntry): void

Defined in src/UndoRedo.ts:723

Parameters:

NameType
operationSetSheetContentUndoEntry

Returns: void