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 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 hyperformula/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 hyperformula/src/UndoRedo.ts:501
Methods
Section titled “Methods”beginBatchMode
Section titled “beginBatchMode”▸ beginBatchMode(): void
Defined in hyperformula/src/UndoRedo.ts:522
Returns: void
cleanupOrphanedOldData
Section titled “cleanupOrphanedOldData”▸ cleanupOrphanedOldData(): void
Defined in hyperformula/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 hyperformula/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 hyperformula/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 hyperformula/src/UndoRedo.ts:526
Returns: void
isRedoStackEmpty
Section titled “isRedoStackEmpty”▸ isRedoStackEmpty(): boolean
Defined in hyperformula/src/UndoRedo.ts:565
Returns: boolean
isUndoStackEmpty
Section titled “isUndoStackEmpty”▸ isUndoStackEmpty(): boolean
Defined in hyperformula/src/UndoRedo.ts:561
Returns: boolean
▸ redo(): void
Defined in hyperformula/src/UndoRedo.ts:756
Returns: void
redoAddColumns
Section titled “redoAddColumns”▸ redoAddColumns(operation: AddColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:808
Parameters:
| Name | Type |
|---|---|
operation |
AddColumnsUndoEntry |
Returns: void
redoAddNamedExpression
Section titled “redoAddNamedExpression”▸ redoAddNamedExpression(operation: AddNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:841
Parameters:
| Name | Type |
|---|---|
operation |
AddNamedExpressionUndoEntry |
Returns: void
redoAddRows
Section titled “redoAddRows”▸ redoAddRows(operation: AddRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:804
Parameters:
| Name | Type |
|---|---|
operation |
AddRowsUndoEntry |
Returns: void
redoAddSheet
Section titled “redoAddSheet”▸ redoAddSheet(operation: AddSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:816
Parameters:
| Name | Type |
|---|---|
operation |
AddSheetUndoEntry |
Returns: void
redoBatch
Section titled “redoBatch”▸ redoBatch(batchOperation: BatchUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:768
Parameters:
| Name | Type |
|---|---|
batchOperation |
BatchUndoEntry |
Returns: void
redoChangeNamedExpression
Section titled “redoChangeNamedExpression”▸ redoChangeNamedExpression(operation: ChangeNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:849
Parameters:
| Name | Type |
|---|---|
operation |
ChangeNamedExpressionUndoEntry |
Returns: void
redoClearSheet
Section titled “redoClearSheet”▸ redoClearSheet(operation: ClearSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:832
Parameters:
| Name | Type |
|---|---|
operation |
ClearSheetUndoEntry |
Returns: void
redoMoveCells
Section titled “redoMoveCells”▸ redoMoveCells(operation: MoveCellsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:778
Parameters:
| Name | Type |
|---|---|
operation |
MoveCellsUndoEntry |
Returns: void
redoMoveColumns
Section titled “redoMoveColumns”▸ redoMoveColumns(operation: MoveColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:828
Parameters:
| Name | Type |
|---|---|
operation |
MoveColumnsUndoEntry |
Returns: void
redoMoveRows
Section titled “redoMoveRows”▸ redoMoveRows(operation: MoveRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:824
Parameters:
| Name | Type |
|---|---|
operation |
MoveRowsUndoEntry |
Returns: void
redoPaste
Section titled “redoPaste”▸ redoPaste(operation: PasteUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:786
Parameters:
| Name | Type |
|---|---|
operation |
PasteUndoEntry |
Returns: void
redoRemoveColumns
Section titled “redoRemoveColumns”▸ redoRemoveColumns(operation: RemoveColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:782
Parameters:
| Name | Type |
|---|---|
operation |
RemoveColumnsUndoEntry |
Returns: void
redoRemoveNamedExpression
Section titled “redoRemoveNamedExpression”▸ redoRemoveNamedExpression(operation: RemoveNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:845
Parameters:
| Name | Type |
|---|---|
operation |
RemoveNamedExpressionUndoEntry |
Returns: void
redoRemoveRows
Section titled “redoRemoveRows”▸ redoRemoveRows(operation: RemoveRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:774
Parameters:
| Name | Type |
|---|---|
operation |
RemoveRowsUndoEntry |
Returns: void
redoRemoveSheet
Section titled “redoRemoveSheet”▸ redoRemoveSheet(operation: RemoveSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:812
Parameters:
| Name | Type |
|---|---|
operation |
RemoveSheetUndoEntry |
Returns: void
redoRenameSheet
Section titled “redoRenameSheet”▸ redoRenameSheet(operation: RenameSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:820
Parameters:
| Name | Type |
|---|---|
operation |
RenameSheetUndoEntry |
Returns: void
redoSetCellContents
Section titled “redoSetCellContents”▸ redoSetCellContents(operation: SetCellContentsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:798
Parameters:
| Name | Type |
|---|---|
operation |
SetCellContentsUndoEntry |
Returns: void
redoSetColumnOrder
Section titled “redoSetColumnOrder”▸ redoSetColumnOrder(operation: SetColumnOrderUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:857
Parameters:
| Name | Type |
|---|---|
operation |
SetColumnOrderUndoEntry |
Returns: void
redoSetRowOrder
Section titled “redoSetRowOrder”▸ redoSetRowOrder(operation: SetRowOrderUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:853
Parameters:
| Name | Type |
|---|---|
operation |
SetRowOrderUndoEntry |
Returns: void
redoSetSheetContent
Section titled “redoSetSheetContent”▸ redoSetSheetContent(operation: SetSheetContentUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:836
Parameters:
| Name | Type |
|---|---|
operation |
SetSheetContentUndoEntry |
Returns: void
saveOperation
Section titled “saveOperation”▸ saveOperation(operation: UndoEntry): void
Defined in hyperformula/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 hyperformula/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 hyperformula/src/UndoRedo.ts:569
Returns: void
undoAddColumns
Section titled “undoAddColumns”▸ undoAddColumns(operation: AddColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:626
Parameters:
| Name | Type |
|---|---|
operation |
AddColumnsUndoEntry |
Returns: void
undoAddNamedExpression
Section titled “undoAddNamedExpression”▸ undoAddNamedExpression(operation: AddNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:736
Parameters:
| Name | Type |
|---|---|
operation |
AddNamedExpressionUndoEntry |
Returns: void
undoAddRows
Section titled “undoAddRows”▸ undoAddRows(operation: AddRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:618
Parameters:
| Name | Type |
|---|---|
operation |
AddRowsUndoEntry |
Returns: void
undoAddSheet
Section titled “undoAddSheet”▸ undoAddSheet(operation: AddSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:678
Parameters:
| Name | Type |
|---|---|
operation |
AddSheetUndoEntry |
Returns: void
undoBatch
Section titled “undoBatch”▸ undoBatch(batchOperation: BatchUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:580
Parameters:
| Name | Type |
|---|---|
batchOperation |
BatchUndoEntry |
Returns: void
undoChangeNamedExpression
Section titled “undoChangeNamedExpression”▸ undoChangeNamedExpression(operation: ChangeNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:744
Parameters:
| Name | Type |
|---|---|
operation |
ChangeNamedExpressionUndoEntry |
Returns: void
undoClearSheet
Section titled “undoClearSheet”▸ undoClearSheet(operation: ClearSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:711
Parameters:
| Name | Type |
|---|---|
operation |
ClearSheetUndoEntry |
Returns: void
undoMoveCells
Section titled “undoMoveCells”▸ undoMoveCells(operation: MoveCellsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:666
Parameters:
| Name | Type |
|---|---|
operation |
MoveCellsUndoEntry |
Returns: void
undoMoveColumns
Section titled “undoMoveColumns”▸ undoMoveColumns(operation: MoveColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:659
Parameters:
| Name | Type |
|---|---|
operation |
MoveColumnsUndoEntry |
Returns: void
undoMoveRows
Section titled “undoMoveRows”▸ undoMoveRows(operation: MoveRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:652
Parameters:
| Name | Type |
|---|---|
operation |
MoveRowsUndoEntry |
Returns: void
undoPaste
Section titled “undoPaste”▸ undoPaste(operation: PasteUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:645
Parameters:
| Name | Type |
|---|---|
operation |
PasteUndoEntry |
Returns: void
undoRemoveColumns
Section titled “undoRemoveColumns”▸ undoRemoveColumns(operation: RemoveColumnsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:602
Parameters:
| Name | Type |
|---|---|
operation |
RemoveColumnsUndoEntry |
Returns: void
undoRemoveNamedExpression
Section titled “undoRemoveNamedExpression”▸ undoRemoveNamedExpression(operation: RemoveNamedExpressionUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:740
Parameters:
| Name | Type |
|---|---|
operation |
RemoveNamedExpressionUndoEntry |
Returns: void
undoRemoveRows
Section titled “undoRemoveRows”▸ undoRemoveRows(operation: RemoveRowsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:586
Parameters:
| Name | Type |
|---|---|
operation |
RemoveRowsUndoEntry |
Returns: void
undoRemoveSheet
Section titled “undoRemoveSheet”▸ undoRemoveSheet(operation: RemoveSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:683
Parameters:
| Name | Type |
|---|---|
operation |
RemoveSheetUndoEntry |
Returns: void
undoRenameSheet
Section titled “undoRenameSheet”▸ undoRenameSheet(operation: RenameSheetUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:701
Parameters:
| Name | Type |
|---|---|
operation |
RenameSheetUndoEntry |
Returns: void
undoSetCellContents
Section titled “undoSetCellContents”▸ undoSetCellContents(operation: SetCellContentsUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:634
Parameters:
| Name | Type |
|---|---|
operation |
SetCellContentsUndoEntry |
Returns: void
undoSetColumnOrder
Section titled “undoSetColumnOrder”▸ undoSetColumnOrder(operation: SetColumnOrderUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:752
Parameters:
| Name | Type |
|---|---|
operation |
SetColumnOrderUndoEntry |
Returns: void
undoSetRowOrder
Section titled “undoSetRowOrder”▸ undoSetRowOrder(operation: SetRowOrderUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:748
Parameters:
| Name | Type |
|---|---|
operation |
SetRowOrderUndoEntry |
Returns: void
undoSetSheetContent
Section titled “undoSetSheetContent”▸ undoSetSheetContent(operation: SetSheetContentUndoEntry): void
Defined in hyperformula/src/UndoRedo.ts:723
Parameters:
| Name | Type |
|---|---|
operation |
SetSheetContentUndoEntry |
Returns: void