UndoRedo
Class
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 formula AST references
keyed by the LazilyTransformingAstService version at which the irreversible
transformation was applied. Each entry maps a version number to an array of
[cellAddress, ast] pairs. These references keep the original formulas available
independently of parser cache eviction, and are released when the snapshots expire.
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 hyperformula/src/UndoRedo.ts:506
Parameters:
| Name | Type |
|---|---|
config |
Config |
operations |
Operations |
Returns: UndoRedo
Properties
Section titled “Properties”oldData
Section titled “oldData”• oldData: Map‹number, [SimpleCellAddress, Ast][]› = new Map()
Defined in hyperformula/src/UndoRedo.ts:502
Methods
Section titled “Methods”beginBatchMode
Section titled “beginBatchMode”▸ beginBatchMode(): void
Defined in hyperformula/src/UndoRedo.ts:523
Returns: void
cleanupOrphanedOldData
Section titled “cleanupOrphanedOldData”▸ cleanupOrphanedOldData(): void
Defined in hyperformula/src/UndoRedo.ts:881
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 hyperformula/src/UndoRedo.ts:551
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 hyperformula/src/UndoRedo.ts:557
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 hyperformula/src/UndoRedo.ts:527
Returns: void
isRedoStackEmpty
Section titled “isRedoStackEmpty”▸ isRedoStackEmpty(): boolean
Defined in hyperformula/src/UndoRedo.ts:566
Returns: boolean
isUndoStackEmpty
Section titled “isUndoStackEmpty”▸ isUndoStackEmpty(): boolean
Defined in hyperformula/src/UndoRedo.ts:562
Returns: boolean
▸ redo(): void
Defined in hyperformula/src/UndoRedo.ts:757
Returns: void
redoAddColumns
Section titled “redoAddColumns”▸ redoAddColumns(operation: AddColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:809
Parameters:
| Name | Type |
|---|---|
operation |
AddColumnsUndoEntry |
Returns: void
redoAddNamedExpression
Section titled “redoAddNamedExpression”▸ redoAddNamedExpression(operation: AddNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:842
Parameters:
| Name | Type |
|---|---|
operation |
AddNamedExpressionUndoEntry |
Returns: void
redoAddRows
Section titled “redoAddRows”▸ redoAddRows(operation: AddRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:805
Parameters:
| Name | Type |
|---|---|
operation |
AddRowsUndoEntry |
Returns: void
redoAddSheet
Section titled “redoAddSheet”▸ redoAddSheet(operation: AddSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:817
Parameters:
| Name | Type |
|---|---|
operation |
AddSheetUndoEntry |
Returns: void
redoBatch
Section titled “redoBatch”▸ redoBatch(batchOperation: BatchUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:769
Parameters:
| Name | Type |
|---|---|
batchOperation |
BatchUndoEntry |
Returns: void
redoChangeNamedExpression
Section titled “redoChangeNamedExpression”▸ redoChangeNamedExpression(operation: ChangeNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:850
Parameters:
| Name | Type |
|---|---|
operation |
ChangeNamedExpressionUndoEntry |
Returns: void
redoClearSheet
Section titled “redoClearSheet”▸ redoClearSheet(operation: ClearSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:833
Parameters:
| Name | Type |
|---|---|
operation |
ClearSheetUndoEntry |
Returns: void
redoMoveCells
Section titled “redoMoveCells”▸ redoMoveCells(operation: MoveCellsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:779
Parameters:
| Name | Type |
|---|---|
operation |
MoveCellsUndoEntry |
Returns: void
redoMoveColumns
Section titled “redoMoveColumns”▸ redoMoveColumns(operation: MoveColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:829
Parameters:
| Name | Type |
|---|---|
operation |
MoveColumnsUndoEntry |
Returns: void
redoMoveRows
Section titled “redoMoveRows”▸ redoMoveRows(operation: MoveRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:825
Parameters:
| Name | Type |
|---|---|
operation |
MoveRowsUndoEntry |
Returns: void
redoPaste
Section titled “redoPaste”▸ redoPaste(operation: PasteUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:787
Parameters:
| Name | Type |
|---|---|
operation |
PasteUndoEntry |
Returns: void
redoRemoveColumns
Section titled “redoRemoveColumns”▸ redoRemoveColumns(operation: RemoveColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:783
Parameters:
| Name | Type |
|---|---|
operation |
RemoveColumnsUndoEntry |
Returns: void
redoRemoveNamedExpression
Section titled “redoRemoveNamedExpression”▸ redoRemoveNamedExpression(operation: RemoveNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:846
Parameters:
| Name | Type |
|---|---|
operation |
RemoveNamedExpressionUndoEntry |
Returns: void
redoRemoveRows
Section titled “redoRemoveRows”▸ redoRemoveRows(operation: RemoveRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:775
Parameters:
| Name | Type |
|---|---|
operation |
RemoveRowsUndoEntry |
Returns: void
redoRemoveSheet
Section titled “redoRemoveSheet”▸ redoRemoveSheet(operation: RemoveSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:813
Parameters:
| Name | Type |
|---|---|
operation |
RemoveSheetUndoEntry |
Returns: void
redoRenameSheet
Section titled “redoRenameSheet”▸ redoRenameSheet(operation: RenameSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:821
Parameters:
| Name | Type |
|---|---|
operation |
RenameSheetUndoEntry |
Returns: void
redoSetCellContents
Section titled “redoSetCellContents”▸ redoSetCellContents(operation: SetCellContentsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:799
Parameters:
| Name | Type |
|---|---|
operation |
SetCellContentsUndoEntry |
Returns: void
redoSetColumnOrder
Section titled “redoSetColumnOrder”▸ redoSetColumnOrder(operation: SetColumnOrderUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:858
Parameters:
| Name | Type |
|---|---|
operation |
SetColumnOrderUndoEntry |
Returns: void
redoSetRowOrder
Section titled “redoSetRowOrder”▸ redoSetRowOrder(operation: SetRowOrderUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:854
Parameters:
| Name | Type |
|---|---|
operation |
SetRowOrderUndoEntry |
Returns: void
redoSetSheetContent
Section titled “redoSetSheetContent”▸ redoSetSheetContent(operation: SetSheetContentUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:837
Parameters:
| Name | Type |
|---|---|
operation |
SetSheetContentUndoEntry |
Returns: void
saveOperation
Section titled “saveOperation”▸ saveOperation(operation: UndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:515
Parameters:
| Name | Type |
|---|---|
operation |
UndoEntry |
Returns: void
storeDataForVersion
Section titled “storeDataForVersion”▸ storeDataForVersion(version: number, address: SimpleCellAddress, ast: Ast): void
Defined in hyperformula/src/UndoRedo.ts:539
Retains a formula AST 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 |
ast |
Ast |
Returns: void
▸ undo(): void
Defined in hyperformula/src/UndoRedo.ts:570
Returns: void
undoAddColumns
Section titled “undoAddColumns”▸ undoAddColumns(operation: AddColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:627
Parameters:
| Name | Type |
|---|---|
operation |
AddColumnsUndoEntry |
Returns: void
undoAddNamedExpression
Section titled “undoAddNamedExpression”▸ undoAddNamedExpression(operation: AddNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:737
Parameters:
| Name | Type |
|---|---|
operation |
AddNamedExpressionUndoEntry |
Returns: void
undoAddRows
Section titled “undoAddRows”▸ undoAddRows(operation: AddRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:619
Parameters:
| Name | Type |
|---|---|
operation |
AddRowsUndoEntry |
Returns: void
undoAddSheet
Section titled “undoAddSheet”▸ undoAddSheet(operation: AddSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:679
Parameters:
| Name | Type |
|---|---|
operation |
AddSheetUndoEntry |
Returns: void
undoBatch
Section titled “undoBatch”▸ undoBatch(batchOperation: BatchUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:581
Parameters:
| Name | Type |
|---|---|
batchOperation |
BatchUndoEntry |
Returns: void
undoChangeNamedExpression
Section titled “undoChangeNamedExpression”▸ undoChangeNamedExpression(operation: ChangeNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:745
Parameters:
| Name | Type |
|---|---|
operation |
ChangeNamedExpressionUndoEntry |
Returns: void
undoClearSheet
Section titled “undoClearSheet”▸ undoClearSheet(operation: ClearSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:712
Parameters:
| Name | Type |
|---|---|
operation |
ClearSheetUndoEntry |
Returns: void
undoMoveCells
Section titled “undoMoveCells”▸ undoMoveCells(operation: MoveCellsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:667
Parameters:
| Name | Type |
|---|---|
operation |
MoveCellsUndoEntry |
Returns: void
undoMoveColumns
Section titled “undoMoveColumns”▸ undoMoveColumns(operation: MoveColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:660
Parameters:
| Name | Type |
|---|---|
operation |
MoveColumnsUndoEntry |
Returns: void
undoMoveRows
Section titled “undoMoveRows”▸ undoMoveRows(operation: MoveRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:653
Parameters:
| Name | Type |
|---|---|
operation |
MoveRowsUndoEntry |
Returns: void
undoPaste
Section titled “undoPaste”▸ undoPaste(operation: PasteUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:646
Parameters:
| Name | Type |
|---|---|
operation |
PasteUndoEntry |
Returns: void
undoRemoveColumns
Section titled “undoRemoveColumns”▸ undoRemoveColumns(operation: RemoveColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:603
Parameters:
| Name | Type |
|---|---|
operation |
RemoveColumnsUndoEntry |
Returns: void
undoRemoveNamedExpression
Section titled “undoRemoveNamedExpression”▸ undoRemoveNamedExpression(operation: RemoveNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:741
Parameters:
| Name | Type |
|---|---|
operation |
RemoveNamedExpressionUndoEntry |
Returns: void
undoRemoveRows
Section titled “undoRemoveRows”▸ undoRemoveRows(operation: RemoveRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:587
Parameters:
| Name | Type |
|---|---|
operation |
RemoveRowsUndoEntry |
Returns: void
undoRemoveSheet
Section titled “undoRemoveSheet”▸ undoRemoveSheet(operation: RemoveSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:684
Parameters:
| Name | Type |
|---|---|
operation |
RemoveSheetUndoEntry |
Returns: void
undoRenameSheet
Section titled “undoRenameSheet”▸ undoRenameSheet(operation: RenameSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:702
Parameters:
| Name | Type |
|---|---|
operation |
RenameSheetUndoEntry |
Returns: void
undoSetCellContents
Section titled “undoSetCellContents”▸ undoSetCellContents(operation: SetCellContentsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:635
Parameters:
| Name | Type |
|---|---|
operation |
SetCellContentsUndoEntry |
Returns: void
undoSetColumnOrder
Section titled “undoSetColumnOrder”▸ undoSetColumnOrder(operation: SetColumnOrderUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:753
Parameters:
| Name | Type |
|---|---|
operation |
SetColumnOrderUndoEntry |
Returns: void
undoSetRowOrder
Section titled “undoSetRowOrder”▸ undoSetRowOrder(operation: SetRowOrderUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:749
Parameters:
| Name | Type |
|---|---|
operation |
SetRowOrderUndoEntry |
Returns: void
undoSetSheetContent
Section titled “undoSetSheetContent”▸ undoSetSheetContent(operation: SetSheetContentUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:724
Parameters:
| Name | Type |
|---|---|
operation |
SetSheetContentUndoEntry |
Returns: void