@ricsam/formula-engine 0.0.17 → 0.0.19
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.
- package/dist/cjs/core/api/api-builder.cjs +67 -0
- package/dist/cjs/core/api/api-builder.cjs.map +10 -0
- package/dist/cjs/core/api/api-helpers.cjs +191 -0
- package/dist/cjs/core/api/api-helpers.cjs.map +10 -0
- package/dist/cjs/core/api/api.cjs +65 -0
- package/dist/cjs/core/api/api.cjs.map +10 -0
- package/dist/cjs/core/api/cell-orm.cjs +80 -0
- package/dist/cjs/core/api/cell-orm.cjs.map +10 -0
- package/dist/cjs/core/api/table-orm.cjs +171 -0
- package/dist/cjs/core/api/table-orm.cjs.map +10 -0
- package/dist/cjs/core/autofill-utils.cjs +3 -5
- package/dist/cjs/core/autofill-utils.cjs.map +3 -3
- package/dist/cjs/core/commands/command-executor.cjs +140 -0
- package/dist/cjs/core/commands/command-executor.cjs.map +10 -0
- package/dist/cjs/core/commands/content-commands.cjs +574 -0
- package/dist/cjs/core/commands/content-commands.cjs.map +10 -0
- package/dist/cjs/core/commands/metadata-commands.cjs +150 -0
- package/dist/cjs/core/commands/metadata-commands.cjs.map +10 -0
- package/dist/cjs/core/commands/named-expression-commands.cjs +238 -0
- package/dist/cjs/core/commands/named-expression-commands.cjs.map +10 -0
- package/dist/cjs/core/commands/structure-commands.cjs +495 -0
- package/dist/cjs/core/commands/structure-commands.cjs.map +10 -0
- package/dist/cjs/core/commands/style-commands.cjs +219 -0
- package/dist/cjs/core/commands/style-commands.cjs.map +10 -0
- package/dist/cjs/core/commands/table-commands.cjs +226 -0
- package/dist/cjs/core/commands/table-commands.cjs.map +10 -0
- package/dist/cjs/core/commands/types.cjs +72 -0
- package/dist/cjs/core/commands/types.cjs.map +10 -0
- package/dist/cjs/core/engine.cjs +170 -297
- package/dist/cjs/core/engine.cjs.map +3 -3
- package/dist/cjs/core/managers/api-schema-manager.cjs +304 -0
- package/dist/cjs/core/managers/api-schema-manager.cjs.map +10 -0
- package/dist/cjs/core/managers/copy-manager.cjs +1 -2
- package/dist/cjs/core/managers/copy-manager.cjs.map +3 -3
- package/dist/cjs/core/types.cjs.map +2 -2
- package/dist/cjs/lib.cjs +13 -2
- package/dist/cjs/lib.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- package/dist/mjs/core/api/api-builder.mjs +37 -0
- package/dist/mjs/core/api/api-builder.mjs.map +10 -0
- package/dist/mjs/core/api/api-helpers.mjs +161 -0
- package/dist/mjs/core/api/api-helpers.mjs.map +10 -0
- package/dist/mjs/core/api/api.mjs +35 -0
- package/dist/mjs/core/api/api.mjs.map +10 -0
- package/dist/mjs/core/api/cell-orm.mjs +49 -0
- package/dist/mjs/core/api/cell-orm.mjs.map +10 -0
- package/dist/mjs/core/api/table-orm.mjs +148 -0
- package/dist/mjs/core/api/table-orm.mjs.map +10 -0
- package/dist/mjs/core/autofill-utils.mjs +3 -5
- package/dist/mjs/core/autofill-utils.mjs.map +3 -3
- package/dist/mjs/core/commands/command-executor.mjs +109 -0
- package/dist/mjs/core/commands/command-executor.mjs.map +10 -0
- package/dist/mjs/core/commands/content-commands.mjs +544 -0
- package/dist/mjs/core/commands/content-commands.mjs.map +10 -0
- package/dist/mjs/core/commands/metadata-commands.mjs +120 -0
- package/dist/mjs/core/commands/metadata-commands.mjs.map +10 -0
- package/dist/mjs/core/commands/named-expression-commands.mjs +208 -0
- package/dist/mjs/core/commands/named-expression-commands.mjs.map +10 -0
- package/dist/mjs/core/commands/structure-commands.mjs +465 -0
- package/dist/mjs/core/commands/structure-commands.mjs.map +10 -0
- package/dist/mjs/core/commands/style-commands.mjs +189 -0
- package/dist/mjs/core/commands/style-commands.mjs.map +10 -0
- package/dist/mjs/core/commands/table-commands.mjs +196 -0
- package/dist/mjs/core/commands/table-commands.mjs.map +10 -0
- package/dist/mjs/core/commands/types.mjs +42 -0
- package/dist/mjs/core/commands/types.mjs.map +10 -0
- package/dist/mjs/core/engine.mjs +213 -297
- package/dist/mjs/core/engine.mjs.map +3 -3
- package/dist/mjs/core/managers/api-schema-manager.mjs +274 -0
- package/dist/mjs/core/managers/api-schema-manager.mjs.map +10 -0
- package/dist/mjs/core/managers/copy-manager.mjs +1 -2
- package/dist/mjs/core/managers/copy-manager.mjs.map +3 -3
- package/dist/mjs/core/types.mjs.map +2 -2
- package/dist/mjs/lib.mjs +13 -2
- package/dist/mjs/lib.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/types/core/api/api-builder.d.ts +16 -0
- package/dist/types/core/api/api-helpers.d.ts +37 -0
- package/dist/types/core/api/api.d.ts +83 -0
- package/dist/types/core/api/api.type-test.d.ts +1 -0
- package/dist/types/core/api/cell-orm.d.ts +29 -0
- package/dist/types/core/api/table-orm.d.ts +46 -0
- package/dist/types/core/autofill-utils.d.ts +2 -9
- package/dist/types/core/commands/command-executor.d.ts +83 -0
- package/dist/types/core/commands/content-commands.d.ts +142 -0
- package/dist/types/core/commands/metadata-commands.d.ts +55 -0
- package/dist/types/core/commands/named-expression-commands.d.ts +115 -0
- package/dist/types/core/commands/structure-commands.d.ts +132 -0
- package/dist/types/core/commands/style-commands.d.ts +76 -0
- package/dist/types/core/commands/table-commands.d.ts +104 -0
- package/dist/types/core/commands/types.d.ts +114 -0
- package/dist/types/core/engine.d.ts +130 -26
- package/dist/types/core/managers/api-schema-manager.d.ts +121 -0
- package/dist/types/core/types.d.ts +1 -1
- package/dist/types/lib.d.ts +8 -0
- package/package.json +1 -1
package/dist/cjs/core/engine.cjs
CHANGED
|
@@ -49,6 +49,15 @@ var import_dependency_manager = require("./managers/dependency-manager.cjs");
|
|
|
49
49
|
var import_style_manager = require("./managers/style-manager.cjs");
|
|
50
50
|
var import_copy_manager = require("./managers/copy-manager.cjs");
|
|
51
51
|
var import_reference_manager = require("./managers/reference-manager.cjs");
|
|
52
|
+
var import_api_schema_manager = require("./managers/api-schema-manager.cjs");
|
|
53
|
+
var import_api_builder = require("./api/api-builder.cjs");
|
|
54
|
+
var import_command_executor = require("./commands/command-executor.cjs");
|
|
55
|
+
var import_content_commands = require("./commands/content-commands.cjs");
|
|
56
|
+
var import_structure_commands = require("./commands/structure-commands.cjs");
|
|
57
|
+
var import_table_commands = require("./commands/table-commands.cjs");
|
|
58
|
+
var import_named_expression_commands = require("./commands/named-expression-commands.cjs");
|
|
59
|
+
var import_metadata_commands = require("./commands/metadata-commands.cjs");
|
|
60
|
+
var import_style_commands = require("./commands/style-commands.cjs");
|
|
52
61
|
|
|
53
62
|
class FormulaEngine {
|
|
54
63
|
workbookManager;
|
|
@@ -61,6 +70,10 @@ class FormulaEngine {
|
|
|
61
70
|
styleManager;
|
|
62
71
|
copyManager;
|
|
63
72
|
referenceManager;
|
|
73
|
+
apiSchemaManager;
|
|
74
|
+
commandExecutor;
|
|
75
|
+
api;
|
|
76
|
+
apiDeclaration;
|
|
64
77
|
_workbookManager;
|
|
65
78
|
_namedExpressionManager;
|
|
66
79
|
_tableManager;
|
|
@@ -69,7 +82,8 @@ class FormulaEngine {
|
|
|
69
82
|
_autoFillManager;
|
|
70
83
|
_dependencyManager;
|
|
71
84
|
_styleManager;
|
|
72
|
-
constructor() {
|
|
85
|
+
constructor(api) {
|
|
86
|
+
this.apiDeclaration = api?.declaration;
|
|
73
87
|
this.eventManager = new import_event_manager.EventManager;
|
|
74
88
|
this.workbookManager = new import_workbook_manager.WorkbookManager;
|
|
75
89
|
this.namedExpressionManager = new import_named_expression_manager.NamedExpressionManager;
|
|
@@ -80,8 +94,15 @@ class FormulaEngine {
|
|
|
80
94
|
this.evaluationManager = new import_evaluation_manager.EvaluationManager(this.workbookManager, this.tableManager, formulaEvaluator, this.dependencyManager);
|
|
81
95
|
this.styleManager = new import_style_manager.StyleManager(this.evaluationManager);
|
|
82
96
|
this.copyManager = new import_copy_manager.CopyManager(this.workbookManager, this.evaluationManager, this.styleManager);
|
|
83
|
-
this.autoFillManager = new import_autofill_utils.AutoFill(this.workbookManager, this.styleManager
|
|
97
|
+
this.autoFillManager = new import_autofill_utils.AutoFill(this.workbookManager, this.styleManager);
|
|
84
98
|
this.referenceManager = new import_reference_manager.ReferenceManager;
|
|
99
|
+
this.apiSchemaManager = new import_api_schema_manager.ApiSchemaManager(this.tableManager);
|
|
100
|
+
this.commandExecutor = new import_command_executor.CommandExecutor(this.apiDeclaration, this.evaluationManager, this.eventManager, () => this.apiSchemaManager.validateAllSchemaConstraints((cell) => this.getCellValue(cell), (cell) => this.getCellMetadata(cell), (table) => this.getTableDataCells(table)));
|
|
101
|
+
if (this.apiDeclaration) {
|
|
102
|
+
this.api = import_api_builder.buildApiFromDeclaration(this, this.apiDeclaration, this.apiSchemaManager);
|
|
103
|
+
} else {
|
|
104
|
+
this.api = undefined;
|
|
105
|
+
}
|
|
85
106
|
this._workbookManager = this.workbookManager;
|
|
86
107
|
this._namedExpressionManager = this.namedExpressionManager;
|
|
87
108
|
this._tableManager = this.tableManager;
|
|
@@ -91,8 +112,8 @@ class FormulaEngine {
|
|
|
91
112
|
this._dependencyManager = this.dependencyManager;
|
|
92
113
|
this._styleManager = this.styleManager;
|
|
93
114
|
}
|
|
94
|
-
static buildEmpty() {
|
|
95
|
-
return new FormulaEngine;
|
|
115
|
+
static buildEmpty(api) {
|
|
116
|
+
return new FormulaEngine(api);
|
|
96
117
|
}
|
|
97
118
|
getCellEvaluationResult(cellAddress) {
|
|
98
119
|
return this.evaluationManager.getCellEvaluationResult(cellAddress);
|
|
@@ -105,25 +126,23 @@ class FormulaEngine {
|
|
|
105
126
|
return this.evaluationManager.evaluationResultToSerializedValue(result, cellAddress, debug);
|
|
106
127
|
}
|
|
107
128
|
setCellMetadata(address, metadata) {
|
|
108
|
-
this.
|
|
109
|
-
this.eventManager.emitUpdate();
|
|
129
|
+
this.commandExecutor.execute(new import_metadata_commands.SetCellMetadataCommand(this.workbookManager, address, metadata));
|
|
110
130
|
}
|
|
111
131
|
getCellMetadata(address) {
|
|
112
|
-
|
|
132
|
+
const metadata = this.workbookManager.getCellMetadata(address);
|
|
133
|
+
return metadata;
|
|
113
134
|
}
|
|
114
135
|
getSheetMetadataSerialized(opts) {
|
|
115
136
|
return this.workbookManager.getSheetMetadataSerialized(opts);
|
|
116
137
|
}
|
|
117
138
|
setSheetMetadata(opts, metadata) {
|
|
118
|
-
this.
|
|
119
|
-
this.eventManager.emitUpdate();
|
|
139
|
+
this.commandExecutor.execute(new import_metadata_commands.SetSheetMetadataCommand(this.workbookManager, opts, metadata));
|
|
120
140
|
}
|
|
121
141
|
getSheetMetadata(opts) {
|
|
122
142
|
return this.workbookManager.getSheetMetadata(opts);
|
|
123
143
|
}
|
|
124
144
|
setWorkbookMetadata(workbookName, metadata) {
|
|
125
|
-
this.
|
|
126
|
-
this.eventManager.emitUpdate();
|
|
145
|
+
this.commandExecutor.execute(new import_metadata_commands.SetWorkbookMetadataCommand(this.workbookManager, workbookName, metadata));
|
|
127
146
|
}
|
|
128
147
|
getWorkbookMetadata(workbookName) {
|
|
129
148
|
return this.workbookManager.getWorkbookMetadata(workbookName);
|
|
@@ -149,111 +168,58 @@ class FormulaEngine {
|
|
|
149
168
|
getCellPrecedents(address) {
|
|
150
169
|
throw new Error("Not implemented");
|
|
151
170
|
}
|
|
152
|
-
addNamedExpression({
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
171
|
+
addNamedExpression(opts) {
|
|
172
|
+
this.commandExecutor.execute(new import_named_expression_commands.AddNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
173
|
+
}
|
|
174
|
+
removeNamedExpression(opts) {
|
|
175
|
+
this.commandExecutor.execute(new import_named_expression_commands.RemoveNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
176
|
+
}
|
|
177
|
+
hasNamedExpression(opts) {
|
|
178
|
+
const scope = opts.sheetName && opts.workbookName ? {
|
|
179
|
+
type: "sheet",
|
|
180
|
+
workbookName: opts.workbookName,
|
|
181
|
+
sheetName: opts.sheetName
|
|
182
|
+
} : opts.workbookName ? { type: "workbook", workbookName: opts.workbookName } : { type: "global" };
|
|
183
|
+
return !!this.namedExpressionManager.getNamedExpression({
|
|
184
|
+
name: opts.expressionName,
|
|
185
|
+
scope
|
|
163
186
|
});
|
|
164
|
-
this.reevaluate();
|
|
165
|
-
this.eventManager.emitUpdate();
|
|
166
187
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
sheetName,
|
|
170
|
-
workbookName
|
|
171
|
-
}) {
|
|
172
|
-
const found = this.namedExpressionManager.removeNamedExpression({
|
|
173
|
-
expressionName,
|
|
174
|
-
sheetName,
|
|
175
|
-
workbookName
|
|
176
|
-
});
|
|
177
|
-
if (found) {
|
|
178
|
-
this.reevaluate();
|
|
179
|
-
this.eventManager.emitUpdate();
|
|
180
|
-
}
|
|
181
|
-
return found;
|
|
188
|
+
updateNamedExpression(opts) {
|
|
189
|
+
this.commandExecutor.execute(new import_named_expression_commands.UpdateNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
182
190
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
expressionName,
|
|
186
|
-
sheetName,
|
|
187
|
-
workbookName
|
|
188
|
-
}) {
|
|
189
|
-
this.namedExpressionManager.updateNamedExpression({
|
|
190
|
-
expression,
|
|
191
|
-
expressionName,
|
|
192
|
-
sheetName,
|
|
193
|
-
workbookName
|
|
194
|
-
});
|
|
195
|
-
this.reevaluate();
|
|
196
|
-
this.eventManager.emitUpdate();
|
|
197
|
-
}
|
|
198
|
-
renameNamedExpression({
|
|
199
|
-
expressionName,
|
|
200
|
-
sheetName,
|
|
201
|
-
workbookName,
|
|
202
|
-
newName
|
|
203
|
-
}) {
|
|
204
|
-
const result = this.namedExpressionManager.renameNamedExpression({
|
|
205
|
-
expressionName,
|
|
206
|
-
sheetName,
|
|
207
|
-
workbookName,
|
|
208
|
-
newName
|
|
209
|
-
});
|
|
210
|
-
this.workbookManager.updateAllFormulas((formula) => import_named_expression_renamer.renameNamedExpressionInFormula(formula, expressionName, newName));
|
|
211
|
-
this.namedExpressionManager.updateAllNamedExpressions((formula) => import_named_expression_renamer.renameNamedExpressionInFormula(formula, expressionName, newName));
|
|
212
|
-
this.reevaluate();
|
|
213
|
-
this.eventManager.emitUpdate();
|
|
214
|
-
return result;
|
|
191
|
+
renameNamedExpression(opts) {
|
|
192
|
+
this.commandExecutor.execute(new import_named_expression_commands.RenameNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
215
193
|
}
|
|
216
194
|
setNamedExpressions(opts) {
|
|
217
|
-
this.
|
|
218
|
-
this.reevaluate();
|
|
219
|
-
this.eventManager.emitUpdate();
|
|
195
|
+
this.commandExecutor.execute(new import_named_expression_commands.SetNamedExpressionsCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
220
196
|
}
|
|
221
197
|
addTable(props) {
|
|
222
|
-
|
|
223
|
-
...props,
|
|
224
|
-
getCellValue: (cellAddress) => this.getCellValue(cellAddress)
|
|
225
|
-
});
|
|
226
|
-
this.reevaluate();
|
|
227
|
-
this.eventManager.emitUpdate();
|
|
228
|
-
return table;
|
|
198
|
+
this.commandExecutor.execute(new import_table_commands.AddTableCommand(this.getTableCommandDeps(), props), { validate: !!this.apiDeclaration });
|
|
229
199
|
}
|
|
230
200
|
renameTable(workbookName, names) {
|
|
231
|
-
this.
|
|
232
|
-
this.workbookManager.updateAllFormulas((formula) => import_table_renamer.renameTableInFormula(formula, names.oldName, names.newName));
|
|
233
|
-
this.namedExpressionManager.updateAllNamedExpressions((formula) => import_table_renamer.renameTableInFormula(formula, names.oldName, names.newName));
|
|
234
|
-
this.reevaluate();
|
|
235
|
-
this.eventManager.emitUpdate();
|
|
201
|
+
this.commandExecutor.execute(new import_table_commands.RenameTableCommand(this.getTableCommandDeps(), workbookName, names.oldName, names.newName), { validate: !!this.apiDeclaration });
|
|
236
202
|
}
|
|
237
203
|
updateTable(opts) {
|
|
238
|
-
this.
|
|
239
|
-
...opts,
|
|
240
|
-
getCellValue: (cellAddress) => this.getCellValue(cellAddress)
|
|
241
|
-
});
|
|
242
|
-
this.reevaluate();
|
|
243
|
-
this.eventManager.emitUpdate();
|
|
204
|
+
this.commandExecutor.execute(new import_table_commands.UpdateTableCommand(this.getTableCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
244
205
|
}
|
|
245
206
|
removeTable(opts) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
207
|
+
this.commandExecutor.execute(new import_table_commands.RemoveTableCommand(this.getTableCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
208
|
+
}
|
|
209
|
+
hasTable(opts) {
|
|
210
|
+
return !!this.tableManager.getTable({
|
|
211
|
+
workbookName: opts.workbookName,
|
|
212
|
+
name: opts.tableName
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
getTable(opts) {
|
|
216
|
+
return this.tableManager.getTable({
|
|
217
|
+
workbookName: opts.workbookName,
|
|
218
|
+
name: opts.tableName
|
|
219
|
+
});
|
|
252
220
|
}
|
|
253
221
|
resetTables(tables) {
|
|
254
|
-
this.
|
|
255
|
-
this.reevaluate();
|
|
256
|
-
this.eventManager.emitUpdate();
|
|
222
|
+
this.commandExecutor.execute(new import_table_commands.ResetTablesCommand(this.getTableCommandDeps(), tables), { validate: !!this.apiDeclaration });
|
|
257
223
|
}
|
|
258
224
|
getTables(workbookName) {
|
|
259
225
|
return this.tableManager.getTables(workbookName);
|
|
@@ -261,16 +227,32 @@ class FormulaEngine {
|
|
|
261
227
|
isCellInTable(cellAddress) {
|
|
262
228
|
return this.tableManager.isCellInTable(cellAddress);
|
|
263
229
|
}
|
|
230
|
+
getTableDataCells(table) {
|
|
231
|
+
const { start, endRow, headers } = table;
|
|
232
|
+
const dataStartRow = start.rowIndex + 1;
|
|
233
|
+
const endColIndex = start.colIndex + headers.size - 1;
|
|
234
|
+
const rangeAddress = {
|
|
235
|
+
workbookName: table.workbookName,
|
|
236
|
+
sheetName: table.sheetName,
|
|
237
|
+
range: {
|
|
238
|
+
start: { col: start.colIndex, row: dataStartRow },
|
|
239
|
+
end: {
|
|
240
|
+
col: { type: "number", value: endColIndex },
|
|
241
|
+
row: endRow
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
return this.workbookManager.getCellsInRange(rangeAddress);
|
|
246
|
+
}
|
|
264
247
|
addConditionalStyle(style) {
|
|
265
|
-
this.
|
|
266
|
-
this.eventManager.emitUpdate();
|
|
248
|
+
this.commandExecutor.execute(new import_style_commands.AddConditionalStyleCommand(this.styleManager, style));
|
|
267
249
|
}
|
|
268
250
|
removeConditionalStyle(workbookName, index) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
return
|
|
251
|
+
this.commandExecutor.execute(new import_style_commands.RemoveConditionalStyleCommand(this.styleManager, workbookName, index));
|
|
252
|
+
}
|
|
253
|
+
getConditionalStyleCount(workbookName) {
|
|
254
|
+
const allStyles = this.styleManager.getAllConditionalStyles();
|
|
255
|
+
return allStyles.filter((s) => s.areas.some((a) => a.workbookName === workbookName)).length;
|
|
274
256
|
}
|
|
275
257
|
getConditionalStylesIntersectingWithRange(range) {
|
|
276
258
|
return this.styleManager.getConditionalStylesIntersectingWithRange(range);
|
|
@@ -285,15 +267,14 @@ class FormulaEngine {
|
|
|
285
267
|
return this.styleManager.getAllConditionalStyles();
|
|
286
268
|
}
|
|
287
269
|
addCellStyle(style) {
|
|
288
|
-
this.
|
|
289
|
-
this.eventManager.emitUpdate();
|
|
270
|
+
this.commandExecutor.execute(new import_style_commands.AddCellStyleCommand(this.styleManager, style));
|
|
290
271
|
}
|
|
291
272
|
removeCellStyle(workbookName, index) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
return
|
|
273
|
+
this.commandExecutor.execute(new import_style_commands.RemoveCellStyleCommand(this.styleManager, workbookName, index));
|
|
274
|
+
}
|
|
275
|
+
getCellStyleCount(workbookName) {
|
|
276
|
+
const allStyles = this.styleManager.getAllCellStyles();
|
|
277
|
+
return allStyles.filter((s) => s.areas.some((a) => a.workbookName === workbookName)).length;
|
|
297
278
|
}
|
|
298
279
|
getStylesIntersectingWithRange(range) {
|
|
299
280
|
return this.styleManager.getStylesIntersectingWithRange(range);
|
|
@@ -302,18 +283,13 @@ class FormulaEngine {
|
|
|
302
283
|
return this.styleManager.getStyleForRange(range);
|
|
303
284
|
}
|
|
304
285
|
clearCellStyles(range) {
|
|
305
|
-
this.
|
|
306
|
-
this.eventManager.emitUpdate();
|
|
286
|
+
this.commandExecutor.execute(new import_style_commands.ClearCellStylesCommand(this.styleManager, range));
|
|
307
287
|
}
|
|
308
288
|
pasteCells(source, target, options) {
|
|
309
|
-
this.
|
|
310
|
-
this.reevaluate();
|
|
311
|
-
this.eventManager.emitUpdate();
|
|
289
|
+
this.commandExecutor.execute(new import_content_commands.PasteCellsCommand(this.workbookManager, this.copyManager, source, target, options), { validate: !!this.apiDeclaration });
|
|
312
290
|
}
|
|
313
291
|
fillAreas(seedRange, targetRanges, options) {
|
|
314
|
-
this.
|
|
315
|
-
this.reevaluate();
|
|
316
|
-
this.eventManager.emitUpdate();
|
|
292
|
+
this.commandExecutor.execute(new import_content_commands.FillAreasCommand(this.workbookManager, this.copyManager, seedRange, targetRanges, options), { validate: !!this.apiDeclaration });
|
|
317
293
|
}
|
|
318
294
|
smartPaste(sourceCells, pasteSelection, options) {
|
|
319
295
|
if (sourceCells.length === 0) {
|
|
@@ -394,55 +370,22 @@ class FormulaEngine {
|
|
|
394
370
|
return { minCol, minRow, maxCol, maxRow };
|
|
395
371
|
}
|
|
396
372
|
moveCell(source, target) {
|
|
397
|
-
this.
|
|
398
|
-
cut: true,
|
|
399
|
-
type: "formula",
|
|
400
|
-
include: "all"
|
|
401
|
-
});
|
|
402
|
-
this.reevaluate();
|
|
403
|
-
this.eventManager.emitUpdate();
|
|
373
|
+
this.commandExecutor.execute(new import_content_commands.MoveCellCommand(this.workbookManager, this.copyManager, source, target), { validate: !!this.apiDeclaration });
|
|
404
374
|
}
|
|
405
375
|
moveRange(sourceRange, target) {
|
|
406
|
-
|
|
407
|
-
this.pasteCells(cells, target, {
|
|
408
|
-
cut: true,
|
|
409
|
-
type: "formula",
|
|
410
|
-
include: "all"
|
|
411
|
-
});
|
|
412
|
-
this.reevaluate();
|
|
413
|
-
this.eventManager.emitUpdate();
|
|
376
|
+
this.commandExecutor.execute(new import_content_commands.MoveRangeCommand(this.workbookManager, this.copyManager, sourceRange, target), { validate: !!this.apiDeclaration });
|
|
414
377
|
}
|
|
415
378
|
addSheet(opts) {
|
|
416
|
-
|
|
417
|
-
const wbLevel = this.namedExpressionManager.addSheet(opts);
|
|
418
|
-
this.reevaluate();
|
|
419
|
-
this.eventManager.emitUpdate();
|
|
420
|
-
return newSheet;
|
|
379
|
+
this.commandExecutor.execute(new import_structure_commands.AddSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
421
380
|
}
|
|
422
381
|
removeSheet(opts) {
|
|
423
|
-
|
|
424
|
-
this.namedExpressionManager.removeSheet(opts);
|
|
425
|
-
this.tableManager.removeSheet(opts);
|
|
426
|
-
this.styleManager.removeSheetStyles(opts.workbookName, opts.sheetName);
|
|
427
|
-
this.referenceManager.invalidateSheet(opts.workbookName, opts.sheetName);
|
|
428
|
-
this.reevaluate();
|
|
429
|
-
this.eventManager.emitUpdate();
|
|
430
|
-
return sheet;
|
|
382
|
+
this.commandExecutor.execute(new import_structure_commands.RemoveSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
431
383
|
}
|
|
432
384
|
renameSheet(opts) {
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
this.
|
|
437
|
-
this.workbookManager.updateAllFormulas((formula) => import_sheet_renamer.renameSheetInFormula({
|
|
438
|
-
formula,
|
|
439
|
-
oldSheetName: opts.sheetName,
|
|
440
|
-
newSheetName: opts.newSheetName
|
|
441
|
-
}));
|
|
442
|
-
this.referenceManager.updateSheetName(opts.workbookName, opts.sheetName, opts.newSheetName);
|
|
443
|
-
this.reevaluate();
|
|
444
|
-
this.eventManager.emitUpdate();
|
|
445
|
-
return sheet;
|
|
385
|
+
this.commandExecutor.execute(new import_structure_commands.RenameSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
386
|
+
}
|
|
387
|
+
hasSheet(opts) {
|
|
388
|
+
return !!this.workbookManager.getSheet(opts);
|
|
446
389
|
}
|
|
447
390
|
getSheets(workbookName) {
|
|
448
391
|
return this.workbookManager.getSheets(workbookName);
|
|
@@ -457,154 +400,34 @@ class FormulaEngine {
|
|
|
457
400
|
return this.workbookManager.getSheetSerialized(opts);
|
|
458
401
|
}
|
|
459
402
|
addWorkbook(workbookName) {
|
|
460
|
-
this.
|
|
461
|
-
this.namedExpressionManager.addWorkbook(workbookName);
|
|
462
|
-
this.tableManager.addWorkbook(workbookName);
|
|
463
|
-
this.reevaluate();
|
|
464
|
-
this.eventManager.emitUpdate();
|
|
403
|
+
this.commandExecutor.execute(new import_structure_commands.AddWorkbookCommand(this.getStructureCommandDeps(), workbookName), { validate: !!this.apiDeclaration });
|
|
465
404
|
}
|
|
466
405
|
removeWorkbook(workbookName) {
|
|
467
|
-
this.
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
this.
|
|
471
|
-
this.referenceManager.invalidateWorkbook(workbookName);
|
|
472
|
-
this.reevaluate();
|
|
473
|
-
this.eventManager.emitUpdate();
|
|
406
|
+
this.commandExecutor.execute(new import_structure_commands.RemoveWorkbookCommand(this.getStructureCommandDeps(), workbookName), { validate: !!this.apiDeclaration });
|
|
407
|
+
}
|
|
408
|
+
hasWorkbook(workbookName) {
|
|
409
|
+
return this.workbookManager.getWorkbooks().has(workbookName);
|
|
474
410
|
}
|
|
475
411
|
cloneWorkbook(fromWorkbookName, toWorkbookName) {
|
|
476
|
-
|
|
477
|
-
if (!sourceWorkbook) {
|
|
478
|
-
throw new Error(`Source workbook "${fromWorkbookName}" not found`);
|
|
479
|
-
}
|
|
480
|
-
if (this.workbookManager.getWorkbooks().has(toWorkbookName)) {
|
|
481
|
-
throw new Error(`Target workbook "${toWorkbookName}" already exists`);
|
|
482
|
-
}
|
|
483
|
-
this.addWorkbook(toWorkbookName);
|
|
484
|
-
for (const [sheetName, sheet] of sourceWorkbook.sheets) {
|
|
485
|
-
this.addSheet({
|
|
486
|
-
workbookName: toWorkbookName,
|
|
487
|
-
sheetName
|
|
488
|
-
});
|
|
489
|
-
this.setSheetContent({
|
|
490
|
-
workbookName: toWorkbookName,
|
|
491
|
-
sheetName
|
|
492
|
-
}, new Map(sheet.content));
|
|
493
|
-
const targetSheet = this.workbookManager.getSheet({
|
|
494
|
-
workbookName: toWorkbookName,
|
|
495
|
-
sheetName
|
|
496
|
-
});
|
|
497
|
-
if (targetSheet) {
|
|
498
|
-
targetSheet.metadata = new Map(sheet.metadata);
|
|
499
|
-
if (sheet.sheetMetadata !== undefined) {
|
|
500
|
-
targetSheet.sheetMetadata = structuredClone(sheet.sheetMetadata);
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
const targetWorkbook = this.workbookManager.getWorkbooks().get(toWorkbookName);
|
|
505
|
-
if (targetWorkbook && sourceWorkbook.workbookMetadata !== undefined) {
|
|
506
|
-
targetWorkbook.workbookMetadata = structuredClone(sourceWorkbook.workbookMetadata);
|
|
507
|
-
}
|
|
508
|
-
const sourceWorkbookExpressions = this.namedExpressionManager.getNamedExpressions().workbookExpressions.get(fromWorkbookName);
|
|
509
|
-
if (sourceWorkbookExpressions) {
|
|
510
|
-
for (const [name, expression] of sourceWorkbookExpressions) {
|
|
511
|
-
this.addNamedExpression({
|
|
512
|
-
expressionName: name,
|
|
513
|
-
expression: expression.expression,
|
|
514
|
-
workbookName: toWorkbookName
|
|
515
|
-
});
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
const sourceSheetExpressions = this.namedExpressionManager.getNamedExpressions().sheetExpressions.get(fromWorkbookName);
|
|
519
|
-
if (sourceSheetExpressions) {
|
|
520
|
-
for (const [sheetName, sheetExpressions] of sourceSheetExpressions) {
|
|
521
|
-
for (const [name, expression] of sheetExpressions) {
|
|
522
|
-
this.addNamedExpression({
|
|
523
|
-
expressionName: name,
|
|
524
|
-
expression: expression.expression,
|
|
525
|
-
workbookName: toWorkbookName,
|
|
526
|
-
sheetName
|
|
527
|
-
});
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
const sourceTables = this.tableManager.tables.get(fromWorkbookName);
|
|
532
|
-
if (sourceTables) {
|
|
533
|
-
for (const [tableName, table] of sourceTables) {
|
|
534
|
-
this.tableManager.copyTable({
|
|
535
|
-
workbookName: fromWorkbookName,
|
|
536
|
-
tableName
|
|
537
|
-
}, {
|
|
538
|
-
workbookName: toWorkbookName,
|
|
539
|
-
tableName
|
|
540
|
-
});
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
const allConditionalStyles = this.styleManager.getAllConditionalStyles();
|
|
544
|
-
for (const style of allConditionalStyles) {
|
|
545
|
-
if (style.areas.some((area) => area.workbookName === fromWorkbookName)) {
|
|
546
|
-
const newStyle = {
|
|
547
|
-
...style,
|
|
548
|
-
areas: style.areas.map((area) => area.workbookName === fromWorkbookName ? { ...area, workbookName: toWorkbookName } : area)
|
|
549
|
-
};
|
|
550
|
-
this.styleManager.addConditionalStyle(newStyle);
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
const allCellStyles = this.styleManager.getAllCellStyles();
|
|
554
|
-
for (const style of allCellStyles) {
|
|
555
|
-
if (style.areas.some((area) => area.workbookName === fromWorkbookName)) {
|
|
556
|
-
const newStyle = {
|
|
557
|
-
...style,
|
|
558
|
-
areas: style.areas.map((area) => area.workbookName === fromWorkbookName ? { ...area, workbookName: toWorkbookName } : area)
|
|
559
|
-
};
|
|
560
|
-
this.styleManager.addCellStyle(newStyle);
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
this.workbookManager.updateFormulasForWorkbook(toWorkbookName, (formula) => import_workbook_renamer.renameWorkbookInFormula({
|
|
564
|
-
formula,
|
|
565
|
-
oldWorkbookName: fromWorkbookName,
|
|
566
|
-
newWorkbookName: toWorkbookName
|
|
567
|
-
}));
|
|
568
|
-
this.reevaluate();
|
|
569
|
-
this.eventManager.emitUpdate();
|
|
412
|
+
this.commandExecutor.execute(new import_structure_commands.CloneWorkbookCommand(this.getStructureCommandDeps(), fromWorkbookName, toWorkbookName), { validate: !!this.apiDeclaration });
|
|
570
413
|
}
|
|
571
414
|
renameWorkbook(opts) {
|
|
572
|
-
this.
|
|
573
|
-
this.namedExpressionManager.renameWorkbook(opts);
|
|
574
|
-
this.tableManager.updateTablesForWorkbookRename(opts);
|
|
575
|
-
this.styleManager.updateWorkbookName(opts.workbookName, opts.newWorkbookName);
|
|
576
|
-
this.workbookManager.updateAllFormulas((formula) => import_workbook_renamer.renameWorkbookInFormula({
|
|
577
|
-
formula,
|
|
578
|
-
oldWorkbookName: opts.workbookName,
|
|
579
|
-
newWorkbookName: opts.newWorkbookName
|
|
580
|
-
}));
|
|
581
|
-
this.referenceManager.updateWorkbookName(opts.workbookName, opts.newWorkbookName);
|
|
582
|
-
this.reevaluate();
|
|
583
|
-
this.eventManager.emitUpdate();
|
|
415
|
+
this.commandExecutor.execute(new import_structure_commands.RenameWorkbookCommand(this.getStructureCommandDeps(), opts.workbookName, opts.newWorkbookName), { validate: !!this.apiDeclaration });
|
|
584
416
|
}
|
|
585
417
|
getWorkbooks() {
|
|
586
418
|
return this.workbookManager.getWorkbooks();
|
|
587
419
|
}
|
|
588
420
|
setSheetContent(opts, content) {
|
|
589
|
-
this.
|
|
590
|
-
this.reevaluate();
|
|
591
|
-
this.eventManager.emitUpdate();
|
|
421
|
+
this.commandExecutor.execute(new import_content_commands.SetSheetContentCommand(this.workbookManager, opts, content), { validate: !!this.apiDeclaration });
|
|
592
422
|
}
|
|
593
423
|
setCellContent(address, content) {
|
|
594
|
-
this.
|
|
595
|
-
this.reevaluate();
|
|
596
|
-
this.eventManager.emitUpdate();
|
|
597
|
-
}
|
|
598
|
-
reevaluate() {
|
|
599
|
-
this.evaluationManager.clearEvaluationCache();
|
|
424
|
+
this.commandExecutor.execute(new import_content_commands.SetCellContentCommand(this.workbookManager, address, content), { validate: !!this.apiDeclaration });
|
|
600
425
|
}
|
|
601
426
|
autoFill(opts, seedRange, fillRanges, direction) {
|
|
602
|
-
this.
|
|
427
|
+
this.commandExecutor.execute(new import_content_commands.AutoFillCommand(this.workbookManager, this.styleManager, this.autoFillManager, opts, seedRange, fillRanges, direction), { validate: !!this.apiDeclaration });
|
|
603
428
|
}
|
|
604
429
|
clearSpreadsheetRange(address) {
|
|
605
|
-
this.
|
|
606
|
-
this.reevaluate();
|
|
607
|
-
this.eventManager.emitUpdate();
|
|
430
|
+
this.commandExecutor.execute(new import_content_commands.ClearRangeCommand(this.workbookManager, address), { validate: !!this.apiDeclaration });
|
|
608
431
|
}
|
|
609
432
|
getState() {
|
|
610
433
|
return {
|
|
@@ -655,9 +478,59 @@ class FormulaEngine {
|
|
|
655
478
|
if (deserialized.references) {
|
|
656
479
|
this.referenceManager.resetReferences(deserialized.references);
|
|
657
480
|
}
|
|
658
|
-
this.
|
|
481
|
+
this.evaluationManager.clearEvaluationCache();
|
|
659
482
|
this.eventManager.emitUpdate();
|
|
660
483
|
}
|
|
484
|
+
undo() {
|
|
485
|
+
return this.commandExecutor.undo();
|
|
486
|
+
}
|
|
487
|
+
redo() {
|
|
488
|
+
return this.commandExecutor.redo();
|
|
489
|
+
}
|
|
490
|
+
canUndo() {
|
|
491
|
+
return this.commandExecutor.canUndo();
|
|
492
|
+
}
|
|
493
|
+
canRedo() {
|
|
494
|
+
return this.commandExecutor.canRedo();
|
|
495
|
+
}
|
|
496
|
+
getActionLog() {
|
|
497
|
+
return this.commandExecutor.getActionLog();
|
|
498
|
+
}
|
|
499
|
+
clearActionLog() {
|
|
500
|
+
this.commandExecutor.clearActionLog();
|
|
501
|
+
}
|
|
502
|
+
clearHistory() {
|
|
503
|
+
this.commandExecutor.clearHistory();
|
|
504
|
+
}
|
|
505
|
+
getStructureCommandDeps() {
|
|
506
|
+
return {
|
|
507
|
+
workbookManager: this.workbookManager,
|
|
508
|
+
namedExpressionManager: this.namedExpressionManager,
|
|
509
|
+
tableManager: this.tableManager,
|
|
510
|
+
styleManager: this.styleManager,
|
|
511
|
+
referenceManager: this.referenceManager,
|
|
512
|
+
apiSchemaManager: this.apiSchemaManager,
|
|
513
|
+
renameSheetInFormula: import_sheet_renamer.renameSheetInFormula,
|
|
514
|
+
renameWorkbookInFormula: import_workbook_renamer.renameWorkbookInFormula
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
getTableCommandDeps() {
|
|
518
|
+
return {
|
|
519
|
+
tableManager: this.tableManager,
|
|
520
|
+
namedExpressionManager: this.namedExpressionManager,
|
|
521
|
+
workbookManager: this.workbookManager,
|
|
522
|
+
apiSchemaManager: this.apiSchemaManager,
|
|
523
|
+
getCellValue: (cell) => this.getCellValue(cell),
|
|
524
|
+
renameTableInFormula: import_table_renamer.renameTableInFormula
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
getNamedExpressionCommandDeps() {
|
|
528
|
+
return {
|
|
529
|
+
namedExpressionManager: this.namedExpressionManager,
|
|
530
|
+
workbookManager: this.workbookManager,
|
|
531
|
+
renameNamedExpressionInFormula: import_named_expression_renamer.renameNamedExpressionInFormula
|
|
532
|
+
};
|
|
533
|
+
}
|
|
661
534
|
}
|
|
662
535
|
|
|
663
|
-
//# debugId=
|
|
536
|
+
//# debugId=66643F9F298C18FE64756E2164756E21
|