@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/mjs/core/engine.mjs
CHANGED
|
@@ -15,6 +15,45 @@ import { EvaluationManager } from "./managers/evaluation-manager.mjs";
|
|
|
15
15
|
import { DependencyManager } from "./managers/dependency-manager.mjs";
|
|
16
16
|
import { StyleManager } from "./managers/style-manager.mjs";
|
|
17
17
|
import { CopyManager } from "./managers/copy-manager.mjs";
|
|
18
|
+
import { ReferenceManager } from "./managers/reference-manager.mjs";
|
|
19
|
+
import { ApiSchemaManager } from "./managers/api-schema-manager.mjs";
|
|
20
|
+
import { buildApiFromDeclaration } from "./api/api-builder.mjs";
|
|
21
|
+
import {
|
|
22
|
+
CommandExecutor,
|
|
23
|
+
SetCellContentCommand,
|
|
24
|
+
SetSheetContentCommand,
|
|
25
|
+
ClearRangeCommand,
|
|
26
|
+
PasteCellsCommand,
|
|
27
|
+
FillAreasCommand,
|
|
28
|
+
MoveCellCommand,
|
|
29
|
+
MoveRangeCommand,
|
|
30
|
+
AutoFillCommand,
|
|
31
|
+
AddWorkbookCommand,
|
|
32
|
+
RemoveWorkbookCommand,
|
|
33
|
+
RenameWorkbookCommand,
|
|
34
|
+
CloneWorkbookCommand,
|
|
35
|
+
AddSheetCommand,
|
|
36
|
+
RemoveSheetCommand,
|
|
37
|
+
RenameSheetCommand,
|
|
38
|
+
AddTableCommand,
|
|
39
|
+
RemoveTableCommand,
|
|
40
|
+
RenameTableCommand,
|
|
41
|
+
UpdateTableCommand,
|
|
42
|
+
ResetTablesCommand,
|
|
43
|
+
AddNamedExpressionCommand,
|
|
44
|
+
RemoveNamedExpressionCommand,
|
|
45
|
+
UpdateNamedExpressionCommand,
|
|
46
|
+
RenameNamedExpressionCommand,
|
|
47
|
+
SetNamedExpressionsCommand,
|
|
48
|
+
SetCellMetadataCommand,
|
|
49
|
+
SetSheetMetadataCommand,
|
|
50
|
+
SetWorkbookMetadataCommand,
|
|
51
|
+
AddConditionalStyleCommand,
|
|
52
|
+
RemoveConditionalStyleCommand,
|
|
53
|
+
AddCellStyleCommand,
|
|
54
|
+
RemoveCellStyleCommand,
|
|
55
|
+
ClearCellStylesCommand
|
|
56
|
+
} from "./commands.mjs";
|
|
18
57
|
|
|
19
58
|
class FormulaEngine {
|
|
20
59
|
workbookManager;
|
|
@@ -26,6 +65,11 @@ class FormulaEngine {
|
|
|
26
65
|
dependencyManager;
|
|
27
66
|
styleManager;
|
|
28
67
|
copyManager;
|
|
68
|
+
referenceManager;
|
|
69
|
+
apiSchemaManager;
|
|
70
|
+
commandExecutor;
|
|
71
|
+
api;
|
|
72
|
+
apiDeclaration;
|
|
29
73
|
_workbookManager;
|
|
30
74
|
_namedExpressionManager;
|
|
31
75
|
_tableManager;
|
|
@@ -34,7 +78,8 @@ class FormulaEngine {
|
|
|
34
78
|
_autoFillManager;
|
|
35
79
|
_dependencyManager;
|
|
36
80
|
_styleManager;
|
|
37
|
-
constructor() {
|
|
81
|
+
constructor(api) {
|
|
82
|
+
this.apiDeclaration = api?.declaration;
|
|
38
83
|
this.eventManager = new EventManager;
|
|
39
84
|
this.workbookManager = new WorkbookManager;
|
|
40
85
|
this.namedExpressionManager = new NamedExpressionManager;
|
|
@@ -45,7 +90,15 @@ class FormulaEngine {
|
|
|
45
90
|
this.evaluationManager = new EvaluationManager(this.workbookManager, this.tableManager, formulaEvaluator, this.dependencyManager);
|
|
46
91
|
this.styleManager = new StyleManager(this.evaluationManager);
|
|
47
92
|
this.copyManager = new CopyManager(this.workbookManager, this.evaluationManager, this.styleManager);
|
|
48
|
-
this.autoFillManager = new AutoFill(this.workbookManager, this.styleManager
|
|
93
|
+
this.autoFillManager = new AutoFill(this.workbookManager, this.styleManager);
|
|
94
|
+
this.referenceManager = new ReferenceManager;
|
|
95
|
+
this.apiSchemaManager = new ApiSchemaManager(this.tableManager);
|
|
96
|
+
this.commandExecutor = new CommandExecutor(this.apiDeclaration, this.evaluationManager, this.eventManager, () => this.apiSchemaManager.validateAllSchemaConstraints((cell) => this.getCellValue(cell), (cell) => this.getCellMetadata(cell), (table) => this.getTableDataCells(table)));
|
|
97
|
+
if (this.apiDeclaration) {
|
|
98
|
+
this.api = buildApiFromDeclaration(this, this.apiDeclaration, this.apiSchemaManager);
|
|
99
|
+
} else {
|
|
100
|
+
this.api = undefined;
|
|
101
|
+
}
|
|
49
102
|
this._workbookManager = this.workbookManager;
|
|
50
103
|
this._namedExpressionManager = this.namedExpressionManager;
|
|
51
104
|
this._tableManager = this.tableManager;
|
|
@@ -55,8 +108,8 @@ class FormulaEngine {
|
|
|
55
108
|
this._dependencyManager = this.dependencyManager;
|
|
56
109
|
this._styleManager = this.styleManager;
|
|
57
110
|
}
|
|
58
|
-
static buildEmpty() {
|
|
59
|
-
return new FormulaEngine;
|
|
111
|
+
static buildEmpty(api) {
|
|
112
|
+
return new FormulaEngine(api);
|
|
60
113
|
}
|
|
61
114
|
getCellEvaluationResult(cellAddress) {
|
|
62
115
|
return this.evaluationManager.getCellEvaluationResult(cellAddress);
|
|
@@ -68,6 +121,40 @@ class FormulaEngine {
|
|
|
68
121
|
}
|
|
69
122
|
return this.evaluationManager.evaluationResultToSerializedValue(result, cellAddress, debug);
|
|
70
123
|
}
|
|
124
|
+
setCellMetadata(address, metadata) {
|
|
125
|
+
this.commandExecutor.execute(new SetCellMetadataCommand(this.workbookManager, address, metadata));
|
|
126
|
+
}
|
|
127
|
+
getCellMetadata(address) {
|
|
128
|
+
const metadata = this.workbookManager.getCellMetadata(address);
|
|
129
|
+
return metadata;
|
|
130
|
+
}
|
|
131
|
+
getSheetMetadataSerialized(opts) {
|
|
132
|
+
return this.workbookManager.getSheetMetadataSerialized(opts);
|
|
133
|
+
}
|
|
134
|
+
setSheetMetadata(opts, metadata) {
|
|
135
|
+
this.commandExecutor.execute(new SetSheetMetadataCommand(this.workbookManager, opts, metadata));
|
|
136
|
+
}
|
|
137
|
+
getSheetMetadata(opts) {
|
|
138
|
+
return this.workbookManager.getSheetMetadata(opts);
|
|
139
|
+
}
|
|
140
|
+
setWorkbookMetadata(workbookName, metadata) {
|
|
141
|
+
this.commandExecutor.execute(new SetWorkbookMetadataCommand(this.workbookManager, workbookName, metadata));
|
|
142
|
+
}
|
|
143
|
+
getWorkbookMetadata(workbookName) {
|
|
144
|
+
return this.workbookManager.getWorkbookMetadata(workbookName);
|
|
145
|
+
}
|
|
146
|
+
createRef(address) {
|
|
147
|
+
return this.referenceManager.createRef(address);
|
|
148
|
+
}
|
|
149
|
+
getRefAddress(refId) {
|
|
150
|
+
return this.referenceManager.getRefAddress(refId);
|
|
151
|
+
}
|
|
152
|
+
deleteRef(refId) {
|
|
153
|
+
return this.referenceManager.deleteRef(refId);
|
|
154
|
+
}
|
|
155
|
+
getInvalidRefs() {
|
|
156
|
+
return this.referenceManager.getInvalidRefs();
|
|
157
|
+
}
|
|
71
158
|
evaluateFormula(formula, cellAddress) {
|
|
72
159
|
return this.evaluationManager.evaluateFormula(formula, cellAddress);
|
|
73
160
|
}
|
|
@@ -77,111 +164,54 @@ class FormulaEngine {
|
|
|
77
164
|
getCellPrecedents(address) {
|
|
78
165
|
throw new Error("Not implemented");
|
|
79
166
|
}
|
|
80
|
-
addNamedExpression({
|
|
81
|
-
|
|
82
|
-
expressionName,
|
|
83
|
-
sheetName,
|
|
84
|
-
workbookName
|
|
85
|
-
}) {
|
|
86
|
-
this.namedExpressionManager.addNamedExpression({
|
|
87
|
-
expression,
|
|
88
|
-
expressionName,
|
|
89
|
-
sheetName,
|
|
90
|
-
workbookName
|
|
91
|
-
});
|
|
92
|
-
this.reevaluate();
|
|
93
|
-
this.eventManager.emitUpdate();
|
|
167
|
+
addNamedExpression(opts) {
|
|
168
|
+
this.commandExecutor.execute(new AddNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
94
169
|
}
|
|
95
|
-
removeNamedExpression({
|
|
96
|
-
|
|
97
|
-
sheetName,
|
|
98
|
-
workbookName
|
|
99
|
-
}) {
|
|
100
|
-
const found = this.namedExpressionManager.removeNamedExpression({
|
|
101
|
-
expressionName,
|
|
102
|
-
sheetName,
|
|
103
|
-
workbookName
|
|
104
|
-
});
|
|
105
|
-
if (found) {
|
|
106
|
-
this.reevaluate();
|
|
107
|
-
this.eventManager.emitUpdate();
|
|
108
|
-
}
|
|
109
|
-
return found;
|
|
170
|
+
removeNamedExpression(opts) {
|
|
171
|
+
this.commandExecutor.execute(new RemoveNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
110
172
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}) {
|
|
117
|
-
this.namedExpressionManager.updateNamedExpression({
|
|
118
|
-
expression,
|
|
119
|
-
expressionName,
|
|
120
|
-
sheetName,
|
|
121
|
-
workbookName
|
|
173
|
+
hasNamedExpression(opts) {
|
|
174
|
+
const scope = opts.sheetName && opts.workbookName ? { type: "sheet", workbookName: opts.workbookName, sheetName: opts.sheetName } : opts.workbookName ? { type: "workbook", workbookName: opts.workbookName } : { type: "global" };
|
|
175
|
+
return !!this.namedExpressionManager.getNamedExpression({
|
|
176
|
+
name: opts.expressionName,
|
|
177
|
+
scope
|
|
122
178
|
});
|
|
123
|
-
this.reevaluate();
|
|
124
|
-
this.eventManager.emitUpdate();
|
|
125
179
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}) {
|
|
132
|
-
const result = this.namedExpressionManager.renameNamedExpression({
|
|
133
|
-
expressionName,
|
|
134
|
-
sheetName,
|
|
135
|
-
workbookName,
|
|
136
|
-
newName
|
|
137
|
-
});
|
|
138
|
-
this.workbookManager.updateAllFormulas((formula) => renameNamedExpressionInFormula(formula, expressionName, newName));
|
|
139
|
-
this.namedExpressionManager.updateAllNamedExpressions((formula) => renameNamedExpressionInFormula(formula, expressionName, newName));
|
|
140
|
-
this.reevaluate();
|
|
141
|
-
this.eventManager.emitUpdate();
|
|
142
|
-
return result;
|
|
180
|
+
updateNamedExpression(opts) {
|
|
181
|
+
this.commandExecutor.execute(new UpdateNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
182
|
+
}
|
|
183
|
+
renameNamedExpression(opts) {
|
|
184
|
+
this.commandExecutor.execute(new RenameNamedExpressionCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
143
185
|
}
|
|
144
186
|
setNamedExpressions(opts) {
|
|
145
|
-
this.
|
|
146
|
-
this.reevaluate();
|
|
147
|
-
this.eventManager.emitUpdate();
|
|
187
|
+
this.commandExecutor.execute(new SetNamedExpressionsCommand(this.getNamedExpressionCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
148
188
|
}
|
|
149
189
|
addTable(props) {
|
|
150
|
-
|
|
151
|
-
...props,
|
|
152
|
-
getCellValue: (cellAddress) => this.getCellValue(cellAddress)
|
|
153
|
-
});
|
|
154
|
-
this.reevaluate();
|
|
155
|
-
this.eventManager.emitUpdate();
|
|
156
|
-
return table;
|
|
190
|
+
this.commandExecutor.execute(new AddTableCommand(this.getTableCommandDeps(), props), { validate: !!this.apiDeclaration });
|
|
157
191
|
}
|
|
158
192
|
renameTable(workbookName, names) {
|
|
159
|
-
this.
|
|
160
|
-
this.workbookManager.updateAllFormulas((formula) => renameTableInFormula(formula, names.oldName, names.newName));
|
|
161
|
-
this.namedExpressionManager.updateAllNamedExpressions((formula) => renameTableInFormula(formula, names.oldName, names.newName));
|
|
162
|
-
this.reevaluate();
|
|
163
|
-
this.eventManager.emitUpdate();
|
|
193
|
+
this.commandExecutor.execute(new RenameTableCommand(this.getTableCommandDeps(), workbookName, names.oldName, names.newName), { validate: !!this.apiDeclaration });
|
|
164
194
|
}
|
|
165
195
|
updateTable(opts) {
|
|
166
|
-
this.
|
|
167
|
-
...opts,
|
|
168
|
-
getCellValue: (cellAddress) => this.getCellValue(cellAddress)
|
|
169
|
-
});
|
|
170
|
-
this.reevaluate();
|
|
171
|
-
this.eventManager.emitUpdate();
|
|
196
|
+
this.commandExecutor.execute(new UpdateTableCommand(this.getTableCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
172
197
|
}
|
|
173
198
|
removeTable(opts) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
199
|
+
this.commandExecutor.execute(new RemoveTableCommand(this.getTableCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
200
|
+
}
|
|
201
|
+
hasTable(opts) {
|
|
202
|
+
return !!this.tableManager.getTable({
|
|
203
|
+
workbookName: opts.workbookName,
|
|
204
|
+
name: opts.tableName
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
getTable(opts) {
|
|
208
|
+
return this.tableManager.getTable({
|
|
209
|
+
workbookName: opts.workbookName,
|
|
210
|
+
name: opts.tableName
|
|
211
|
+
});
|
|
180
212
|
}
|
|
181
213
|
resetTables(tables) {
|
|
182
|
-
this.
|
|
183
|
-
this.reevaluate();
|
|
184
|
-
this.eventManager.emitUpdate();
|
|
214
|
+
this.commandExecutor.execute(new ResetTablesCommand(this.getTableCommandDeps(), tables), { validate: !!this.apiDeclaration });
|
|
185
215
|
}
|
|
186
216
|
getTables(workbookName) {
|
|
187
217
|
return this.tableManager.getTables(workbookName);
|
|
@@ -189,16 +219,32 @@ class FormulaEngine {
|
|
|
189
219
|
isCellInTable(cellAddress) {
|
|
190
220
|
return this.tableManager.isCellInTable(cellAddress);
|
|
191
221
|
}
|
|
222
|
+
getTableDataCells(table) {
|
|
223
|
+
const { start, endRow, headers } = table;
|
|
224
|
+
const dataStartRow = start.rowIndex + 1;
|
|
225
|
+
const endColIndex = start.colIndex + headers.size - 1;
|
|
226
|
+
const rangeAddress = {
|
|
227
|
+
workbookName: table.workbookName,
|
|
228
|
+
sheetName: table.sheetName,
|
|
229
|
+
range: {
|
|
230
|
+
start: { col: start.colIndex, row: dataStartRow },
|
|
231
|
+
end: {
|
|
232
|
+
col: { type: "number", value: endColIndex },
|
|
233
|
+
row: endRow
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
return this.workbookManager.getCellsInRange(rangeAddress);
|
|
238
|
+
}
|
|
192
239
|
addConditionalStyle(style) {
|
|
193
|
-
this.
|
|
194
|
-
this.eventManager.emitUpdate();
|
|
240
|
+
this.commandExecutor.execute(new AddConditionalStyleCommand(this.styleManager, style));
|
|
195
241
|
}
|
|
196
242
|
removeConditionalStyle(workbookName, index) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
return
|
|
243
|
+
this.commandExecutor.execute(new RemoveConditionalStyleCommand(this.styleManager, workbookName, index));
|
|
244
|
+
}
|
|
245
|
+
getConditionalStyleCount(workbookName) {
|
|
246
|
+
const allStyles = this.styleManager.getAllConditionalStyles();
|
|
247
|
+
return allStyles.filter((s) => s.areas.some((a) => a.workbookName === workbookName)).length;
|
|
202
248
|
}
|
|
203
249
|
getConditionalStylesIntersectingWithRange(range) {
|
|
204
250
|
return this.styleManager.getConditionalStylesIntersectingWithRange(range);
|
|
@@ -206,16 +252,21 @@ class FormulaEngine {
|
|
|
206
252
|
getCellStyle(cellAddress) {
|
|
207
253
|
return this.styleManager.getCellStyle(cellAddress);
|
|
208
254
|
}
|
|
255
|
+
getAllCellStyles() {
|
|
256
|
+
return this.styleManager.getAllCellStyles();
|
|
257
|
+
}
|
|
258
|
+
getAllConditionalStyles() {
|
|
259
|
+
return this.styleManager.getAllConditionalStyles();
|
|
260
|
+
}
|
|
209
261
|
addCellStyle(style) {
|
|
210
|
-
this.
|
|
211
|
-
this.eventManager.emitUpdate();
|
|
262
|
+
this.commandExecutor.execute(new AddCellStyleCommand(this.styleManager, style));
|
|
212
263
|
}
|
|
213
264
|
removeCellStyle(workbookName, index) {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
return
|
|
265
|
+
this.commandExecutor.execute(new RemoveCellStyleCommand(this.styleManager, workbookName, index));
|
|
266
|
+
}
|
|
267
|
+
getCellStyleCount(workbookName) {
|
|
268
|
+
const allStyles = this.styleManager.getAllCellStyles();
|
|
269
|
+
return allStyles.filter((s) => s.areas.some((a) => a.workbookName === workbookName)).length;
|
|
219
270
|
}
|
|
220
271
|
getStylesIntersectingWithRange(range) {
|
|
221
272
|
return this.styleManager.getStylesIntersectingWithRange(range);
|
|
@@ -224,23 +275,30 @@ class FormulaEngine {
|
|
|
224
275
|
return this.styleManager.getStyleForRange(range);
|
|
225
276
|
}
|
|
226
277
|
clearCellStyles(range) {
|
|
227
|
-
this.
|
|
228
|
-
this.eventManager.emitUpdate();
|
|
278
|
+
this.commandExecutor.execute(new ClearCellStylesCommand(this.styleManager, range));
|
|
229
279
|
}
|
|
230
280
|
pasteCells(source, target, options) {
|
|
231
|
-
this.
|
|
232
|
-
this.reevaluate();
|
|
233
|
-
this.eventManager.emitUpdate();
|
|
281
|
+
this.commandExecutor.execute(new PasteCellsCommand(this.workbookManager, this.copyManager, source, target, options), { validate: !!this.apiDeclaration });
|
|
234
282
|
}
|
|
235
283
|
fillAreas(seedRange, targetRanges, options) {
|
|
236
|
-
this.
|
|
237
|
-
this.reevaluate();
|
|
238
|
-
this.eventManager.emitUpdate();
|
|
284
|
+
this.commandExecutor.execute(new FillAreasCommand(this.workbookManager, this.copyManager, seedRange, targetRanges, options), { validate: !!this.apiDeclaration });
|
|
239
285
|
}
|
|
240
286
|
smartPaste(sourceCells, pasteSelection, options) {
|
|
241
287
|
if (sourceCells.length === 0) {
|
|
242
288
|
return;
|
|
243
289
|
}
|
|
290
|
+
if (options.cut === true) {
|
|
291
|
+
for (const area of pasteSelection.areas) {
|
|
292
|
+
const target = {
|
|
293
|
+
workbookName: pasteSelection.workbookName,
|
|
294
|
+
sheetName: pasteSelection.sheetName,
|
|
295
|
+
colIndex: area.start.col,
|
|
296
|
+
rowIndex: area.start.row
|
|
297
|
+
};
|
|
298
|
+
this.pasteCells(sourceCells, target, options);
|
|
299
|
+
}
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
244
302
|
const sourceBounds = this.getBoundsFromCells(sourceCells);
|
|
245
303
|
const sourceWidth = sourceBounds.maxCol - sourceBounds.minCol + 1;
|
|
246
304
|
const sourceHeight = sourceBounds.maxRow - sourceBounds.minRow + 1;
|
|
@@ -303,35 +361,23 @@ class FormulaEngine {
|
|
|
303
361
|
}
|
|
304
362
|
return { minCol, minRow, maxCol, maxRow };
|
|
305
363
|
}
|
|
364
|
+
moveCell(source, target) {
|
|
365
|
+
this.commandExecutor.execute(new MoveCellCommand(this.workbookManager, this.copyManager, source, target), { validate: !!this.apiDeclaration });
|
|
366
|
+
}
|
|
367
|
+
moveRange(sourceRange, target) {
|
|
368
|
+
this.commandExecutor.execute(new MoveRangeCommand(this.workbookManager, this.copyManager, sourceRange, target), { validate: !!this.apiDeclaration });
|
|
369
|
+
}
|
|
306
370
|
addSheet(opts) {
|
|
307
|
-
|
|
308
|
-
const wbLevel = this.namedExpressionManager.addSheet(opts);
|
|
309
|
-
this.reevaluate();
|
|
310
|
-
this.eventManager.emitUpdate();
|
|
311
|
-
return newSheet;
|
|
371
|
+
this.commandExecutor.execute(new AddSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
312
372
|
}
|
|
313
373
|
removeSheet(opts) {
|
|
314
|
-
|
|
315
|
-
this.namedExpressionManager.removeSheet(opts);
|
|
316
|
-
this.tableManager.removeSheet(opts);
|
|
317
|
-
this.styleManager.removeSheetStyles(opts.workbookName, opts.sheetName);
|
|
318
|
-
this.reevaluate();
|
|
319
|
-
this.eventManager.emitUpdate();
|
|
320
|
-
return sheet;
|
|
374
|
+
this.commandExecutor.execute(new RemoveSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
321
375
|
}
|
|
322
376
|
renameSheet(opts) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
this.
|
|
327
|
-
this.workbookManager.updateAllFormulas((formula) => renameSheetInFormula({
|
|
328
|
-
formula,
|
|
329
|
-
oldSheetName: opts.sheetName,
|
|
330
|
-
newSheetName: opts.newSheetName
|
|
331
|
-
}));
|
|
332
|
-
this.reevaluate();
|
|
333
|
-
this.eventManager.emitUpdate();
|
|
334
|
-
return sheet;
|
|
377
|
+
this.commandExecutor.execute(new RenameSheetCommand(this.getStructureCommandDeps(), opts), { validate: !!this.apiDeclaration });
|
|
378
|
+
}
|
|
379
|
+
hasSheet(opts) {
|
|
380
|
+
return !!this.workbookManager.getSheet(opts);
|
|
335
381
|
}
|
|
336
382
|
getSheets(workbookName) {
|
|
337
383
|
return this.workbookManager.getSheets(workbookName);
|
|
@@ -346,144 +392,34 @@ class FormulaEngine {
|
|
|
346
392
|
return this.workbookManager.getSheetSerialized(opts);
|
|
347
393
|
}
|
|
348
394
|
addWorkbook(workbookName) {
|
|
349
|
-
this.
|
|
350
|
-
this.namedExpressionManager.addWorkbook(workbookName);
|
|
351
|
-
this.tableManager.addWorkbook(workbookName);
|
|
352
|
-
this.reevaluate();
|
|
353
|
-
this.eventManager.emitUpdate();
|
|
395
|
+
this.commandExecutor.execute(new AddWorkbookCommand(this.getStructureCommandDeps(), workbookName), { validate: !!this.apiDeclaration });
|
|
354
396
|
}
|
|
355
397
|
removeWorkbook(workbookName) {
|
|
356
|
-
this.
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
this.
|
|
360
|
-
this.reevaluate();
|
|
361
|
-
this.eventManager.emitUpdate();
|
|
398
|
+
this.commandExecutor.execute(new RemoveWorkbookCommand(this.getStructureCommandDeps(), workbookName), { validate: !!this.apiDeclaration });
|
|
399
|
+
}
|
|
400
|
+
hasWorkbook(workbookName) {
|
|
401
|
+
return this.workbookManager.getWorkbooks().has(workbookName);
|
|
362
402
|
}
|
|
363
403
|
cloneWorkbook(fromWorkbookName, toWorkbookName) {
|
|
364
|
-
|
|
365
|
-
if (!sourceWorkbook) {
|
|
366
|
-
throw new Error(`Source workbook "${fromWorkbookName}" not found`);
|
|
367
|
-
}
|
|
368
|
-
if (this.workbookManager.getWorkbooks().has(toWorkbookName)) {
|
|
369
|
-
throw new Error(`Target workbook "${toWorkbookName}" already exists`);
|
|
370
|
-
}
|
|
371
|
-
this.addWorkbook(toWorkbookName);
|
|
372
|
-
for (const [sheetName, sheet] of sourceWorkbook.sheets) {
|
|
373
|
-
this.addSheet({
|
|
374
|
-
workbookName: toWorkbookName,
|
|
375
|
-
sheetName
|
|
376
|
-
});
|
|
377
|
-
this.setSheetContent({
|
|
378
|
-
workbookName: toWorkbookName,
|
|
379
|
-
sheetName
|
|
380
|
-
}, new Map(sheet.content));
|
|
381
|
-
}
|
|
382
|
-
const sourceWorkbookExpressions = this.namedExpressionManager.getNamedExpressions().workbookExpressions.get(fromWorkbookName);
|
|
383
|
-
if (sourceWorkbookExpressions) {
|
|
384
|
-
for (const [name, expression] of sourceWorkbookExpressions) {
|
|
385
|
-
this.addNamedExpression({
|
|
386
|
-
expressionName: name,
|
|
387
|
-
expression: expression.expression,
|
|
388
|
-
workbookName: toWorkbookName
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
const sourceSheetExpressions = this.namedExpressionManager.getNamedExpressions().sheetExpressions.get(fromWorkbookName);
|
|
393
|
-
if (sourceSheetExpressions) {
|
|
394
|
-
for (const [sheetName, sheetExpressions] of sourceSheetExpressions) {
|
|
395
|
-
for (const [name, expression] of sheetExpressions) {
|
|
396
|
-
this.addNamedExpression({
|
|
397
|
-
expressionName: name,
|
|
398
|
-
expression: expression.expression,
|
|
399
|
-
workbookName: toWorkbookName,
|
|
400
|
-
sheetName
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
const sourceTables = this.tableManager.tables.get(fromWorkbookName);
|
|
406
|
-
if (sourceTables) {
|
|
407
|
-
for (const [tableName, table] of sourceTables) {
|
|
408
|
-
this.tableManager.copyTable({
|
|
409
|
-
workbookName: fromWorkbookName,
|
|
410
|
-
tableName
|
|
411
|
-
}, {
|
|
412
|
-
workbookName: toWorkbookName,
|
|
413
|
-
tableName
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
const allConditionalStyles = this.styleManager.getAllConditionalStyles();
|
|
418
|
-
for (const style of allConditionalStyles) {
|
|
419
|
-
if (style.area.workbookName === fromWorkbookName) {
|
|
420
|
-
const newStyle = {
|
|
421
|
-
...style,
|
|
422
|
-
area: {
|
|
423
|
-
...style.area,
|
|
424
|
-
workbookName: toWorkbookName
|
|
425
|
-
}
|
|
426
|
-
};
|
|
427
|
-
this.styleManager.addConditionalStyle(newStyle);
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
const allCellStyles = this.styleManager.getAllCellStyles();
|
|
431
|
-
for (const style of allCellStyles) {
|
|
432
|
-
if (style.area.workbookName === fromWorkbookName) {
|
|
433
|
-
const newStyle = {
|
|
434
|
-
...style,
|
|
435
|
-
area: {
|
|
436
|
-
...style.area,
|
|
437
|
-
workbookName: toWorkbookName
|
|
438
|
-
}
|
|
439
|
-
};
|
|
440
|
-
this.styleManager.addCellStyle(newStyle);
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
this.workbookManager.updateFormulasForWorkbook(toWorkbookName, (formula) => renameWorkbookInFormula({
|
|
444
|
-
formula,
|
|
445
|
-
oldWorkbookName: fromWorkbookName,
|
|
446
|
-
newWorkbookName: toWorkbookName
|
|
447
|
-
}));
|
|
448
|
-
this.reevaluate();
|
|
449
|
-
this.eventManager.emitUpdate();
|
|
404
|
+
this.commandExecutor.execute(new CloneWorkbookCommand(this.getStructureCommandDeps(), fromWorkbookName, toWorkbookName), { validate: !!this.apiDeclaration });
|
|
450
405
|
}
|
|
451
406
|
renameWorkbook(opts) {
|
|
452
|
-
this.
|
|
453
|
-
this.namedExpressionManager.renameWorkbook(opts);
|
|
454
|
-
this.tableManager.updateTablesForWorkbookRename(opts);
|
|
455
|
-
this.styleManager.updateWorkbookName(opts.workbookName, opts.newWorkbookName);
|
|
456
|
-
this.workbookManager.updateAllFormulas((formula) => renameWorkbookInFormula({
|
|
457
|
-
formula,
|
|
458
|
-
oldWorkbookName: opts.workbookName,
|
|
459
|
-
newWorkbookName: opts.newWorkbookName
|
|
460
|
-
}));
|
|
461
|
-
this.reevaluate();
|
|
462
|
-
this.eventManager.emitUpdate();
|
|
407
|
+
this.commandExecutor.execute(new RenameWorkbookCommand(this.getStructureCommandDeps(), opts.workbookName, opts.newWorkbookName), { validate: !!this.apiDeclaration });
|
|
463
408
|
}
|
|
464
409
|
getWorkbooks() {
|
|
465
410
|
return this.workbookManager.getWorkbooks();
|
|
466
411
|
}
|
|
467
412
|
setSheetContent(opts, content) {
|
|
468
|
-
this.
|
|
469
|
-
this.reevaluate();
|
|
470
|
-
this.eventManager.emitUpdate();
|
|
413
|
+
this.commandExecutor.execute(new SetSheetContentCommand(this.workbookManager, opts, content), { validate: !!this.apiDeclaration });
|
|
471
414
|
}
|
|
472
415
|
setCellContent(address, content) {
|
|
473
|
-
this.
|
|
474
|
-
this.reevaluate();
|
|
475
|
-
this.eventManager.emitUpdate();
|
|
476
|
-
}
|
|
477
|
-
reevaluate() {
|
|
478
|
-
this.evaluationManager.clearEvaluationCache();
|
|
416
|
+
this.commandExecutor.execute(new SetCellContentCommand(this.workbookManager, address, content), { validate: !!this.apiDeclaration });
|
|
479
417
|
}
|
|
480
418
|
autoFill(opts, seedRange, fillRanges, direction) {
|
|
481
|
-
this.
|
|
419
|
+
this.commandExecutor.execute(new AutoFillCommand(this.workbookManager, this.styleManager, this.autoFillManager, opts, seedRange, fillRanges, direction), { validate: !!this.apiDeclaration });
|
|
482
420
|
}
|
|
483
421
|
clearSpreadsheetRange(address) {
|
|
484
|
-
this.
|
|
485
|
-
this.reevaluate();
|
|
486
|
-
this.eventManager.emitUpdate();
|
|
422
|
+
this.commandExecutor.execute(new ClearRangeCommand(this.workbookManager, address), { validate: !!this.apiDeclaration });
|
|
487
423
|
}
|
|
488
424
|
getState() {
|
|
489
425
|
return {
|
|
@@ -491,7 +427,8 @@ class FormulaEngine {
|
|
|
491
427
|
namedExpressions: this.namedExpressionManager.getNamedExpressions(),
|
|
492
428
|
tables: this.tableManager.tables,
|
|
493
429
|
conditionalStyles: this.styleManager.getAllConditionalStyles(),
|
|
494
|
-
cellStyles: this.styleManager.getAllCellStyles()
|
|
430
|
+
cellStyles: this.styleManager.getAllCellStyles(),
|
|
431
|
+
references: this.referenceManager.getAllReferences()
|
|
495
432
|
};
|
|
496
433
|
}
|
|
497
434
|
onUpdate(listener) {
|
|
@@ -530,12 +467,65 @@ class FormulaEngine {
|
|
|
530
467
|
}
|
|
531
468
|
}
|
|
532
469
|
this.styleManager.resetStyles(conditionalStylesArray, cellStylesArray);
|
|
533
|
-
|
|
470
|
+
if (deserialized.references) {
|
|
471
|
+
this.referenceManager.resetReferences(deserialized.references);
|
|
472
|
+
}
|
|
473
|
+
this.evaluationManager.clearEvaluationCache();
|
|
534
474
|
this.eventManager.emitUpdate();
|
|
535
475
|
}
|
|
476
|
+
undo() {
|
|
477
|
+
return this.commandExecutor.undo();
|
|
478
|
+
}
|
|
479
|
+
redo() {
|
|
480
|
+
return this.commandExecutor.redo();
|
|
481
|
+
}
|
|
482
|
+
canUndo() {
|
|
483
|
+
return this.commandExecutor.canUndo();
|
|
484
|
+
}
|
|
485
|
+
canRedo() {
|
|
486
|
+
return this.commandExecutor.canRedo();
|
|
487
|
+
}
|
|
488
|
+
getActionLog() {
|
|
489
|
+
return this.commandExecutor.getActionLog();
|
|
490
|
+
}
|
|
491
|
+
clearActionLog() {
|
|
492
|
+
this.commandExecutor.clearActionLog();
|
|
493
|
+
}
|
|
494
|
+
clearHistory() {
|
|
495
|
+
this.commandExecutor.clearHistory();
|
|
496
|
+
}
|
|
497
|
+
getStructureCommandDeps() {
|
|
498
|
+
return {
|
|
499
|
+
workbookManager: this.workbookManager,
|
|
500
|
+
namedExpressionManager: this.namedExpressionManager,
|
|
501
|
+
tableManager: this.tableManager,
|
|
502
|
+
styleManager: this.styleManager,
|
|
503
|
+
referenceManager: this.referenceManager,
|
|
504
|
+
apiSchemaManager: this.apiSchemaManager,
|
|
505
|
+
renameSheetInFormula,
|
|
506
|
+
renameWorkbookInFormula
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
getTableCommandDeps() {
|
|
510
|
+
return {
|
|
511
|
+
tableManager: this.tableManager,
|
|
512
|
+
namedExpressionManager: this.namedExpressionManager,
|
|
513
|
+
workbookManager: this.workbookManager,
|
|
514
|
+
apiSchemaManager: this.apiSchemaManager,
|
|
515
|
+
getCellValue: (cell) => this.getCellValue(cell),
|
|
516
|
+
renameTableInFormula
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
getNamedExpressionCommandDeps() {
|
|
520
|
+
return {
|
|
521
|
+
namedExpressionManager: this.namedExpressionManager,
|
|
522
|
+
workbookManager: this.workbookManager,
|
|
523
|
+
renameNamedExpressionInFormula
|
|
524
|
+
};
|
|
525
|
+
}
|
|
536
526
|
}
|
|
537
527
|
export {
|
|
538
528
|
FormulaEngine
|
|
539
529
|
};
|
|
540
530
|
|
|
541
|
-
//# debugId=
|
|
531
|
+
//# debugId=ACD6AB3C2CAB92F864756E2164756E21
|