@ricsam/formula-engine 0.0.16 → 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 +75 -39
- package/dist/cjs/core/autofill-utils.cjs.map +3 -3
- package/dist/cjs/core/cell-mover.cjs +178 -0
- package/dist/cjs/core/cell-mover.cjs.map +10 -0
- 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 +218 -263
- 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 +336 -82
- package/dist/cjs/core/managers/copy-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/reference-manager.cjs +124 -0
- package/dist/cjs/core/managers/reference-manager.cjs.map +10 -0
- package/dist/cjs/core/managers/style-manager.cjs +115 -147
- package/dist/cjs/core/managers/style-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/workbook-manager.cjs +87 -3
- package/dist/cjs/core/managers/workbook-manager.cjs.map +3 -3
- package/dist/cjs/core/types.cjs.map +1 -1
- 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 +75 -39
- package/dist/mjs/core/autofill-utils.mjs.map +3 -3
- package/dist/mjs/core/cell-mover.mjs +148 -0
- package/dist/mjs/core/cell-mover.mjs.map +10 -0
- 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 +253 -263
- 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 +338 -82
- package/dist/mjs/core/managers/copy-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/reference-manager.mjs +93 -0
- package/dist/mjs/core/managers/reference-manager.mjs.map +10 -0
- package/dist/mjs/core/managers/style-manager.mjs +115 -147
- package/dist/mjs/core/managers/style-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/workbook-manager.mjs +87 -3
- package/dist/mjs/core/managers/workbook-manager.mjs.map +3 -3
- package/dist/mjs/core/types.mjs.map +1 -1
- 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 +6 -9
- package/dist/types/core/cell-mover.d.ts +63 -0
- 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 +241 -23
- package/dist/types/core/managers/api-schema-manager.d.ts +121 -0
- package/dist/types/core/managers/copy-manager.d.ts +47 -2
- package/dist/types/core/managers/reference-manager.d.ts +54 -0
- package/dist/types/core/managers/style-manager.d.ts +6 -6
- package/dist/types/core/managers/workbook-manager.d.ts +39 -1
- package/dist/types/core/types.d.ts +52 -11
- package/dist/types/lib.d.ts +8 -0
- package/package.json +1 -1
package/dist/cjs/core/engine.cjs
CHANGED
|
@@ -48,6 +48,10 @@ var import_evaluation_manager = require("./managers/evaluation-manager.cjs");
|
|
|
48
48
|
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
|
+
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");
|
|
51
55
|
|
|
52
56
|
class FormulaEngine {
|
|
53
57
|
workbookManager;
|
|
@@ -59,6 +63,11 @@ class FormulaEngine {
|
|
|
59
63
|
dependencyManager;
|
|
60
64
|
styleManager;
|
|
61
65
|
copyManager;
|
|
66
|
+
referenceManager;
|
|
67
|
+
apiSchemaManager;
|
|
68
|
+
commandExecutor;
|
|
69
|
+
api;
|
|
70
|
+
apiDeclaration;
|
|
62
71
|
_workbookManager;
|
|
63
72
|
_namedExpressionManager;
|
|
64
73
|
_tableManager;
|
|
@@ -67,7 +76,8 @@ class FormulaEngine {
|
|
|
67
76
|
_autoFillManager;
|
|
68
77
|
_dependencyManager;
|
|
69
78
|
_styleManager;
|
|
70
|
-
constructor() {
|
|
79
|
+
constructor(api) {
|
|
80
|
+
this.apiDeclaration = api?.declaration;
|
|
71
81
|
this.eventManager = new import_event_manager.EventManager;
|
|
72
82
|
this.workbookManager = new import_workbook_manager.WorkbookManager;
|
|
73
83
|
this.namedExpressionManager = new import_named_expression_manager.NamedExpressionManager;
|
|
@@ -78,7 +88,15 @@ class FormulaEngine {
|
|
|
78
88
|
this.evaluationManager = new import_evaluation_manager.EvaluationManager(this.workbookManager, this.tableManager, formulaEvaluator, this.dependencyManager);
|
|
79
89
|
this.styleManager = new import_style_manager.StyleManager(this.evaluationManager);
|
|
80
90
|
this.copyManager = new import_copy_manager.CopyManager(this.workbookManager, this.evaluationManager, this.styleManager);
|
|
81
|
-
this.autoFillManager = new import_autofill_utils.AutoFill(this.workbookManager, this.styleManager
|
|
91
|
+
this.autoFillManager = new import_autofill_utils.AutoFill(this.workbookManager, this.styleManager);
|
|
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
|
+
}
|
|
82
100
|
this._workbookManager = this.workbookManager;
|
|
83
101
|
this._namedExpressionManager = this.namedExpressionManager;
|
|
84
102
|
this._tableManager = this.tableManager;
|
|
@@ -88,8 +106,8 @@ class FormulaEngine {
|
|
|
88
106
|
this._dependencyManager = this.dependencyManager;
|
|
89
107
|
this._styleManager = this.styleManager;
|
|
90
108
|
}
|
|
91
|
-
static buildEmpty() {
|
|
92
|
-
return new FormulaEngine;
|
|
109
|
+
static buildEmpty(api) {
|
|
110
|
+
return new FormulaEngine(api);
|
|
93
111
|
}
|
|
94
112
|
getCellEvaluationResult(cellAddress) {
|
|
95
113
|
return this.evaluationManager.getCellEvaluationResult(cellAddress);
|
|
@@ -101,6 +119,40 @@ class FormulaEngine {
|
|
|
101
119
|
}
|
|
102
120
|
return this.evaluationManager.evaluationResultToSerializedValue(result, cellAddress, debug);
|
|
103
121
|
}
|
|
122
|
+
setCellMetadata(address, metadata) {
|
|
123
|
+
this.commandExecutor.execute(new import_commands.SetCellMetadataCommand(this.workbookManager, address, metadata));
|
|
124
|
+
}
|
|
125
|
+
getCellMetadata(address) {
|
|
126
|
+
const metadata = this.workbookManager.getCellMetadata(address);
|
|
127
|
+
return metadata;
|
|
128
|
+
}
|
|
129
|
+
getSheetMetadataSerialized(opts) {
|
|
130
|
+
return this.workbookManager.getSheetMetadataSerialized(opts);
|
|
131
|
+
}
|
|
132
|
+
setSheetMetadata(opts, metadata) {
|
|
133
|
+
this.commandExecutor.execute(new import_commands.SetSheetMetadataCommand(this.workbookManager, opts, metadata));
|
|
134
|
+
}
|
|
135
|
+
getSheetMetadata(opts) {
|
|
136
|
+
return this.workbookManager.getSheetMetadata(opts);
|
|
137
|
+
}
|
|
138
|
+
setWorkbookMetadata(workbookName, metadata) {
|
|
139
|
+
this.commandExecutor.execute(new import_commands.SetWorkbookMetadataCommand(this.workbookManager, workbookName, metadata));
|
|
140
|
+
}
|
|
141
|
+
getWorkbookMetadata(workbookName) {
|
|
142
|
+
return this.workbookManager.getWorkbookMetadata(workbookName);
|
|
143
|
+
}
|
|
144
|
+
createRef(address) {
|
|
145
|
+
return this.referenceManager.createRef(address);
|
|
146
|
+
}
|
|
147
|
+
getRefAddress(refId) {
|
|
148
|
+
return this.referenceManager.getRefAddress(refId);
|
|
149
|
+
}
|
|
150
|
+
deleteRef(refId) {
|
|
151
|
+
return this.referenceManager.deleteRef(refId);
|
|
152
|
+
}
|
|
153
|
+
getInvalidRefs() {
|
|
154
|
+
return this.referenceManager.getInvalidRefs();
|
|
155
|
+
}
|
|
104
156
|
evaluateFormula(formula, cellAddress) {
|
|
105
157
|
return this.evaluationManager.evaluateFormula(formula, cellAddress);
|
|
106
158
|
}
|
|
@@ -110,111 +162,54 @@ class FormulaEngine {
|
|
|
110
162
|
getCellPrecedents(address) {
|
|
111
163
|
throw new Error("Not implemented");
|
|
112
164
|
}
|
|
113
|
-
addNamedExpression({
|
|
114
|
-
|
|
115
|
-
expressionName,
|
|
116
|
-
sheetName,
|
|
117
|
-
workbookName
|
|
118
|
-
}) {
|
|
119
|
-
this.namedExpressionManager.addNamedExpression({
|
|
120
|
-
expression,
|
|
121
|
-
expressionName,
|
|
122
|
-
sheetName,
|
|
123
|
-
workbookName
|
|
124
|
-
});
|
|
125
|
-
this.reevaluate();
|
|
126
|
-
this.eventManager.emitUpdate();
|
|
165
|
+
addNamedExpression(opts) {
|
|
166
|
+
this.commandExecutor.execute(new import_commands.AddNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
127
167
|
}
|
|
128
|
-
removeNamedExpression({
|
|
129
|
-
|
|
130
|
-
sheetName,
|
|
131
|
-
workbookName
|
|
132
|
-
}) {
|
|
133
|
-
const found = this.namedExpressionManager.removeNamedExpression({
|
|
134
|
-
expressionName,
|
|
135
|
-
sheetName,
|
|
136
|
-
workbookName
|
|
137
|
-
});
|
|
138
|
-
if (found) {
|
|
139
|
-
this.reevaluate();
|
|
140
|
-
this.eventManager.emitUpdate();
|
|
141
|
-
}
|
|
142
|
-
return found;
|
|
168
|
+
removeNamedExpression(opts) {
|
|
169
|
+
this.commandExecutor.execute(new import_commands.RemoveNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
143
170
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}) {
|
|
150
|
-
this.namedExpressionManager.updateNamedExpression({
|
|
151
|
-
expression,
|
|
152
|
-
expressionName,
|
|
153
|
-
sheetName,
|
|
154
|
-
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
|
|
155
176
|
});
|
|
156
|
-
this.reevaluate();
|
|
157
|
-
this.eventManager.emitUpdate();
|
|
158
177
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}) {
|
|
165
|
-
const result = this.namedExpressionManager.renameNamedExpression({
|
|
166
|
-
expressionName,
|
|
167
|
-
sheetName,
|
|
168
|
-
workbookName,
|
|
169
|
-
newName
|
|
170
|
-
});
|
|
171
|
-
this.workbookManager.updateAllFormulas((formula) => import_named_expression_renamer.renameNamedExpressionInFormula(formula, expressionName, newName));
|
|
172
|
-
this.namedExpressionManager.updateAllNamedExpressions((formula) => import_named_expression_renamer.renameNamedExpressionInFormula(formula, expressionName, newName));
|
|
173
|
-
this.reevaluate();
|
|
174
|
-
this.eventManager.emitUpdate();
|
|
175
|
-
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 });
|
|
176
183
|
}
|
|
177
184
|
setNamedExpressions(opts) {
|
|
178
|
-
this.
|
|
179
|
-
this.reevaluate();
|
|
180
|
-
this.eventManager.emitUpdate();
|
|
185
|
+
this.commandExecutor.execute(new import_commands.SetNamedExpressionsCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
181
186
|
}
|
|
182
187
|
addTable(props) {
|
|
183
|
-
|
|
184
|
-
...props,
|
|
185
|
-
getCellValue: (cellAddress) => this.getCellValue(cellAddress)
|
|
186
|
-
});
|
|
187
|
-
this.reevaluate();
|
|
188
|
-
this.eventManager.emitUpdate();
|
|
189
|
-
return table;
|
|
188
|
+
this.commandExecutor.execute(new import_commands.AddTableCommand(this.getTableCommandDeps(), props), { validate: !!this.apiDeclaration });
|
|
190
189
|
}
|
|
191
190
|
renameTable(workbookName, names) {
|
|
192
|
-
this.
|
|
193
|
-
this.workbookManager.updateAllFormulas((formula) => import_table_renamer.renameTableInFormula(formula, names.oldName, names.newName));
|
|
194
|
-
this.namedExpressionManager.updateAllNamedExpressions((formula) => import_table_renamer.renameTableInFormula(formula, names.oldName, names.newName));
|
|
195
|
-
this.reevaluate();
|
|
196
|
-
this.eventManager.emitUpdate();
|
|
191
|
+
this.commandExecutor.execute(new import_commands.RenameTableCommand(this.getTableCommandDeps(), workbookName, names.oldName, names.newName), { validate: !!this.apiDeclaration });
|
|
197
192
|
}
|
|
198
193
|
updateTable(opts) {
|
|
199
|
-
this.
|
|
200
|
-
...opts,
|
|
201
|
-
getCellValue: (cellAddress) => this.getCellValue(cellAddress)
|
|
202
|
-
});
|
|
203
|
-
this.reevaluate();
|
|
204
|
-
this.eventManager.emitUpdate();
|
|
194
|
+
this.commandExecutor.execute(new import_commands.UpdateTableCommand(this.getTableCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
205
195
|
}
|
|
206
196
|
removeTable(opts) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
+
});
|
|
213
210
|
}
|
|
214
211
|
resetTables(tables) {
|
|
215
|
-
this.
|
|
216
|
-
this.reevaluate();
|
|
217
|
-
this.eventManager.emitUpdate();
|
|
212
|
+
this.commandExecutor.execute(new import_commands.ResetTablesCommand(this.getTableCommandDeps(), tables), { validate: !!this.apiDeclaration });
|
|
218
213
|
}
|
|
219
214
|
getTables(workbookName) {
|
|
220
215
|
return this.tableManager.getTables(workbookName);
|
|
@@ -222,16 +217,32 @@ class FormulaEngine {
|
|
|
222
217
|
isCellInTable(cellAddress) {
|
|
223
218
|
return this.tableManager.isCellInTable(cellAddress);
|
|
224
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
|
+
}
|
|
225
237
|
addConditionalStyle(style) {
|
|
226
|
-
this.
|
|
227
|
-
this.eventManager.emitUpdate();
|
|
238
|
+
this.commandExecutor.execute(new import_commands.AddConditionalStyleCommand(this.styleManager, style));
|
|
228
239
|
}
|
|
229
240
|
removeConditionalStyle(workbookName, index) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
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;
|
|
235
246
|
}
|
|
236
247
|
getConditionalStylesIntersectingWithRange(range) {
|
|
237
248
|
return this.styleManager.getConditionalStylesIntersectingWithRange(range);
|
|
@@ -239,16 +250,21 @@ class FormulaEngine {
|
|
|
239
250
|
getCellStyle(cellAddress) {
|
|
240
251
|
return this.styleManager.getCellStyle(cellAddress);
|
|
241
252
|
}
|
|
253
|
+
getAllCellStyles() {
|
|
254
|
+
return this.styleManager.getAllCellStyles();
|
|
255
|
+
}
|
|
256
|
+
getAllConditionalStyles() {
|
|
257
|
+
return this.styleManager.getAllConditionalStyles();
|
|
258
|
+
}
|
|
242
259
|
addCellStyle(style) {
|
|
243
|
-
this.
|
|
244
|
-
this.eventManager.emitUpdate();
|
|
260
|
+
this.commandExecutor.execute(new import_commands.AddCellStyleCommand(this.styleManager, style));
|
|
245
261
|
}
|
|
246
262
|
removeCellStyle(workbookName, index) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
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;
|
|
252
268
|
}
|
|
253
269
|
getStylesIntersectingWithRange(range) {
|
|
254
270
|
return this.styleManager.getStylesIntersectingWithRange(range);
|
|
@@ -257,23 +273,30 @@ class FormulaEngine {
|
|
|
257
273
|
return this.styleManager.getStyleForRange(range);
|
|
258
274
|
}
|
|
259
275
|
clearCellStyles(range) {
|
|
260
|
-
this.
|
|
261
|
-
this.eventManager.emitUpdate();
|
|
276
|
+
this.commandExecutor.execute(new import_commands.ClearCellStylesCommand(this.styleManager, range));
|
|
262
277
|
}
|
|
263
278
|
pasteCells(source, target, options) {
|
|
264
|
-
this.
|
|
265
|
-
this.reevaluate();
|
|
266
|
-
this.eventManager.emitUpdate();
|
|
279
|
+
this.commandExecutor.execute(new import_commands.PasteCellsCommand(this.workbookManager, this.copyManager, source, target, options), { validate: !!this.apiDeclaration });
|
|
267
280
|
}
|
|
268
281
|
fillAreas(seedRange, targetRanges, options) {
|
|
269
|
-
this.
|
|
270
|
-
this.reevaluate();
|
|
271
|
-
this.eventManager.emitUpdate();
|
|
282
|
+
this.commandExecutor.execute(new import_commands.FillAreasCommand(this.workbookManager, this.copyManager, seedRange, targetRanges, options), { validate: !!this.apiDeclaration });
|
|
272
283
|
}
|
|
273
284
|
smartPaste(sourceCells, pasteSelection, options) {
|
|
274
285
|
if (sourceCells.length === 0) {
|
|
275
286
|
return;
|
|
276
287
|
}
|
|
288
|
+
if (options.cut === true) {
|
|
289
|
+
for (const area of pasteSelection.areas) {
|
|
290
|
+
const target = {
|
|
291
|
+
workbookName: pasteSelection.workbookName,
|
|
292
|
+
sheetName: pasteSelection.sheetName,
|
|
293
|
+
colIndex: area.start.col,
|
|
294
|
+
rowIndex: area.start.row
|
|
295
|
+
};
|
|
296
|
+
this.pasteCells(sourceCells, target, options);
|
|
297
|
+
}
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
277
300
|
const sourceBounds = this.getBoundsFromCells(sourceCells);
|
|
278
301
|
const sourceWidth = sourceBounds.maxCol - sourceBounds.minCol + 1;
|
|
279
302
|
const sourceHeight = sourceBounds.maxRow - sourceBounds.minRow + 1;
|
|
@@ -336,35 +359,23 @@ class FormulaEngine {
|
|
|
336
359
|
}
|
|
337
360
|
return { minCol, minRow, maxCol, maxRow };
|
|
338
361
|
}
|
|
362
|
+
moveCell(source, target) {
|
|
363
|
+
this.commandExecutor.execute(new import_commands.MoveCellCommand(this.workbookManager, this.copyManager, source, target), { validate: !!this.apiDeclaration });
|
|
364
|
+
}
|
|
365
|
+
moveRange(sourceRange, target) {
|
|
366
|
+
this.commandExecutor.execute(new import_commands.MoveRangeCommand(this.workbookManager, this.copyManager, sourceRange, target), { validate: !!this.apiDeclaration });
|
|
367
|
+
}
|
|
339
368
|
addSheet(opts) {
|
|
340
|
-
|
|
341
|
-
const wbLevel = this.namedExpressionManager.addSheet(opts);
|
|
342
|
-
this.reevaluate();
|
|
343
|
-
this.eventManager.emitUpdate();
|
|
344
|
-
return newSheet;
|
|
369
|
+
this.commandExecutor.execute(new import_commands.AddSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
345
370
|
}
|
|
346
371
|
removeSheet(opts) {
|
|
347
|
-
|
|
348
|
-
this.namedExpressionManager.removeSheet(opts);
|
|
349
|
-
this.tableManager.removeSheet(opts);
|
|
350
|
-
this.styleManager.removeSheetStyles(opts.workbookName, opts.sheetName);
|
|
351
|
-
this.reevaluate();
|
|
352
|
-
this.eventManager.emitUpdate();
|
|
353
|
-
return sheet;
|
|
372
|
+
this.commandExecutor.execute(new import_commands.RemoveSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
354
373
|
}
|
|
355
374
|
renameSheet(opts) {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
this.
|
|
360
|
-
this.workbookManager.updateAllFormulas((formula) => import_sheet_renamer.renameSheetInFormula({
|
|
361
|
-
formula,
|
|
362
|
-
oldSheetName: opts.sheetName,
|
|
363
|
-
newSheetName: opts.newSheetName
|
|
364
|
-
}));
|
|
365
|
-
this.reevaluate();
|
|
366
|
-
this.eventManager.emitUpdate();
|
|
367
|
-
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);
|
|
368
379
|
}
|
|
369
380
|
getSheets(workbookName) {
|
|
370
381
|
return this.workbookManager.getSheets(workbookName);
|
|
@@ -379,144 +390,34 @@ class FormulaEngine {
|
|
|
379
390
|
return this.workbookManager.getSheetSerialized(opts);
|
|
380
391
|
}
|
|
381
392
|
addWorkbook(workbookName) {
|
|
382
|
-
this.
|
|
383
|
-
this.namedExpressionManager.addWorkbook(workbookName);
|
|
384
|
-
this.tableManager.addWorkbook(workbookName);
|
|
385
|
-
this.reevaluate();
|
|
386
|
-
this.eventManager.emitUpdate();
|
|
393
|
+
this.commandExecutor.execute(new import_commands.AddWorkbookCommand(this.getStructureCommandDeps(), workbookName), { validate: !!this.apiDeclaration });
|
|
387
394
|
}
|
|
388
395
|
removeWorkbook(workbookName) {
|
|
389
|
-
this.
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
this.
|
|
393
|
-
this.reevaluate();
|
|
394
|
-
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);
|
|
395
400
|
}
|
|
396
401
|
cloneWorkbook(fromWorkbookName, toWorkbookName) {
|
|
397
|
-
|
|
398
|
-
if (!sourceWorkbook) {
|
|
399
|
-
throw new Error(`Source workbook "${fromWorkbookName}" not found`);
|
|
400
|
-
}
|
|
401
|
-
if (this.workbookManager.getWorkbooks().has(toWorkbookName)) {
|
|
402
|
-
throw new Error(`Target workbook "${toWorkbookName}" already exists`);
|
|
403
|
-
}
|
|
404
|
-
this.addWorkbook(toWorkbookName);
|
|
405
|
-
for (const [sheetName, sheet] of sourceWorkbook.sheets) {
|
|
406
|
-
this.addSheet({
|
|
407
|
-
workbookName: toWorkbookName,
|
|
408
|
-
sheetName
|
|
409
|
-
});
|
|
410
|
-
this.setSheetContent({
|
|
411
|
-
workbookName: toWorkbookName,
|
|
412
|
-
sheetName
|
|
413
|
-
}, new Map(sheet.content));
|
|
414
|
-
}
|
|
415
|
-
const sourceWorkbookExpressions = this.namedExpressionManager.getNamedExpressions().workbookExpressions.get(fromWorkbookName);
|
|
416
|
-
if (sourceWorkbookExpressions) {
|
|
417
|
-
for (const [name, expression] of sourceWorkbookExpressions) {
|
|
418
|
-
this.addNamedExpression({
|
|
419
|
-
expressionName: name,
|
|
420
|
-
expression: expression.expression,
|
|
421
|
-
workbookName: toWorkbookName
|
|
422
|
-
});
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
const sourceSheetExpressions = this.namedExpressionManager.getNamedExpressions().sheetExpressions.get(fromWorkbookName);
|
|
426
|
-
if (sourceSheetExpressions) {
|
|
427
|
-
for (const [sheetName, sheetExpressions] of sourceSheetExpressions) {
|
|
428
|
-
for (const [name, expression] of sheetExpressions) {
|
|
429
|
-
this.addNamedExpression({
|
|
430
|
-
expressionName: name,
|
|
431
|
-
expression: expression.expression,
|
|
432
|
-
workbookName: toWorkbookName,
|
|
433
|
-
sheetName
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
const sourceTables = this.tableManager.tables.get(fromWorkbookName);
|
|
439
|
-
if (sourceTables) {
|
|
440
|
-
for (const [tableName, table] of sourceTables) {
|
|
441
|
-
this.tableManager.copyTable({
|
|
442
|
-
workbookName: fromWorkbookName,
|
|
443
|
-
tableName
|
|
444
|
-
}, {
|
|
445
|
-
workbookName: toWorkbookName,
|
|
446
|
-
tableName
|
|
447
|
-
});
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
const allConditionalStyles = this.styleManager.getAllConditionalStyles();
|
|
451
|
-
for (const style of allConditionalStyles) {
|
|
452
|
-
if (style.area.workbookName === fromWorkbookName) {
|
|
453
|
-
const newStyle = {
|
|
454
|
-
...style,
|
|
455
|
-
area: {
|
|
456
|
-
...style.area,
|
|
457
|
-
workbookName: toWorkbookName
|
|
458
|
-
}
|
|
459
|
-
};
|
|
460
|
-
this.styleManager.addConditionalStyle(newStyle);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
const allCellStyles = this.styleManager.getAllCellStyles();
|
|
464
|
-
for (const style of allCellStyles) {
|
|
465
|
-
if (style.area.workbookName === fromWorkbookName) {
|
|
466
|
-
const newStyle = {
|
|
467
|
-
...style,
|
|
468
|
-
area: {
|
|
469
|
-
...style.area,
|
|
470
|
-
workbookName: toWorkbookName
|
|
471
|
-
}
|
|
472
|
-
};
|
|
473
|
-
this.styleManager.addCellStyle(newStyle);
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
this.workbookManager.updateFormulasForWorkbook(toWorkbookName, (formula) => import_workbook_renamer.renameWorkbookInFormula({
|
|
477
|
-
formula,
|
|
478
|
-
oldWorkbookName: fromWorkbookName,
|
|
479
|
-
newWorkbookName: toWorkbookName
|
|
480
|
-
}));
|
|
481
|
-
this.reevaluate();
|
|
482
|
-
this.eventManager.emitUpdate();
|
|
402
|
+
this.commandExecutor.execute(new import_commands.CloneWorkbookCommand(this.getStructureCommandDeps(), fromWorkbookName, toWorkbookName), { validate: !!this.apiDeclaration });
|
|
483
403
|
}
|
|
484
404
|
renameWorkbook(opts) {
|
|
485
|
-
this.
|
|
486
|
-
this.namedExpressionManager.renameWorkbook(opts);
|
|
487
|
-
this.tableManager.updateTablesForWorkbookRename(opts);
|
|
488
|
-
this.styleManager.updateWorkbookName(opts.workbookName, opts.newWorkbookName);
|
|
489
|
-
this.workbookManager.updateAllFormulas((formula) => import_workbook_renamer.renameWorkbookInFormula({
|
|
490
|
-
formula,
|
|
491
|
-
oldWorkbookName: opts.workbookName,
|
|
492
|
-
newWorkbookName: opts.newWorkbookName
|
|
493
|
-
}));
|
|
494
|
-
this.reevaluate();
|
|
495
|
-
this.eventManager.emitUpdate();
|
|
405
|
+
this.commandExecutor.execute(new import_commands.RenameWorkbookCommand(this.getStructureCommandDeps(), opts.workbookName, opts.newWorkbookName), { validate: !!this.apiDeclaration });
|
|
496
406
|
}
|
|
497
407
|
getWorkbooks() {
|
|
498
408
|
return this.workbookManager.getWorkbooks();
|
|
499
409
|
}
|
|
500
410
|
setSheetContent(opts, content) {
|
|
501
|
-
this.
|
|
502
|
-
this.reevaluate();
|
|
503
|
-
this.eventManager.emitUpdate();
|
|
411
|
+
this.commandExecutor.execute(new import_commands.SetSheetContentCommand(this.workbookManager, opts, content), { validate: !!this.apiDeclaration });
|
|
504
412
|
}
|
|
505
413
|
setCellContent(address, content) {
|
|
506
|
-
this.
|
|
507
|
-
this.reevaluate();
|
|
508
|
-
this.eventManager.emitUpdate();
|
|
509
|
-
}
|
|
510
|
-
reevaluate() {
|
|
511
|
-
this.evaluationManager.clearEvaluationCache();
|
|
414
|
+
this.commandExecutor.execute(new import_commands.SetCellContentCommand(this.workbookManager, address, content), { validate: !!this.apiDeclaration });
|
|
512
415
|
}
|
|
513
416
|
autoFill(opts, seedRange, fillRanges, direction) {
|
|
514
|
-
this.
|
|
417
|
+
this.commandExecutor.execute(new import_commands.AutoFillCommand(this.workbookManager, this.styleManager, this.autoFillManager, opts, seedRange, fillRanges, direction), { validate: !!this.apiDeclaration });
|
|
515
418
|
}
|
|
516
419
|
clearSpreadsheetRange(address) {
|
|
517
|
-
this.
|
|
518
|
-
this.reevaluate();
|
|
519
|
-
this.eventManager.emitUpdate();
|
|
420
|
+
this.commandExecutor.execute(new import_commands.ClearRangeCommand(this.workbookManager, address), { validate: !!this.apiDeclaration });
|
|
520
421
|
}
|
|
521
422
|
getState() {
|
|
522
423
|
return {
|
|
@@ -524,7 +425,8 @@ class FormulaEngine {
|
|
|
524
425
|
namedExpressions: this.namedExpressionManager.getNamedExpressions(),
|
|
525
426
|
tables: this.tableManager.tables,
|
|
526
427
|
conditionalStyles: this.styleManager.getAllConditionalStyles(),
|
|
527
|
-
cellStyles: this.styleManager.getAllCellStyles()
|
|
428
|
+
cellStyles: this.styleManager.getAllCellStyles(),
|
|
429
|
+
references: this.referenceManager.getAllReferences()
|
|
528
430
|
};
|
|
529
431
|
}
|
|
530
432
|
onUpdate(listener) {
|
|
@@ -563,9 +465,62 @@ class FormulaEngine {
|
|
|
563
465
|
}
|
|
564
466
|
}
|
|
565
467
|
this.styleManager.resetStyles(conditionalStylesArray, cellStylesArray);
|
|
566
|
-
|
|
468
|
+
if (deserialized.references) {
|
|
469
|
+
this.referenceManager.resetReferences(deserialized.references);
|
|
470
|
+
}
|
|
471
|
+
this.evaluationManager.clearEvaluationCache();
|
|
567
472
|
this.eventManager.emitUpdate();
|
|
568
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
|
+
}
|
|
569
524
|
}
|
|
570
525
|
|
|
571
|
-
//# debugId=
|
|
526
|
+
//# debugId=3DF704CC89CB006E64756E2164756E21
|