@ricsam/formula-engine 0.0.17 → 0.0.18
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/index.cjs +95 -0
- package/dist/cjs/core/commands/index.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 +159 -296
- 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/index.mjs +87 -0
- package/dist/mjs/core/commands/index.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 +194 -296
- 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/index.d.ts +16 -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,9 @@ 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_commands = require("./commands.cjs");
|
|
52
55
|
|
|
53
56
|
class FormulaEngine {
|
|
54
57
|
workbookManager;
|
|
@@ -61,6 +64,10 @@ class FormulaEngine {
|
|
|
61
64
|
styleManager;
|
|
62
65
|
copyManager;
|
|
63
66
|
referenceManager;
|
|
67
|
+
apiSchemaManager;
|
|
68
|
+
commandExecutor;
|
|
69
|
+
api;
|
|
70
|
+
apiDeclaration;
|
|
64
71
|
_workbookManager;
|
|
65
72
|
_namedExpressionManager;
|
|
66
73
|
_tableManager;
|
|
@@ -69,7 +76,8 @@ class FormulaEngine {
|
|
|
69
76
|
_autoFillManager;
|
|
70
77
|
_dependencyManager;
|
|
71
78
|
_styleManager;
|
|
72
|
-
constructor() {
|
|
79
|
+
constructor(api) {
|
|
80
|
+
this.apiDeclaration = api?.declaration;
|
|
73
81
|
this.eventManager = new import_event_manager.EventManager;
|
|
74
82
|
this.workbookManager = new import_workbook_manager.WorkbookManager;
|
|
75
83
|
this.namedExpressionManager = new import_named_expression_manager.NamedExpressionManager;
|
|
@@ -80,8 +88,15 @@ class FormulaEngine {
|
|
|
80
88
|
this.evaluationManager = new import_evaluation_manager.EvaluationManager(this.workbookManager, this.tableManager, formulaEvaluator, this.dependencyManager);
|
|
81
89
|
this.styleManager = new import_style_manager.StyleManager(this.evaluationManager);
|
|
82
90
|
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
|
|
91
|
+
this.autoFillManager = new import_autofill_utils.AutoFill(this.workbookManager, this.styleManager);
|
|
84
92
|
this.referenceManager = new import_reference_manager.ReferenceManager;
|
|
93
|
+
this.apiSchemaManager = new import_api_schema_manager.ApiSchemaManager(this.tableManager);
|
|
94
|
+
this.commandExecutor = new import_commands.CommandExecutor(this.apiDeclaration, this.evaluationManager, this.eventManager, () => this.apiSchemaManager.validateAllSchemaConstraints((cell) => this.getCellValue(cell), (cell) => this.getCellMetadata(cell), (table) => this.getTableDataCells(table)));
|
|
95
|
+
if (this.apiDeclaration) {
|
|
96
|
+
this.api = import_api_builder.buildApiFromDeclaration(this, this.apiDeclaration, this.apiSchemaManager);
|
|
97
|
+
} else {
|
|
98
|
+
this.api = undefined;
|
|
99
|
+
}
|
|
85
100
|
this._workbookManager = this.workbookManager;
|
|
86
101
|
this._namedExpressionManager = this.namedExpressionManager;
|
|
87
102
|
this._tableManager = this.tableManager;
|
|
@@ -91,8 +106,8 @@ class FormulaEngine {
|
|
|
91
106
|
this._dependencyManager = this.dependencyManager;
|
|
92
107
|
this._styleManager = this.styleManager;
|
|
93
108
|
}
|
|
94
|
-
static buildEmpty() {
|
|
95
|
-
return new FormulaEngine;
|
|
109
|
+
static buildEmpty(api) {
|
|
110
|
+
return new FormulaEngine(api);
|
|
96
111
|
}
|
|
97
112
|
getCellEvaluationResult(cellAddress) {
|
|
98
113
|
return this.evaluationManager.getCellEvaluationResult(cellAddress);
|
|
@@ -105,25 +120,23 @@ class FormulaEngine {
|
|
|
105
120
|
return this.evaluationManager.evaluationResultToSerializedValue(result, cellAddress, debug);
|
|
106
121
|
}
|
|
107
122
|
setCellMetadata(address, metadata) {
|
|
108
|
-
this.
|
|
109
|
-
this.eventManager.emitUpdate();
|
|
123
|
+
this.commandExecutor.execute(new import_commands.SetCellMetadataCommand(this.workbookManager, address, metadata));
|
|
110
124
|
}
|
|
111
125
|
getCellMetadata(address) {
|
|
112
|
-
|
|
126
|
+
const metadata = this.workbookManager.getCellMetadata(address);
|
|
127
|
+
return metadata;
|
|
113
128
|
}
|
|
114
129
|
getSheetMetadataSerialized(opts) {
|
|
115
130
|
return this.workbookManager.getSheetMetadataSerialized(opts);
|
|
116
131
|
}
|
|
117
132
|
setSheetMetadata(opts, metadata) {
|
|
118
|
-
this.
|
|
119
|
-
this.eventManager.emitUpdate();
|
|
133
|
+
this.commandExecutor.execute(new import_commands.SetSheetMetadataCommand(this.workbookManager, opts, metadata));
|
|
120
134
|
}
|
|
121
135
|
getSheetMetadata(opts) {
|
|
122
136
|
return this.workbookManager.getSheetMetadata(opts);
|
|
123
137
|
}
|
|
124
138
|
setWorkbookMetadata(workbookName, metadata) {
|
|
125
|
-
this.
|
|
126
|
-
this.eventManager.emitUpdate();
|
|
139
|
+
this.commandExecutor.execute(new import_commands.SetWorkbookMetadataCommand(this.workbookManager, workbookName, metadata));
|
|
127
140
|
}
|
|
128
141
|
getWorkbookMetadata(workbookName) {
|
|
129
142
|
return this.workbookManager.getWorkbookMetadata(workbookName);
|
|
@@ -149,111 +162,54 @@ class FormulaEngine {
|
|
|
149
162
|
getCellPrecedents(address) {
|
|
150
163
|
throw new Error("Not implemented");
|
|
151
164
|
}
|
|
152
|
-
addNamedExpression({
|
|
153
|
-
|
|
154
|
-
expressionName,
|
|
155
|
-
sheetName,
|
|
156
|
-
workbookName
|
|
157
|
-
}) {
|
|
158
|
-
this.namedExpressionManager.addNamedExpression({
|
|
159
|
-
expression,
|
|
160
|
-
expressionName,
|
|
161
|
-
sheetName,
|
|
162
|
-
workbookName
|
|
163
|
-
});
|
|
164
|
-
this.reevaluate();
|
|
165
|
-
this.eventManager.emitUpdate();
|
|
165
|
+
addNamedExpression(opts) {
|
|
166
|
+
this.commandExecutor.execute(new import_commands.AddNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
166
167
|
}
|
|
167
|
-
removeNamedExpression({
|
|
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;
|
|
168
|
+
removeNamedExpression(opts) {
|
|
169
|
+
this.commandExecutor.execute(new import_commands.RemoveNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
182
170
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}) {
|
|
189
|
-
this.namedExpressionManager.updateNamedExpression({
|
|
190
|
-
expression,
|
|
191
|
-
expressionName,
|
|
192
|
-
sheetName,
|
|
193
|
-
workbookName
|
|
171
|
+
hasNamedExpression(opts) {
|
|
172
|
+
const scope = opts.sheetName && opts.workbookName ? { type: "sheet", workbookName: opts.workbookName, sheetName: opts.sheetName } : opts.workbookName ? { type: "workbook", workbookName: opts.workbookName } : { type: "global" };
|
|
173
|
+
return !!this.namedExpressionManager.getNamedExpression({
|
|
174
|
+
name: opts.expressionName,
|
|
175
|
+
scope
|
|
194
176
|
});
|
|
195
|
-
this.reevaluate();
|
|
196
|
-
this.eventManager.emitUpdate();
|
|
197
177
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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;
|
|
178
|
+
updateNamedExpression(opts) {
|
|
179
|
+
this.commandExecutor.execute(new import_commands.UpdateNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
180
|
+
}
|
|
181
|
+
renameNamedExpression(opts) {
|
|
182
|
+
this.commandExecutor.execute(new import_commands.RenameNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
215
183
|
}
|
|
216
184
|
setNamedExpressions(opts) {
|
|
217
|
-
this.
|
|
218
|
-
this.reevaluate();
|
|
219
|
-
this.eventManager.emitUpdate();
|
|
185
|
+
this.commandExecutor.execute(new import_commands.SetNamedExpressionsCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
220
186
|
}
|
|
221
187
|
addTable(props) {
|
|
222
|
-
|
|
223
|
-
...props,
|
|
224
|
-
getCellValue: (cellAddress) => this.getCellValue(cellAddress)
|
|
225
|
-
});
|
|
226
|
-
this.reevaluate();
|
|
227
|
-
this.eventManager.emitUpdate();
|
|
228
|
-
return table;
|
|
188
|
+
this.commandExecutor.execute(new import_commands.AddTableCommand(this.getTableCommandDeps(), props), { validate: !!this.apiDeclaration });
|
|
229
189
|
}
|
|
230
190
|
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();
|
|
191
|
+
this.commandExecutor.execute(new import_commands.RenameTableCommand(this.getTableCommandDeps(), workbookName, names.oldName, names.newName), { validate: !!this.apiDeclaration });
|
|
236
192
|
}
|
|
237
193
|
updateTable(opts) {
|
|
238
|
-
this.
|
|
239
|
-
...opts,
|
|
240
|
-
getCellValue: (cellAddress) => this.getCellValue(cellAddress)
|
|
241
|
-
});
|
|
242
|
-
this.reevaluate();
|
|
243
|
-
this.eventManager.emitUpdate();
|
|
194
|
+
this.commandExecutor.execute(new import_commands.UpdateTableCommand(this.getTableCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
244
195
|
}
|
|
245
196
|
removeTable(opts) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
197
|
+
this.commandExecutor.execute(new import_commands.RemoveTableCommand(this.getTableCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
198
|
+
}
|
|
199
|
+
hasTable(opts) {
|
|
200
|
+
return !!this.tableManager.getTable({
|
|
201
|
+
workbookName: opts.workbookName,
|
|
202
|
+
name: opts.tableName
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
getTable(opts) {
|
|
206
|
+
return this.tableManager.getTable({
|
|
207
|
+
workbookName: opts.workbookName,
|
|
208
|
+
name: opts.tableName
|
|
209
|
+
});
|
|
252
210
|
}
|
|
253
211
|
resetTables(tables) {
|
|
254
|
-
this.
|
|
255
|
-
this.reevaluate();
|
|
256
|
-
this.eventManager.emitUpdate();
|
|
212
|
+
this.commandExecutor.execute(new import_commands.ResetTablesCommand(this.getTableCommandDeps(), tables), { validate: !!this.apiDeclaration });
|
|
257
213
|
}
|
|
258
214
|
getTables(workbookName) {
|
|
259
215
|
return this.tableManager.getTables(workbookName);
|
|
@@ -261,16 +217,32 @@ class FormulaEngine {
|
|
|
261
217
|
isCellInTable(cellAddress) {
|
|
262
218
|
return this.tableManager.isCellInTable(cellAddress);
|
|
263
219
|
}
|
|
220
|
+
getTableDataCells(table) {
|
|
221
|
+
const { start, endRow, headers } = table;
|
|
222
|
+
const dataStartRow = start.rowIndex + 1;
|
|
223
|
+
const endColIndex = start.colIndex + headers.size - 1;
|
|
224
|
+
const rangeAddress = {
|
|
225
|
+
workbookName: table.workbookName,
|
|
226
|
+
sheetName: table.sheetName,
|
|
227
|
+
range: {
|
|
228
|
+
start: { col: start.colIndex, row: dataStartRow },
|
|
229
|
+
end: {
|
|
230
|
+
col: { type: "number", value: endColIndex },
|
|
231
|
+
row: endRow
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
return this.workbookManager.getCellsInRange(rangeAddress);
|
|
236
|
+
}
|
|
264
237
|
addConditionalStyle(style) {
|
|
265
|
-
this.
|
|
266
|
-
this.eventManager.emitUpdate();
|
|
238
|
+
this.commandExecutor.execute(new import_commands.AddConditionalStyleCommand(this.styleManager, style));
|
|
267
239
|
}
|
|
268
240
|
removeConditionalStyle(workbookName, index) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
return
|
|
241
|
+
this.commandExecutor.execute(new import_commands.RemoveConditionalStyleCommand(this.styleManager, workbookName, index));
|
|
242
|
+
}
|
|
243
|
+
getConditionalStyleCount(workbookName) {
|
|
244
|
+
const allStyles = this.styleManager.getAllConditionalStyles();
|
|
245
|
+
return allStyles.filter((s) => s.areas.some((a) => a.workbookName === workbookName)).length;
|
|
274
246
|
}
|
|
275
247
|
getConditionalStylesIntersectingWithRange(range) {
|
|
276
248
|
return this.styleManager.getConditionalStylesIntersectingWithRange(range);
|
|
@@ -285,15 +257,14 @@ class FormulaEngine {
|
|
|
285
257
|
return this.styleManager.getAllConditionalStyles();
|
|
286
258
|
}
|
|
287
259
|
addCellStyle(style) {
|
|
288
|
-
this.
|
|
289
|
-
this.eventManager.emitUpdate();
|
|
260
|
+
this.commandExecutor.execute(new import_commands.AddCellStyleCommand(this.styleManager, style));
|
|
290
261
|
}
|
|
291
262
|
removeCellStyle(workbookName, index) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
return
|
|
263
|
+
this.commandExecutor.execute(new import_commands.RemoveCellStyleCommand(this.styleManager, workbookName, index));
|
|
264
|
+
}
|
|
265
|
+
getCellStyleCount(workbookName) {
|
|
266
|
+
const allStyles = this.styleManager.getAllCellStyles();
|
|
267
|
+
return allStyles.filter((s) => s.areas.some((a) => a.workbookName === workbookName)).length;
|
|
297
268
|
}
|
|
298
269
|
getStylesIntersectingWithRange(range) {
|
|
299
270
|
return this.styleManager.getStylesIntersectingWithRange(range);
|
|
@@ -302,18 +273,13 @@ class FormulaEngine {
|
|
|
302
273
|
return this.styleManager.getStyleForRange(range);
|
|
303
274
|
}
|
|
304
275
|
clearCellStyles(range) {
|
|
305
|
-
this.
|
|
306
|
-
this.eventManager.emitUpdate();
|
|
276
|
+
this.commandExecutor.execute(new import_commands.ClearCellStylesCommand(this.styleManager, range));
|
|
307
277
|
}
|
|
308
278
|
pasteCells(source, target, options) {
|
|
309
|
-
this.
|
|
310
|
-
this.reevaluate();
|
|
311
|
-
this.eventManager.emitUpdate();
|
|
279
|
+
this.commandExecutor.execute(new import_commands.PasteCellsCommand(this.workbookManager, this.copyManager, source, target, options), { validate: !!this.apiDeclaration });
|
|
312
280
|
}
|
|
313
281
|
fillAreas(seedRange, targetRanges, options) {
|
|
314
|
-
this.
|
|
315
|
-
this.reevaluate();
|
|
316
|
-
this.eventManager.emitUpdate();
|
|
282
|
+
this.commandExecutor.execute(new import_commands.FillAreasCommand(this.workbookManager, this.copyManager, seedRange, targetRanges, options), { validate: !!this.apiDeclaration });
|
|
317
283
|
}
|
|
318
284
|
smartPaste(sourceCells, pasteSelection, options) {
|
|
319
285
|
if (sourceCells.length === 0) {
|
|
@@ -394,55 +360,22 @@ class FormulaEngine {
|
|
|
394
360
|
return { minCol, minRow, maxCol, maxRow };
|
|
395
361
|
}
|
|
396
362
|
moveCell(source, target) {
|
|
397
|
-
this.
|
|
398
|
-
cut: true,
|
|
399
|
-
type: "formula",
|
|
400
|
-
include: "all"
|
|
401
|
-
});
|
|
402
|
-
this.reevaluate();
|
|
403
|
-
this.eventManager.emitUpdate();
|
|
363
|
+
this.commandExecutor.execute(new import_commands.MoveCellCommand(this.workbookManager, this.copyManager, source, target), { validate: !!this.apiDeclaration });
|
|
404
364
|
}
|
|
405
365
|
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();
|
|
366
|
+
this.commandExecutor.execute(new import_commands.MoveRangeCommand(this.workbookManager, this.copyManager, sourceRange, target), { validate: !!this.apiDeclaration });
|
|
414
367
|
}
|
|
415
368
|
addSheet(opts) {
|
|
416
|
-
|
|
417
|
-
const wbLevel = this.namedExpressionManager.addSheet(opts);
|
|
418
|
-
this.reevaluate();
|
|
419
|
-
this.eventManager.emitUpdate();
|
|
420
|
-
return newSheet;
|
|
369
|
+
this.commandExecutor.execute(new import_commands.AddSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
421
370
|
}
|
|
422
371
|
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;
|
|
372
|
+
this.commandExecutor.execute(new import_commands.RemoveSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
431
373
|
}
|
|
432
374
|
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;
|
|
375
|
+
this.commandExecutor.execute(new import_commands.RenameSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
376
|
+
}
|
|
377
|
+
hasSheet(opts) {
|
|
378
|
+
return !!this.workbookManager.getSheet(opts);
|
|
446
379
|
}
|
|
447
380
|
getSheets(workbookName) {
|
|
448
381
|
return this.workbookManager.getSheets(workbookName);
|
|
@@ -457,154 +390,34 @@ class FormulaEngine {
|
|
|
457
390
|
return this.workbookManager.getSheetSerialized(opts);
|
|
458
391
|
}
|
|
459
392
|
addWorkbook(workbookName) {
|
|
460
|
-
this.
|
|
461
|
-
this.namedExpressionManager.addWorkbook(workbookName);
|
|
462
|
-
this.tableManager.addWorkbook(workbookName);
|
|
463
|
-
this.reevaluate();
|
|
464
|
-
this.eventManager.emitUpdate();
|
|
393
|
+
this.commandExecutor.execute(new import_commands.AddWorkbookCommand(this.getStructureCommandDeps(), workbookName), { validate: !!this.apiDeclaration });
|
|
465
394
|
}
|
|
466
395
|
removeWorkbook(workbookName) {
|
|
467
|
-
this.
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
this.
|
|
471
|
-
this.referenceManager.invalidateWorkbook(workbookName);
|
|
472
|
-
this.reevaluate();
|
|
473
|
-
this.eventManager.emitUpdate();
|
|
396
|
+
this.commandExecutor.execute(new import_commands.RemoveWorkbookCommand(this.getStructureCommandDeps(), workbookName), { validate: !!this.apiDeclaration });
|
|
397
|
+
}
|
|
398
|
+
hasWorkbook(workbookName) {
|
|
399
|
+
return this.workbookManager.getWorkbooks().has(workbookName);
|
|
474
400
|
}
|
|
475
401
|
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();
|
|
402
|
+
this.commandExecutor.execute(new import_commands.CloneWorkbookCommand(this.getStructureCommandDeps(), fromWorkbookName, toWorkbookName), { validate: !!this.apiDeclaration });
|
|
570
403
|
}
|
|
571
404
|
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();
|
|
405
|
+
this.commandExecutor.execute(new import_commands.RenameWorkbookCommand(this.getStructureCommandDeps(), opts.workbookName, opts.newWorkbookName), { validate: !!this.apiDeclaration });
|
|
584
406
|
}
|
|
585
407
|
getWorkbooks() {
|
|
586
408
|
return this.workbookManager.getWorkbooks();
|
|
587
409
|
}
|
|
588
410
|
setSheetContent(opts, content) {
|
|
589
|
-
this.
|
|
590
|
-
this.reevaluate();
|
|
591
|
-
this.eventManager.emitUpdate();
|
|
411
|
+
this.commandExecutor.execute(new import_commands.SetSheetContentCommand(this.workbookManager, opts, content), { validate: !!this.apiDeclaration });
|
|
592
412
|
}
|
|
593
413
|
setCellContent(address, content) {
|
|
594
|
-
this.
|
|
595
|
-
this.reevaluate();
|
|
596
|
-
this.eventManager.emitUpdate();
|
|
597
|
-
}
|
|
598
|
-
reevaluate() {
|
|
599
|
-
this.evaluationManager.clearEvaluationCache();
|
|
414
|
+
this.commandExecutor.execute(new import_commands.SetCellContentCommand(this.workbookManager, address, content), { validate: !!this.apiDeclaration });
|
|
600
415
|
}
|
|
601
416
|
autoFill(opts, seedRange, fillRanges, direction) {
|
|
602
|
-
this.
|
|
417
|
+
this.commandExecutor.execute(new import_commands.AutoFillCommand(this.workbookManager, this.styleManager, this.autoFillManager, opts, seedRange, fillRanges, direction), { validate: !!this.apiDeclaration });
|
|
603
418
|
}
|
|
604
419
|
clearSpreadsheetRange(address) {
|
|
605
|
-
this.
|
|
606
|
-
this.reevaluate();
|
|
607
|
-
this.eventManager.emitUpdate();
|
|
420
|
+
this.commandExecutor.execute(new import_commands.ClearRangeCommand(this.workbookManager, address), { validate: !!this.apiDeclaration });
|
|
608
421
|
}
|
|
609
422
|
getState() {
|
|
610
423
|
return {
|
|
@@ -655,9 +468,59 @@ class FormulaEngine {
|
|
|
655
468
|
if (deserialized.references) {
|
|
656
469
|
this.referenceManager.resetReferences(deserialized.references);
|
|
657
470
|
}
|
|
658
|
-
this.
|
|
471
|
+
this.evaluationManager.clearEvaluationCache();
|
|
659
472
|
this.eventManager.emitUpdate();
|
|
660
473
|
}
|
|
474
|
+
undo() {
|
|
475
|
+
return this.commandExecutor.undo();
|
|
476
|
+
}
|
|
477
|
+
redo() {
|
|
478
|
+
return this.commandExecutor.redo();
|
|
479
|
+
}
|
|
480
|
+
canUndo() {
|
|
481
|
+
return this.commandExecutor.canUndo();
|
|
482
|
+
}
|
|
483
|
+
canRedo() {
|
|
484
|
+
return this.commandExecutor.canRedo();
|
|
485
|
+
}
|
|
486
|
+
getActionLog() {
|
|
487
|
+
return this.commandExecutor.getActionLog();
|
|
488
|
+
}
|
|
489
|
+
clearActionLog() {
|
|
490
|
+
this.commandExecutor.clearActionLog();
|
|
491
|
+
}
|
|
492
|
+
clearHistory() {
|
|
493
|
+
this.commandExecutor.clearHistory();
|
|
494
|
+
}
|
|
495
|
+
getStructureCommandDeps() {
|
|
496
|
+
return {
|
|
497
|
+
workbookManager: this.workbookManager,
|
|
498
|
+
namedExpressionManager: this.namedExpressionManager,
|
|
499
|
+
tableManager: this.tableManager,
|
|
500
|
+
styleManager: this.styleManager,
|
|
501
|
+
referenceManager: this.referenceManager,
|
|
502
|
+
apiSchemaManager: this.apiSchemaManager,
|
|
503
|
+
renameSheetInFormula: import_sheet_renamer.renameSheetInFormula,
|
|
504
|
+
renameWorkbookInFormula: import_workbook_renamer.renameWorkbookInFormula
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
getTableCommandDeps() {
|
|
508
|
+
return {
|
|
509
|
+
tableManager: this.tableManager,
|
|
510
|
+
namedExpressionManager: this.namedExpressionManager,
|
|
511
|
+
workbookManager: this.workbookManager,
|
|
512
|
+
apiSchemaManager: this.apiSchemaManager,
|
|
513
|
+
getCellValue: (cell) => this.getCellValue(cell),
|
|
514
|
+
renameTableInFormula: import_table_renamer.renameTableInFormula
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
getNamedExpressionCommandDeps() {
|
|
518
|
+
return {
|
|
519
|
+
namedExpressionManager: this.namedExpressionManager,
|
|
520
|
+
workbookManager: this.workbookManager,
|
|
521
|
+
renameNamedExpressionInFormula: import_named_expression_renamer.renameNamedExpressionInFormula
|
|
522
|
+
};
|
|
523
|
+
}
|
|
661
524
|
}
|
|
662
525
|
|
|
663
|
-
//# debugId=
|
|
526
|
+
//# debugId=3DF704CC89CB006E64756E2164756E21
|