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.
Memory Management
Section titled “Memory Management”Without cleanup, oldData grows indefinitely as undo entries are evicted but
their oldData keys remain. Three mechanisms prevent this:
- 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). - 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. - Short-circuit: When
undoLimitis 0 (undo disabled),storeDataForVersion()returns immediately to avoid storing data that would never be used.
Constructors
Section titled “Constructors”constructor
Section titled “constructor”+ new UndoRedo(config: Config, operations: Operations): UndoRedo
Defined in src/UndoRedo.ts:505
Parameters:
| Name | Type |
|---|---|
config | Config |
operations | Operations |
Returns: UndoRedo
Properties
Section titled “Properties”oldData
Section titled “oldData”• oldData: Map‹number, [SimpleCellAddress, string][]› = new Map()
Defined in src/UndoRedo.ts:501
Methods
Section titled “Methods”beginBatchMode
Section titled “beginBatchMode”▸ beginBatchMode(): void
Defined in src/UndoRedo.ts:522
Returns: void
cleanupOrphanedOldData
Section titled “cleanupOrphanedOldData”▸ 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
Section titled “clearRedoStack”▸ 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
Section titled “clearUndoStack”▸ 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
Section titled “commitBatchMode”▸ commitBatchMode(): void
Defined in src/UndoRedo.ts:526
Returns: void
isRedoStackEmpty
Section titled “isRedoStackEmpty”▸ isRedoStackEmpty(): boolean
Defined in src/UndoRedo.ts:565
Returns: boolean
isUndoStackEmpty
Section titled “isUndoStackEmpty”▸ isUndoStackEmpty(): boolean
Defined in src/UndoRedo.ts:561
Returns: boolean
▸ redo(): void
Defined in src/UndoRedo.ts:756
Returns: void
redoAddColumns
Section titled “redoAddColumns”▸ redoAddColumns(operation: AddColumnsUndoEntry): void
Defined in src/UndoRedo.ts:808
Parameters:
| Name | Type |
|---|---|
operation | AddColumnsUndoEntry |
Returns: void
redoAddNamedExpression
Section titled “redoAddNamedExpression”▸ redoAddNamedExpression(operation: AddNamedExpressionUndoEntry): void
Defined in src/UndoRedo.ts:841
Parameters:
| Name | Type |
|---|---|
operation | AddNamedExpressionUndoEntry |
Returns: void
redoAddRows
Section titled “redoAddRows”▸ redoAddRows(operation: AddRowsUndoEntry): void
Defined in src/UndoRedo.ts:804
Parameters:
| Name | Type |
|---|---|
operation | AddRowsUndoEntry |
Returns: void
redoAddSheet
Section titled “redoAddSheet”▸ redoAddSheet(operation: AddSheetUndoEntry): void
Defined in src/UndoRedo.ts:816
Parameters:
| Name | Type |
|---|---|
operation | AddSheetUndoEntry |
Returns: void
redoBatch
Section titled “redoBatch”▸ redoBatch(batchOperation: BatchUndoEntry): void
Defined in src/UndoRedo.ts:768
Parameters:
| Name | Type |
|---|---|
batchOperation | BatchUndoEntry |
Returns: void
redoChangeNamedExpression
Section titled “redoChangeNamedExpression”▸ redoChangeNamedExpression(operation: ChangeNamedExpressionUndoEntry): void
Defined in src/UndoRedo.ts:849
Parameters:
| Name | Type |
|---|---|
operation | ChangeNamedExpressionUndoEntry |
Returns: void
redoClearSheet
Section titled “redoClearSheet”▸ redoClearSheet(operation: ClearSheetUndoEntry): void
Defined in src/UndoRedo.ts:832
Parameters:
| Name | Type |
|---|---|
operation | ClearSheetUndoEntry |
Returns: void
redoMoveCells
Section titled “redoMoveCells”▸ redoMoveCells(operation: MoveCellsUndoEntry): void
Defined in src/UndoRedo.ts:778
Parameters:
| Name | Type |
|---|---|
operation | MoveCellsUndoEntry |
Returns: void
redoMoveColumns
Section titled “redoMoveColumns”▸ redoMoveColumns(operation: MoveColumnsUndoEntry): void
Defined in src/UndoRedo.ts:828
Parameters:
| Name | Type |
|---|---|
operation | MoveColumnsUndoEntry |
Returns: void
redoMoveRows
Section titled “redoMoveRows”▸ redoMoveRows(operation: MoveRowsUndoEntry): void
Defined in src/UndoRedo.ts:824
Parameters:
| Name | Type |
|---|---|
operation | MoveRowsUndoEntry |
Returns: void
redoPaste
Section titled “redoPaste”▸ redoPaste(operation: PasteUndoEntry): void
Defined in src/UndoRedo.ts:786
Parameters:
| Name | Type |
|---|---|
operation | PasteUndoEntry |
Returns: void
redoRemoveColumns
Section titled “redoRemoveColumns”▸ redoRemoveColumns(operation: RemoveColumnsUndoEntry): void
Defined in src/UndoRedo.ts:782
Parameters:
| Name | Type |
|---|---|
operation | RemoveColumnsUndoEntry |
Returns: void
redoRemoveNamedExpression
Section titled “redoRemoveNamedExpression”▸ redoRemoveNamedExpression(operation: RemoveNamedExpressionUndoEntry): void
Defined in src/UndoRedo.ts:845
Parameters:
| Name | Type |
|---|---|
operation | RemoveNamedExpressionUndoEntry |
Returns: void
redoRemoveRows
Section titled “redoRemoveRows”▸ redoRemoveRows(operation: RemoveRowsUndoEntry): void
Defined in src/UndoRedo.ts:774
Parameters:
| Name | Type |
|---|---|
operation | RemoveRowsUndoEntry |
Returns: void
redoRemoveSheet
Section titled “redoRemoveSheet”▸ redoRemoveSheet(operation: RemoveSheetUndoEntry): void
Defined in src/UndoRedo.ts:812
Parameters:
| Name | Type |
|---|---|
operation | RemoveSheetUndoEntry |
Returns: void
redoRenameSheet
Section titled “redoRenameSheet”▸ redoRenameSheet(operation: RenameSheetUndoEntry): void
Defined in src/UndoRedo.ts:820
Parameters:
| Name | Type |
|---|---|
operation | RenameSheetUndoEntry |
Returns: void
redoSetCellContents
Section titled “redoSetCellContents”▸ redoSetCellContents(operation: SetCellContentsUndoEntry): void
Defined in src/UndoRedo.ts:798
Parameters:
| Name | Type |
|---|---|
operation | SetCellContentsUndoEntry |
Returns: void
redoSetColumnOrder
Section titled “redoSetColumnOrder”▸ redoSetColumnOrder(operation: SetColumnOrderUndoEntry): void
Defined in src/UndoRedo.ts:857
Parameters:
| Name | Type |
|---|---|
operation | SetColumnOrderUndoEntry |
Returns: void
redoSetRowOrder
Section titled “redoSetRowOrder”▸ redoSetRowOrder(operation: SetRowOrderUndoEntry): void
Defined in src/UndoRedo.ts:853
Parameters:
| Name | Type |
|---|---|
operation | SetRowOrderUndoEntry |
Returns: void
redoSetSheetContent
Section titled “redoSetSheetContent”▸ redoSetSheetContent(operation: SetSheetContentUndoEntry): void
Defined in src/UndoRedo.ts:836
Parameters:
| Name | Type |
|---|---|
operation | SetSheetContentUndoEntry |
Returns: void
saveOperation
Section titled “saveOperation”▸ saveOperation(operation: UndoEntry): void
Defined in src/UndoRedo.ts:514
Parameters:
| Name | Type |
|---|---|
operation | UndoEntry |
Returns: void
storeDataForVersion
Section titled “storeDataForVersion”▸ 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:
| Name | Type |
|---|---|
version | number |
address | SimpleCellAddress |
astHash | string |
Returns: void
▸ undo(): void
Defined in src/UndoRedo.ts:569
Returns: void
undoAddColumns
Section titled “undoAddColumns”▸ undoAddColumns(operation: AddColumnsUndoEntry): void
Defined in src/UndoRedo.ts:626
Parameters:
| Name | Type |
|---|---|
operation | AddColumnsUndoEntry |
Returns: void
undoAddNamedExpression
Section titled “undoAddNamedExpression”▸ undoAddNamedExpression(operation: AddNamedExpressionUndoEntry): void
Defined in src/UndoRedo.ts:736
Parameters:
| Name | Type |
|---|---|
operation | AddNamedExpressionUndoEntry |
Returns: void
undoAddRows
Section titled “undoAddRows”▸ undoAddRows(operation: AddRowsUndoEntry): void
Defined in src/UndoRedo.ts:618
Parameters:
| Name | Type |
|---|---|
operation | AddRowsUndoEntry |
Returns: void
undoAddSheet
Section titled “undoAddSheet”▸ undoAddSheet(operation: AddSheetUndoEntry): void
Defined in src/UndoRedo.ts:678
Parameters:
| Name | Type |
|---|---|
operation | AddSheetUndoEntry |
Returns: void
undoBatch
Section titled “undoBatch”▸ undoBatch(batchOperation: BatchUndoEntry): void
Defined in src/UndoRedo.ts:580
Parameters:
| Name | Type |
|---|---|
batchOperation | BatchUndoEntry |
Returns: void
undoChangeNamedExpression
Section titled “undoChangeNamedExpression”▸ undoChangeNamedExpression(operation: ChangeNamedExpressionUndoEntry): void
Defined in src/UndoRedo.ts:744
Parameters:
| Name | Type |
|---|---|
operation | ChangeNamedExpressionUndoEntry |
Returns: void
undoClearSheet
Section titled “undoClearSheet”▸ undoClearSheet(operation: ClearSheetUndoEntry): void
Defined in src/UndoRedo.ts:711
Parameters:
| Name | Type |
|---|---|
operation | ClearSheetUndoEntry |
Returns: void
undoMoveCells
Section titled “undoMoveCells”▸ undoMoveCells(operation: MoveCellsUndoEntry): void
Defined in src/UndoRedo.ts:666
Parameters:
| Name | Type |
|---|---|
operation | MoveCellsUndoEntry |
Returns: void
undoMoveColumns
Section titled “undoMoveColumns”▸ undoMoveColumns(operation: MoveColumnsUndoEntry): void
Defined in src/UndoRedo.ts:659
Parameters:
| Name | Type |
|---|---|
operation | MoveColumnsUndoEntry |
Returns: void
undoMoveRows
Section titled “undoMoveRows”▸ undoMoveRows(operation: MoveRowsUndoEntry): void
Defined in src/UndoRedo.ts:652
Parameters:
| Name | Type |
|---|---|
operation | MoveRowsUndoEntry |
Returns: void
undoPaste
Section titled “undoPaste”▸ undoPaste(operation: PasteUndoEntry): void
Defined in src/UndoRedo.ts:645
Parameters:
| Name | Type |
|---|---|
operation | PasteUndoEntry |
Returns: void
undoRemoveColumns
Section titled “undoRemoveColumns”▸ undoRemoveColumns(operation: RemoveColumnsUndoEntry): void
Defined in src/UndoRedo.ts:602
Parameters:
| Name | Type |
|---|---|
operation | RemoveColumnsUndoEntry |
Returns: void
undoRemoveNamedExpression
Section titled “undoRemoveNamedExpression”▸ undoRemoveNamedExpression(operation: RemoveNamedExpressionUndoEntry): void
Defined in src/UndoRedo.ts:740
Parameters:
| Name | Type |
|---|---|
operation | RemoveNamedExpressionUndoEntry |
Returns: void
undoRemoveRows
Section titled “undoRemoveRows”▸ undoRemoveRows(operation: RemoveRowsUndoEntry): void
Defined in src/UndoRedo.ts:586
Parameters:
| Name | Type |
|---|---|
operation | RemoveRowsUndoEntry |
Returns: void
undoRemoveSheet
Section titled “undoRemoveSheet”▸ undoRemoveSheet(operation: RemoveSheetUndoEntry): void
Defined in src/UndoRedo.ts:683
Parameters:
| Name | Type |
|---|---|
operation | RemoveSheetUndoEntry |
Returns: void
undoRenameSheet
Section titled “undoRenameSheet”▸ undoRenameSheet(operation: RenameSheetUndoEntry): void
Defined in src/UndoRedo.ts:701
Parameters:
| Name | Type |
|---|---|
operation | RenameSheetUndoEntry |
Returns: void
undoSetCellContents
Section titled “undoSetCellContents”▸ undoSetCellContents(operation: SetCellContentsUndoEntry): void
Defined in src/UndoRedo.ts:634
Parameters:
| Name | Type |
|---|---|
operation | SetCellContentsUndoEntry |
Returns: void
undoSetColumnOrder
Section titled “undoSetColumnOrder”▸ undoSetColumnOrder(operation: SetColumnOrderUndoEntry): void
Defined in src/UndoRedo.ts:752
Parameters:
| Name | Type |
|---|---|
operation | SetColumnOrderUndoEntry |
Returns: void
undoSetRowOrder
Section titled “undoSetRowOrder”▸ undoSetRowOrder(operation: SetRowOrderUndoEntry): void
Defined in src/UndoRedo.ts:748
Parameters:
| Name | Type |
|---|---|
operation | SetRowOrderUndoEntry |
Returns: void
undoSetSheetContent
Section titled “undoSetSheetContent”▸ undoSetSheetContent(operation: SetSheetContentUndoEntry): void
Defined in src/UndoRedo.ts:723
Parameters:
| Name | Type |
|---|---|
operation | SetSheetContentUndoEntry |
Returns: void