@ricsam/formula-engine 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -520,11 +520,11 @@ class AddSheetCommand {
520
520
  const resourceKey = import_resource_keys.getSheetResourceKey(this.opts);
521
521
  this.executeFootprint = {
522
522
  touchedCells: [],
523
- resourceKeys: [resourceKey, import_resource_keys.getWorkbookResourceKey(this.opts.workbookName)]
523
+ resourceKeys: [resourceKey]
524
524
  };
525
525
  this.undoFootprint = {
526
526
  touchedCells: [],
527
- resourceKeys: [resourceKey, import_resource_keys.getWorkbookResourceKey(this.opts.workbookName)],
527
+ resourceKeys: [resourceKey],
528
528
  removedScopes: [{ type: "sheet", ...this.opts }]
529
529
  };
530
530
  }
@@ -693,4 +693,4 @@ class RenameSheetCommand {
693
693
  }
694
694
  }
695
695
 
696
- //# debugId=C8800F36A772754F64756E2164756E21
696
+ //# debugId=9D7106D25079DB6D64756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/core/commands/structure-commands.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Structure Commands - Commands that modify workbook/sheet structure\n *\n * These commands all require re-evaluation after execution.\n */\n\nimport type { SchemaManager } from \"../managers/schema-manager.cjs\";\nimport type { NamedExpressionManager } from \"../managers/named-expression-manager.cjs\";\nimport type { ReferenceManager } from \"../managers/reference-manager.cjs\";\nimport type { StyleManager } from \"../managers/style-manager.cjs\";\nimport type { TableManager } from \"../managers/table-manager.cjs\";\nimport type { WorkbookManager } from \"../managers/workbook-manager.cjs\";\nimport type {\n CellAddress,\n ConditionalStyle,\n DirectCellStyle,\n NamedExpression,\n Sheet,\n TableDefinition,\n Workbook,\n} from \"../types.cjs\";\nimport type {\n EngineAction,\n EngineCommand,\n MutationInvalidation,\n} from \"./types.cjs\";\nimport { ActionTypes, emptyMutationInvalidation } from \"./types.cjs\";\nimport {\n getNamedExpressionResourceKey,\n getSheetResourceKey,\n getTableResourceKey,\n getWorkbookResourceKey,\n} from \"../resource-keys.cjs\";\n\n/**\n * Dependencies needed for structure commands.\n */\nexport interface StructureCommandDeps {\n workbookManager: WorkbookManager;\n namedExpressionManager: NamedExpressionManager;\n tableManager: TableManager;\n styleManager: StyleManager;\n referenceManager: ReferenceManager;\n apiSchemaManager: SchemaManager;\n renameSheetInFormula: (opts: {\n formula: string;\n oldSheetName: string;\n newSheetName: string;\n }) => string;\n renameWorkbookInFormula: (opts: {\n formula: string;\n oldWorkbookName: string;\n newWorkbookName: string;\n }) => string;\n}\n\n// ============================================================================\n// Workbook Commands\n// ============================================================================\n\n/**\n * Command to add a workbook.\n */\nexport class AddWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string\n ) {}\n\n execute(): void {\n this.deps.workbookManager.addWorkbook(this.workbookName);\n this.deps.namedExpressionManager.addWorkbook(this.workbookName);\n this.deps.tableManager.addWorkbook(this.workbookName);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.workbookName)],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.workbookName)],\n removedScopes: [{ type: \"workbook\", workbookName: this.workbookName }],\n };\n }\n\n undo(): void {\n this.deps.workbookManager.removeWorkbook(this.workbookName);\n this.deps.namedExpressionManager.removeWorkbook(this.workbookName);\n this.deps.tableManager.removeWorkbook(this.workbookName);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.ADD_WORKBOOK,\n payload: { workbookName: this.workbookName },\n };\n }\n}\n\n/**\n * Captured state of a workbook for undo purposes.\n */\ninterface WorkbookSnapshot {\n workbook: Workbook;\n namedExpressions: {\n workbookLevel: Map<string, NamedExpression>;\n sheetLevel: Map<string, Map<string, NamedExpression>>;\n };\n tables: Map<string, TableDefinition>;\n conditionalStyles: ConditionalStyle[];\n cellStyles: DirectCellStyle[];\n}\n\n/**\n * Capture the full state of a workbook for later restoration.\n */\nfunction captureWorkbookSnapshot(\n deps: StructureCommandDeps,\n workbookName: string\n): WorkbookSnapshot | undefined {\n const workbook = deps.workbookManager.getWorkbooks().get(workbookName);\n if (!workbook) return undefined;\n\n // Deep clone workbook sheets\n const clonedSheets = new Map<string, Sheet>();\n for (const [name, sheet] of workbook.sheets) {\n clonedSheets.set(name, {\n name: sheet.name,\n index: sheet.index,\n content: new Map(sheet.content),\n metadata: new Map(sheet.metadata),\n sheetMetadata: sheet.sheetMetadata,\n });\n }\n\n const namedExpressions = deps.namedExpressionManager.getNamedExpressions();\n\n const snapshot: WorkbookSnapshot = {\n workbook: {\n name: workbook.name,\n sheets: clonedSheets,\n workbookMetadata: workbook.workbookMetadata,\n },\n namedExpressions: {\n workbookLevel: new Map(\n namedExpressions.workbookExpressions.get(workbookName) || []\n ),\n sheetLevel: new Map(),\n },\n tables: new Map(deps.tableManager.getTables(workbookName)),\n conditionalStyles: deps.styleManager\n .getAllConditionalStyles()\n .filter((s) => s.areas.some((a) => a.workbookName === workbookName)),\n cellStyles: deps.styleManager\n .getAllCellStyles()\n .filter((s) => s.areas.some((a) => a.workbookName === workbookName)),\n };\n\n // Capture sheet-level named expressions\n const sheetExpressions = namedExpressions.sheetExpressions.get(workbookName);\n if (sheetExpressions) {\n for (const [sheetName, expressions] of sheetExpressions) {\n snapshot.namedExpressions.sheetLevel.set(sheetName, new Map(expressions));\n }\n }\n\n return snapshot;\n}\n\n/**\n * Remove a workbook and all its associated data.\n */\nfunction removeWorkbook(\n deps: StructureCommandDeps,\n workbookName: string\n): void {\n deps.workbookManager.removeWorkbook(workbookName);\n deps.namedExpressionManager.removeWorkbook(workbookName);\n deps.tableManager.removeWorkbook(workbookName);\n deps.styleManager.removeWorkbookStyles(workbookName);\n deps.referenceManager.invalidateWorkbook(workbookName);\n}\n\n/**\n * Rename a workbook across all managers.\n */\nfunction renameWorkbookAcrossManagers(\n deps: StructureCommandDeps,\n oldName: string,\n newName: string\n): CellAddress[] {\n deps.workbookManager.renameWorkbook({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.namedExpressionManager.renameWorkbook({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.tableManager.updateTablesForWorkbookRename({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.styleManager.updateWorkbookName(oldName, newName);\n const changedCells = deps.workbookManager.updateAllFormulas((formula) =>\n deps.renameWorkbookInFormula({\n formula,\n oldWorkbookName: oldName,\n newWorkbookName: newName,\n })\n );\n deps.referenceManager.updateWorkbookName(oldName, newName);\n deps.apiSchemaManager.updateForWorkbookRename(oldName, newName);\n return changedCells;\n}\n\n/**\n * Rename a sheet across all managers.\n */\nfunction renameSheetAcrossManagers(\n deps: StructureCommandDeps,\n opts: { workbookName: string; sheetName: string; newSheetName: string }\n): CellAddress[] {\n deps.workbookManager.renameSheet(opts);\n deps.namedExpressionManager.renameSheet(opts);\n deps.tableManager.updateTablesForSheetRename(opts);\n deps.styleManager.updateSheetName(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n const changedCells = deps.workbookManager.updateAllFormulas((formula) =>\n deps.renameSheetInFormula({\n formula,\n oldSheetName: opts.sheetName,\n newSheetName: opts.newSheetName,\n })\n );\n deps.referenceManager.updateSheetName(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n deps.apiSchemaManager.updateForSheetRename(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n return changedCells;\n}\n\nfunction getWorkbookSnapshotResourceKeys(\n workbookName: string,\n snapshot: WorkbookSnapshot | undefined\n): string[] {\n const resourceKeys = new Set<string>([getWorkbookResourceKey(workbookName)]);\n if (!snapshot) {\n return Array.from(resourceKeys);\n }\n\n for (const tableName of snapshot.tables.keys()) {\n resourceKeys.add(getTableResourceKey({ workbookName, tableName }));\n }\n for (const name of snapshot.namedExpressions.workbookLevel.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({ expressionName: name, workbookName })\n );\n }\n for (const [sheetName, expressions] of snapshot.namedExpressions.sheetLevel) {\n resourceKeys.add(getSheetResourceKey({ workbookName, sheetName }));\n for (const name of expressions.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({\n expressionName: name,\n workbookName,\n sheetName,\n })\n );\n }\n }\n\n return Array.from(resourceKeys);\n}\n\nfunction getSheetSnapshotResourceKeys(\n workbookName: string,\n sheetName: string,\n snapshot: SheetSnapshot | undefined\n): string[] {\n const resourceKeys = new Set<string>([\n getWorkbookResourceKey(workbookName),\n getSheetResourceKey({ workbookName, sheetName }),\n ]);\n if (!snapshot) {\n return Array.from(resourceKeys);\n }\n\n for (const tableName of snapshot.tables.keys()) {\n resourceKeys.add(getTableResourceKey({ workbookName, tableName }));\n }\n for (const name of snapshot.namedExpressions.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({\n expressionName: name,\n workbookName,\n sheetName,\n })\n );\n }\n\n return Array.from(resourceKeys);\n}\n\n/**\n * Restore tables from a snapshot.\n */\nfunction restoreTables(\n tableManager: TableManager,\n tables: Map<string, TableDefinition>,\n workbookName: string\n): void {\n for (const [tableName, table] of tables) {\n tableManager.addTable({\n workbookName,\n tableName,\n sheetName: table.sheetName,\n start: `${String.fromCharCode(65 + table.start.colIndex)}${\n table.start.rowIndex + 1\n }`,\n numRows: table.endRow,\n numCols: table.headers.size,\n getCellValue: () => undefined,\n });\n }\n}\n\n/**\n * Restore styles from a snapshot.\n */\nfunction restoreStyles(\n styleManager: StyleManager,\n conditionalStyles: ConditionalStyle[],\n cellStyles: DirectCellStyle[]\n): void {\n for (const style of conditionalStyles) {\n styleManager.addConditionalStyle(style);\n }\n for (const style of cellStyles) {\n styleManager.addCellStyle(style);\n }\n}\n\n/**\n * Command to remove a workbook.\n */\nexport class RemoveWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: WorkbookSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string\n ) {}\n\n execute(): void {\n this.snapshot = captureWorkbookSnapshot(this.deps, this.workbookName);\n removeWorkbook(this.deps, this.workbookName);\n const resourceKeys = getWorkbookSnapshotResourceKeys(\n this.workbookName,\n this.snapshot\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys,\n removedScopes: [{ type: \"workbook\", workbookName: this.workbookName }],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys,\n };\n }\n\n undo(): void {\n if (!this.snapshot) return;\n\n // Restore workbook structure\n this.deps.workbookManager.addWorkbook(this.workbookName);\n this.deps.namedExpressionManager.addWorkbook(this.workbookName);\n this.deps.tableManager.addWorkbook(this.workbookName);\n\n // Restore sheets\n for (const [sheetName, sheet] of this.snapshot.workbook.sheets) {\n this.deps.workbookManager.addSheet({\n workbookName: this.workbookName,\n sheetName,\n });\n this.deps.namedExpressionManager.addSheet({\n workbookName: this.workbookName,\n sheetName,\n });\n this.deps.workbookManager.setSheetContent(\n { workbookName: this.workbookName, sheetName },\n sheet.content\n );\n }\n\n // Restore named expressions\n for (const [name, expr] of this.snapshot.namedExpressions.workbookLevel) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.workbookName,\n });\n }\n for (const [sheetName, expressions] of this.snapshot.namedExpressions.sheetLevel) {\n for (const [name, expr] of expressions) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.workbookName,\n sheetName,\n });\n }\n }\n\n // Restore tables and styles\n restoreTables(this.deps.tableManager, this.snapshot.tables, this.workbookName);\n restoreStyles(this.deps.styleManager, this.snapshot.conditionalStyles, this.snapshot.cellStyles);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.REMOVE_WORKBOOK,\n payload: { workbookName: this.workbookName },\n };\n }\n}\n\n/**\n * Command to rename a workbook.\n */\nexport class RenameWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: WorkbookSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string,\n private newWorkbookName: string\n ) {}\n\n execute(): void {\n this.snapshot = captureWorkbookSnapshot(this.deps, this.workbookName);\n const changedCells = renameWorkbookAcrossManagers(\n this.deps,\n this.workbookName,\n this.newWorkbookName\n );\n this.executeFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getWorkbookSnapshotResourceKeys(this.workbookName, this.snapshot),\n ...getWorkbookSnapshotResourceKeys(this.newWorkbookName, this.snapshot),\n ])\n ),\n };\n }\n\n undo(): void {\n const changedCells = renameWorkbookAcrossManagers(\n this.deps,\n this.newWorkbookName,\n this.workbookName\n );\n this.undoFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getWorkbookSnapshotResourceKeys(this.workbookName, this.snapshot),\n ...getWorkbookSnapshotResourceKeys(this.newWorkbookName, this.snapshot),\n ])\n ),\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.RENAME_WORKBOOK,\n payload: {\n workbookName: this.workbookName,\n newWorkbookName: this.newWorkbookName,\n },\n };\n }\n}\n\n/**\n * Command to clone a workbook.\n * Undo simply removes the cloned workbook.\n */\nexport class CloneWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private fromWorkbookName: string,\n private toWorkbookName: string\n ) {}\n\n execute(): void {\n const {\n workbookManager,\n namedExpressionManager,\n tableManager,\n styleManager,\n renameWorkbookInFormula,\n } = this.deps;\n\n // Check if source workbook exists\n const sourceWorkbook = workbookManager\n .getWorkbooks()\n .get(this.fromWorkbookName);\n if (!sourceWorkbook) {\n throw new Error(`Source workbook \"${this.fromWorkbookName}\" not found`);\n }\n\n // Check if target workbook name already exists\n if (workbookManager.getWorkbooks().has(this.toWorkbookName)) {\n throw new Error(\n `Target workbook \"${this.toWorkbookName}\" already exists`\n );\n }\n\n // Create new workbook\n workbookManager.addWorkbook(this.toWorkbookName);\n namedExpressionManager.addWorkbook(this.toWorkbookName);\n tableManager.addWorkbook(this.toWorkbookName);\n\n // Clone all sheets from source workbook\n for (const [sheetName, sheet] of sourceWorkbook.sheets) {\n // Add sheet to target workbook\n workbookManager.addSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n namedExpressionManager.addSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n\n // Copy all cell content\n workbookManager.setSheetContent(\n { workbookName: this.toWorkbookName, sheetName: sheetName },\n new Map(sheet.content)\n );\n\n // Copy all cell metadata\n const targetSheet = workbookManager.getSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n if (targetSheet) {\n targetSheet.metadata = new Map(sheet.metadata);\n\n // Copy sheet metadata\n if (sheet.sheetMetadata !== undefined) {\n targetSheet.sheetMetadata = structuredClone(sheet.sheetMetadata);\n }\n }\n }\n\n // Copy workbook metadata\n const targetWorkbook = workbookManager\n .getWorkbooks()\n .get(this.toWorkbookName);\n if (targetWorkbook && sourceWorkbook.workbookMetadata !== undefined) {\n targetWorkbook.workbookMetadata = structuredClone(\n sourceWorkbook.workbookMetadata\n );\n }\n\n // Clone workbook-scoped named expressions\n const allExpressions = namedExpressionManager.getNamedExpressions();\n const sourceWorkbookExpressions = allExpressions.workbookExpressions.get(\n this.fromWorkbookName\n );\n if (sourceWorkbookExpressions) {\n for (const [expressionName, expression] of sourceWorkbookExpressions) {\n namedExpressionManager.addNamedExpression({\n expressionName,\n expression: expression.expression,\n workbookName: this.toWorkbookName,\n });\n }\n }\n\n // Clone sheet-scoped named expressions\n const sourceSheetExpressions = allExpressions.sheetExpressions.get(\n this.fromWorkbookName\n );\n if (sourceSheetExpressions) {\n for (const [sheetName, sheetExpressions] of sourceSheetExpressions) {\n for (const [expressionName, expression] of sheetExpressions) {\n namedExpressionManager.addNamedExpression({\n expressionName,\n expression: expression.expression,\n workbookName: this.toWorkbookName,\n sheetName,\n });\n }\n }\n }\n\n // Clone tables\n const sourceTables = tableManager.tables.get(this.fromWorkbookName);\n if (sourceTables) {\n for (const [tableName] of sourceTables) {\n tableManager.copyTable(\n { workbookName: this.fromWorkbookName, tableName },\n { workbookName: this.toWorkbookName, tableName }\n );\n }\n }\n\n // Clone conditional styles\n const allConditionalStyles = styleManager.getAllConditionalStyles();\n for (const style of allConditionalStyles) {\n if (\n style.areas.some((area) => area.workbookName === this.fromWorkbookName)\n ) {\n const newStyle: ConditionalStyle = {\n ...style,\n areas: style.areas.map((area) =>\n area.workbookName === this.fromWorkbookName\n ? { ...area, workbookName: this.toWorkbookName }\n : area\n ),\n };\n styleManager.addConditionalStyle(newStyle);\n }\n }\n\n // Clone cell styles\n const allCellStyles = styleManager.getAllCellStyles();\n for (const style of allCellStyles) {\n if (\n style.areas.some((area) => area.workbookName === this.fromWorkbookName)\n ) {\n const newStyle: DirectCellStyle = {\n ...style,\n areas: style.areas.map((area) =>\n area.workbookName === this.fromWorkbookName\n ? { ...area, workbookName: this.toWorkbookName }\n : area\n ),\n };\n styleManager.addCellStyle(newStyle);\n }\n }\n\n // Update formulas in cloned workbook that reference the source workbook\n workbookManager.updateFormulasForWorkbook(this.toWorkbookName, (formula) =>\n renameWorkbookInFormula({\n formula,\n oldWorkbookName: this.fromWorkbookName,\n newWorkbookName: this.toWorkbookName,\n })\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.toWorkbookName)],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.toWorkbookName)],\n removedScopes: [{ type: \"workbook\", workbookName: this.toWorkbookName }],\n };\n }\n\n undo(): void {\n // Undo clone = remove the cloned workbook\n removeWorkbook(this.deps, this.toWorkbookName);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.CLONE_WORKBOOK,\n payload: {\n fromWorkbookName: this.fromWorkbookName,\n toWorkbookName: this.toWorkbookName,\n },\n };\n }\n}\n\n// ============================================================================\n// Sheet Commands\n// ============================================================================\n\n/**\n * Command to add a sheet.\n */\nexport class AddSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: { workbookName: string; sheetName: string }\n ) {}\n\n execute(): void {\n this.deps.workbookManager.addSheet(this.opts);\n this.deps.namedExpressionManager.addSheet(this.opts);\n const resourceKey = getSheetResourceKey(this.opts);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey, getWorkbookResourceKey(this.opts.workbookName)],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey, getWorkbookResourceKey(this.opts.workbookName)],\n removedScopes: [{ type: \"sheet\", ...this.opts }],\n };\n }\n\n undo(): void {\n this.deps.workbookManager.removeSheet(this.opts);\n this.deps.namedExpressionManager.removeSheet(this.opts);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.ADD_SHEET,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Captured state of a sheet for undo purposes.\n */\ninterface SheetSnapshot {\n sheet: Sheet;\n namedExpressions: Map<string, NamedExpression>;\n tables: Map<string, TableDefinition>;\n conditionalStyles: ConditionalStyle[];\n cellStyles: DirectCellStyle[];\n}\n\n/**\n * Command to remove a sheet.\n */\nexport class RemoveSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: SheetSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: { workbookName: string; sheetName: string }\n ) {}\n\n execute(): void {\n // Capture sheet state before removal\n const sheet = this.deps.workbookManager.getSheet(this.opts);\n if (sheet) {\n const namedExpressions =\n this.deps.namedExpressionManager.getNamedExpressions();\n const sheetExpressions =\n namedExpressions.sheetExpressions\n .get(this.opts.workbookName)\n ?.get(this.opts.sheetName) || new Map();\n\n // Get tables on this sheet\n const allTables = this.deps.tableManager.getTables(\n this.opts.workbookName\n );\n const sheetTables = new Map<string, TableDefinition>();\n for (const [name, table] of allTables) {\n if (table.sheetName === this.opts.sheetName) {\n sheetTables.set(name, table);\n }\n }\n\n this.snapshot = {\n sheet: {\n name: sheet.name,\n index: sheet.index,\n content: new Map(sheet.content),\n metadata: new Map(sheet.metadata),\n sheetMetadata: sheet.sheetMetadata,\n },\n namedExpressions: new Map(sheetExpressions),\n tables: sheetTables,\n conditionalStyles: this.deps.styleManager\n .getAllConditionalStyles()\n .filter((s) =>\n s.areas.some(\n (a) =>\n a.workbookName === this.opts.workbookName &&\n a.sheetName === this.opts.sheetName\n )\n ),\n cellStyles: this.deps.styleManager\n .getAllCellStyles()\n .filter((s) =>\n s.areas.some(\n (a) =>\n a.workbookName === this.opts.workbookName &&\n a.sheetName === this.opts.sheetName\n )\n ),\n };\n }\n\n // Execute removal\n this.deps.workbookManager.removeSheet(this.opts);\n this.deps.namedExpressionManager.removeSheet(this.opts);\n this.deps.tableManager.removeSheet(this.opts);\n this.deps.styleManager.removeSheetStyles(\n this.opts.workbookName,\n this.opts.sheetName\n );\n this.deps.referenceManager.invalidateSheet(\n this.opts.workbookName,\n this.opts.sheetName\n );\n const resourceKeys = getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys,\n removedScopes: [{ type: \"sheet\", ...this.opts }],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys,\n };\n }\n\n undo(): void {\n if (!this.snapshot) return;\n\n // Restore sheet structure\n this.deps.workbookManager.addSheet(this.opts);\n this.deps.namedExpressionManager.addSheet(this.opts);\n this.deps.workbookManager.setSheetContent(this.opts, this.snapshot.sheet.content);\n\n // Restore named expressions\n for (const [name, expr] of this.snapshot.namedExpressions) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n });\n }\n\n // Restore tables and styles\n restoreTables(this.deps.tableManager, this.snapshot.tables, this.opts.workbookName);\n restoreStyles(this.deps.styleManager, this.snapshot.conditionalStyles, this.snapshot.cellStyles);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.REMOVE_SHEET,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Command to rename a sheet.\n */\nexport class RenameSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: SheetSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: {\n workbookName: string;\n sheetName: string;\n newSheetName: string;\n }\n ) {}\n\n execute(): void {\n const namedExpressions =\n this.deps.namedExpressionManager.getNamedExpressions().sheetExpressions\n .get(this.opts.workbookName)\n ?.get(this.opts.sheetName) || new Map();\n const tables = new Map<string, TableDefinition>();\n for (const [name, table] of this.deps.tableManager.getTables(\n this.opts.workbookName\n )) {\n if (table.sheetName === this.opts.sheetName) {\n tables.set(name, table);\n }\n }\n const sheet = this.deps.workbookManager.getSheet(this.opts);\n this.snapshot = {\n sheet: sheet!,\n namedExpressions: new Map(namedExpressions),\n tables,\n conditionalStyles: [],\n cellStyles: [],\n };\n const changedCells = renameSheetAcrossManagers(this.deps, this.opts);\n this.executeFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n ),\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.newSheetName,\n this.snapshot\n ),\n ])\n ),\n };\n }\n\n undo(): void {\n const changedCells = renameSheetAcrossManagers(this.deps, {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.newSheetName,\n newSheetName: this.opts.sheetName,\n });\n this.undoFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n ),\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.newSheetName,\n this.snapshot\n ),\n ])\n ),\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.RENAME_SHEET,\n payload: this.opts,\n };\n }\n}\n"
5
+ "/**\n * Structure Commands - Commands that modify workbook/sheet structure\n *\n * These commands all require re-evaluation after execution.\n */\n\nimport type { SchemaManager } from \"../managers/schema-manager.cjs\";\nimport type { NamedExpressionManager } from \"../managers/named-expression-manager.cjs\";\nimport type { ReferenceManager } from \"../managers/reference-manager.cjs\";\nimport type { StyleManager } from \"../managers/style-manager.cjs\";\nimport type { TableManager } from \"../managers/table-manager.cjs\";\nimport type { WorkbookManager } from \"../managers/workbook-manager.cjs\";\nimport type {\n CellAddress,\n ConditionalStyle,\n DirectCellStyle,\n NamedExpression,\n Sheet,\n TableDefinition,\n Workbook,\n} from \"../types.cjs\";\nimport type {\n EngineAction,\n EngineCommand,\n MutationInvalidation,\n} from \"./types.cjs\";\nimport { ActionTypes, emptyMutationInvalidation } from \"./types.cjs\";\nimport {\n getNamedExpressionResourceKey,\n getSheetResourceKey,\n getTableResourceKey,\n getWorkbookResourceKey,\n} from \"../resource-keys.cjs\";\n\n/**\n * Dependencies needed for structure commands.\n */\nexport interface StructureCommandDeps {\n workbookManager: WorkbookManager;\n namedExpressionManager: NamedExpressionManager;\n tableManager: TableManager;\n styleManager: StyleManager;\n referenceManager: ReferenceManager;\n apiSchemaManager: SchemaManager;\n renameSheetInFormula: (opts: {\n formula: string;\n oldSheetName: string;\n newSheetName: string;\n }) => string;\n renameWorkbookInFormula: (opts: {\n formula: string;\n oldWorkbookName: string;\n newWorkbookName: string;\n }) => string;\n}\n\n// ============================================================================\n// Workbook Commands\n// ============================================================================\n\n/**\n * Command to add a workbook.\n */\nexport class AddWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string\n ) {}\n\n execute(): void {\n this.deps.workbookManager.addWorkbook(this.workbookName);\n this.deps.namedExpressionManager.addWorkbook(this.workbookName);\n this.deps.tableManager.addWorkbook(this.workbookName);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.workbookName)],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.workbookName)],\n removedScopes: [{ type: \"workbook\", workbookName: this.workbookName }],\n };\n }\n\n undo(): void {\n this.deps.workbookManager.removeWorkbook(this.workbookName);\n this.deps.namedExpressionManager.removeWorkbook(this.workbookName);\n this.deps.tableManager.removeWorkbook(this.workbookName);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.ADD_WORKBOOK,\n payload: { workbookName: this.workbookName },\n };\n }\n}\n\n/**\n * Captured state of a workbook for undo purposes.\n */\ninterface WorkbookSnapshot {\n workbook: Workbook;\n namedExpressions: {\n workbookLevel: Map<string, NamedExpression>;\n sheetLevel: Map<string, Map<string, NamedExpression>>;\n };\n tables: Map<string, TableDefinition>;\n conditionalStyles: ConditionalStyle[];\n cellStyles: DirectCellStyle[];\n}\n\n/**\n * Capture the full state of a workbook for later restoration.\n */\nfunction captureWorkbookSnapshot(\n deps: StructureCommandDeps,\n workbookName: string\n): WorkbookSnapshot | undefined {\n const workbook = deps.workbookManager.getWorkbooks().get(workbookName);\n if (!workbook) return undefined;\n\n // Deep clone workbook sheets\n const clonedSheets = new Map<string, Sheet>();\n for (const [name, sheet] of workbook.sheets) {\n clonedSheets.set(name, {\n name: sheet.name,\n index: sheet.index,\n content: new Map(sheet.content),\n metadata: new Map(sheet.metadata),\n sheetMetadata: sheet.sheetMetadata,\n });\n }\n\n const namedExpressions = deps.namedExpressionManager.getNamedExpressions();\n\n const snapshot: WorkbookSnapshot = {\n workbook: {\n name: workbook.name,\n sheets: clonedSheets,\n workbookMetadata: workbook.workbookMetadata,\n },\n namedExpressions: {\n workbookLevel: new Map(\n namedExpressions.workbookExpressions.get(workbookName) || []\n ),\n sheetLevel: new Map(),\n },\n tables: new Map(deps.tableManager.getTables(workbookName)),\n conditionalStyles: deps.styleManager\n .getAllConditionalStyles()\n .filter((s) => s.areas.some((a) => a.workbookName === workbookName)),\n cellStyles: deps.styleManager\n .getAllCellStyles()\n .filter((s) => s.areas.some((a) => a.workbookName === workbookName)),\n };\n\n // Capture sheet-level named expressions\n const sheetExpressions = namedExpressions.sheetExpressions.get(workbookName);\n if (sheetExpressions) {\n for (const [sheetName, expressions] of sheetExpressions) {\n snapshot.namedExpressions.sheetLevel.set(sheetName, new Map(expressions));\n }\n }\n\n return snapshot;\n}\n\n/**\n * Remove a workbook and all its associated data.\n */\nfunction removeWorkbook(\n deps: StructureCommandDeps,\n workbookName: string\n): void {\n deps.workbookManager.removeWorkbook(workbookName);\n deps.namedExpressionManager.removeWorkbook(workbookName);\n deps.tableManager.removeWorkbook(workbookName);\n deps.styleManager.removeWorkbookStyles(workbookName);\n deps.referenceManager.invalidateWorkbook(workbookName);\n}\n\n/**\n * Rename a workbook across all managers.\n */\nfunction renameWorkbookAcrossManagers(\n deps: StructureCommandDeps,\n oldName: string,\n newName: string\n): CellAddress[] {\n deps.workbookManager.renameWorkbook({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.namedExpressionManager.renameWorkbook({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.tableManager.updateTablesForWorkbookRename({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.styleManager.updateWorkbookName(oldName, newName);\n const changedCells = deps.workbookManager.updateAllFormulas((formula) =>\n deps.renameWorkbookInFormula({\n formula,\n oldWorkbookName: oldName,\n newWorkbookName: newName,\n })\n );\n deps.referenceManager.updateWorkbookName(oldName, newName);\n deps.apiSchemaManager.updateForWorkbookRename(oldName, newName);\n return changedCells;\n}\n\n/**\n * Rename a sheet across all managers.\n */\nfunction renameSheetAcrossManagers(\n deps: StructureCommandDeps,\n opts: { workbookName: string; sheetName: string; newSheetName: string }\n): CellAddress[] {\n deps.workbookManager.renameSheet(opts);\n deps.namedExpressionManager.renameSheet(opts);\n deps.tableManager.updateTablesForSheetRename(opts);\n deps.styleManager.updateSheetName(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n const changedCells = deps.workbookManager.updateAllFormulas((formula) =>\n deps.renameSheetInFormula({\n formula,\n oldSheetName: opts.sheetName,\n newSheetName: opts.newSheetName,\n })\n );\n deps.referenceManager.updateSheetName(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n deps.apiSchemaManager.updateForSheetRename(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n return changedCells;\n}\n\nfunction getWorkbookSnapshotResourceKeys(\n workbookName: string,\n snapshot: WorkbookSnapshot | undefined\n): string[] {\n const resourceKeys = new Set<string>([getWorkbookResourceKey(workbookName)]);\n if (!snapshot) {\n return Array.from(resourceKeys);\n }\n\n for (const tableName of snapshot.tables.keys()) {\n resourceKeys.add(getTableResourceKey({ workbookName, tableName }));\n }\n for (const name of snapshot.namedExpressions.workbookLevel.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({ expressionName: name, workbookName })\n );\n }\n for (const [sheetName, expressions] of snapshot.namedExpressions.sheetLevel) {\n resourceKeys.add(getSheetResourceKey({ workbookName, sheetName }));\n for (const name of expressions.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({\n expressionName: name,\n workbookName,\n sheetName,\n })\n );\n }\n }\n\n return Array.from(resourceKeys);\n}\n\nfunction getSheetSnapshotResourceKeys(\n workbookName: string,\n sheetName: string,\n snapshot: SheetSnapshot | undefined\n): string[] {\n const resourceKeys = new Set<string>([\n getWorkbookResourceKey(workbookName),\n getSheetResourceKey({ workbookName, sheetName }),\n ]);\n if (!snapshot) {\n return Array.from(resourceKeys);\n }\n\n for (const tableName of snapshot.tables.keys()) {\n resourceKeys.add(getTableResourceKey({ workbookName, tableName }));\n }\n for (const name of snapshot.namedExpressions.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({\n expressionName: name,\n workbookName,\n sheetName,\n })\n );\n }\n\n return Array.from(resourceKeys);\n}\n\n/**\n * Restore tables from a snapshot.\n */\nfunction restoreTables(\n tableManager: TableManager,\n tables: Map<string, TableDefinition>,\n workbookName: string\n): void {\n for (const [tableName, table] of tables) {\n tableManager.addTable({\n workbookName,\n tableName,\n sheetName: table.sheetName,\n start: `${String.fromCharCode(65 + table.start.colIndex)}${\n table.start.rowIndex + 1\n }`,\n numRows: table.endRow,\n numCols: table.headers.size,\n getCellValue: () => undefined,\n });\n }\n}\n\n/**\n * Restore styles from a snapshot.\n */\nfunction restoreStyles(\n styleManager: StyleManager,\n conditionalStyles: ConditionalStyle[],\n cellStyles: DirectCellStyle[]\n): void {\n for (const style of conditionalStyles) {\n styleManager.addConditionalStyle(style);\n }\n for (const style of cellStyles) {\n styleManager.addCellStyle(style);\n }\n}\n\n/**\n * Command to remove a workbook.\n */\nexport class RemoveWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: WorkbookSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string\n ) {}\n\n execute(): void {\n this.snapshot = captureWorkbookSnapshot(this.deps, this.workbookName);\n removeWorkbook(this.deps, this.workbookName);\n const resourceKeys = getWorkbookSnapshotResourceKeys(\n this.workbookName,\n this.snapshot\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys,\n removedScopes: [{ type: \"workbook\", workbookName: this.workbookName }],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys,\n };\n }\n\n undo(): void {\n if (!this.snapshot) return;\n\n // Restore workbook structure\n this.deps.workbookManager.addWorkbook(this.workbookName);\n this.deps.namedExpressionManager.addWorkbook(this.workbookName);\n this.deps.tableManager.addWorkbook(this.workbookName);\n\n // Restore sheets\n for (const [sheetName, sheet] of this.snapshot.workbook.sheets) {\n this.deps.workbookManager.addSheet({\n workbookName: this.workbookName,\n sheetName,\n });\n this.deps.namedExpressionManager.addSheet({\n workbookName: this.workbookName,\n sheetName,\n });\n this.deps.workbookManager.setSheetContent(\n { workbookName: this.workbookName, sheetName },\n sheet.content\n );\n }\n\n // Restore named expressions\n for (const [name, expr] of this.snapshot.namedExpressions.workbookLevel) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.workbookName,\n });\n }\n for (const [sheetName, expressions] of this.snapshot.namedExpressions.sheetLevel) {\n for (const [name, expr] of expressions) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.workbookName,\n sheetName,\n });\n }\n }\n\n // Restore tables and styles\n restoreTables(this.deps.tableManager, this.snapshot.tables, this.workbookName);\n restoreStyles(this.deps.styleManager, this.snapshot.conditionalStyles, this.snapshot.cellStyles);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.REMOVE_WORKBOOK,\n payload: { workbookName: this.workbookName },\n };\n }\n}\n\n/**\n * Command to rename a workbook.\n */\nexport class RenameWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: WorkbookSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string,\n private newWorkbookName: string\n ) {}\n\n execute(): void {\n this.snapshot = captureWorkbookSnapshot(this.deps, this.workbookName);\n const changedCells = renameWorkbookAcrossManagers(\n this.deps,\n this.workbookName,\n this.newWorkbookName\n );\n this.executeFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getWorkbookSnapshotResourceKeys(this.workbookName, this.snapshot),\n ...getWorkbookSnapshotResourceKeys(this.newWorkbookName, this.snapshot),\n ])\n ),\n };\n }\n\n undo(): void {\n const changedCells = renameWorkbookAcrossManagers(\n this.deps,\n this.newWorkbookName,\n this.workbookName\n );\n this.undoFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getWorkbookSnapshotResourceKeys(this.workbookName, this.snapshot),\n ...getWorkbookSnapshotResourceKeys(this.newWorkbookName, this.snapshot),\n ])\n ),\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.RENAME_WORKBOOK,\n payload: {\n workbookName: this.workbookName,\n newWorkbookName: this.newWorkbookName,\n },\n };\n }\n}\n\n/**\n * Command to clone a workbook.\n * Undo simply removes the cloned workbook.\n */\nexport class CloneWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private fromWorkbookName: string,\n private toWorkbookName: string\n ) {}\n\n execute(): void {\n const {\n workbookManager,\n namedExpressionManager,\n tableManager,\n styleManager,\n renameWorkbookInFormula,\n } = this.deps;\n\n // Check if source workbook exists\n const sourceWorkbook = workbookManager\n .getWorkbooks()\n .get(this.fromWorkbookName);\n if (!sourceWorkbook) {\n throw new Error(`Source workbook \"${this.fromWorkbookName}\" not found`);\n }\n\n // Check if target workbook name already exists\n if (workbookManager.getWorkbooks().has(this.toWorkbookName)) {\n throw new Error(\n `Target workbook \"${this.toWorkbookName}\" already exists`\n );\n }\n\n // Create new workbook\n workbookManager.addWorkbook(this.toWorkbookName);\n namedExpressionManager.addWorkbook(this.toWorkbookName);\n tableManager.addWorkbook(this.toWorkbookName);\n\n // Clone all sheets from source workbook\n for (const [sheetName, sheet] of sourceWorkbook.sheets) {\n // Add sheet to target workbook\n workbookManager.addSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n namedExpressionManager.addSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n\n // Copy all cell content\n workbookManager.setSheetContent(\n { workbookName: this.toWorkbookName, sheetName: sheetName },\n new Map(sheet.content)\n );\n\n // Copy all cell metadata\n const targetSheet = workbookManager.getSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n if (targetSheet) {\n targetSheet.metadata = new Map(sheet.metadata);\n\n // Copy sheet metadata\n if (sheet.sheetMetadata !== undefined) {\n targetSheet.sheetMetadata = structuredClone(sheet.sheetMetadata);\n }\n }\n }\n\n // Copy workbook metadata\n const targetWorkbook = workbookManager\n .getWorkbooks()\n .get(this.toWorkbookName);\n if (targetWorkbook && sourceWorkbook.workbookMetadata !== undefined) {\n targetWorkbook.workbookMetadata = structuredClone(\n sourceWorkbook.workbookMetadata\n );\n }\n\n // Clone workbook-scoped named expressions\n const allExpressions = namedExpressionManager.getNamedExpressions();\n const sourceWorkbookExpressions = allExpressions.workbookExpressions.get(\n this.fromWorkbookName\n );\n if (sourceWorkbookExpressions) {\n for (const [expressionName, expression] of sourceWorkbookExpressions) {\n namedExpressionManager.addNamedExpression({\n expressionName,\n expression: expression.expression,\n workbookName: this.toWorkbookName,\n });\n }\n }\n\n // Clone sheet-scoped named expressions\n const sourceSheetExpressions = allExpressions.sheetExpressions.get(\n this.fromWorkbookName\n );\n if (sourceSheetExpressions) {\n for (const [sheetName, sheetExpressions] of sourceSheetExpressions) {\n for (const [expressionName, expression] of sheetExpressions) {\n namedExpressionManager.addNamedExpression({\n expressionName,\n expression: expression.expression,\n workbookName: this.toWorkbookName,\n sheetName,\n });\n }\n }\n }\n\n // Clone tables\n const sourceTables = tableManager.tables.get(this.fromWorkbookName);\n if (sourceTables) {\n for (const [tableName] of sourceTables) {\n tableManager.copyTable(\n { workbookName: this.fromWorkbookName, tableName },\n { workbookName: this.toWorkbookName, tableName }\n );\n }\n }\n\n // Clone conditional styles\n const allConditionalStyles = styleManager.getAllConditionalStyles();\n for (const style of allConditionalStyles) {\n if (\n style.areas.some((area) => area.workbookName === this.fromWorkbookName)\n ) {\n const newStyle: ConditionalStyle = {\n ...style,\n areas: style.areas.map((area) =>\n area.workbookName === this.fromWorkbookName\n ? { ...area, workbookName: this.toWorkbookName }\n : area\n ),\n };\n styleManager.addConditionalStyle(newStyle);\n }\n }\n\n // Clone cell styles\n const allCellStyles = styleManager.getAllCellStyles();\n for (const style of allCellStyles) {\n if (\n style.areas.some((area) => area.workbookName === this.fromWorkbookName)\n ) {\n const newStyle: DirectCellStyle = {\n ...style,\n areas: style.areas.map((area) =>\n area.workbookName === this.fromWorkbookName\n ? { ...area, workbookName: this.toWorkbookName }\n : area\n ),\n };\n styleManager.addCellStyle(newStyle);\n }\n }\n\n // Update formulas in cloned workbook that reference the source workbook\n workbookManager.updateFormulasForWorkbook(this.toWorkbookName, (formula) =>\n renameWorkbookInFormula({\n formula,\n oldWorkbookName: this.fromWorkbookName,\n newWorkbookName: this.toWorkbookName,\n })\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.toWorkbookName)],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.toWorkbookName)],\n removedScopes: [{ type: \"workbook\", workbookName: this.toWorkbookName }],\n };\n }\n\n undo(): void {\n // Undo clone = remove the cloned workbook\n removeWorkbook(this.deps, this.toWorkbookName);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.CLONE_WORKBOOK,\n payload: {\n fromWorkbookName: this.fromWorkbookName,\n toWorkbookName: this.toWorkbookName,\n },\n };\n }\n}\n\n// ============================================================================\n// Sheet Commands\n// ============================================================================\n\n/**\n * Command to add a sheet.\n */\nexport class AddSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: { workbookName: string; sheetName: string }\n ) {}\n\n execute(): void {\n this.deps.workbookManager.addSheet(this.opts);\n this.deps.namedExpressionManager.addSheet(this.opts);\n const resourceKey = getSheetResourceKey(this.opts);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey],\n removedScopes: [{ type: \"sheet\", ...this.opts }],\n };\n }\n\n undo(): void {\n this.deps.workbookManager.removeSheet(this.opts);\n this.deps.namedExpressionManager.removeSheet(this.opts);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.ADD_SHEET,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Captured state of a sheet for undo purposes.\n */\ninterface SheetSnapshot {\n sheet: Sheet;\n namedExpressions: Map<string, NamedExpression>;\n tables: Map<string, TableDefinition>;\n conditionalStyles: ConditionalStyle[];\n cellStyles: DirectCellStyle[];\n}\n\n/**\n * Command to remove a sheet.\n */\nexport class RemoveSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: SheetSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: { workbookName: string; sheetName: string }\n ) {}\n\n execute(): void {\n // Capture sheet state before removal\n const sheet = this.deps.workbookManager.getSheet(this.opts);\n if (sheet) {\n const namedExpressions =\n this.deps.namedExpressionManager.getNamedExpressions();\n const sheetExpressions =\n namedExpressions.sheetExpressions\n .get(this.opts.workbookName)\n ?.get(this.opts.sheetName) || new Map();\n\n // Get tables on this sheet\n const allTables = this.deps.tableManager.getTables(\n this.opts.workbookName\n );\n const sheetTables = new Map<string, TableDefinition>();\n for (const [name, table] of allTables) {\n if (table.sheetName === this.opts.sheetName) {\n sheetTables.set(name, table);\n }\n }\n\n this.snapshot = {\n sheet: {\n name: sheet.name,\n index: sheet.index,\n content: new Map(sheet.content),\n metadata: new Map(sheet.metadata),\n sheetMetadata: sheet.sheetMetadata,\n },\n namedExpressions: new Map(sheetExpressions),\n tables: sheetTables,\n conditionalStyles: this.deps.styleManager\n .getAllConditionalStyles()\n .filter((s) =>\n s.areas.some(\n (a) =>\n a.workbookName === this.opts.workbookName &&\n a.sheetName === this.opts.sheetName\n )\n ),\n cellStyles: this.deps.styleManager\n .getAllCellStyles()\n .filter((s) =>\n s.areas.some(\n (a) =>\n a.workbookName === this.opts.workbookName &&\n a.sheetName === this.opts.sheetName\n )\n ),\n };\n }\n\n // Execute removal\n this.deps.workbookManager.removeSheet(this.opts);\n this.deps.namedExpressionManager.removeSheet(this.opts);\n this.deps.tableManager.removeSheet(this.opts);\n this.deps.styleManager.removeSheetStyles(\n this.opts.workbookName,\n this.opts.sheetName\n );\n this.deps.referenceManager.invalidateSheet(\n this.opts.workbookName,\n this.opts.sheetName\n );\n const resourceKeys = getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys,\n removedScopes: [{ type: \"sheet\", ...this.opts }],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys,\n };\n }\n\n undo(): void {\n if (!this.snapshot) return;\n\n // Restore sheet structure\n this.deps.workbookManager.addSheet(this.opts);\n this.deps.namedExpressionManager.addSheet(this.opts);\n this.deps.workbookManager.setSheetContent(this.opts, this.snapshot.sheet.content);\n\n // Restore named expressions\n for (const [name, expr] of this.snapshot.namedExpressions) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n });\n }\n\n // Restore tables and styles\n restoreTables(this.deps.tableManager, this.snapshot.tables, this.opts.workbookName);\n restoreStyles(this.deps.styleManager, this.snapshot.conditionalStyles, this.snapshot.cellStyles);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.REMOVE_SHEET,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Command to rename a sheet.\n */\nexport class RenameSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: SheetSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: {\n workbookName: string;\n sheetName: string;\n newSheetName: string;\n }\n ) {}\n\n execute(): void {\n const namedExpressions =\n this.deps.namedExpressionManager.getNamedExpressions().sheetExpressions\n .get(this.opts.workbookName)\n ?.get(this.opts.sheetName) || new Map();\n const tables = new Map<string, TableDefinition>();\n for (const [name, table] of this.deps.tableManager.getTables(\n this.opts.workbookName\n )) {\n if (table.sheetName === this.opts.sheetName) {\n tables.set(name, table);\n }\n }\n const sheet = this.deps.workbookManager.getSheet(this.opts);\n this.snapshot = {\n sheet: sheet!,\n namedExpressions: new Map(namedExpressions),\n tables,\n conditionalStyles: [],\n cellStyles: [],\n };\n const changedCells = renameSheetAcrossManagers(this.deps, this.opts);\n this.executeFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n ),\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.newSheetName,\n this.snapshot\n ),\n ])\n ),\n };\n }\n\n undo(): void {\n const changedCells = renameSheetAcrossManagers(this.deps, {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.newSheetName,\n newSheetName: this.opts.sheetName,\n });\n this.undoFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n ),\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.newSheetName,\n this.snapshot\n ),\n ])\n ),\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.RENAME_SHEET,\n payload: this.opts,\n };\n }\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "C8800F36A772754F64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "9D7106D25079DB6D64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -192,7 +192,7 @@ class TableManager {
192
192
  updateTablesForSheetRename(options) {
193
193
  const wb = this.tables.get(options.workbookName);
194
194
  if (!wb) {
195
- throw new Error("Workbook not found");
195
+ return;
196
196
  }
197
197
  wb.forEach((table) => {
198
198
  if (table.sheetName === options.sheetName) {
@@ -203,7 +203,7 @@ class TableManager {
203
203
  updateTablesForWorkbookRename(options) {
204
204
  const wb = this.tables.get(options.workbookName);
205
205
  if (!wb) {
206
- throw new Error("Workbook not found");
206
+ return;
207
207
  }
208
208
  this.tables.set(options.newWorkbookName, wb);
209
209
  this.tables.delete(options.workbookName);
@@ -287,4 +287,4 @@ class TableManager {
287
287
  }
288
288
  }
289
289
 
290
- //# debugId=6E23EF2A9297E17F64756E2164756E21
290
+ //# debugId=97499A6596939B4B64756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/core/managers/table-manager.ts"],
4
4
  "sourcesContent": [
5
- "import type {\n CellAddress,\n SerializedCellValue,\n SpreadsheetRange,\n SpreadsheetRangeEnd,\n TableDefinition,\n} from \"../types.cjs\";\nimport type { TableManagerSnapshot } from \"../engine-snapshot.cjs\";\nimport { checkRangeIntersection, getCellReference, parseCellReference } from \"../utils.cjs\";\nimport type { WorkbookManager } from \"./workbook-manager.cjs\";\n\nexport class TableManager {\n tables: Map<\n /**\n * workbook name -> table name -> table definition\n */\n string,\n Map<string, TableDefinition>\n > = new Map();\n private workbookManager: WorkbookManager;\n\n constructor(workbookManager: WorkbookManager) {\n this.workbookManager = workbookManager;\n }\n\n getTables(workbookName: string): Map<string, TableDefinition> {\n return this.tables.get(workbookName) ?? new Map();\n }\n\n getTable(opts: {\n workbookName: string;\n name: string;\n }): TableDefinition | undefined {\n return this.tables.get(opts.workbookName)?.get(opts.name);\n }\n\n makeTable({\n tableName,\n sheetName,\n workbookName,\n start,\n numRows,\n numCols,\n getCellValue,\n }: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const { rowIndex, colIndex } = parseCellReference(start);\n\n const headers = new Map<string, { name: string; index: number }>();\n for (let i = 0; i < numCols; i++) {\n const header = getCellValue({\n rowIndex,\n colIndex: colIndex + i,\n sheetName,\n workbookName,\n });\n\n if (header) {\n headers.set(String(header), { name: String(header), index: i });\n } else {\n headers.set(`Column ${i + 1}`, { name: `Column ${i + 1}`, index: i });\n }\n }\n\n const endRow: SpreadsheetRangeEnd =\n numRows.type === \"number\"\n ? { type: \"number\", value: rowIndex + numRows.value }\n : numRows;\n\n const table: TableDefinition = {\n name: tableName,\n sheetName,\n workbookName,\n start: {\n rowIndex,\n colIndex,\n },\n headers,\n endRow,\n };\n\n return table;\n }\n\n copyTable(\n from: {\n workbookName: string;\n tableName: string;\n },\n to: {\n workbookName: string;\n tableName: string;\n }\n ): void {\n const fromTable = this.getTable({\n workbookName: from.workbookName,\n name: from.tableName,\n });\n if (!fromTable) {\n throw new Error(\"Table not found\");\n }\n const wb = this.tables.get(to.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const newTable: TableDefinition = {\n ...fromTable,\n workbookName: to.workbookName,\n };\n wb.set(to.tableName, newTable);\n }\n\n addTable(props: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const tableName = props.tableName;\n const table = this.makeTable(props);\n\n let wb = this.tables.get(props.workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(props.workbookName, wb);\n }\n\n wb.set(tableName, table);\n\n return table;\n }\n\n renameTable(\n workbookName: string,\n names: { oldName: string; newName: string }\n ): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const table = wb.get(names.oldName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n table.name = names.newName;\n wb.set(names.newName, table);\n wb.delete(names.oldName);\n }\n\n updateTable({\n tableName,\n sheetName,\n start,\n numRows,\n numCols,\n workbookName,\n getCellValue,\n }: {\n tableName: string;\n sheetName?: string;\n start?: string;\n numRows?: SpreadsheetRangeEnd;\n workbookName: string;\n numCols?: number;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n\n const table = wb.get(tableName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n\n const newStart = start ? parseCellReference(start) : table.start;\n\n let newNumRows: SpreadsheetRangeEnd;\n if (numRows) {\n newNumRows = numRows;\n } else {\n if (table.endRow.type === \"infinity\") {\n newNumRows = table.endRow;\n } else {\n newNumRows = {\n type: \"number\",\n value: table.endRow.value - newStart.rowIndex,\n };\n }\n }\n\n const newTable = this.makeTable({\n tableName,\n sheetName: sheetName ?? table.sheetName,\n workbookName: workbookName ?? table.workbookName,\n start: getCellReference(newStart),\n numRows: newNumRows,\n numCols: numCols ?? table.headers.size,\n getCellValue,\n });\n\n wb.set(tableName, newTable);\n }\n\n removeTable({\n tableName,\n workbookName,\n }: {\n tableName: string;\n workbookName: string;\n }): boolean {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n return false;\n }\n const found = wb.delete(tableName);\n\n return found;\n }\n\n updateTablesForSheetRename(options: {\n sheetName: string;\n newSheetName: string;\n workbookName: string;\n }): void {\n // Update tables that belong to the renamed sheet\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n\n wb.forEach((table) => {\n if (table.sheetName === options.sheetName) {\n table.sheetName = options.newSheetName;\n }\n });\n }\n\n updateTablesForWorkbookRename(options: {\n workbookName: string;\n newWorkbookName: string;\n }): void {\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n this.tables.set(options.newWorkbookName, wb);\n this.tables.delete(options.workbookName);\n // Update tables that belong to the renamed sheet\n wb.forEach((table, tableName) => {\n if (table.workbookName === options.workbookName) {\n table.workbookName = options.newWorkbookName;\n }\n });\n }\n\n resetTables(newTables: Map<string, Map<string, TableDefinition>>): void {\n // Clear existing tables without breaking the Map reference\n this.tables.clear();\n\n // Repopulate with new tables\n newTables.forEach((table, workbookName) => {\n table.forEach((table, tableName) => {\n let wb = this.tables.get(workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(workbookName, wb);\n }\n wb.set(tableName, table);\n });\n });\n }\n\n toSnapshot(): TableManagerSnapshot {\n return this.tables;\n }\n\n restoreFromSnapshot(snapshot: TableManagerSnapshot): void {\n this.resetTables(snapshot);\n }\n\n /**\n * When adding a workbook, we need to initialize the new maps\n */\n addWorkbook(workbookName: string) {\n this.tables.set(workbookName, new Map());\n }\n\n /**\n * When removing a workbook, we need to remove the maps\n */\n removeWorkbook(workbookName: string) {\n this.tables.delete(workbookName);\n }\n\n /**\n * When removing a sheet, we need to remove the tables that belong to the sheet\n */\n removeSheet(opts: { sheetName: string; workbookName: string }): void {\n // Remove tables that belong to the removed sheet\n const wb = this.tables.get(opts.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n wb.forEach((table, tableName) => {\n if (table.sheetName === opts.sheetName) {\n wb.delete(tableName);\n }\n });\n }\n\n isCellInTable(cellAddress: CellAddress): TableDefinition | undefined {\n const { rowIndex, colIndex } = cellAddress;\n\n // Get all tables for this sheet\n\n for (const table of this.getTables(cellAddress.workbookName).values()) {\n // Check each table to see if the cell is within its bounds\n if (table.sheetName !== cellAddress.sheetName) {\n continue;\n }\n\n const { start, endRow, headers } = table;\n\n // Check row bounds\n const isInRowRange =\n endRow.type === \"infinity\"\n ? rowIndex >= start.rowIndex\n : rowIndex >= start.rowIndex && rowIndex <= endRow.value;\n\n // Check column bounds\n const endColIndex = start.colIndex + headers.size - 1;\n const isInColRange =\n colIndex >= start.colIndex && colIndex <= endColIndex;\n\n if (isInRowRange && isInColRange) {\n return table;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if a range intersects with any table in the given workbook/sheet.\n * Used to prevent spilling into tables (Excel behavior).\n */\n doesRangeIntersectTable(\n workbookName: string,\n sheetName: string,\n range: SpreadsheetRange\n ): boolean {\n for (const table of this.getTables(workbookName).values()) {\n if (table.sheetName !== sheetName) {\n continue;\n }\n\n // Build the table's range\n const { start, endRow, headers } = table;\n const endColIndex = start.colIndex + headers.size - 1;\n\n const tableRange: SpreadsheetRange = {\n start: { col: start.colIndex, row: start.rowIndex },\n end: {\n col: { type: \"number\", value: endColIndex },\n row: endRow,\n },\n };\n\n if (checkRangeIntersection(range, tableRange)) {\n return true;\n }\n }\n\n return false;\n }\n}\n"
5
+ "import type {\n CellAddress,\n SerializedCellValue,\n SpreadsheetRange,\n SpreadsheetRangeEnd,\n TableDefinition,\n} from \"../types.cjs\";\nimport type { TableManagerSnapshot } from \"../engine-snapshot.cjs\";\nimport {\n checkRangeIntersection,\n getCellReference,\n parseCellReference,\n} from \"../utils.cjs\";\nimport type { WorkbookManager } from \"./workbook-manager.cjs\";\n\nexport class TableManager {\n tables: Map<\n /**\n * workbook name -> table name -> table definition\n */\n string,\n Map<string, TableDefinition>\n > = new Map();\n private workbookManager: WorkbookManager;\n\n constructor(workbookManager: WorkbookManager) {\n this.workbookManager = workbookManager;\n }\n\n getTables(workbookName: string): Map<string, TableDefinition> {\n return this.tables.get(workbookName) ?? new Map();\n }\n\n getTable(opts: {\n workbookName: string;\n name: string;\n }): TableDefinition | undefined {\n return this.tables.get(opts.workbookName)?.get(opts.name);\n }\n\n makeTable({\n tableName,\n sheetName,\n workbookName,\n start,\n numRows,\n numCols,\n getCellValue,\n }: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const { rowIndex, colIndex } = parseCellReference(start);\n\n const headers = new Map<string, { name: string; index: number }>();\n for (let i = 0; i < numCols; i++) {\n const header = getCellValue({\n rowIndex,\n colIndex: colIndex + i,\n sheetName,\n workbookName,\n });\n\n if (header) {\n headers.set(String(header), { name: String(header), index: i });\n } else {\n headers.set(`Column ${i + 1}`, { name: `Column ${i + 1}`, index: i });\n }\n }\n\n const endRow: SpreadsheetRangeEnd =\n numRows.type === \"number\"\n ? { type: \"number\", value: rowIndex + numRows.value }\n : numRows;\n\n const table: TableDefinition = {\n name: tableName,\n sheetName,\n workbookName,\n start: {\n rowIndex,\n colIndex,\n },\n headers,\n endRow,\n };\n\n return table;\n }\n\n copyTable(\n from: {\n workbookName: string;\n tableName: string;\n },\n to: {\n workbookName: string;\n tableName: string;\n },\n ): void {\n const fromTable = this.getTable({\n workbookName: from.workbookName,\n name: from.tableName,\n });\n if (!fromTable) {\n throw new Error(\"Table not found\");\n }\n const wb = this.tables.get(to.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const newTable: TableDefinition = {\n ...fromTable,\n workbookName: to.workbookName,\n };\n wb.set(to.tableName, newTable);\n }\n\n addTable(props: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const tableName = props.tableName;\n const table = this.makeTable(props);\n\n let wb = this.tables.get(props.workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(props.workbookName, wb);\n }\n\n wb.set(tableName, table);\n\n return table;\n }\n\n renameTable(\n workbookName: string,\n names: { oldName: string; newName: string },\n ): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const table = wb.get(names.oldName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n table.name = names.newName;\n wb.set(names.newName, table);\n wb.delete(names.oldName);\n }\n\n updateTable({\n tableName,\n sheetName,\n start,\n numRows,\n numCols,\n workbookName,\n getCellValue,\n }: {\n tableName: string;\n sheetName?: string;\n start?: string;\n numRows?: SpreadsheetRangeEnd;\n workbookName: string;\n numCols?: number;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n\n const table = wb.get(tableName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n\n const newStart = start ? parseCellReference(start) : table.start;\n\n let newNumRows: SpreadsheetRangeEnd;\n if (numRows) {\n newNumRows = numRows;\n } else {\n if (table.endRow.type === \"infinity\") {\n newNumRows = table.endRow;\n } else {\n newNumRows = {\n type: \"number\",\n value: table.endRow.value - newStart.rowIndex,\n };\n }\n }\n\n const newTable = this.makeTable({\n tableName,\n sheetName: sheetName ?? table.sheetName,\n workbookName: workbookName ?? table.workbookName,\n start: getCellReference(newStart),\n numRows: newNumRows,\n numCols: numCols ?? table.headers.size,\n getCellValue,\n });\n\n wb.set(tableName, newTable);\n }\n\n removeTable({\n tableName,\n workbookName,\n }: {\n tableName: string;\n workbookName: string;\n }): boolean {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n return false;\n }\n const found = wb.delete(tableName);\n\n return found;\n }\n\n updateTablesForSheetRename(options: {\n sheetName: string;\n newSheetName: string;\n workbookName: string;\n }): void {\n // Update tables that belong to the renamed sheet\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n // No tables exist for this workbook yet — nothing to update\n return;\n }\n\n wb.forEach((table) => {\n if (table.sheetName === options.sheetName) {\n table.sheetName = options.newSheetName;\n }\n });\n }\n\n updateTablesForWorkbookRename(options: {\n workbookName: string;\n newWorkbookName: string;\n }): void {\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n // No tables exist for this workbook yet — nothing to update\n return;\n }\n this.tables.set(options.newWorkbookName, wb);\n this.tables.delete(options.workbookName);\n // Update tables that belong to the renamed sheet\n wb.forEach((table, tableName) => {\n if (table.workbookName === options.workbookName) {\n table.workbookName = options.newWorkbookName;\n }\n });\n }\n\n resetTables(newTables: Map<string, Map<string, TableDefinition>>): void {\n // Clear existing tables without breaking the Map reference\n this.tables.clear();\n\n // Repopulate with new tables\n newTables.forEach((table, workbookName) => {\n table.forEach((table, tableName) => {\n let wb = this.tables.get(workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(workbookName, wb);\n }\n wb.set(tableName, table);\n });\n });\n }\n\n toSnapshot(): TableManagerSnapshot {\n return this.tables;\n }\n\n restoreFromSnapshot(snapshot: TableManagerSnapshot): void {\n this.resetTables(snapshot);\n }\n\n /**\n * When adding a workbook, we need to initialize the new maps\n */\n addWorkbook(workbookName: string) {\n this.tables.set(workbookName, new Map());\n }\n\n /**\n * When removing a workbook, we need to remove the maps\n */\n removeWorkbook(workbookName: string) {\n this.tables.delete(workbookName);\n }\n\n /**\n * When removing a sheet, we need to remove the tables that belong to the sheet\n */\n removeSheet(opts: { sheetName: string; workbookName: string }): void {\n // Remove tables that belong to the removed sheet\n const wb = this.tables.get(opts.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n wb.forEach((table, tableName) => {\n if (table.sheetName === opts.sheetName) {\n wb.delete(tableName);\n }\n });\n }\n\n isCellInTable(cellAddress: CellAddress): TableDefinition | undefined {\n const { rowIndex, colIndex } = cellAddress;\n\n // Get all tables for this sheet\n\n for (const table of this.getTables(cellAddress.workbookName).values()) {\n // Check each table to see if the cell is within its bounds\n if (table.sheetName !== cellAddress.sheetName) {\n continue;\n }\n\n const { start, endRow, headers } = table;\n\n // Check row bounds\n const isInRowRange =\n endRow.type === \"infinity\"\n ? rowIndex >= start.rowIndex\n : rowIndex >= start.rowIndex && rowIndex <= endRow.value;\n\n // Check column bounds\n const endColIndex = start.colIndex + headers.size - 1;\n const isInColRange =\n colIndex >= start.colIndex && colIndex <= endColIndex;\n\n if (isInRowRange && isInColRange) {\n return table;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if a range intersects with any table in the given workbook/sheet.\n * Used to prevent spilling into tables (Excel behavior).\n */\n doesRangeIntersectTable(\n workbookName: string,\n sheetName: string,\n range: SpreadsheetRange,\n ): boolean {\n for (const table of this.getTables(workbookName).values()) {\n if (table.sheetName !== sheetName) {\n continue;\n }\n\n // Build the table's range\n const { start, endRow, headers } = table;\n const endColIndex = start.colIndex + headers.size - 1;\n\n const tableRange: SpreadsheetRange = {\n start: { col: start.colIndex, row: start.rowIndex },\n end: {\n col: { type: \"number\", value: endColIndex },\n row: endRow,\n },\n };\n\n if (checkRangeIntersection(range, tableRange)) {\n return true;\n }\n }\n\n return false;\n }\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQ6E,IAA7E;AAAA;AAGO,MAAM,aAAa;AAAA,EACxB,SAMI,IAAI;AAAA,EACA;AAAA,EAER,WAAW,CAAC,iBAAkC;AAAA,IAC5C,KAAK,kBAAkB;AAAA;AAAA,EAGzB,SAAS,CAAC,cAAoD;AAAA,IAC5D,OAAO,KAAK,OAAO,IAAI,YAAY,KAAK,IAAI;AAAA;AAAA,EAG9C,QAAQ,CAAC,MAGuB;AAAA,IAC9B,OAAO,KAAK,OAAO,IAAI,KAAK,YAAY,GAAG,IAAI,KAAK,IAAI;AAAA;AAAA,EAG1D,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,KASkB;AAAA,IAClB,QAAQ,UAAU,aAAa,gCAAmB,KAAK;AAAA,IAEvD,MAAM,UAAU,IAAI;AAAA,IACpB,SAAS,IAAI,EAAG,IAAI,SAAS,KAAK;AAAA,MAChC,MAAM,SAAS,aAAa;AAAA,QAC1B;AAAA,QACA,UAAU,WAAW;AAAA,QACrB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MAED,IAAI,QAAQ;AAAA,QACV,QAAQ,IAAI,OAAO,MAAM,GAAG,EAAE,MAAM,OAAO,MAAM,GAAG,OAAO,EAAE,CAAC;AAAA,MAChE,EAAO;AAAA,QACL,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,MAAM,UAAU,IAAI,KAAK,OAAO,EAAE,CAAC;AAAA;AAAA,IAExE;AAAA,IAEA,MAAM,SACJ,QAAQ,SAAS,WACb,EAAE,MAAM,UAAU,OAAO,WAAW,QAAQ,MAAM,IAClD;AAAA,IAEN,MAAM,QAAyB;AAAA,MAC7B,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,SAAS,CACP,MAIA,IAIM;AAAA,IACN,MAAM,YAAY,KAAK,SAAS;AAAA,MAC9B,cAAc,KAAK;AAAA,MACnB,MAAM,KAAK;AAAA,IACb,CAAC;AAAA,IACD,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AAAA,IACA,MAAM,KAAK,KAAK,OAAO,IAAI,GAAG,YAAY;AAAA,IAC1C,IAAI,CAAC,IAAI;AAAA,MACP,MAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAAA,IACA,MAAM,WAA4B;AAAA,SAC7B;AAAA,MACH,cAAc,GAAG;AAAA,IACnB;AAAA,IACA,GAAG,IAAI,GAAG,WAAW,QAAQ;AAAA;AAAA,EAG/B,QAAQ,CAAC,OAQW;AAAA,IAClB,MAAM,YAAY,MAAM;AAAA,IACxB,MAAM,QAAQ,KAAK,UAAU,KAAK;AAAA,IAElC,IAAI,KAAK,KAAK,OAAO,IAAI,MAAM,YAAY;AAAA,IAC3C,IAAI,CAAC,IAAI;AAAA,MACP,KAAK,IAAI;AAAA,MACT,KAAK,OAAO,IAAI,MAAM,cAAc,EAAE;AAAA,IACxC;AAAA,IAEA,GAAG,IAAI,WAAW,KAAK;AAAA,IAEvB,OAAO;AAAA;AAAA,EAGT,WAAW,CACT,cACA,OACM;AAAA,IACN,MAAM,KAAK,KAAK,OAAO,IAAI,YAAY;AAAA,IACvC,IAAI,CAAC,IAAI;AAAA,MACP,MAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAAA,IACA,MAAM,QAAQ,GAAG,IAAI,MAAM,OAAO;AAAA,IAClC,IAAI,CAAC,OAAO;AAAA,MACV,MAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AAAA,IACA,MAAM,OAAO,MAAM;AAAA,IACnB,GAAG,IAAI,MAAM,SAAS,KAAK;AAAA,IAC3B,GAAG,OAAO,MAAM,OAAO;AAAA;AAAA,EAGzB,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,KASO;AAAA,IACP,MAAM,KAAK,KAAK,OAAO,IAAI,YAAY;AAAA,IACvC,IAAI,CAAC,IAAI;AAAA,MACP,MAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAAA,IAEA,MAAM,QAAQ,GAAG,IAAI,SAAS;AAAA,IAC9B,IAAI,CAAC,OAAO;AAAA,MACV,MAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AAAA,IAEA,MAAM,WAAW,QAAQ,gCAAmB,KAAK,IAAI,MAAM;AAAA,IAE3D,IAAI;AAAA,IACJ,IAAI,SAAS;AAAA,MACX,aAAa;AAAA,IACf,EAAO;AAAA,MACL,IAAI,MAAM,OAAO,SAAS,YAAY;AAAA,QACpC,aAAa,MAAM;AAAA,MACrB,EAAO;AAAA,QACL,aAAa;AAAA,UACX,MAAM;AAAA,UACN,OAAO,MAAM,OAAO,QAAQ,SAAS;AAAA,QACvC;AAAA;AAAA;AAAA,IAIJ,MAAM,WAAW,KAAK,UAAU;AAAA,MAC9B;AAAA,MACA,WAAW,aAAa,MAAM;AAAA,MAC9B,cAAc,gBAAgB,MAAM;AAAA,MACpC,OAAO,8BAAiB,QAAQ;AAAA,MAChC,SAAS;AAAA,MACT,SAAS,WAAW,MAAM,QAAQ;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,IAED,GAAG,IAAI,WAAW,QAAQ;AAAA;AAAA,EAG5B,WAAW;AAAA,IACT;AAAA,IACA;AAAA,KAIU;AAAA,IACV,MAAM,KAAK,KAAK,OAAO,IAAI,YAAY;AAAA,IACvC,IAAI,CAAC,IAAI;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,MAAM,QAAQ,GAAG,OAAO,SAAS;AAAA,IAEjC,OAAO;AAAA;AAAA,EAGT,0BAA0B,CAAC,SAIlB;AAAA,IAEP,MAAM,KAAK,KAAK,OAAO,IAAI,QAAQ,YAAY;AAAA,IAC/C,IAAI,CAAC,IAAI;AAAA,MACP,MAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAAA,IAEA,GAAG,QAAQ,CAAC,UAAU;AAAA,MACpB,IAAI,MAAM,cAAc,QAAQ,WAAW;AAAA,QACzC,MAAM,YAAY,QAAQ;AAAA,MAC5B;AAAA,KACD;AAAA;AAAA,EAGH,6BAA6B,CAAC,SAGrB;AAAA,IACP,MAAM,KAAK,KAAK,OAAO,IAAI,QAAQ,YAAY;AAAA,IAC/C,IAAI,CAAC,IAAI;AAAA,MACP,MAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAAA,IACA,KAAK,OAAO,IAAI,QAAQ,iBAAiB,EAAE;AAAA,IAC3C,KAAK,OAAO,OAAO,QAAQ,YAAY;AAAA,IAEvC,GAAG,QAAQ,CAAC,OAAO,cAAc;AAAA,MAC/B,IAAI,MAAM,iBAAiB,QAAQ,cAAc;AAAA,QAC/C,MAAM,eAAe,QAAQ;AAAA,MAC/B;AAAA,KACD;AAAA;AAAA,EAGH,WAAW,CAAC,WAA4D;AAAA,IAEtE,KAAK,OAAO,MAAM;AAAA,IAGlB,UAAU,QAAQ,CAAC,OAAO,iBAAiB;AAAA,MACzC,MAAM,QAAQ,CAAC,QAAO,cAAc;AAAA,QAClC,IAAI,KAAK,KAAK,OAAO,IAAI,YAAY;AAAA,QACrC,IAAI,CAAC,IAAI;AAAA,UACP,KAAK,IAAI;AAAA,UACT,KAAK,OAAO,IAAI,cAAc,EAAE;AAAA,QAClC;AAAA,QACA,GAAG,IAAI,WAAW,MAAK;AAAA,OACxB;AAAA,KACF;AAAA;AAAA,EAGH,UAAU,GAAyB;AAAA,IACjC,OAAO,KAAK;AAAA;AAAA,EAGd,mBAAmB,CAAC,UAAsC;AAAA,IACxD,KAAK,YAAY,QAAQ;AAAA;AAAA,EAM3B,WAAW,CAAC,cAAsB;AAAA,IAChC,KAAK,OAAO,IAAI,cAAc,IAAI,GAAK;AAAA;AAAA,EAMzC,cAAc,CAAC,cAAsB;AAAA,IACnC,KAAK,OAAO,OAAO,YAAY;AAAA;AAAA,EAMjC,WAAW,CAAC,MAAyD;AAAA,IAEnE,MAAM,KAAK,KAAK,OAAO,IAAI,KAAK,YAAY;AAAA,IAC5C,IAAI,CAAC,IAAI;AAAA,MACP,MAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAAA,IACA,GAAG,QAAQ,CAAC,OAAO,cAAc;AAAA,MAC/B,IAAI,MAAM,cAAc,KAAK,WAAW;AAAA,QACtC,GAAG,OAAO,SAAS;AAAA,MACrB;AAAA,KACD;AAAA;AAAA,EAGH,aAAa,CAAC,aAAuD;AAAA,IACnE,QAAQ,UAAU,aAAa;AAAA,IAI/B,WAAW,SAAS,KAAK,UAAU,YAAY,YAAY,EAAE,OAAO,GAAG;AAAA,MAErE,IAAI,MAAM,cAAc,YAAY,WAAW;AAAA,QAC7C;AAAA,MACF;AAAA,MAEA,QAAQ,OAAO,QAAQ,YAAY;AAAA,MAGnC,MAAM,eACJ,OAAO,SAAS,aACZ,YAAY,MAAM,WAClB,YAAY,MAAM,YAAY,YAAY,OAAO;AAAA,MAGvD,MAAM,cAAc,MAAM,WAAW,QAAQ,OAAO;AAAA,MACpD,MAAM,eACJ,YAAY,MAAM,YAAY,YAAY;AAAA,MAE5C,IAAI,gBAAgB,cAAc;AAAA,QAChC,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA;AAAA;AAAA,EAOF,uBAAuB,CACrB,cACA,WACA,OACS;AAAA,IACT,WAAW,SAAS,KAAK,UAAU,YAAY,EAAE,OAAO,GAAG;AAAA,MACzD,IAAI,MAAM,cAAc,WAAW;AAAA,QACjC;AAAA,MACF;AAAA,MAGA,QAAQ,OAAO,QAAQ,YAAY;AAAA,MACnC,MAAM,cAAc,MAAM,WAAW,QAAQ,OAAO;AAAA,MAEpD,MAAM,aAA+B;AAAA,QACnC,OAAO,EAAE,KAAK,MAAM,UAAU,KAAK,MAAM,SAAS;AAAA,QAClD,KAAK;AAAA,UACH,KAAK,EAAE,MAAM,UAAU,OAAO,YAAY;AAAA,UAC1C,KAAK;AAAA,QACP;AAAA,MACF;AAAA,MAEA,IAAI,oCAAuB,OAAO,UAAU,GAAG;AAAA,QAC7C,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAEX;",
8
- "debugId": "6E23EF2A9297E17F64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "97499A6596939B4B64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@ricsam/formula-engine",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "type": "commonjs"
5
5
  }
@@ -476,11 +476,11 @@ class AddSheetCommand {
476
476
  const resourceKey = getSheetResourceKey(this.opts);
477
477
  this.executeFootprint = {
478
478
  touchedCells: [],
479
- resourceKeys: [resourceKey, getWorkbookResourceKey(this.opts.workbookName)]
479
+ resourceKeys: [resourceKey]
480
480
  };
481
481
  this.undoFootprint = {
482
482
  touchedCells: [],
483
- resourceKeys: [resourceKey, getWorkbookResourceKey(this.opts.workbookName)],
483
+ resourceKeys: [resourceKey],
484
484
  removedScopes: [{ type: "sheet", ...this.opts }]
485
485
  };
486
486
  }
@@ -658,4 +658,4 @@ export {
658
658
  AddSheetCommand
659
659
  };
660
660
 
661
- //# debugId=B7795BD40C5FF1B064756E2164756E21
661
+ //# debugId=981C2E76E1D1CC3964756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/core/commands/structure-commands.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Structure Commands - Commands that modify workbook/sheet structure\n *\n * These commands all require re-evaluation after execution.\n */\n\nimport type { SchemaManager } from \"../managers/schema-manager.mjs\";\nimport type { NamedExpressionManager } from \"../managers/named-expression-manager.mjs\";\nimport type { ReferenceManager } from \"../managers/reference-manager.mjs\";\nimport type { StyleManager } from \"../managers/style-manager.mjs\";\nimport type { TableManager } from \"../managers/table-manager.mjs\";\nimport type { WorkbookManager } from \"../managers/workbook-manager.mjs\";\nimport type {\n CellAddress,\n ConditionalStyle,\n DirectCellStyle,\n NamedExpression,\n Sheet,\n TableDefinition,\n Workbook,\n} from \"../types.mjs\";\nimport type {\n EngineAction,\n EngineCommand,\n MutationInvalidation,\n} from \"./types.mjs\";\nimport { ActionTypes, emptyMutationInvalidation } from \"./types.mjs\";\nimport {\n getNamedExpressionResourceKey,\n getSheetResourceKey,\n getTableResourceKey,\n getWorkbookResourceKey,\n} from \"../resource-keys.mjs\";\n\n/**\n * Dependencies needed for structure commands.\n */\nexport interface StructureCommandDeps {\n workbookManager: WorkbookManager;\n namedExpressionManager: NamedExpressionManager;\n tableManager: TableManager;\n styleManager: StyleManager;\n referenceManager: ReferenceManager;\n apiSchemaManager: SchemaManager;\n renameSheetInFormula: (opts: {\n formula: string;\n oldSheetName: string;\n newSheetName: string;\n }) => string;\n renameWorkbookInFormula: (opts: {\n formula: string;\n oldWorkbookName: string;\n newWorkbookName: string;\n }) => string;\n}\n\n// ============================================================================\n// Workbook Commands\n// ============================================================================\n\n/**\n * Command to add a workbook.\n */\nexport class AddWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string\n ) {}\n\n execute(): void {\n this.deps.workbookManager.addWorkbook(this.workbookName);\n this.deps.namedExpressionManager.addWorkbook(this.workbookName);\n this.deps.tableManager.addWorkbook(this.workbookName);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.workbookName)],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.workbookName)],\n removedScopes: [{ type: \"workbook\", workbookName: this.workbookName }],\n };\n }\n\n undo(): void {\n this.deps.workbookManager.removeWorkbook(this.workbookName);\n this.deps.namedExpressionManager.removeWorkbook(this.workbookName);\n this.deps.tableManager.removeWorkbook(this.workbookName);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.ADD_WORKBOOK,\n payload: { workbookName: this.workbookName },\n };\n }\n}\n\n/**\n * Captured state of a workbook for undo purposes.\n */\ninterface WorkbookSnapshot {\n workbook: Workbook;\n namedExpressions: {\n workbookLevel: Map<string, NamedExpression>;\n sheetLevel: Map<string, Map<string, NamedExpression>>;\n };\n tables: Map<string, TableDefinition>;\n conditionalStyles: ConditionalStyle[];\n cellStyles: DirectCellStyle[];\n}\n\n/**\n * Capture the full state of a workbook for later restoration.\n */\nfunction captureWorkbookSnapshot(\n deps: StructureCommandDeps,\n workbookName: string\n): WorkbookSnapshot | undefined {\n const workbook = deps.workbookManager.getWorkbooks().get(workbookName);\n if (!workbook) return undefined;\n\n // Deep clone workbook sheets\n const clonedSheets = new Map<string, Sheet>();\n for (const [name, sheet] of workbook.sheets) {\n clonedSheets.set(name, {\n name: sheet.name,\n index: sheet.index,\n content: new Map(sheet.content),\n metadata: new Map(sheet.metadata),\n sheetMetadata: sheet.sheetMetadata,\n });\n }\n\n const namedExpressions = deps.namedExpressionManager.getNamedExpressions();\n\n const snapshot: WorkbookSnapshot = {\n workbook: {\n name: workbook.name,\n sheets: clonedSheets,\n workbookMetadata: workbook.workbookMetadata,\n },\n namedExpressions: {\n workbookLevel: new Map(\n namedExpressions.workbookExpressions.get(workbookName) || []\n ),\n sheetLevel: new Map(),\n },\n tables: new Map(deps.tableManager.getTables(workbookName)),\n conditionalStyles: deps.styleManager\n .getAllConditionalStyles()\n .filter((s) => s.areas.some((a) => a.workbookName === workbookName)),\n cellStyles: deps.styleManager\n .getAllCellStyles()\n .filter((s) => s.areas.some((a) => a.workbookName === workbookName)),\n };\n\n // Capture sheet-level named expressions\n const sheetExpressions = namedExpressions.sheetExpressions.get(workbookName);\n if (sheetExpressions) {\n for (const [sheetName, expressions] of sheetExpressions) {\n snapshot.namedExpressions.sheetLevel.set(sheetName, new Map(expressions));\n }\n }\n\n return snapshot;\n}\n\n/**\n * Remove a workbook and all its associated data.\n */\nfunction removeWorkbook(\n deps: StructureCommandDeps,\n workbookName: string\n): void {\n deps.workbookManager.removeWorkbook(workbookName);\n deps.namedExpressionManager.removeWorkbook(workbookName);\n deps.tableManager.removeWorkbook(workbookName);\n deps.styleManager.removeWorkbookStyles(workbookName);\n deps.referenceManager.invalidateWorkbook(workbookName);\n}\n\n/**\n * Rename a workbook across all managers.\n */\nfunction renameWorkbookAcrossManagers(\n deps: StructureCommandDeps,\n oldName: string,\n newName: string\n): CellAddress[] {\n deps.workbookManager.renameWorkbook({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.namedExpressionManager.renameWorkbook({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.tableManager.updateTablesForWorkbookRename({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.styleManager.updateWorkbookName(oldName, newName);\n const changedCells = deps.workbookManager.updateAllFormulas((formula) =>\n deps.renameWorkbookInFormula({\n formula,\n oldWorkbookName: oldName,\n newWorkbookName: newName,\n })\n );\n deps.referenceManager.updateWorkbookName(oldName, newName);\n deps.apiSchemaManager.updateForWorkbookRename(oldName, newName);\n return changedCells;\n}\n\n/**\n * Rename a sheet across all managers.\n */\nfunction renameSheetAcrossManagers(\n deps: StructureCommandDeps,\n opts: { workbookName: string; sheetName: string; newSheetName: string }\n): CellAddress[] {\n deps.workbookManager.renameSheet(opts);\n deps.namedExpressionManager.renameSheet(opts);\n deps.tableManager.updateTablesForSheetRename(opts);\n deps.styleManager.updateSheetName(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n const changedCells = deps.workbookManager.updateAllFormulas((formula) =>\n deps.renameSheetInFormula({\n formula,\n oldSheetName: opts.sheetName,\n newSheetName: opts.newSheetName,\n })\n );\n deps.referenceManager.updateSheetName(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n deps.apiSchemaManager.updateForSheetRename(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n return changedCells;\n}\n\nfunction getWorkbookSnapshotResourceKeys(\n workbookName: string,\n snapshot: WorkbookSnapshot | undefined\n): string[] {\n const resourceKeys = new Set<string>([getWorkbookResourceKey(workbookName)]);\n if (!snapshot) {\n return Array.from(resourceKeys);\n }\n\n for (const tableName of snapshot.tables.keys()) {\n resourceKeys.add(getTableResourceKey({ workbookName, tableName }));\n }\n for (const name of snapshot.namedExpressions.workbookLevel.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({ expressionName: name, workbookName })\n );\n }\n for (const [sheetName, expressions] of snapshot.namedExpressions.sheetLevel) {\n resourceKeys.add(getSheetResourceKey({ workbookName, sheetName }));\n for (const name of expressions.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({\n expressionName: name,\n workbookName,\n sheetName,\n })\n );\n }\n }\n\n return Array.from(resourceKeys);\n}\n\nfunction getSheetSnapshotResourceKeys(\n workbookName: string,\n sheetName: string,\n snapshot: SheetSnapshot | undefined\n): string[] {\n const resourceKeys = new Set<string>([\n getWorkbookResourceKey(workbookName),\n getSheetResourceKey({ workbookName, sheetName }),\n ]);\n if (!snapshot) {\n return Array.from(resourceKeys);\n }\n\n for (const tableName of snapshot.tables.keys()) {\n resourceKeys.add(getTableResourceKey({ workbookName, tableName }));\n }\n for (const name of snapshot.namedExpressions.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({\n expressionName: name,\n workbookName,\n sheetName,\n })\n );\n }\n\n return Array.from(resourceKeys);\n}\n\n/**\n * Restore tables from a snapshot.\n */\nfunction restoreTables(\n tableManager: TableManager,\n tables: Map<string, TableDefinition>,\n workbookName: string\n): void {\n for (const [tableName, table] of tables) {\n tableManager.addTable({\n workbookName,\n tableName,\n sheetName: table.sheetName,\n start: `${String.fromCharCode(65 + table.start.colIndex)}${\n table.start.rowIndex + 1\n }`,\n numRows: table.endRow,\n numCols: table.headers.size,\n getCellValue: () => undefined,\n });\n }\n}\n\n/**\n * Restore styles from a snapshot.\n */\nfunction restoreStyles(\n styleManager: StyleManager,\n conditionalStyles: ConditionalStyle[],\n cellStyles: DirectCellStyle[]\n): void {\n for (const style of conditionalStyles) {\n styleManager.addConditionalStyle(style);\n }\n for (const style of cellStyles) {\n styleManager.addCellStyle(style);\n }\n}\n\n/**\n * Command to remove a workbook.\n */\nexport class RemoveWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: WorkbookSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string\n ) {}\n\n execute(): void {\n this.snapshot = captureWorkbookSnapshot(this.deps, this.workbookName);\n removeWorkbook(this.deps, this.workbookName);\n const resourceKeys = getWorkbookSnapshotResourceKeys(\n this.workbookName,\n this.snapshot\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys,\n removedScopes: [{ type: \"workbook\", workbookName: this.workbookName }],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys,\n };\n }\n\n undo(): void {\n if (!this.snapshot) return;\n\n // Restore workbook structure\n this.deps.workbookManager.addWorkbook(this.workbookName);\n this.deps.namedExpressionManager.addWorkbook(this.workbookName);\n this.deps.tableManager.addWorkbook(this.workbookName);\n\n // Restore sheets\n for (const [sheetName, sheet] of this.snapshot.workbook.sheets) {\n this.deps.workbookManager.addSheet({\n workbookName: this.workbookName,\n sheetName,\n });\n this.deps.namedExpressionManager.addSheet({\n workbookName: this.workbookName,\n sheetName,\n });\n this.deps.workbookManager.setSheetContent(\n { workbookName: this.workbookName, sheetName },\n sheet.content\n );\n }\n\n // Restore named expressions\n for (const [name, expr] of this.snapshot.namedExpressions.workbookLevel) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.workbookName,\n });\n }\n for (const [sheetName, expressions] of this.snapshot.namedExpressions.sheetLevel) {\n for (const [name, expr] of expressions) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.workbookName,\n sheetName,\n });\n }\n }\n\n // Restore tables and styles\n restoreTables(this.deps.tableManager, this.snapshot.tables, this.workbookName);\n restoreStyles(this.deps.styleManager, this.snapshot.conditionalStyles, this.snapshot.cellStyles);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.REMOVE_WORKBOOK,\n payload: { workbookName: this.workbookName },\n };\n }\n}\n\n/**\n * Command to rename a workbook.\n */\nexport class RenameWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: WorkbookSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string,\n private newWorkbookName: string\n ) {}\n\n execute(): void {\n this.snapshot = captureWorkbookSnapshot(this.deps, this.workbookName);\n const changedCells = renameWorkbookAcrossManagers(\n this.deps,\n this.workbookName,\n this.newWorkbookName\n );\n this.executeFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getWorkbookSnapshotResourceKeys(this.workbookName, this.snapshot),\n ...getWorkbookSnapshotResourceKeys(this.newWorkbookName, this.snapshot),\n ])\n ),\n };\n }\n\n undo(): void {\n const changedCells = renameWorkbookAcrossManagers(\n this.deps,\n this.newWorkbookName,\n this.workbookName\n );\n this.undoFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getWorkbookSnapshotResourceKeys(this.workbookName, this.snapshot),\n ...getWorkbookSnapshotResourceKeys(this.newWorkbookName, this.snapshot),\n ])\n ),\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.RENAME_WORKBOOK,\n payload: {\n workbookName: this.workbookName,\n newWorkbookName: this.newWorkbookName,\n },\n };\n }\n}\n\n/**\n * Command to clone a workbook.\n * Undo simply removes the cloned workbook.\n */\nexport class CloneWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private fromWorkbookName: string,\n private toWorkbookName: string\n ) {}\n\n execute(): void {\n const {\n workbookManager,\n namedExpressionManager,\n tableManager,\n styleManager,\n renameWorkbookInFormula,\n } = this.deps;\n\n // Check if source workbook exists\n const sourceWorkbook = workbookManager\n .getWorkbooks()\n .get(this.fromWorkbookName);\n if (!sourceWorkbook) {\n throw new Error(`Source workbook \"${this.fromWorkbookName}\" not found`);\n }\n\n // Check if target workbook name already exists\n if (workbookManager.getWorkbooks().has(this.toWorkbookName)) {\n throw new Error(\n `Target workbook \"${this.toWorkbookName}\" already exists`\n );\n }\n\n // Create new workbook\n workbookManager.addWorkbook(this.toWorkbookName);\n namedExpressionManager.addWorkbook(this.toWorkbookName);\n tableManager.addWorkbook(this.toWorkbookName);\n\n // Clone all sheets from source workbook\n for (const [sheetName, sheet] of sourceWorkbook.sheets) {\n // Add sheet to target workbook\n workbookManager.addSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n namedExpressionManager.addSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n\n // Copy all cell content\n workbookManager.setSheetContent(\n { workbookName: this.toWorkbookName, sheetName: sheetName },\n new Map(sheet.content)\n );\n\n // Copy all cell metadata\n const targetSheet = workbookManager.getSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n if (targetSheet) {\n targetSheet.metadata = new Map(sheet.metadata);\n\n // Copy sheet metadata\n if (sheet.sheetMetadata !== undefined) {\n targetSheet.sheetMetadata = structuredClone(sheet.sheetMetadata);\n }\n }\n }\n\n // Copy workbook metadata\n const targetWorkbook = workbookManager\n .getWorkbooks()\n .get(this.toWorkbookName);\n if (targetWorkbook && sourceWorkbook.workbookMetadata !== undefined) {\n targetWorkbook.workbookMetadata = structuredClone(\n sourceWorkbook.workbookMetadata\n );\n }\n\n // Clone workbook-scoped named expressions\n const allExpressions = namedExpressionManager.getNamedExpressions();\n const sourceWorkbookExpressions = allExpressions.workbookExpressions.get(\n this.fromWorkbookName\n );\n if (sourceWorkbookExpressions) {\n for (const [expressionName, expression] of sourceWorkbookExpressions) {\n namedExpressionManager.addNamedExpression({\n expressionName,\n expression: expression.expression,\n workbookName: this.toWorkbookName,\n });\n }\n }\n\n // Clone sheet-scoped named expressions\n const sourceSheetExpressions = allExpressions.sheetExpressions.get(\n this.fromWorkbookName\n );\n if (sourceSheetExpressions) {\n for (const [sheetName, sheetExpressions] of sourceSheetExpressions) {\n for (const [expressionName, expression] of sheetExpressions) {\n namedExpressionManager.addNamedExpression({\n expressionName,\n expression: expression.expression,\n workbookName: this.toWorkbookName,\n sheetName,\n });\n }\n }\n }\n\n // Clone tables\n const sourceTables = tableManager.tables.get(this.fromWorkbookName);\n if (sourceTables) {\n for (const [tableName] of sourceTables) {\n tableManager.copyTable(\n { workbookName: this.fromWorkbookName, tableName },\n { workbookName: this.toWorkbookName, tableName }\n );\n }\n }\n\n // Clone conditional styles\n const allConditionalStyles = styleManager.getAllConditionalStyles();\n for (const style of allConditionalStyles) {\n if (\n style.areas.some((area) => area.workbookName === this.fromWorkbookName)\n ) {\n const newStyle: ConditionalStyle = {\n ...style,\n areas: style.areas.map((area) =>\n area.workbookName === this.fromWorkbookName\n ? { ...area, workbookName: this.toWorkbookName }\n : area\n ),\n };\n styleManager.addConditionalStyle(newStyle);\n }\n }\n\n // Clone cell styles\n const allCellStyles = styleManager.getAllCellStyles();\n for (const style of allCellStyles) {\n if (\n style.areas.some((area) => area.workbookName === this.fromWorkbookName)\n ) {\n const newStyle: DirectCellStyle = {\n ...style,\n areas: style.areas.map((area) =>\n area.workbookName === this.fromWorkbookName\n ? { ...area, workbookName: this.toWorkbookName }\n : area\n ),\n };\n styleManager.addCellStyle(newStyle);\n }\n }\n\n // Update formulas in cloned workbook that reference the source workbook\n workbookManager.updateFormulasForWorkbook(this.toWorkbookName, (formula) =>\n renameWorkbookInFormula({\n formula,\n oldWorkbookName: this.fromWorkbookName,\n newWorkbookName: this.toWorkbookName,\n })\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.toWorkbookName)],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.toWorkbookName)],\n removedScopes: [{ type: \"workbook\", workbookName: this.toWorkbookName }],\n };\n }\n\n undo(): void {\n // Undo clone = remove the cloned workbook\n removeWorkbook(this.deps, this.toWorkbookName);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.CLONE_WORKBOOK,\n payload: {\n fromWorkbookName: this.fromWorkbookName,\n toWorkbookName: this.toWorkbookName,\n },\n };\n }\n}\n\n// ============================================================================\n// Sheet Commands\n// ============================================================================\n\n/**\n * Command to add a sheet.\n */\nexport class AddSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: { workbookName: string; sheetName: string }\n ) {}\n\n execute(): void {\n this.deps.workbookManager.addSheet(this.opts);\n this.deps.namedExpressionManager.addSheet(this.opts);\n const resourceKey = getSheetResourceKey(this.opts);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey, getWorkbookResourceKey(this.opts.workbookName)],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey, getWorkbookResourceKey(this.opts.workbookName)],\n removedScopes: [{ type: \"sheet\", ...this.opts }],\n };\n }\n\n undo(): void {\n this.deps.workbookManager.removeSheet(this.opts);\n this.deps.namedExpressionManager.removeSheet(this.opts);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.ADD_SHEET,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Captured state of a sheet for undo purposes.\n */\ninterface SheetSnapshot {\n sheet: Sheet;\n namedExpressions: Map<string, NamedExpression>;\n tables: Map<string, TableDefinition>;\n conditionalStyles: ConditionalStyle[];\n cellStyles: DirectCellStyle[];\n}\n\n/**\n * Command to remove a sheet.\n */\nexport class RemoveSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: SheetSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: { workbookName: string; sheetName: string }\n ) {}\n\n execute(): void {\n // Capture sheet state before removal\n const sheet = this.deps.workbookManager.getSheet(this.opts);\n if (sheet) {\n const namedExpressions =\n this.deps.namedExpressionManager.getNamedExpressions();\n const sheetExpressions =\n namedExpressions.sheetExpressions\n .get(this.opts.workbookName)\n ?.get(this.opts.sheetName) || new Map();\n\n // Get tables on this sheet\n const allTables = this.deps.tableManager.getTables(\n this.opts.workbookName\n );\n const sheetTables = new Map<string, TableDefinition>();\n for (const [name, table] of allTables) {\n if (table.sheetName === this.opts.sheetName) {\n sheetTables.set(name, table);\n }\n }\n\n this.snapshot = {\n sheet: {\n name: sheet.name,\n index: sheet.index,\n content: new Map(sheet.content),\n metadata: new Map(sheet.metadata),\n sheetMetadata: sheet.sheetMetadata,\n },\n namedExpressions: new Map(sheetExpressions),\n tables: sheetTables,\n conditionalStyles: this.deps.styleManager\n .getAllConditionalStyles()\n .filter((s) =>\n s.areas.some(\n (a) =>\n a.workbookName === this.opts.workbookName &&\n a.sheetName === this.opts.sheetName\n )\n ),\n cellStyles: this.deps.styleManager\n .getAllCellStyles()\n .filter((s) =>\n s.areas.some(\n (a) =>\n a.workbookName === this.opts.workbookName &&\n a.sheetName === this.opts.sheetName\n )\n ),\n };\n }\n\n // Execute removal\n this.deps.workbookManager.removeSheet(this.opts);\n this.deps.namedExpressionManager.removeSheet(this.opts);\n this.deps.tableManager.removeSheet(this.opts);\n this.deps.styleManager.removeSheetStyles(\n this.opts.workbookName,\n this.opts.sheetName\n );\n this.deps.referenceManager.invalidateSheet(\n this.opts.workbookName,\n this.opts.sheetName\n );\n const resourceKeys = getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys,\n removedScopes: [{ type: \"sheet\", ...this.opts }],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys,\n };\n }\n\n undo(): void {\n if (!this.snapshot) return;\n\n // Restore sheet structure\n this.deps.workbookManager.addSheet(this.opts);\n this.deps.namedExpressionManager.addSheet(this.opts);\n this.deps.workbookManager.setSheetContent(this.opts, this.snapshot.sheet.content);\n\n // Restore named expressions\n for (const [name, expr] of this.snapshot.namedExpressions) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n });\n }\n\n // Restore tables and styles\n restoreTables(this.deps.tableManager, this.snapshot.tables, this.opts.workbookName);\n restoreStyles(this.deps.styleManager, this.snapshot.conditionalStyles, this.snapshot.cellStyles);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.REMOVE_SHEET,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Command to rename a sheet.\n */\nexport class RenameSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: SheetSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: {\n workbookName: string;\n sheetName: string;\n newSheetName: string;\n }\n ) {}\n\n execute(): void {\n const namedExpressions =\n this.deps.namedExpressionManager.getNamedExpressions().sheetExpressions\n .get(this.opts.workbookName)\n ?.get(this.opts.sheetName) || new Map();\n const tables = new Map<string, TableDefinition>();\n for (const [name, table] of this.deps.tableManager.getTables(\n this.opts.workbookName\n )) {\n if (table.sheetName === this.opts.sheetName) {\n tables.set(name, table);\n }\n }\n const sheet = this.deps.workbookManager.getSheet(this.opts);\n this.snapshot = {\n sheet: sheet!,\n namedExpressions: new Map(namedExpressions),\n tables,\n conditionalStyles: [],\n cellStyles: [],\n };\n const changedCells = renameSheetAcrossManagers(this.deps, this.opts);\n this.executeFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n ),\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.newSheetName,\n this.snapshot\n ),\n ])\n ),\n };\n }\n\n undo(): void {\n const changedCells = renameSheetAcrossManagers(this.deps, {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.newSheetName,\n newSheetName: this.opts.sheetName,\n });\n this.undoFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n ),\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.newSheetName,\n this.snapshot\n ),\n ])\n ),\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.RENAME_SHEET,\n payload: this.opts,\n };\n }\n}\n"
5
+ "/**\n * Structure Commands - Commands that modify workbook/sheet structure\n *\n * These commands all require re-evaluation after execution.\n */\n\nimport type { SchemaManager } from \"../managers/schema-manager.mjs\";\nimport type { NamedExpressionManager } from \"../managers/named-expression-manager.mjs\";\nimport type { ReferenceManager } from \"../managers/reference-manager.mjs\";\nimport type { StyleManager } from \"../managers/style-manager.mjs\";\nimport type { TableManager } from \"../managers/table-manager.mjs\";\nimport type { WorkbookManager } from \"../managers/workbook-manager.mjs\";\nimport type {\n CellAddress,\n ConditionalStyle,\n DirectCellStyle,\n NamedExpression,\n Sheet,\n TableDefinition,\n Workbook,\n} from \"../types.mjs\";\nimport type {\n EngineAction,\n EngineCommand,\n MutationInvalidation,\n} from \"./types.mjs\";\nimport { ActionTypes, emptyMutationInvalidation } from \"./types.mjs\";\nimport {\n getNamedExpressionResourceKey,\n getSheetResourceKey,\n getTableResourceKey,\n getWorkbookResourceKey,\n} from \"../resource-keys.mjs\";\n\n/**\n * Dependencies needed for structure commands.\n */\nexport interface StructureCommandDeps {\n workbookManager: WorkbookManager;\n namedExpressionManager: NamedExpressionManager;\n tableManager: TableManager;\n styleManager: StyleManager;\n referenceManager: ReferenceManager;\n apiSchemaManager: SchemaManager;\n renameSheetInFormula: (opts: {\n formula: string;\n oldSheetName: string;\n newSheetName: string;\n }) => string;\n renameWorkbookInFormula: (opts: {\n formula: string;\n oldWorkbookName: string;\n newWorkbookName: string;\n }) => string;\n}\n\n// ============================================================================\n// Workbook Commands\n// ============================================================================\n\n/**\n * Command to add a workbook.\n */\nexport class AddWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string\n ) {}\n\n execute(): void {\n this.deps.workbookManager.addWorkbook(this.workbookName);\n this.deps.namedExpressionManager.addWorkbook(this.workbookName);\n this.deps.tableManager.addWorkbook(this.workbookName);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.workbookName)],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.workbookName)],\n removedScopes: [{ type: \"workbook\", workbookName: this.workbookName }],\n };\n }\n\n undo(): void {\n this.deps.workbookManager.removeWorkbook(this.workbookName);\n this.deps.namedExpressionManager.removeWorkbook(this.workbookName);\n this.deps.tableManager.removeWorkbook(this.workbookName);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.ADD_WORKBOOK,\n payload: { workbookName: this.workbookName },\n };\n }\n}\n\n/**\n * Captured state of a workbook for undo purposes.\n */\ninterface WorkbookSnapshot {\n workbook: Workbook;\n namedExpressions: {\n workbookLevel: Map<string, NamedExpression>;\n sheetLevel: Map<string, Map<string, NamedExpression>>;\n };\n tables: Map<string, TableDefinition>;\n conditionalStyles: ConditionalStyle[];\n cellStyles: DirectCellStyle[];\n}\n\n/**\n * Capture the full state of a workbook for later restoration.\n */\nfunction captureWorkbookSnapshot(\n deps: StructureCommandDeps,\n workbookName: string\n): WorkbookSnapshot | undefined {\n const workbook = deps.workbookManager.getWorkbooks().get(workbookName);\n if (!workbook) return undefined;\n\n // Deep clone workbook sheets\n const clonedSheets = new Map<string, Sheet>();\n for (const [name, sheet] of workbook.sheets) {\n clonedSheets.set(name, {\n name: sheet.name,\n index: sheet.index,\n content: new Map(sheet.content),\n metadata: new Map(sheet.metadata),\n sheetMetadata: sheet.sheetMetadata,\n });\n }\n\n const namedExpressions = deps.namedExpressionManager.getNamedExpressions();\n\n const snapshot: WorkbookSnapshot = {\n workbook: {\n name: workbook.name,\n sheets: clonedSheets,\n workbookMetadata: workbook.workbookMetadata,\n },\n namedExpressions: {\n workbookLevel: new Map(\n namedExpressions.workbookExpressions.get(workbookName) || []\n ),\n sheetLevel: new Map(),\n },\n tables: new Map(deps.tableManager.getTables(workbookName)),\n conditionalStyles: deps.styleManager\n .getAllConditionalStyles()\n .filter((s) => s.areas.some((a) => a.workbookName === workbookName)),\n cellStyles: deps.styleManager\n .getAllCellStyles()\n .filter((s) => s.areas.some((a) => a.workbookName === workbookName)),\n };\n\n // Capture sheet-level named expressions\n const sheetExpressions = namedExpressions.sheetExpressions.get(workbookName);\n if (sheetExpressions) {\n for (const [sheetName, expressions] of sheetExpressions) {\n snapshot.namedExpressions.sheetLevel.set(sheetName, new Map(expressions));\n }\n }\n\n return snapshot;\n}\n\n/**\n * Remove a workbook and all its associated data.\n */\nfunction removeWorkbook(\n deps: StructureCommandDeps,\n workbookName: string\n): void {\n deps.workbookManager.removeWorkbook(workbookName);\n deps.namedExpressionManager.removeWorkbook(workbookName);\n deps.tableManager.removeWorkbook(workbookName);\n deps.styleManager.removeWorkbookStyles(workbookName);\n deps.referenceManager.invalidateWorkbook(workbookName);\n}\n\n/**\n * Rename a workbook across all managers.\n */\nfunction renameWorkbookAcrossManagers(\n deps: StructureCommandDeps,\n oldName: string,\n newName: string\n): CellAddress[] {\n deps.workbookManager.renameWorkbook({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.namedExpressionManager.renameWorkbook({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.tableManager.updateTablesForWorkbookRename({\n workbookName: oldName,\n newWorkbookName: newName,\n });\n deps.styleManager.updateWorkbookName(oldName, newName);\n const changedCells = deps.workbookManager.updateAllFormulas((formula) =>\n deps.renameWorkbookInFormula({\n formula,\n oldWorkbookName: oldName,\n newWorkbookName: newName,\n })\n );\n deps.referenceManager.updateWorkbookName(oldName, newName);\n deps.apiSchemaManager.updateForWorkbookRename(oldName, newName);\n return changedCells;\n}\n\n/**\n * Rename a sheet across all managers.\n */\nfunction renameSheetAcrossManagers(\n deps: StructureCommandDeps,\n opts: { workbookName: string; sheetName: string; newSheetName: string }\n): CellAddress[] {\n deps.workbookManager.renameSheet(opts);\n deps.namedExpressionManager.renameSheet(opts);\n deps.tableManager.updateTablesForSheetRename(opts);\n deps.styleManager.updateSheetName(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n const changedCells = deps.workbookManager.updateAllFormulas((formula) =>\n deps.renameSheetInFormula({\n formula,\n oldSheetName: opts.sheetName,\n newSheetName: opts.newSheetName,\n })\n );\n deps.referenceManager.updateSheetName(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n deps.apiSchemaManager.updateForSheetRename(\n opts.workbookName,\n opts.sheetName,\n opts.newSheetName\n );\n return changedCells;\n}\n\nfunction getWorkbookSnapshotResourceKeys(\n workbookName: string,\n snapshot: WorkbookSnapshot | undefined\n): string[] {\n const resourceKeys = new Set<string>([getWorkbookResourceKey(workbookName)]);\n if (!snapshot) {\n return Array.from(resourceKeys);\n }\n\n for (const tableName of snapshot.tables.keys()) {\n resourceKeys.add(getTableResourceKey({ workbookName, tableName }));\n }\n for (const name of snapshot.namedExpressions.workbookLevel.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({ expressionName: name, workbookName })\n );\n }\n for (const [sheetName, expressions] of snapshot.namedExpressions.sheetLevel) {\n resourceKeys.add(getSheetResourceKey({ workbookName, sheetName }));\n for (const name of expressions.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({\n expressionName: name,\n workbookName,\n sheetName,\n })\n );\n }\n }\n\n return Array.from(resourceKeys);\n}\n\nfunction getSheetSnapshotResourceKeys(\n workbookName: string,\n sheetName: string,\n snapshot: SheetSnapshot | undefined\n): string[] {\n const resourceKeys = new Set<string>([\n getWorkbookResourceKey(workbookName),\n getSheetResourceKey({ workbookName, sheetName }),\n ]);\n if (!snapshot) {\n return Array.from(resourceKeys);\n }\n\n for (const tableName of snapshot.tables.keys()) {\n resourceKeys.add(getTableResourceKey({ workbookName, tableName }));\n }\n for (const name of snapshot.namedExpressions.keys()) {\n resourceKeys.add(\n getNamedExpressionResourceKey({\n expressionName: name,\n workbookName,\n sheetName,\n })\n );\n }\n\n return Array.from(resourceKeys);\n}\n\n/**\n * Restore tables from a snapshot.\n */\nfunction restoreTables(\n tableManager: TableManager,\n tables: Map<string, TableDefinition>,\n workbookName: string\n): void {\n for (const [tableName, table] of tables) {\n tableManager.addTable({\n workbookName,\n tableName,\n sheetName: table.sheetName,\n start: `${String.fromCharCode(65 + table.start.colIndex)}${\n table.start.rowIndex + 1\n }`,\n numRows: table.endRow,\n numCols: table.headers.size,\n getCellValue: () => undefined,\n });\n }\n}\n\n/**\n * Restore styles from a snapshot.\n */\nfunction restoreStyles(\n styleManager: StyleManager,\n conditionalStyles: ConditionalStyle[],\n cellStyles: DirectCellStyle[]\n): void {\n for (const style of conditionalStyles) {\n styleManager.addConditionalStyle(style);\n }\n for (const style of cellStyles) {\n styleManager.addCellStyle(style);\n }\n}\n\n/**\n * Command to remove a workbook.\n */\nexport class RemoveWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: WorkbookSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string\n ) {}\n\n execute(): void {\n this.snapshot = captureWorkbookSnapshot(this.deps, this.workbookName);\n removeWorkbook(this.deps, this.workbookName);\n const resourceKeys = getWorkbookSnapshotResourceKeys(\n this.workbookName,\n this.snapshot\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys,\n removedScopes: [{ type: \"workbook\", workbookName: this.workbookName }],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys,\n };\n }\n\n undo(): void {\n if (!this.snapshot) return;\n\n // Restore workbook structure\n this.deps.workbookManager.addWorkbook(this.workbookName);\n this.deps.namedExpressionManager.addWorkbook(this.workbookName);\n this.deps.tableManager.addWorkbook(this.workbookName);\n\n // Restore sheets\n for (const [sheetName, sheet] of this.snapshot.workbook.sheets) {\n this.deps.workbookManager.addSheet({\n workbookName: this.workbookName,\n sheetName,\n });\n this.deps.namedExpressionManager.addSheet({\n workbookName: this.workbookName,\n sheetName,\n });\n this.deps.workbookManager.setSheetContent(\n { workbookName: this.workbookName, sheetName },\n sheet.content\n );\n }\n\n // Restore named expressions\n for (const [name, expr] of this.snapshot.namedExpressions.workbookLevel) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.workbookName,\n });\n }\n for (const [sheetName, expressions] of this.snapshot.namedExpressions.sheetLevel) {\n for (const [name, expr] of expressions) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.workbookName,\n sheetName,\n });\n }\n }\n\n // Restore tables and styles\n restoreTables(this.deps.tableManager, this.snapshot.tables, this.workbookName);\n restoreStyles(this.deps.styleManager, this.snapshot.conditionalStyles, this.snapshot.cellStyles);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.REMOVE_WORKBOOK,\n payload: { workbookName: this.workbookName },\n };\n }\n}\n\n/**\n * Command to rename a workbook.\n */\nexport class RenameWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: WorkbookSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private workbookName: string,\n private newWorkbookName: string\n ) {}\n\n execute(): void {\n this.snapshot = captureWorkbookSnapshot(this.deps, this.workbookName);\n const changedCells = renameWorkbookAcrossManagers(\n this.deps,\n this.workbookName,\n this.newWorkbookName\n );\n this.executeFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getWorkbookSnapshotResourceKeys(this.workbookName, this.snapshot),\n ...getWorkbookSnapshotResourceKeys(this.newWorkbookName, this.snapshot),\n ])\n ),\n };\n }\n\n undo(): void {\n const changedCells = renameWorkbookAcrossManagers(\n this.deps,\n this.newWorkbookName,\n this.workbookName\n );\n this.undoFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getWorkbookSnapshotResourceKeys(this.workbookName, this.snapshot),\n ...getWorkbookSnapshotResourceKeys(this.newWorkbookName, this.snapshot),\n ])\n ),\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.RENAME_WORKBOOK,\n payload: {\n workbookName: this.workbookName,\n newWorkbookName: this.newWorkbookName,\n },\n };\n }\n}\n\n/**\n * Command to clone a workbook.\n * Undo simply removes the cloned workbook.\n */\nexport class CloneWorkbookCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private fromWorkbookName: string,\n private toWorkbookName: string\n ) {}\n\n execute(): void {\n const {\n workbookManager,\n namedExpressionManager,\n tableManager,\n styleManager,\n renameWorkbookInFormula,\n } = this.deps;\n\n // Check if source workbook exists\n const sourceWorkbook = workbookManager\n .getWorkbooks()\n .get(this.fromWorkbookName);\n if (!sourceWorkbook) {\n throw new Error(`Source workbook \"${this.fromWorkbookName}\" not found`);\n }\n\n // Check if target workbook name already exists\n if (workbookManager.getWorkbooks().has(this.toWorkbookName)) {\n throw new Error(\n `Target workbook \"${this.toWorkbookName}\" already exists`\n );\n }\n\n // Create new workbook\n workbookManager.addWorkbook(this.toWorkbookName);\n namedExpressionManager.addWorkbook(this.toWorkbookName);\n tableManager.addWorkbook(this.toWorkbookName);\n\n // Clone all sheets from source workbook\n for (const [sheetName, sheet] of sourceWorkbook.sheets) {\n // Add sheet to target workbook\n workbookManager.addSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n namedExpressionManager.addSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n\n // Copy all cell content\n workbookManager.setSheetContent(\n { workbookName: this.toWorkbookName, sheetName: sheetName },\n new Map(sheet.content)\n );\n\n // Copy all cell metadata\n const targetSheet = workbookManager.getSheet({\n workbookName: this.toWorkbookName,\n sheetName: sheetName,\n });\n if (targetSheet) {\n targetSheet.metadata = new Map(sheet.metadata);\n\n // Copy sheet metadata\n if (sheet.sheetMetadata !== undefined) {\n targetSheet.sheetMetadata = structuredClone(sheet.sheetMetadata);\n }\n }\n }\n\n // Copy workbook metadata\n const targetWorkbook = workbookManager\n .getWorkbooks()\n .get(this.toWorkbookName);\n if (targetWorkbook && sourceWorkbook.workbookMetadata !== undefined) {\n targetWorkbook.workbookMetadata = structuredClone(\n sourceWorkbook.workbookMetadata\n );\n }\n\n // Clone workbook-scoped named expressions\n const allExpressions = namedExpressionManager.getNamedExpressions();\n const sourceWorkbookExpressions = allExpressions.workbookExpressions.get(\n this.fromWorkbookName\n );\n if (sourceWorkbookExpressions) {\n for (const [expressionName, expression] of sourceWorkbookExpressions) {\n namedExpressionManager.addNamedExpression({\n expressionName,\n expression: expression.expression,\n workbookName: this.toWorkbookName,\n });\n }\n }\n\n // Clone sheet-scoped named expressions\n const sourceSheetExpressions = allExpressions.sheetExpressions.get(\n this.fromWorkbookName\n );\n if (sourceSheetExpressions) {\n for (const [sheetName, sheetExpressions] of sourceSheetExpressions) {\n for (const [expressionName, expression] of sheetExpressions) {\n namedExpressionManager.addNamedExpression({\n expressionName,\n expression: expression.expression,\n workbookName: this.toWorkbookName,\n sheetName,\n });\n }\n }\n }\n\n // Clone tables\n const sourceTables = tableManager.tables.get(this.fromWorkbookName);\n if (sourceTables) {\n for (const [tableName] of sourceTables) {\n tableManager.copyTable(\n { workbookName: this.fromWorkbookName, tableName },\n { workbookName: this.toWorkbookName, tableName }\n );\n }\n }\n\n // Clone conditional styles\n const allConditionalStyles = styleManager.getAllConditionalStyles();\n for (const style of allConditionalStyles) {\n if (\n style.areas.some((area) => area.workbookName === this.fromWorkbookName)\n ) {\n const newStyle: ConditionalStyle = {\n ...style,\n areas: style.areas.map((area) =>\n area.workbookName === this.fromWorkbookName\n ? { ...area, workbookName: this.toWorkbookName }\n : area\n ),\n };\n styleManager.addConditionalStyle(newStyle);\n }\n }\n\n // Clone cell styles\n const allCellStyles = styleManager.getAllCellStyles();\n for (const style of allCellStyles) {\n if (\n style.areas.some((area) => area.workbookName === this.fromWorkbookName)\n ) {\n const newStyle: DirectCellStyle = {\n ...style,\n areas: style.areas.map((area) =>\n area.workbookName === this.fromWorkbookName\n ? { ...area, workbookName: this.toWorkbookName }\n : area\n ),\n };\n styleManager.addCellStyle(newStyle);\n }\n }\n\n // Update formulas in cloned workbook that reference the source workbook\n workbookManager.updateFormulasForWorkbook(this.toWorkbookName, (formula) =>\n renameWorkbookInFormula({\n formula,\n oldWorkbookName: this.fromWorkbookName,\n newWorkbookName: this.toWorkbookName,\n })\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.toWorkbookName)],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [getWorkbookResourceKey(this.toWorkbookName)],\n removedScopes: [{ type: \"workbook\", workbookName: this.toWorkbookName }],\n };\n }\n\n undo(): void {\n // Undo clone = remove the cloned workbook\n removeWorkbook(this.deps, this.toWorkbookName);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.CLONE_WORKBOOK,\n payload: {\n fromWorkbookName: this.fromWorkbookName,\n toWorkbookName: this.toWorkbookName,\n },\n };\n }\n}\n\n// ============================================================================\n// Sheet Commands\n// ============================================================================\n\n/**\n * Command to add a sheet.\n */\nexport class AddSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: { workbookName: string; sheetName: string }\n ) {}\n\n execute(): void {\n this.deps.workbookManager.addSheet(this.opts);\n this.deps.namedExpressionManager.addSheet(this.opts);\n const resourceKey = getSheetResourceKey(this.opts);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey],\n removedScopes: [{ type: \"sheet\", ...this.opts }],\n };\n }\n\n undo(): void {\n this.deps.workbookManager.removeSheet(this.opts);\n this.deps.namedExpressionManager.removeSheet(this.opts);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.ADD_SHEET,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Captured state of a sheet for undo purposes.\n */\ninterface SheetSnapshot {\n sheet: Sheet;\n namedExpressions: Map<string, NamedExpression>;\n tables: Map<string, TableDefinition>;\n conditionalStyles: ConditionalStyle[];\n cellStyles: DirectCellStyle[];\n}\n\n/**\n * Command to remove a sheet.\n */\nexport class RemoveSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: SheetSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: { workbookName: string; sheetName: string }\n ) {}\n\n execute(): void {\n // Capture sheet state before removal\n const sheet = this.deps.workbookManager.getSheet(this.opts);\n if (sheet) {\n const namedExpressions =\n this.deps.namedExpressionManager.getNamedExpressions();\n const sheetExpressions =\n namedExpressions.sheetExpressions\n .get(this.opts.workbookName)\n ?.get(this.opts.sheetName) || new Map();\n\n // Get tables on this sheet\n const allTables = this.deps.tableManager.getTables(\n this.opts.workbookName\n );\n const sheetTables = new Map<string, TableDefinition>();\n for (const [name, table] of allTables) {\n if (table.sheetName === this.opts.sheetName) {\n sheetTables.set(name, table);\n }\n }\n\n this.snapshot = {\n sheet: {\n name: sheet.name,\n index: sheet.index,\n content: new Map(sheet.content),\n metadata: new Map(sheet.metadata),\n sheetMetadata: sheet.sheetMetadata,\n },\n namedExpressions: new Map(sheetExpressions),\n tables: sheetTables,\n conditionalStyles: this.deps.styleManager\n .getAllConditionalStyles()\n .filter((s) =>\n s.areas.some(\n (a) =>\n a.workbookName === this.opts.workbookName &&\n a.sheetName === this.opts.sheetName\n )\n ),\n cellStyles: this.deps.styleManager\n .getAllCellStyles()\n .filter((s) =>\n s.areas.some(\n (a) =>\n a.workbookName === this.opts.workbookName &&\n a.sheetName === this.opts.sheetName\n )\n ),\n };\n }\n\n // Execute removal\n this.deps.workbookManager.removeSheet(this.opts);\n this.deps.namedExpressionManager.removeSheet(this.opts);\n this.deps.tableManager.removeSheet(this.opts);\n this.deps.styleManager.removeSheetStyles(\n this.opts.workbookName,\n this.opts.sheetName\n );\n this.deps.referenceManager.invalidateSheet(\n this.opts.workbookName,\n this.opts.sheetName\n );\n const resourceKeys = getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n );\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys,\n removedScopes: [{ type: \"sheet\", ...this.opts }],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys,\n };\n }\n\n undo(): void {\n if (!this.snapshot) return;\n\n // Restore sheet structure\n this.deps.workbookManager.addSheet(this.opts);\n this.deps.namedExpressionManager.addSheet(this.opts);\n this.deps.workbookManager.setSheetContent(this.opts, this.snapshot.sheet.content);\n\n // Restore named expressions\n for (const [name, expr] of this.snapshot.namedExpressions) {\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: name,\n expression: expr.expression,\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n });\n }\n\n // Restore tables and styles\n restoreTables(this.deps.tableManager, this.snapshot.tables, this.opts.workbookName);\n restoreStyles(this.deps.styleManager, this.snapshot.conditionalStyles, this.snapshot.cellStyles);\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.REMOVE_SHEET,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Command to rename a sheet.\n */\nexport class RenameSheetCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private snapshot: SheetSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: StructureCommandDeps,\n private opts: {\n workbookName: string;\n sheetName: string;\n newSheetName: string;\n }\n ) {}\n\n execute(): void {\n const namedExpressions =\n this.deps.namedExpressionManager.getNamedExpressions().sheetExpressions\n .get(this.opts.workbookName)\n ?.get(this.opts.sheetName) || new Map();\n const tables = new Map<string, TableDefinition>();\n for (const [name, table] of this.deps.tableManager.getTables(\n this.opts.workbookName\n )) {\n if (table.sheetName === this.opts.sheetName) {\n tables.set(name, table);\n }\n }\n const sheet = this.deps.workbookManager.getSheet(this.opts);\n this.snapshot = {\n sheet: sheet!,\n namedExpressions: new Map(namedExpressions),\n tables,\n conditionalStyles: [],\n cellStyles: [],\n };\n const changedCells = renameSheetAcrossManagers(this.deps, this.opts);\n this.executeFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n ),\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.newSheetName,\n this.snapshot\n ),\n ])\n ),\n };\n }\n\n undo(): void {\n const changedCells = renameSheetAcrossManagers(this.deps, {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.newSheetName,\n newSheetName: this.opts.sheetName,\n });\n this.undoFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: Array.from(\n new Set([\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.sheetName,\n this.snapshot\n ),\n ...getSheetSnapshotResourceKeys(\n this.opts.workbookName,\n this.opts.newSheetName,\n this.snapshot\n ),\n ])\n ),\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.RENAME_SHEET,\n payload: this.opts,\n };\n }\n}\n"
6
6
  ],
7
- "mappings": ";AA0BA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCO,MAAM,mBAA4C;AAAA,EAM7C;AAAA,EACA;AAAA,EAND,uBAAuB;AAAA,EACxB,mBAAmB,0BAA0B;AAAA,EAC7C,gBAAgB,0BAA0B;AAAA,EAElD,WAAW,CACD,MACA,cACR;AAAA,IAFQ;AAAA,IACA;AAAA;AAAA,EAGV,OAAO,GAAS;AAAA,IACd,KAAK,KAAK,gBAAgB,YAAY,KAAK,YAAY;AAAA,IACvD,KAAK,KAAK,uBAAuB,YAAY,KAAK,YAAY;AAAA,IAC9D,KAAK,KAAK,aAAa,YAAY,KAAK,YAAY;AAAA,IACpD,KAAK,mBAAmB;AAAA,MACtB,cAAc,CAAC;AAAA,MACf,cAAc,CAAC,uBAAuB,KAAK,YAAY,CAAC;AAAA,IAC1D;AAAA,IACA,KAAK,gBAAgB;AAAA,MACnB,cAAc,CAAC;AAAA,MACf,cAAc,CAAC,uBAAuB,KAAK,YAAY,CAAC;AAAA,MACxD,eAAe,CAAC,EAAE,MAAM,YAAY,cAAc,KAAK,aAAa,CAAC;AAAA,IACvE;AAAA;AAAA,EAGF,IAAI,GAAS;AAAA,IACX,KAAK,KAAK,gBAAgB,eAAe,KAAK,YAAY;AAAA,IAC1D,KAAK,KAAK,uBAAuB,eAAe,KAAK,YAAY;AAAA,IACjE,KAAK,KAAK,aAAa,eAAe,KAAK,YAAY;AAAA;AAAA,EAGzD,wBAAwB,CAAC,OAAiD;AAAA,IACxE,OAAO,UAAU,YAAY,KAAK,mBAAmB,KAAK;AAAA;AAAA,EAG5D,QAAQ,GAAiB;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,YAAY;AAAA,MAClB,SAAS,EAAE,cAAc,KAAK,aAAa;AAAA,IAC7C;AAAA;AAEJ;AAmBA,SAAS,uBAAuB,CAC9B,MACA,cAC8B;AAAA,EAC9B,MAAM,WAAW,KAAK,gBAAgB,aAAa,EAAE,IAAI,YAAY;AAAA,EACrE,IAAI,CAAC;AAAA,IAAU;AAAA,EAGf,MAAM,eAAe,IAAI;AAAA,EACzB,YAAY,MAAM,UAAU,SAAS,QAAQ;AAAA,IAC3C,aAAa,IAAI,MAAM;AAAA,MACrB,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,SAAS,IAAI,IAAI,MAAM,OAAO;AAAA,MAC9B,UAAU,IAAI,IAAI,MAAM,QAAQ;AAAA,MAChC,eAAe,MAAM;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,mBAAmB,KAAK,uBAAuB,oBAAoB;AAAA,EAEzE,MAAM,WAA6B;AAAA,IACjC,UAAU;AAAA,MACR,MAAM,SAAS;AAAA,MACf,QAAQ;AAAA,MACR,kBAAkB,SAAS;AAAA,IAC7B;AAAA,IACA,kBAAkB;AAAA,MAChB,eAAe,IAAI,IACjB,iBAAiB,oBAAoB,IAAI,YAAY,KAAK,CAAC,CAC7D;AAAA,MACA,YAAY,IAAI;AAAA,IAClB;AAAA,IACA,QAAQ,IAAI,IAAI,KAAK,aAAa,UAAU,YAAY,CAAC;AAAA,IACzD,mBAAmB,KAAK,aACrB,wBAAwB,EACxB,OAAO,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,iBAAiB,YAAY,CAAC;AAAA,IACrE,YAAY,KAAK,aACd,iBAAiB,EACjB,OAAO,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,iBAAiB,YAAY,CAAC;AAAA,EACvE;AAAA,EAGA,MAAM,mBAAmB,iBAAiB,iBAAiB,IAAI,YAAY;AAAA,EAC3E,IAAI,kBAAkB;AAAA,IACpB,YAAY,WAAW,gBAAgB,kBAAkB;AAAA,MACvD,SAAS,iBAAiB,WAAW,IAAI,WAAW,IAAI,IAAI,WAAW,CAAC;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAMT,SAAS,cAAc,CACrB,MACA,cACM;AAAA,EACN,KAAK,gBAAgB,eAAe,YAAY;AAAA,EAChD,KAAK,uBAAuB,eAAe,YAAY;AAAA,EACvD,KAAK,aAAa,eAAe,YAAY;AAAA,EAC7C,KAAK,aAAa,qBAAqB,YAAY;AAAA,EACnD,KAAK,iBAAiB,mBAAmB,YAAY;AAAA;AAMvD,SAAS,4BAA4B,CACnC,MACA,SACA,SACe;AAAA,EACf,KAAK,gBAAgB,eAAe;AAAA,IAClC,cAAc;AAAA,IACd,iBAAiB;AAAA,EACnB,CAAC;AAAA,EACD,KAAK,uBAAuB,eAAe;AAAA,IACzC,cAAc;AAAA,IACd,iBAAiB;AAAA,EACnB,CAAC;AAAA,EACD,KAAK,aAAa,8BAA8B;AAAA,IAC9C,cAAc;AAAA,IACd,iBAAiB;AAAA,EACnB,CAAC;AAAA,EACD,KAAK,aAAa,mBAAmB,SAAS,OAAO;AAAA,EACrD,MAAM,eAAe,KAAK,gBAAgB,kBAAkB,CAAC,YAC3D,KAAK,wBAAwB;AAAA,IAC3B;AAAA,IACA,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,EACnB,CAAC,CACH;AAAA,EACA,KAAK,iBAAiB,mBAAmB,SAAS,OAAO;AAAA,EACzD,KAAK,iBAAiB,wBAAwB,SAAS,OAAO;AAAA,EAC9D,OAAO;AAAA;AAMT,SAAS,yBAAyB,CAChC,MACA,MACe;AAAA,EACf,KAAK,gBAAgB,YAAY,IAAI;AAAA,EACrC,KAAK,uBAAuB,YAAY,IAAI;AAAA,EAC5C,KAAK,aAAa,2BAA2B,IAAI;AAAA,EACjD,KAAK,aAAa,gBAChB,KAAK,cACL,KAAK,WACL,KAAK,YACP;AAAA,EACA,MAAM,eAAe,KAAK,gBAAgB,kBAAkB,CAAC,YAC3D,KAAK,qBAAqB;AAAA,IACxB;AAAA,IACA,cAAc,KAAK;AAAA,IACnB,cAAc,KAAK;AAAA,EACrB,CAAC,CACH;AAAA,EACA,KAAK,iBAAiB,gBACpB,KAAK,cACL,KAAK,WACL,KAAK,YACP;AAAA,EACA,KAAK,iBAAiB,qBACpB,KAAK,cACL,KAAK,WACL,KAAK,YACP;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,+BAA+B,CACtC,cACA,UACU;AAAA,EACV,MAAM,eAAe,IAAI,IAAY,CAAC,uBAAuB,YAAY,CAAC,CAAC;AAAA,EAC3E,IAAI,CAAC,UAAU;AAAA,IACb,OAAO,MAAM,KAAK,YAAY;AAAA,EAChC;AAAA,EAEA,WAAW,aAAa,SAAS,OAAO,KAAK,GAAG;AAAA,IAC9C,aAAa,IAAI,oBAAoB,EAAE,cAAc,UAAU,CAAC,CAAC;AAAA,EACnE;AAAA,EACA,WAAW,QAAQ,SAAS,iBAAiB,cAAc,KAAK,GAAG;AAAA,IACjE,aAAa,IACX,8BAA8B,EAAE,gBAAgB,MAAM,aAAa,CAAC,CACtE;AAAA,EACF;AAAA,EACA,YAAY,WAAW,gBAAgB,SAAS,iBAAiB,YAAY;AAAA,IAC3E,aAAa,IAAI,oBAAoB,EAAE,cAAc,UAAU,CAAC,CAAC;AAAA,IACjE,WAAW,QAAQ,YAAY,KAAK,GAAG;AAAA,MACrC,aAAa,IACX,8BAA8B;AAAA,QAC5B,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA,MACF,CAAC,CACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,MAAM,KAAK,YAAY;AAAA;AAGhC,SAAS,4BAA4B,CACnC,cACA,WACA,UACU;AAAA,EACV,MAAM,eAAe,IAAI,IAAY;AAAA,IACnC,uBAAuB,YAAY;AAAA,IACnC,oBAAoB,EAAE,cAAc,UAAU,CAAC;AAAA,EACjD,CAAC;AAAA,EACD,IAAI,CAAC,UAAU;AAAA,IACb,OAAO,MAAM,KAAK,YAAY;AAAA,EAChC;AAAA,EAEA,WAAW,aAAa,SAAS,OAAO,KAAK,GAAG;AAAA,IAC9C,aAAa,IAAI,oBAAoB,EAAE,cAAc,UAAU,CAAC,CAAC;AAAA,EACnE;AAAA,EACA,WAAW,QAAQ,SAAS,iBAAiB,KAAK,GAAG;AAAA,IACnD,aAAa,IACX,8BAA8B;AAAA,MAC5B,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,IACF,CAAC,CACH;AAAA,EACF;AAAA,EAEA,OAAO,MAAM,KAAK,YAAY;AAAA;AAMhC,SAAS,aAAa,CACpB,cACA,QACA,cACM;AAAA,EACN,YAAY,WAAW,UAAU,QAAQ;AAAA,IACvC,aAAa,SAAS;AAAA,MACpB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,MACjB,OAAO,GAAG,OAAO,aAAa,KAAK,MAAM,MAAM,QAAQ,IACrD,MAAM,MAAM,WAAW;AAAA,MAEzB,SAAS,MAAM;AAAA,MACf,SAAS,MAAM,QAAQ;AAAA,MACvB,cAAc,MAAG;AAAA,QAAG;AAAA;AAAA,IACtB,CAAC;AAAA,EACH;AAAA;AAMF,SAAS,aAAa,CACpB,cACA,mBACA,YACM;AAAA,EACN,WAAW,SAAS,mBAAmB;AAAA,IACrC,aAAa,oBAAoB,KAAK;AAAA,EACxC;AAAA,EACA,WAAW,SAAS,YAAY;AAAA,IAC9B,aAAa,aAAa,KAAK;AAAA,EACjC;AAAA;AAAA;AAMK,MAAM,sBAA+C;AAAA,EAOhD;AAAA,EACA;AAAA,EAPD,uBAAuB;AAAA,EACxB;AAAA,EACA,mBAAmB,0BAA0B;AAAA,EAC7C,gBAAgB,0BAA0B;AAAA,EAElD,WAAW,CACD,MACA,cACR;AAAA,IAFQ;AAAA,IACA;AAAA;AAAA,EAGV,OAAO,GAAS;AAAA,IACd,KAAK,WAAW,wBAAwB,KAAK,MAAM,KAAK,YAAY;AAAA,IACpE,eAAe,KAAK,MAAM,KAAK,YAAY;AAAA,IAC3C,MAAM,eAAe,gCACnB,KAAK,cACL,KAAK,QACP;AAAA,IACA,KAAK,mBAAmB;AAAA,MACtB,cAAc,CAAC;AAAA,MACf;AAAA,MACA,eAAe,CAAC,EAAE,MAAM,YAAY,cAAc,KAAK,aAAa,CAAC;AAAA,IACvE;AAAA,IACA,KAAK,gBAAgB;AAAA,MACnB,cAAc,CAAC;AAAA,MACf;AAAA,IACF;AAAA;AAAA,EAGF,IAAI,GAAS;AAAA,IACX,IAAI,CAAC,KAAK;AAAA,MAAU;AAAA,IAGpB,KAAK,KAAK,gBAAgB,YAAY,KAAK,YAAY;AAAA,IACvD,KAAK,KAAK,uBAAuB,YAAY,KAAK,YAAY;AAAA,IAC9D,KAAK,KAAK,aAAa,YAAY,KAAK,YAAY;AAAA,IAGpD,YAAY,WAAW,UAAU,KAAK,SAAS,SAAS,QAAQ;AAAA,MAC9D,KAAK,KAAK,gBAAgB,SAAS;AAAA,QACjC,cAAc,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,MACD,KAAK,KAAK,uBAAuB,SAAS;AAAA,QACxC,cAAc,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,MACD,KAAK,KAAK,gBAAgB,gBACxB,EAAE,cAAc,KAAK,cAAc,UAAU,GAC7C,MAAM,OACR;AAAA,IACF;AAAA,IAGA,YAAY,MAAM,SAAS,KAAK,SAAS,iBAAiB,eAAe;AAAA,MACvE,KAAK,KAAK,uBAAuB,mBAAmB;AAAA,QAClD,gBAAgB;AAAA,QAChB,YAAY,KAAK;AAAA,QACjB,cAAc,KAAK;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,IACA,YAAY,WAAW,gBAAgB,KAAK,SAAS,iBAAiB,YAAY;AAAA,MAChF,YAAY,MAAM,SAAS,aAAa;AAAA,QACtC,KAAK,KAAK,uBAAuB,mBAAmB;AAAA,UAClD,gBAAgB;AAAA,UAChB,YAAY,KAAK;AAAA,UACjB,cAAc,KAAK;AAAA,UACnB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAGA,cAAc,KAAK,KAAK,cAAc,KAAK,SAAS,QAAQ,KAAK,YAAY;AAAA,IAC7E,cAAc,KAAK,KAAK,cAAc,KAAK,SAAS,mBAAmB,KAAK,SAAS,UAAU;AAAA;AAAA,EAGjG,wBAAwB,CAAC,OAAiD;AAAA,IACxE,OAAO,UAAU,YAAY,KAAK,mBAAmB,KAAK;AAAA;AAAA,EAG5D,QAAQ,GAAiB;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,YAAY;AAAA,MAClB,SAAS,EAAE,cAAc,KAAK,aAAa;AAAA,IAC7C;AAAA;AAEJ;AAAA;AAKO,MAAM,sBAA+C;AAAA,EAOhD;AAAA,EACA;AAAA,EACA;AAAA,EARD,uBAAuB;AAAA,EACxB;AAAA,EACA,mBAAmB,0BAA0B;AAAA,EAC7C,gBAAgB,0BAA0B;AAAA,EAElD,WAAW,CACD,MACA,cACA,iBACR;AAAA,IAHQ;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAGV,OAAO,GAAS;AAAA,IACd,KAAK,WAAW,wBAAwB,KAAK,MAAM,KAAK,YAAY;AAAA,IACpE,MAAM,eAAe,6BACnB,KAAK,MACL,KAAK,cACL,KAAK,eACP;AAAA,IACA,KAAK,mBAAmB;AAAA,MACtB,cAAc,aAAa,IAAI,CAAC,aAAa;AAAA,QAC3C;AAAA,QACA,YAAY;AAAA,QACZ,WAAW;AAAA,MACb,EAAE;AAAA,MACF,cAAc,MAAM,KAClB,IAAI,IAAI;AAAA,QACN,GAAG,gCAAgC,KAAK,cAAc,KAAK,QAAQ;AAAA,QACnE,GAAG,gCAAgC,KAAK,iBAAiB,KAAK,QAAQ;AAAA,MACxE,CAAC,CACH;AAAA,IACF;AAAA;AAAA,EAGF,IAAI,GAAS;AAAA,IACX,MAAM,eAAe,6BACnB,KAAK,MACL,KAAK,iBACL,KAAK,YACP;AAAA,IACA,KAAK,gBAAgB;AAAA,MACnB,cAAc,aAAa,IAAI,CAAC,aAAa;AAAA,QAC3C;AAAA,QACA,YAAY;AAAA,QACZ,WAAW;AAAA,MACb,EAAE;AAAA,MACF,cAAc,MAAM,KAClB,IAAI,IAAI;AAAA,QACN,GAAG,gCAAgC,KAAK,cAAc,KAAK,QAAQ;AAAA,QACnE,GAAG,gCAAgC,KAAK,iBAAiB,KAAK,QAAQ;AAAA,MACxE,CAAC,CACH;AAAA,IACF;AAAA;AAAA,EAGF,wBAAwB,CAAC,OAAiD;AAAA,IACxE,OAAO,UAAU,YAAY,KAAK,mBAAmB,KAAK;AAAA;AAAA,EAG5D,QAAQ,GAAiB;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,YAAY;AAAA,MAClB,SAAS;AAAA,QACP,cAAc,KAAK;AAAA,QACnB,iBAAiB,KAAK;AAAA,MACxB;AAAA,IACF;AAAA;AAEJ;AAAA;AAMO,MAAM,qBAA8C;AAAA,EAM/C;AAAA,EACA;AAAA,EACA;AAAA,EAPD,uBAAuB;AAAA,EACxB,mBAAmB,0BAA0B;AAAA,EAC7C,gBAAgB,0BAA0B;AAAA,EAElD,WAAW,CACD,MACA,kBACA,gBACR;AAAA,IAHQ;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAGV,OAAO,GAAS;AAAA,IACd;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,KAAK;AAAA,IAGT,MAAM,iBAAiB,gBACpB,aAAa,EACb,IAAI,KAAK,gBAAgB;AAAA,IAC5B,IAAI,CAAC,gBAAgB;AAAA,MACnB,MAAM,IAAI,MAAM,oBAAoB,KAAK,6BAA6B;AAAA,IACxE;AAAA,IAGA,IAAI,gBAAgB,aAAa,EAAE,IAAI,KAAK,cAAc,GAAG;AAAA,MAC3D,MAAM,IAAI,MACR,oBAAoB,KAAK,gCAC3B;AAAA,IACF;AAAA,IAGA,gBAAgB,YAAY,KAAK,cAAc;AAAA,IAC/C,uBAAuB,YAAY,KAAK,cAAc;AAAA,IACtD,aAAa,YAAY,KAAK,cAAc;AAAA,IAG5C,YAAY,WAAW,UAAU,eAAe,QAAQ;AAAA,MAEtD,gBAAgB,SAAS;AAAA,QACvB,cAAc,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,MACD,uBAAuB,SAAS;AAAA,QAC9B,cAAc,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,MAGD,gBAAgB,gBACd,EAAE,cAAc,KAAK,gBAAgB,UAAqB,GAC1D,IAAI,IAAI,MAAM,OAAO,CACvB;AAAA,MAGA,MAAM,cAAc,gBAAgB,SAAS;AAAA,QAC3C,cAAc,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,MACD,IAAI,aAAa;AAAA,QACf,YAAY,WAAW,IAAI,IAAI,MAAM,QAAQ;AAAA,QAG7C,IAAI,MAAM,kBAAkB,WAAW;AAAA,UACrC,YAAY,gBAAgB,gBAAgB,MAAM,aAAa;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAAA,IAGA,MAAM,iBAAiB,gBACpB,aAAa,EACb,IAAI,KAAK,cAAc;AAAA,IAC1B,IAAI,kBAAkB,eAAe,qBAAqB,WAAW;AAAA,MACnE,eAAe,mBAAmB,gBAChC,eAAe,gBACjB;AAAA,IACF;AAAA,IAGA,MAAM,iBAAiB,uBAAuB,oBAAoB;AAAA,IAClE,MAAM,4BAA4B,eAAe,oBAAoB,IACnE,KAAK,gBACP;AAAA,IACA,IAAI,2BAA2B;AAAA,MAC7B,YAAY,gBAAgB,eAAe,2BAA2B;AAAA,QACpE,uBAAuB,mBAAmB;AAAA,UACxC;AAAA,UACA,YAAY,WAAW;AAAA,UACvB,cAAc,KAAK;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAGA,MAAM,yBAAyB,eAAe,iBAAiB,IAC7D,KAAK,gBACP;AAAA,IACA,IAAI,wBAAwB;AAAA,MAC1B,YAAY,WAAW,qBAAqB,wBAAwB;AAAA,QAClE,YAAY,gBAAgB,eAAe,kBAAkB;AAAA,UAC3D,uBAAuB,mBAAmB;AAAA,YACxC;AAAA,YACA,YAAY,WAAW;AAAA,YACvB,cAAc,KAAK;AAAA,YACnB;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAGA,MAAM,eAAe,aAAa,OAAO,IAAI,KAAK,gBAAgB;AAAA,IAClE,IAAI,cAAc;AAAA,MAChB,YAAY,cAAc,cAAc;AAAA,QACtC,aAAa,UACX,EAAE,cAAc,KAAK,kBAAkB,UAAU,GACjD,EAAE,cAAc,KAAK,gBAAgB,UAAU,CACjD;AAAA,MACF;AAAA,IACF;AAAA,IAGA,MAAM,uBAAuB,aAAa,wBAAwB;AAAA,IAClE,WAAW,SAAS,sBAAsB;AAAA,MACxC,IACE,MAAM,MAAM,KAAK,CAAC,SAAS,KAAK,iBAAiB,KAAK,gBAAgB,GACtE;AAAA,QACA,MAAM,WAA6B;AAAA,aAC9B;AAAA,UACH,OAAO,MAAM,MAAM,IAAI,CAAC,SACtB,KAAK,iBAAiB,KAAK,mBACvB,KAAK,MAAM,cAAc,KAAK,eAAe,IAC7C,IACN;AAAA,QACF;AAAA,QACA,aAAa,oBAAoB,QAAQ;AAAA,MAC3C;AAAA,IACF;AAAA,IAGA,MAAM,gBAAgB,aAAa,iBAAiB;AAAA,IACpD,WAAW,SAAS,eAAe;AAAA,MACjC,IACE,MAAM,MAAM,KAAK,CAAC,SAAS,KAAK,iBAAiB,KAAK,gBAAgB,GACtE;AAAA,QACA,MAAM,WAA4B;AAAA,aAC7B;AAAA,UACH,OAAO,MAAM,MAAM,IAAI,CAAC,SACtB,KAAK,iBAAiB,KAAK,mBACvB,KAAK,MAAM,cAAc,KAAK,eAAe,IAC7C,IACN;AAAA,QACF;AAAA,QACA,aAAa,aAAa,QAAQ;AAAA,MACpC;AAAA,IACF;AAAA,IAGA,gBAAgB,0BAA0B,KAAK,gBAAgB,CAAC,YAC9D,wBAAwB;AAAA,MACtB;AAAA,MACA,iBAAiB,KAAK;AAAA,MACtB,iBAAiB,KAAK;AAAA,IACxB,CAAC,CACH;AAAA,IACA,KAAK,mBAAmB;AAAA,MACtB,cAAc,CAAC;AAAA,MACf,cAAc,CAAC,uBAAuB,KAAK,cAAc,CAAC;AAAA,IAC5D;AAAA,IACA,KAAK,gBAAgB;AAAA,MACnB,cAAc,CAAC;AAAA,MACf,cAAc,CAAC,uBAAuB,KAAK,cAAc,CAAC;AAAA,MAC1D,eAAe,CAAC,EAAE,MAAM,YAAY,cAAc,KAAK,eAAe,CAAC;AAAA,IACzE;AAAA;AAAA,EAGF,IAAI,GAAS;AAAA,IAEX,eAAe,KAAK,MAAM,KAAK,cAAc;AAAA;AAAA,EAG/C,wBAAwB,CAAC,OAAiD;AAAA,IACxE,OAAO,UAAU,YAAY,KAAK,mBAAmB,KAAK;AAAA;AAAA,EAG5D,QAAQ,GAAiB;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,YAAY;AAAA,MAClB,SAAS;AAAA,QACP,kBAAkB,KAAK;AAAA,QACvB,gBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA;AAEJ;AAAA;AASO,MAAM,gBAAyC;AAAA,EAM1C;AAAA,EACA;AAAA,EAND,uBAAuB;AAAA,EACxB,mBAAmB,0BAA0B;AAAA,EAC7C,gBAAgB,0BAA0B;AAAA,EAElD,WAAW,CACD,MACA,MACR;AAAA,IAFQ;AAAA,IACA;AAAA;AAAA,EAGV,OAAO,GAAS;AAAA,IACd,KAAK,KAAK,gBAAgB,SAAS,KAAK,IAAI;AAAA,IAC5C,KAAK,KAAK,uBAAuB,SAAS,KAAK,IAAI;AAAA,IACnD,MAAM,cAAc,oBAAoB,KAAK,IAAI;AAAA,IACjD,KAAK,mBAAmB;AAAA,MACtB,cAAc,CAAC;AAAA,MACf,cAAc,CAAC,aAAa,uBAAuB,KAAK,KAAK,YAAY,CAAC;AAAA,IAC5E;AAAA,IACA,KAAK,gBAAgB;AAAA,MACnB,cAAc,CAAC;AAAA,MACf,cAAc,CAAC,aAAa,uBAAuB,KAAK,KAAK,YAAY,CAAC;AAAA,MAC1E,eAAe,CAAC,EAAE,MAAM,YAAY,KAAK,KAAK,CAAC;AAAA,IACjD;AAAA;AAAA,EAGF,IAAI,GAAS;AAAA,IACX,KAAK,KAAK,gBAAgB,YAAY,KAAK,IAAI;AAAA,IAC/C,KAAK,KAAK,uBAAuB,YAAY,KAAK,IAAI;AAAA;AAAA,EAGxD,wBAAwB,CAAC,OAAiD;AAAA,IACxE,OAAO,UAAU,YAAY,KAAK,mBAAmB,KAAK;AAAA;AAAA,EAG5D,QAAQ,GAAiB;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,YAAY;AAAA,MAClB,SAAS,KAAK;AAAA,IAChB;AAAA;AAEJ;AAAA;AAgBO,MAAM,mBAA4C;AAAA,EAO7C;AAAA,EACA;AAAA,EAPD,uBAAuB;AAAA,EACxB;AAAA,EACA,mBAAmB,0BAA0B;AAAA,EAC7C,gBAAgB,0BAA0B;AAAA,EAElD,WAAW,CACD,MACA,MACR;AAAA,IAFQ;AAAA,IACA;AAAA;AAAA,EAGV,OAAO,GAAS;AAAA,IAEd,MAAM,QAAQ,KAAK,KAAK,gBAAgB,SAAS,KAAK,IAAI;AAAA,IAC1D,IAAI,OAAO;AAAA,MACT,MAAM,mBACJ,KAAK,KAAK,uBAAuB,oBAAoB;AAAA,MACvD,MAAM,mBACJ,iBAAiB,iBACd,IAAI,KAAK,KAAK,YAAY,GACzB,IAAI,KAAK,KAAK,SAAS,KAAK,IAAI;AAAA,MAGtC,MAAM,YAAY,KAAK,KAAK,aAAa,UACvC,KAAK,KAAK,YACZ;AAAA,MACA,MAAM,cAAc,IAAI;AAAA,MACxB,YAAY,MAAM,UAAU,WAAW;AAAA,QACrC,IAAI,MAAM,cAAc,KAAK,KAAK,WAAW;AAAA,UAC3C,YAAY,IAAI,MAAM,KAAK;AAAA,QAC7B;AAAA,MACF;AAAA,MAEA,KAAK,WAAW;AAAA,QACd,OAAO;AAAA,UACL,MAAM,MAAM;AAAA,UACZ,OAAO,MAAM;AAAA,UACb,SAAS,IAAI,IAAI,MAAM,OAAO;AAAA,UAC9B,UAAU,IAAI,IAAI,MAAM,QAAQ;AAAA,UAChC,eAAe,MAAM;AAAA,QACvB;AAAA,QACA,kBAAkB,IAAI,IAAI,gBAAgB;AAAA,QAC1C,QAAQ;AAAA,QACR,mBAAmB,KAAK,KAAK,aAC1B,wBAAwB,EACxB,OAAO,CAAC,MACP,EAAE,MAAM,KACN,CAAC,MACC,EAAE,iBAAiB,KAAK,KAAK,gBAC7B,EAAE,cAAc,KAAK,KAAK,SAC9B,CACF;AAAA,QACF,YAAY,KAAK,KAAK,aACnB,iBAAiB,EACjB,OAAO,CAAC,MACP,EAAE,MAAM,KACN,CAAC,MACC,EAAE,iBAAiB,KAAK,KAAK,gBAC7B,EAAE,cAAc,KAAK,KAAK,SAC9B,CACF;AAAA,MACJ;AAAA,IACF;AAAA,IAGA,KAAK,KAAK,gBAAgB,YAAY,KAAK,IAAI;AAAA,IAC/C,KAAK,KAAK,uBAAuB,YAAY,KAAK,IAAI;AAAA,IACtD,KAAK,KAAK,aAAa,YAAY,KAAK,IAAI;AAAA,IAC5C,KAAK,KAAK,aAAa,kBACrB,KAAK,KAAK,cACV,KAAK,KAAK,SACZ;AAAA,IACA,KAAK,KAAK,iBAAiB,gBACzB,KAAK,KAAK,cACV,KAAK,KAAK,SACZ;AAAA,IACA,MAAM,eAAe,6BACnB,KAAK,KAAK,cACV,KAAK,KAAK,WACV,KAAK,QACP;AAAA,IACA,KAAK,mBAAmB;AAAA,MACtB,cAAc,CAAC;AAAA,MACf;AAAA,MACA,eAAe,CAAC,EAAE,MAAM,YAAY,KAAK,KAAK,CAAC;AAAA,IACjD;AAAA,IACA,KAAK,gBAAgB;AAAA,MACnB,cAAc,CAAC;AAAA,MACf;AAAA,IACF;AAAA;AAAA,EAGF,IAAI,GAAS;AAAA,IACX,IAAI,CAAC,KAAK;AAAA,MAAU;AAAA,IAGpB,KAAK,KAAK,gBAAgB,SAAS,KAAK,IAAI;AAAA,IAC5C,KAAK,KAAK,uBAAuB,SAAS,KAAK,IAAI;AAAA,IACnD,KAAK,KAAK,gBAAgB,gBAAgB,KAAK,MAAM,KAAK,SAAS,MAAM,OAAO;AAAA,IAGhF,YAAY,MAAM,SAAS,KAAK,SAAS,kBAAkB;AAAA,MACzD,KAAK,KAAK,uBAAuB,mBAAmB;AAAA,QAClD,gBAAgB;AAAA,QAChB,YAAY,KAAK;AAAA,QACjB,cAAc,KAAK,KAAK;AAAA,QACxB,WAAW,KAAK,KAAK;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,IAGA,cAAc,KAAK,KAAK,cAAc,KAAK,SAAS,QAAQ,KAAK,KAAK,YAAY;AAAA,IAClF,cAAc,KAAK,KAAK,cAAc,KAAK,SAAS,mBAAmB,KAAK,SAAS,UAAU;AAAA;AAAA,EAGjG,wBAAwB,CAAC,OAAiD;AAAA,IACxE,OAAO,UAAU,YAAY,KAAK,mBAAmB,KAAK;AAAA;AAAA,EAG5D,QAAQ,GAAiB;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,YAAY;AAAA,MAClB,SAAS,KAAK;AAAA,IAChB;AAAA;AAEJ;AAAA;AAKO,MAAM,mBAA4C;AAAA,EAO7C;AAAA,EACA;AAAA,EAPD,uBAAuB;AAAA,EACxB;AAAA,EACA,mBAAmB,0BAA0B;AAAA,EAC7C,gBAAgB,0BAA0B;AAAA,EAElD,WAAW,CACD,MACA,MAKR;AAAA,IANQ;AAAA,IACA;AAAA;AAAA,EAOV,OAAO,GAAS;AAAA,IACd,MAAM,mBACJ,KAAK,KAAK,uBAAuB,oBAAoB,EAAE,iBACpD,IAAI,KAAK,KAAK,YAAY,GACzB,IAAI,KAAK,KAAK,SAAS,KAAK,IAAI;AAAA,IACtC,MAAM,SAAS,IAAI;AAAA,IACnB,YAAY,MAAM,UAAU,KAAK,KAAK,aAAa,UACjD,KAAK,KAAK,YACZ,GAAG;AAAA,MACD,IAAI,MAAM,cAAc,KAAK,KAAK,WAAW;AAAA,QAC3C,OAAO,IAAI,MAAM,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,KAAK,KAAK,gBAAgB,SAAS,KAAK,IAAI;AAAA,IAC1D,KAAK,WAAW;AAAA,MACd;AAAA,MACA,kBAAkB,IAAI,IAAI,gBAAgB;AAAA,MAC1C;AAAA,MACA,mBAAmB,CAAC;AAAA,MACpB,YAAY,CAAC;AAAA,IACf;AAAA,IACA,MAAM,eAAe,0BAA0B,KAAK,MAAM,KAAK,IAAI;AAAA,IACnE,KAAK,mBAAmB;AAAA,MACtB,cAAc,aAAa,IAAI,CAAC,aAAa;AAAA,QAC3C;AAAA,QACA,YAAY;AAAA,QACZ,WAAW;AAAA,MACb,EAAE;AAAA,MACF,cAAc,MAAM,KAClB,IAAI,IAAI;AAAA,QACN,GAAG,6BACD,KAAK,KAAK,cACV,KAAK,KAAK,WACV,KAAK,QACP;AAAA,QACA,GAAG,6BACD,KAAK,KAAK,cACV,KAAK,KAAK,cACV,KAAK,QACP;AAAA,MACF,CAAC,CACH;AAAA,IACF;AAAA;AAAA,EAGF,IAAI,GAAS;AAAA,IACX,MAAM,eAAe,0BAA0B,KAAK,MAAM;AAAA,MACxD,cAAc,KAAK,KAAK;AAAA,MACxB,WAAW,KAAK,KAAK;AAAA,MACrB,cAAc,KAAK,KAAK;AAAA,IAC1B,CAAC;AAAA,IACD,KAAK,gBAAgB;AAAA,MACnB,cAAc,aAAa,IAAI,CAAC,aAAa;AAAA,QAC3C;AAAA,QACA,YAAY;AAAA,QACZ,WAAW;AAAA,MACb,EAAE;AAAA,MACF,cAAc,MAAM,KAClB,IAAI,IAAI;AAAA,QACN,GAAG,6BACD,KAAK,KAAK,cACV,KAAK,KAAK,WACV,KAAK,QACP;AAAA,QACA,GAAG,6BACD,KAAK,KAAK,cACV,KAAK,KAAK,cACV,KAAK,QACP;AAAA,MACF,CAAC,CACH;AAAA,IACF;AAAA;AAAA,EAGF,wBAAwB,CAAC,OAAiD;AAAA,IACxE,OAAO,UAAU,YAAY,KAAK,mBAAmB,KAAK;AAAA;AAAA,EAG5D,QAAQ,GAAiB;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,YAAY;AAAA,MAClB,SAAS,KAAK;AAAA,IAChB;AAAA;AAEJ;",
8
- "debugId": "B7795BD40C5FF1B064756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "981C2E76E1D1CC3964756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,9 @@
1
1
  // src/core/managers/table-manager.ts
2
- import { checkRangeIntersection, getCellReference, parseCellReference } from "../utils.mjs";
2
+ import {
3
+ checkRangeIntersection,
4
+ getCellReference,
5
+ parseCellReference
6
+ } from "../utils.mjs";
3
7
 
4
8
  class TableManager {
5
9
  tables = new Map;
@@ -149,7 +153,7 @@ class TableManager {
149
153
  updateTablesForSheetRename(options) {
150
154
  const wb = this.tables.get(options.workbookName);
151
155
  if (!wb) {
152
- throw new Error("Workbook not found");
156
+ return;
153
157
  }
154
158
  wb.forEach((table) => {
155
159
  if (table.sheetName === options.sheetName) {
@@ -160,7 +164,7 @@ class TableManager {
160
164
  updateTablesForWorkbookRename(options) {
161
165
  const wb = this.tables.get(options.workbookName);
162
166
  if (!wb) {
163
- throw new Error("Workbook not found");
167
+ return;
164
168
  }
165
169
  this.tables.set(options.newWorkbookName, wb);
166
170
  this.tables.delete(options.workbookName);
@@ -247,4 +251,4 @@ export {
247
251
  TableManager
248
252
  };
249
253
 
250
- //# debugId=CB801DD940E5E88364756E2164756E21
254
+ //# debugId=66452074A516247364756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/core/managers/table-manager.ts"],
4
4
  "sourcesContent": [
5
- "import type {\n CellAddress,\n SerializedCellValue,\n SpreadsheetRange,\n SpreadsheetRangeEnd,\n TableDefinition,\n} from \"../types.mjs\";\nimport type { TableManagerSnapshot } from \"../engine-snapshot.mjs\";\nimport { checkRangeIntersection, getCellReference, parseCellReference } from \"../utils.mjs\";\nimport type { WorkbookManager } from \"./workbook-manager.mjs\";\n\nexport class TableManager {\n tables: Map<\n /**\n * workbook name -> table name -> table definition\n */\n string,\n Map<string, TableDefinition>\n > = new Map();\n private workbookManager: WorkbookManager;\n\n constructor(workbookManager: WorkbookManager) {\n this.workbookManager = workbookManager;\n }\n\n getTables(workbookName: string): Map<string, TableDefinition> {\n return this.tables.get(workbookName) ?? new Map();\n }\n\n getTable(opts: {\n workbookName: string;\n name: string;\n }): TableDefinition | undefined {\n return this.tables.get(opts.workbookName)?.get(opts.name);\n }\n\n makeTable({\n tableName,\n sheetName,\n workbookName,\n start,\n numRows,\n numCols,\n getCellValue,\n }: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const { rowIndex, colIndex } = parseCellReference(start);\n\n const headers = new Map<string, { name: string; index: number }>();\n for (let i = 0; i < numCols; i++) {\n const header = getCellValue({\n rowIndex,\n colIndex: colIndex + i,\n sheetName,\n workbookName,\n });\n\n if (header) {\n headers.set(String(header), { name: String(header), index: i });\n } else {\n headers.set(`Column ${i + 1}`, { name: `Column ${i + 1}`, index: i });\n }\n }\n\n const endRow: SpreadsheetRangeEnd =\n numRows.type === \"number\"\n ? { type: \"number\", value: rowIndex + numRows.value }\n : numRows;\n\n const table: TableDefinition = {\n name: tableName,\n sheetName,\n workbookName,\n start: {\n rowIndex,\n colIndex,\n },\n headers,\n endRow,\n };\n\n return table;\n }\n\n copyTable(\n from: {\n workbookName: string;\n tableName: string;\n },\n to: {\n workbookName: string;\n tableName: string;\n }\n ): void {\n const fromTable = this.getTable({\n workbookName: from.workbookName,\n name: from.tableName,\n });\n if (!fromTable) {\n throw new Error(\"Table not found\");\n }\n const wb = this.tables.get(to.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const newTable: TableDefinition = {\n ...fromTable,\n workbookName: to.workbookName,\n };\n wb.set(to.tableName, newTable);\n }\n\n addTable(props: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const tableName = props.tableName;\n const table = this.makeTable(props);\n\n let wb = this.tables.get(props.workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(props.workbookName, wb);\n }\n\n wb.set(tableName, table);\n\n return table;\n }\n\n renameTable(\n workbookName: string,\n names: { oldName: string; newName: string }\n ): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const table = wb.get(names.oldName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n table.name = names.newName;\n wb.set(names.newName, table);\n wb.delete(names.oldName);\n }\n\n updateTable({\n tableName,\n sheetName,\n start,\n numRows,\n numCols,\n workbookName,\n getCellValue,\n }: {\n tableName: string;\n sheetName?: string;\n start?: string;\n numRows?: SpreadsheetRangeEnd;\n workbookName: string;\n numCols?: number;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n\n const table = wb.get(tableName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n\n const newStart = start ? parseCellReference(start) : table.start;\n\n let newNumRows: SpreadsheetRangeEnd;\n if (numRows) {\n newNumRows = numRows;\n } else {\n if (table.endRow.type === \"infinity\") {\n newNumRows = table.endRow;\n } else {\n newNumRows = {\n type: \"number\",\n value: table.endRow.value - newStart.rowIndex,\n };\n }\n }\n\n const newTable = this.makeTable({\n tableName,\n sheetName: sheetName ?? table.sheetName,\n workbookName: workbookName ?? table.workbookName,\n start: getCellReference(newStart),\n numRows: newNumRows,\n numCols: numCols ?? table.headers.size,\n getCellValue,\n });\n\n wb.set(tableName, newTable);\n }\n\n removeTable({\n tableName,\n workbookName,\n }: {\n tableName: string;\n workbookName: string;\n }): boolean {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n return false;\n }\n const found = wb.delete(tableName);\n\n return found;\n }\n\n updateTablesForSheetRename(options: {\n sheetName: string;\n newSheetName: string;\n workbookName: string;\n }): void {\n // Update tables that belong to the renamed sheet\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n\n wb.forEach((table) => {\n if (table.sheetName === options.sheetName) {\n table.sheetName = options.newSheetName;\n }\n });\n }\n\n updateTablesForWorkbookRename(options: {\n workbookName: string;\n newWorkbookName: string;\n }): void {\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n this.tables.set(options.newWorkbookName, wb);\n this.tables.delete(options.workbookName);\n // Update tables that belong to the renamed sheet\n wb.forEach((table, tableName) => {\n if (table.workbookName === options.workbookName) {\n table.workbookName = options.newWorkbookName;\n }\n });\n }\n\n resetTables(newTables: Map<string, Map<string, TableDefinition>>): void {\n // Clear existing tables without breaking the Map reference\n this.tables.clear();\n\n // Repopulate with new tables\n newTables.forEach((table, workbookName) => {\n table.forEach((table, tableName) => {\n let wb = this.tables.get(workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(workbookName, wb);\n }\n wb.set(tableName, table);\n });\n });\n }\n\n toSnapshot(): TableManagerSnapshot {\n return this.tables;\n }\n\n restoreFromSnapshot(snapshot: TableManagerSnapshot): void {\n this.resetTables(snapshot);\n }\n\n /**\n * When adding a workbook, we need to initialize the new maps\n */\n addWorkbook(workbookName: string) {\n this.tables.set(workbookName, new Map());\n }\n\n /**\n * When removing a workbook, we need to remove the maps\n */\n removeWorkbook(workbookName: string) {\n this.tables.delete(workbookName);\n }\n\n /**\n * When removing a sheet, we need to remove the tables that belong to the sheet\n */\n removeSheet(opts: { sheetName: string; workbookName: string }): void {\n // Remove tables that belong to the removed sheet\n const wb = this.tables.get(opts.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n wb.forEach((table, tableName) => {\n if (table.sheetName === opts.sheetName) {\n wb.delete(tableName);\n }\n });\n }\n\n isCellInTable(cellAddress: CellAddress): TableDefinition | undefined {\n const { rowIndex, colIndex } = cellAddress;\n\n // Get all tables for this sheet\n\n for (const table of this.getTables(cellAddress.workbookName).values()) {\n // Check each table to see if the cell is within its bounds\n if (table.sheetName !== cellAddress.sheetName) {\n continue;\n }\n\n const { start, endRow, headers } = table;\n\n // Check row bounds\n const isInRowRange =\n endRow.type === \"infinity\"\n ? rowIndex >= start.rowIndex\n : rowIndex >= start.rowIndex && rowIndex <= endRow.value;\n\n // Check column bounds\n const endColIndex = start.colIndex + headers.size - 1;\n const isInColRange =\n colIndex >= start.colIndex && colIndex <= endColIndex;\n\n if (isInRowRange && isInColRange) {\n return table;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if a range intersects with any table in the given workbook/sheet.\n * Used to prevent spilling into tables (Excel behavior).\n */\n doesRangeIntersectTable(\n workbookName: string,\n sheetName: string,\n range: SpreadsheetRange\n ): boolean {\n for (const table of this.getTables(workbookName).values()) {\n if (table.sheetName !== sheetName) {\n continue;\n }\n\n // Build the table's range\n const { start, endRow, headers } = table;\n const endColIndex = start.colIndex + headers.size - 1;\n\n const tableRange: SpreadsheetRange = {\n start: { col: start.colIndex, row: start.rowIndex },\n end: {\n col: { type: \"number\", value: endColIndex },\n row: endRow,\n },\n };\n\n if (checkRangeIntersection(range, tableRange)) {\n return true;\n }\n }\n\n return false;\n }\n}\n"
5
+ "import type {\n CellAddress,\n SerializedCellValue,\n SpreadsheetRange,\n SpreadsheetRangeEnd,\n TableDefinition,\n} from \"../types.mjs\";\nimport type { TableManagerSnapshot } from \"../engine-snapshot.mjs\";\nimport {\n checkRangeIntersection,\n getCellReference,\n parseCellReference,\n} from \"../utils.mjs\";\nimport type { WorkbookManager } from \"./workbook-manager.mjs\";\n\nexport class TableManager {\n tables: Map<\n /**\n * workbook name -> table name -> table definition\n */\n string,\n Map<string, TableDefinition>\n > = new Map();\n private workbookManager: WorkbookManager;\n\n constructor(workbookManager: WorkbookManager) {\n this.workbookManager = workbookManager;\n }\n\n getTables(workbookName: string): Map<string, TableDefinition> {\n return this.tables.get(workbookName) ?? new Map();\n }\n\n getTable(opts: {\n workbookName: string;\n name: string;\n }): TableDefinition | undefined {\n return this.tables.get(opts.workbookName)?.get(opts.name);\n }\n\n makeTable({\n tableName,\n sheetName,\n workbookName,\n start,\n numRows,\n numCols,\n getCellValue,\n }: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const { rowIndex, colIndex } = parseCellReference(start);\n\n const headers = new Map<string, { name: string; index: number }>();\n for (let i = 0; i < numCols; i++) {\n const header = getCellValue({\n rowIndex,\n colIndex: colIndex + i,\n sheetName,\n workbookName,\n });\n\n if (header) {\n headers.set(String(header), { name: String(header), index: i });\n } else {\n headers.set(`Column ${i + 1}`, { name: `Column ${i + 1}`, index: i });\n }\n }\n\n const endRow: SpreadsheetRangeEnd =\n numRows.type === \"number\"\n ? { type: \"number\", value: rowIndex + numRows.value }\n : numRows;\n\n const table: TableDefinition = {\n name: tableName,\n sheetName,\n workbookName,\n start: {\n rowIndex,\n colIndex,\n },\n headers,\n endRow,\n };\n\n return table;\n }\n\n copyTable(\n from: {\n workbookName: string;\n tableName: string;\n },\n to: {\n workbookName: string;\n tableName: string;\n },\n ): void {\n const fromTable = this.getTable({\n workbookName: from.workbookName,\n name: from.tableName,\n });\n if (!fromTable) {\n throw new Error(\"Table not found\");\n }\n const wb = this.tables.get(to.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const newTable: TableDefinition = {\n ...fromTable,\n workbookName: to.workbookName,\n };\n wb.set(to.tableName, newTable);\n }\n\n addTable(props: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const tableName = props.tableName;\n const table = this.makeTable(props);\n\n let wb = this.tables.get(props.workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(props.workbookName, wb);\n }\n\n wb.set(tableName, table);\n\n return table;\n }\n\n renameTable(\n workbookName: string,\n names: { oldName: string; newName: string },\n ): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const table = wb.get(names.oldName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n table.name = names.newName;\n wb.set(names.newName, table);\n wb.delete(names.oldName);\n }\n\n updateTable({\n tableName,\n sheetName,\n start,\n numRows,\n numCols,\n workbookName,\n getCellValue,\n }: {\n tableName: string;\n sheetName?: string;\n start?: string;\n numRows?: SpreadsheetRangeEnd;\n workbookName: string;\n numCols?: number;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n\n const table = wb.get(tableName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n\n const newStart = start ? parseCellReference(start) : table.start;\n\n let newNumRows: SpreadsheetRangeEnd;\n if (numRows) {\n newNumRows = numRows;\n } else {\n if (table.endRow.type === \"infinity\") {\n newNumRows = table.endRow;\n } else {\n newNumRows = {\n type: \"number\",\n value: table.endRow.value - newStart.rowIndex,\n };\n }\n }\n\n const newTable = this.makeTable({\n tableName,\n sheetName: sheetName ?? table.sheetName,\n workbookName: workbookName ?? table.workbookName,\n start: getCellReference(newStart),\n numRows: newNumRows,\n numCols: numCols ?? table.headers.size,\n getCellValue,\n });\n\n wb.set(tableName, newTable);\n }\n\n removeTable({\n tableName,\n workbookName,\n }: {\n tableName: string;\n workbookName: string;\n }): boolean {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n return false;\n }\n const found = wb.delete(tableName);\n\n return found;\n }\n\n updateTablesForSheetRename(options: {\n sheetName: string;\n newSheetName: string;\n workbookName: string;\n }): void {\n // Update tables that belong to the renamed sheet\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n // No tables exist for this workbook yet — nothing to update\n return;\n }\n\n wb.forEach((table) => {\n if (table.sheetName === options.sheetName) {\n table.sheetName = options.newSheetName;\n }\n });\n }\n\n updateTablesForWorkbookRename(options: {\n workbookName: string;\n newWorkbookName: string;\n }): void {\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n // No tables exist for this workbook yet — nothing to update\n return;\n }\n this.tables.set(options.newWorkbookName, wb);\n this.tables.delete(options.workbookName);\n // Update tables that belong to the renamed sheet\n wb.forEach((table, tableName) => {\n if (table.workbookName === options.workbookName) {\n table.workbookName = options.newWorkbookName;\n }\n });\n }\n\n resetTables(newTables: Map<string, Map<string, TableDefinition>>): void {\n // Clear existing tables without breaking the Map reference\n this.tables.clear();\n\n // Repopulate with new tables\n newTables.forEach((table, workbookName) => {\n table.forEach((table, tableName) => {\n let wb = this.tables.get(workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(workbookName, wb);\n }\n wb.set(tableName, table);\n });\n });\n }\n\n toSnapshot(): TableManagerSnapshot {\n return this.tables;\n }\n\n restoreFromSnapshot(snapshot: TableManagerSnapshot): void {\n this.resetTables(snapshot);\n }\n\n /**\n * When adding a workbook, we need to initialize the new maps\n */\n addWorkbook(workbookName: string) {\n this.tables.set(workbookName, new Map());\n }\n\n /**\n * When removing a workbook, we need to remove the maps\n */\n removeWorkbook(workbookName: string) {\n this.tables.delete(workbookName);\n }\n\n /**\n * When removing a sheet, we need to remove the tables that belong to the sheet\n */\n removeSheet(opts: { sheetName: string; workbookName: string }): void {\n // Remove tables that belong to the removed sheet\n const wb = this.tables.get(opts.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n wb.forEach((table, tableName) => {\n if (table.sheetName === opts.sheetName) {\n wb.delete(tableName);\n }\n });\n }\n\n isCellInTable(cellAddress: CellAddress): TableDefinition | undefined {\n const { rowIndex, colIndex } = cellAddress;\n\n // Get all tables for this sheet\n\n for (const table of this.getTables(cellAddress.workbookName).values()) {\n // Check each table to see if the cell is within its bounds\n if (table.sheetName !== cellAddress.sheetName) {\n continue;\n }\n\n const { start, endRow, headers } = table;\n\n // Check row bounds\n const isInRowRange =\n endRow.type === \"infinity\"\n ? rowIndex >= start.rowIndex\n : rowIndex >= start.rowIndex && rowIndex <= endRow.value;\n\n // Check column bounds\n const endColIndex = start.colIndex + headers.size - 1;\n const isInColRange =\n colIndex >= start.colIndex && colIndex <= endColIndex;\n\n if (isInRowRange && isInColRange) {\n return table;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if a range intersects with any table in the given workbook/sheet.\n * Used to prevent spilling into tables (Excel behavior).\n */\n doesRangeIntersectTable(\n workbookName: string,\n sheetName: string,\n range: SpreadsheetRange,\n ): boolean {\n for (const table of this.getTables(workbookName).values()) {\n if (table.sheetName !== sheetName) {\n continue;\n }\n\n // Build the table's range\n const { start, endRow, headers } = table;\n const endColIndex = start.colIndex + headers.size - 1;\n\n const tableRange: SpreadsheetRange = {\n start: { col: start.colIndex, row: start.rowIndex },\n end: {\n col: { type: \"number\", value: endColIndex },\n row: endRow,\n },\n };\n\n if (checkRangeIntersection(range, tableRange)) {\n return true;\n }\n }\n\n return false;\n }\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "CB801DD940E5E88364756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "66452074A516247364756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@ricsam/formula-engine",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "type": "module"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ricsam/formula-engine",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "module": "./dist/mjs/lib.mjs",
5
5
  "scripts": {
6
6
  "test": "bun test",