@omegagrid/grid-core 0.2.5
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/calculations/autofill.d.ts +7 -0
- package/dist/calculations/autofill.d.ts.map +1 -0
- package/dist/calculations/autofill.js +81 -0
- package/dist/calculations/autofill.js.map +1 -0
- package/dist/calculations/calculationModel.d.ts +35 -0
- package/dist/calculations/calculationModel.d.ts.map +1 -0
- package/dist/calculations/calculationModel.js +199 -0
- package/dist/calculations/calculationModel.js.map +1 -0
- package/dist/calculations/conditions.d.ts +4 -0
- package/dist/calculations/conditions.d.ts.map +1 -0
- package/dist/calculations/conditions.js +46 -0
- package/dist/calculations/conditions.js.map +1 -0
- package/dist/calculations/context.d.ts +53 -0
- package/dist/calculations/context.d.ts.map +1 -0
- package/dist/calculations/context.js +83 -0
- package/dist/calculations/context.js.map +1 -0
- package/dist/calculations/formula.d.ts +69 -0
- package/dist/calculations/formula.d.ts.map +1 -0
- package/dist/calculations/formula.js +360 -0
- package/dist/calculations/formula.js.map +1 -0
- package/dist/calculations/functions/dates.d.ts +6 -0
- package/dist/calculations/functions/dates.d.ts.map +1 -0
- package/dist/calculations/functions/dates.js +28 -0
- package/dist/calculations/functions/dates.js.map +1 -0
- package/dist/calculations/functions/helpers.d.ts +11 -0
- package/dist/calculations/functions/helpers.d.ts.map +1 -0
- package/dist/calculations/functions/helpers.js +38 -0
- package/dist/calculations/functions/helpers.js.map +1 -0
- package/dist/calculations/functions/index.d.ts +5 -0
- package/dist/calculations/functions/index.d.ts.map +1 -0
- package/dist/calculations/functions/index.js +73 -0
- package/dist/calculations/functions/index.js.map +1 -0
- package/dist/calculations/functions/logical.d.ts +10 -0
- package/dist/calculations/functions/logical.d.ts.map +1 -0
- package/dist/calculations/functions/logical.js +49 -0
- package/dist/calculations/functions/logical.js.map +1 -0
- package/dist/calculations/functions/lookup.d.ts +17 -0
- package/dist/calculations/functions/lookup.d.ts.map +1 -0
- package/dist/calculations/functions/lookup.js +167 -0
- package/dist/calculations/functions/lookup.js.map +1 -0
- package/dist/calculations/functions/math.d.ts +62 -0
- package/dist/calculations/functions/math.d.ts.map +1 -0
- package/dist/calculations/functions/math.js +228 -0
- package/dist/calculations/functions/math.js.map +1 -0
- package/dist/calculations/functions/special.d.ts +2 -0
- package/dist/calculations/functions/special.d.ts.map +1 -0
- package/dist/calculations/functions/special.js +55 -0
- package/dist/calculations/functions/special.js.map +1 -0
- package/dist/calculations/functions/statistical.d.ts +5 -0
- package/dist/calculations/functions/statistical.d.ts.map +1 -0
- package/dist/calculations/functions/statistical.js +47 -0
- package/dist/calculations/functions/statistical.js.map +1 -0
- package/dist/calculations/functions/text.d.ts +5 -0
- package/dist/calculations/functions/text.d.ts.map +1 -0
- package/dist/calculations/functions/text.js +23 -0
- package/dist/calculations/functions/text.js.map +1 -0
- package/dist/calculations/index.d.ts +6 -0
- package/dist/calculations/index.d.ts.map +1 -0
- package/dist/calculations/index.js +22 -0
- package/dist/calculations/index.js.map +1 -0
- package/dist/calculations/operators.d.ts +19 -0
- package/dist/calculations/operators.d.ts.map +1 -0
- package/dist/calculations/operators.js +66 -0
- package/dist/calculations/operators.js.map +1 -0
- package/dist/calculations/tokenization.d.ts +34 -0
- package/dist/calculations/tokenization.d.ts.map +1 -0
- package/dist/calculations/tokenization.js +192 -0
- package/dist/calculations/tokenization.js.map +1 -0
- package/dist/comments/comments.d.ts +37 -0
- package/dist/comments/comments.d.ts.map +1 -0
- package/dist/comments/comments.js +39 -0
- package/dist/comments/comments.js.map +1 -0
- package/dist/comments/index.d.ts +2 -0
- package/dist/comments/index.d.ts.map +1 -0
- package/dist/comments/index.js +18 -0
- package/dist/comments/index.js.map +1 -0
- package/dist/common/index.d.ts +2 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +18 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/range.d.ts +65 -0
- package/dist/common/range.d.ts.map +1 -0
- package/dist/common/range.js +220 -0
- package/dist/common/range.js.map +1 -0
- package/dist/constants.d.ts +60 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +75 -0
- package/dist/constants.js.map +1 -0
- package/dist/formatting/conditionalFormats.d.ts +34 -0
- package/dist/formatting/conditionalFormats.d.ts.map +1 -0
- package/dist/formatting/conditionalFormats.js +107 -0
- package/dist/formatting/conditionalFormats.js.map +1 -0
- package/dist/formatting/index.d.ts +2 -0
- package/dist/formatting/index.d.ts.map +1 -0
- package/dist/formatting/index.js +18 -0
- package/dist/formatting/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/model/cellModel.d.ts +105 -0
- package/dist/model/cellModel.d.ts.map +1 -0
- package/dist/model/cellModel.js +251 -0
- package/dist/model/cellModel.js.map +1 -0
- package/dist/model/columnModel.d.ts +132 -0
- package/dist/model/columnModel.d.ts.map +1 -0
- package/dist/model/columnModel.js +147 -0
- package/dist/model/columnModel.js.map +1 -0
- package/dist/model/columnSorting.d.ts +50 -0
- package/dist/model/columnSorting.d.ts.map +1 -0
- package/dist/model/columnSorting.js +164 -0
- package/dist/model/columnSorting.js.map +1 -0
- package/dist/model/cssStyle.d.ts +18 -0
- package/dist/model/cssStyle.d.ts.map +1 -0
- package/dist/model/cssStyle.js +197 -0
- package/dist/model/cssStyle.js.map +1 -0
- package/dist/model/dependencies.d.ts +28 -0
- package/dist/model/dependencies.d.ts.map +1 -0
- package/dist/model/dependencies.js +129 -0
- package/dist/model/dependencies.js.map +1 -0
- package/dist/model/elementModel.d.ts +98 -0
- package/dist/model/elementModel.d.ts.map +1 -0
- package/dist/model/elementModel.js +109 -0
- package/dist/model/elementModel.js.map +1 -0
- package/dist/model/filterModel.d.ts +22 -0
- package/dist/model/filterModel.d.ts.map +1 -0
- package/dist/model/filterModel.js +83 -0
- package/dist/model/filterModel.js.map +1 -0
- package/dist/model/gridModel.d.ts +172 -0
- package/dist/model/gridModel.d.ts.map +1 -0
- package/dist/model/gridModel.js +639 -0
- package/dist/model/gridModel.js.map +1 -0
- package/dist/model/groupModel.d.ts +23 -0
- package/dist/model/groupModel.d.ts.map +1 -0
- package/dist/model/groupModel.js +102 -0
- package/dist/model/groupModel.js.map +1 -0
- package/dist/model/history.d.ts +21 -0
- package/dist/model/history.d.ts.map +1 -0
- package/dist/model/history.js +39 -0
- package/dist/model/history.js.map +1 -0
- package/dist/model/index.d.ts +17 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +33 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/iterableRange.d.ts +32 -0
- package/dist/model/iterableRange.d.ts.map +1 -0
- package/dist/model/iterableRange.js +79 -0
- package/dist/model/iterableRange.js.map +1 -0
- package/dist/model/namingModel.d.ts +24 -0
- package/dist/model/namingModel.d.ts.map +1 -0
- package/dist/model/namingModel.js +75 -0
- package/dist/model/namingModel.js.map +1 -0
- package/dist/model/options.d.ts +56 -0
- package/dist/model/options.d.ts.map +1 -0
- package/dist/model/options.js +27 -0
- package/dist/model/options.js.map +1 -0
- package/dist/model/rowModel.d.ts +91 -0
- package/dist/model/rowModel.d.ts.map +1 -0
- package/dist/model/rowModel.js +137 -0
- package/dist/model/rowModel.js.map +1 -0
- package/dist/model/selectionModel.d.ts +20 -0
- package/dist/model/selectionModel.d.ts.map +1 -0
- package/dist/model/selectionModel.js +45 -0
- package/dist/model/selectionModel.js.map +1 -0
- package/dist/model/style.d.ts +73 -0
- package/dist/model/style.d.ts.map +1 -0
- package/dist/model/style.js +38 -0
- package/dist/model/style.js.map +1 -0
- package/dist/model/styleModel.d.ts +20 -0
- package/dist/model/styleModel.d.ts.map +1 -0
- package/dist/model/styleModel.js +85 -0
- package/dist/model/styleModel.js.map +1 -0
- package/dist/sparklines/index.d.ts +2 -0
- package/dist/sparklines/index.d.ts.map +1 -0
- package/dist/sparklines/index.js +18 -0
- package/dist/sparklines/index.js.map +1 -0
- package/dist/sparklines/sparklines.d.ts +61 -0
- package/dist/sparklines/sparklines.d.ts.map +1 -0
- package/dist/sparklines/sparklines.js +185 -0
- package/dist/sparklines/sparklines.js.map +1 -0
- package/dist/types.d.ts +27 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Direction } from "@omegagrid/core";
|
|
2
|
+
import { CellRange } from "../common";
|
|
3
|
+
import { CellModel, GridModel } from "../model";
|
|
4
|
+
export declare function extrapolateValues(source: CellModel[], count: number): unknown[];
|
|
5
|
+
export declare function extrapolateFormulas(cell: CellModel, direction: Direction, count: number): string[];
|
|
6
|
+
export declare function autofill(model: GridModel, selectedRange: CellRange, autofillRange: CellRange, direction: Direction): [CellModel[], unknown[]];
|
|
7
|
+
//# sourceMappingURL=autofill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autofill.d.ts","sourceRoot":"","sources":["../../src/calculations/autofill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEhD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,aA4BnE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAOvF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,4BAsClH"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.autofill = exports.extrapolateFormulas = exports.extrapolateValues = void 0;
|
|
4
|
+
const core_1 = require("@omegagrid/core");
|
|
5
|
+
const _1 = require(".");
|
|
6
|
+
function extrapolateValues(source, count) {
|
|
7
|
+
var _a;
|
|
8
|
+
const result = Array(count).fill(null);
|
|
9
|
+
let increment = 0;
|
|
10
|
+
let inputValues = [];
|
|
11
|
+
if (source.length > 1) {
|
|
12
|
+
inputValues = source.map(cell => parseFloat(cell.value) || 0);
|
|
13
|
+
increment = inputValues[1] - inputValues[0];
|
|
14
|
+
for (let i = 2; i < inputValues.length; i++) {
|
|
15
|
+
if (inputValues[i] - inputValues[i - 1] !== increment) {
|
|
16
|
+
increment = 0;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (increment == 0) {
|
|
22
|
+
for (let i = 0; i < count; i++) {
|
|
23
|
+
result[i] = (_a = source[i % source.length]) === null || _a === void 0 ? void 0 : _a.value;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
let prev = inputValues[inputValues.length - 1];
|
|
28
|
+
for (let i = 0; i < count; i++) {
|
|
29
|
+
prev = result[i] = prev + increment;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
exports.extrapolateValues = extrapolateValues;
|
|
35
|
+
function extrapolateFormulas(cell, direction, count) {
|
|
36
|
+
const formula = new _1.Formula(cell.formula, cell.model.calculations.tokenizer);
|
|
37
|
+
const result = [];
|
|
38
|
+
for (let i = 0; i < count; i++) {
|
|
39
|
+
result.push((0, _1.prefixFormula)(formula.shift(0, 1, direction).createFormulaString()));
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
exports.extrapolateFormulas = extrapolateFormulas;
|
|
44
|
+
function autofill(model, selectedRange, autofillRange, direction) {
|
|
45
|
+
const sourceMatrix = model.getCellMatrix(selectedRange);
|
|
46
|
+
let input;
|
|
47
|
+
if (direction == 'right')
|
|
48
|
+
input = core_1.matrix.clone(sourceMatrix);
|
|
49
|
+
else if (direction == 'down')
|
|
50
|
+
input = core_1.matrix.transpose(sourceMatrix);
|
|
51
|
+
else if (direction == 'left')
|
|
52
|
+
input = core_1.matrix.reverseColumns(sourceMatrix);
|
|
53
|
+
else if (direction == 'up')
|
|
54
|
+
input = core_1.matrix.reverseColumns(core_1.matrix.transpose(sourceMatrix));
|
|
55
|
+
const displayValueMatrix = new Array(autofillRange.size.rows);
|
|
56
|
+
for (let r = 0; r < autofillRange.size.rows; r++) {
|
|
57
|
+
displayValueMatrix[r] = (new Array(autofillRange.size.columns));
|
|
58
|
+
for (let c = 0; c < autofillRange.size.columns; c++) {
|
|
59
|
+
const sourceCell = sourceMatrix.length > r
|
|
60
|
+
? sourceMatrix[r][sourceMatrix[r].length > c ? c : 0]
|
|
61
|
+
: sourceMatrix[0][c];
|
|
62
|
+
displayValueMatrix[r][c] = sourceCell.hasDisplayValue ? sourceCell.displayValue : null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const autofillCount = autofillRange.size[direction == 'down' || direction == 'up' ? 'rows' : 'columns'];
|
|
66
|
+
let output = input.map(vect => {
|
|
67
|
+
if (vect[vect.length - 1].hasFormula)
|
|
68
|
+
return extrapolateFormulas(vect[vect.length - 1], direction, autofillCount);
|
|
69
|
+
else
|
|
70
|
+
return extrapolateValues(vect, autofillCount);
|
|
71
|
+
});
|
|
72
|
+
if (direction == 'down')
|
|
73
|
+
output = core_1.matrix.transpose(output);
|
|
74
|
+
else if (direction == 'left')
|
|
75
|
+
output = core_1.matrix.reverseColumns(output);
|
|
76
|
+
else if (direction == 'up')
|
|
77
|
+
output = core_1.matrix.reverseRows(core_1.matrix.transpose(output));
|
|
78
|
+
return model.spillValues(model.getCellByRange(autofillRange.bounds[0][0]), output, model.getCellByRange(selectedRange.bounds[0][0]), displayValueMatrix);
|
|
79
|
+
}
|
|
80
|
+
exports.autofill = autofill;
|
|
81
|
+
//# sourceMappingURL=autofill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autofill.js","sourceRoot":"","sources":["../../src/calculations/autofill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Direction } from "@omegagrid/core";
|
|
2
|
+
import { CellRange } from "../common";
|
|
3
|
+
import { CellModel, GridModel, Viewport, Dependencies } from "../model";
|
|
4
|
+
import { Formula, FormulaString } from "./formula";
|
|
5
|
+
import { Tokenizer } from "./tokenization";
|
|
6
|
+
export declare class CalculationModel {
|
|
7
|
+
readonly model: GridModel;
|
|
8
|
+
private _tokenizer;
|
|
9
|
+
get tokenizer(): Tokenizer;
|
|
10
|
+
private _dependencies;
|
|
11
|
+
get dependencies(): Dependencies;
|
|
12
|
+
private _formulas;
|
|
13
|
+
get formulas(): Map<string, Formula>;
|
|
14
|
+
private context;
|
|
15
|
+
private _spilledRange;
|
|
16
|
+
get spilledRange(): CellRange;
|
|
17
|
+
constructor(model: GridModel);
|
|
18
|
+
createFormula(cell: CellModel): Formula;
|
|
19
|
+
createDependecies(cell: CellModel): this;
|
|
20
|
+
refreshFormula(cell: CellModel): this;
|
|
21
|
+
updateDependencies(cell: CellModel): this;
|
|
22
|
+
getFormula(cell: CellModel): Formula;
|
|
23
|
+
refresh(): void;
|
|
24
|
+
clearDependecies(cell: CellModel): this;
|
|
25
|
+
evaluateFormula(formula: Formula, cell: CellModel): unknown;
|
|
26
|
+
evaluateExpression(expression: FormulaString, cell?: CellModel): unknown;
|
|
27
|
+
evaluate(cell: CellModel, allowSpill?: boolean): unknown;
|
|
28
|
+
evaluateAll(): void;
|
|
29
|
+
evaluateDependants(cell: CellModel): [CellModel, string?][];
|
|
30
|
+
calculateViewport(viewport: Viewport): CellModel[];
|
|
31
|
+
shift(index: number, offset: number, direction: Direction, maxIndex?: number): this;
|
|
32
|
+
getFormulaCells(): CellModel[];
|
|
33
|
+
renameSheet(oldName: string, newName: string): boolean;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=calculationModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculationModel.d.ts","sourceRoot":"","sources":["../../src/calculations/calculationModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAY,MAAM,UAAU,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAc3C,qBAAa,gBAAgB;aAeA,KAAK,EAAE,SAAS;IAb5C,OAAO,CAAC,UAAU,CAAmB;IACrC,IAAI,SAAS,cAA6B;IAE1C,OAAO,CAAC,aAAa,CAAe;IACpC,IAAI,YAAY,iBAAgC;IAEhD,OAAO,CAAC,SAAS,CAA8B;IAC/C,IAAI,QAAQ,yBAA4B;IAExC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,aAAa,CAAY;IACjC,IAAI,YAAY,cAAgC;gBAEpB,KAAK,EAAE,SAAS;IAK5C,aAAa,CAAC,IAAI,EAAE,SAAS;IAQ7B,iBAAiB,CAAC,IAAI,EAAE,SAAS;IAcjC,cAAc,CAAC,IAAI,EAAE,SAAS;IAO9B,kBAAkB,CAAC,IAAI,EAAE,SAAS;IAKlC,UAAU,CAAC,IAAI,EAAE,SAAS;IAI1B,OAAO;IAKP,gBAAgB,CAAC,IAAI,EAAE,SAAS;IAOhC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO;IAK3D,kBAAkB,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO;IAMxE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO;IAqCxD,WAAW;IAIX,kBAAkB,CAAC,IAAI,EAAE,SAAS;IAUlC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;IAkBpC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAE,MAAa;IAqBlF,eAAe;IAef,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAa5C"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CalculationModel = void 0;
|
|
4
|
+
const common_1 = require("../common");
|
|
5
|
+
const model_1 = require("../model");
|
|
6
|
+
const context_1 = require("./context");
|
|
7
|
+
const formula_1 = require("./formula");
|
|
8
|
+
const tokenization_1 = require("./tokenization");
|
|
9
|
+
function evaluationErrorHandler(error) {
|
|
10
|
+
if (error instanceof RangeError) {
|
|
11
|
+
if (error.message == 'Maximum call stack size exceeded') {
|
|
12
|
+
return 'infinite loop';
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return error.message;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
return error.toString();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
class CalculationModel {
|
|
23
|
+
get tokenizer() { return this._tokenizer; }
|
|
24
|
+
get dependencies() { return this._dependencies; }
|
|
25
|
+
get formulas() { return this._formulas; }
|
|
26
|
+
get spilledRange() { return this._spilledRange; }
|
|
27
|
+
constructor(model) {
|
|
28
|
+
this.model = model;
|
|
29
|
+
this._tokenizer = new tokenization_1.Tokenizer();
|
|
30
|
+
this._formulas = new Map();
|
|
31
|
+
this._dependencies = new model_1.Dependencies(model);
|
|
32
|
+
this.context = new context_1.CalculationContext(model);
|
|
33
|
+
}
|
|
34
|
+
createFormula(cell) {
|
|
35
|
+
const f = new formula_1.Formula(cell.formula, this.tokenizer);
|
|
36
|
+
this._formulas.set(cell.address, f);
|
|
37
|
+
if (cell.hasOwnFormula)
|
|
38
|
+
cell.formula = f.createFormulaString(); // normalize formula string
|
|
39
|
+
this.createDependecies(cell);
|
|
40
|
+
return f;
|
|
41
|
+
}
|
|
42
|
+
createDependecies(cell) {
|
|
43
|
+
const addr = cell.address;
|
|
44
|
+
if (this.formulas.has(addr)) {
|
|
45
|
+
const f = this.formulas.get(addr);
|
|
46
|
+
f.ranges.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));
|
|
47
|
+
f.cells.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));
|
|
48
|
+
f.variables.forEach(([_i, v]) => {
|
|
49
|
+
const c = this.model.getCellByName(v, cell.range);
|
|
50
|
+
if (c)
|
|
51
|
+
this._dependencies.add(addr, c.address, null);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
refreshFormula(cell) {
|
|
57
|
+
cell.refreshFormula();
|
|
58
|
+
this.formulas.delete(cell.address);
|
|
59
|
+
this.clearDependecies(cell);
|
|
60
|
+
return this;
|
|
61
|
+
}
|
|
62
|
+
updateDependencies(cell) {
|
|
63
|
+
this.clearDependecies(cell).getFormula(cell);
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
getFormula(cell) {
|
|
67
|
+
return this._formulas.has(cell.address) ? this._formulas.get(cell.address) : this.createFormula(cell);
|
|
68
|
+
}
|
|
69
|
+
refresh() {
|
|
70
|
+
this.dependencies.clear();
|
|
71
|
+
this._formulas.clear();
|
|
72
|
+
}
|
|
73
|
+
clearDependecies(cell) {
|
|
74
|
+
const addr = cell.address;
|
|
75
|
+
this.dependencies.clearCellDependecies(addr);
|
|
76
|
+
this.formulas.delete(addr);
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
evaluateFormula(formula, cell) {
|
|
80
|
+
this.context.currentCell = cell;
|
|
81
|
+
return formula.fn(this.context, { cell, formula });
|
|
82
|
+
}
|
|
83
|
+
evaluateExpression(expression, cell) {
|
|
84
|
+
this.context.currentCell = cell;
|
|
85
|
+
const formula = new formula_1.Formula(expression, this.tokenizer);
|
|
86
|
+
return formula.fn(this.context, { cell, formula });
|
|
87
|
+
}
|
|
88
|
+
evaluate(cell, allowSpill) {
|
|
89
|
+
if (!cell)
|
|
90
|
+
return null;
|
|
91
|
+
let value = null;
|
|
92
|
+
const hasFormula = cell.hasFormula;
|
|
93
|
+
if (cell.hasValue) {
|
|
94
|
+
value = cell.value;
|
|
95
|
+
}
|
|
96
|
+
else if (hasFormula) {
|
|
97
|
+
const formula = this.getFormula(cell);
|
|
98
|
+
try {
|
|
99
|
+
cell.clearError();
|
|
100
|
+
this.context.currentCell = cell;
|
|
101
|
+
value = formula.fn(this.context, { cell, formula });
|
|
102
|
+
if (Array.isArray(value)) {
|
|
103
|
+
if (allowSpill) {
|
|
104
|
+
this.model.spillValues(cell, value);
|
|
105
|
+
this._spilledRange = new common_1.CellRange(cell.c, cell.r, cell.c + value[0].length - 1, cell.r + value.length - 1);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this._spilledRange = null;
|
|
109
|
+
}
|
|
110
|
+
value = value[0][0];
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this._spilledRange = null;
|
|
114
|
+
cell.value = value;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
cell.error = evaluationErrorHandler(error);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return value;
|
|
122
|
+
}
|
|
123
|
+
evaluateAll() {
|
|
124
|
+
this.model.rows.forEach(row => this.model.columns.forEach((_, c) => this.evaluate(row.cell(c))));
|
|
125
|
+
}
|
|
126
|
+
evaluateDependants(cell) {
|
|
127
|
+
const cells = [];
|
|
128
|
+
this.dependencies.getDependants(cell.range).forEach(([cell, sheet]) => {
|
|
129
|
+
cell.clearCalculatedValue();
|
|
130
|
+
cells.push([cell, sheet]);
|
|
131
|
+
cell.model.calculations.evaluate(cell);
|
|
132
|
+
});
|
|
133
|
+
return cells;
|
|
134
|
+
}
|
|
135
|
+
calculateViewport(viewport) {
|
|
136
|
+
const calculatedCells = [];
|
|
137
|
+
viewport.rows.forEach(row => row.cells.forEach(cell => {
|
|
138
|
+
if (cell.hasFormula) {
|
|
139
|
+
if (!cell.hasValue) {
|
|
140
|
+
this.evaluate(cell);
|
|
141
|
+
if (this.spilledRange) {
|
|
142
|
+
for (const cell2 of this.model.getRangeIterator(this.spilledRange)) {
|
|
143
|
+
calculatedCells.push(cell2);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
calculatedCells.push(cell);
|
|
148
|
+
}
|
|
149
|
+
}));
|
|
150
|
+
return calculatedCells;
|
|
151
|
+
}
|
|
152
|
+
shift(index, offset, direction, maxIndex = null) {
|
|
153
|
+
this.getFormulaCells().forEach(cell => {
|
|
154
|
+
cell.formula = this.getFormula(cell).shift(index, offset, direction, maxIndex).createFormulaString(false);
|
|
155
|
+
this.updateDependencies(cell);
|
|
156
|
+
});
|
|
157
|
+
const thisSheet = this.model.name;
|
|
158
|
+
this.dependencies.sheetDependants.forEach(sheet => {
|
|
159
|
+
const connectedModel = this.model.getConnectedModel(sheet);
|
|
160
|
+
connectedModel === null || connectedModel === void 0 ? void 0 : connectedModel.calculations.getFormulaCells().forEach(cell => {
|
|
161
|
+
const formula = connectedModel.calculations.getFormula(cell);
|
|
162
|
+
if (formula.hasSheetReference(thisSheet)) {
|
|
163
|
+
cell.formula = formula.shift(index, offset, direction, maxIndex).createFormulaString(false);
|
|
164
|
+
connectedModel.calculations.updateDependencies(cell);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
return this;
|
|
169
|
+
}
|
|
170
|
+
getFormulaCells() {
|
|
171
|
+
const m = this.model;
|
|
172
|
+
const cells = [];
|
|
173
|
+
let row;
|
|
174
|
+
const rows = m.rows.length;
|
|
175
|
+
const columns = m.columns.length;
|
|
176
|
+
for (let r = 0; r < rows; r++) {
|
|
177
|
+
row = m.rows[r];
|
|
178
|
+
for (let c = 0; c < columns; c++) {
|
|
179
|
+
if (row.hasCellFormula(c))
|
|
180
|
+
cells.push(row.cell(c));
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return cells;
|
|
184
|
+
}
|
|
185
|
+
renameSheet(oldName, newName) {
|
|
186
|
+
let renamed = false;
|
|
187
|
+
this.dependencies.renameSheet(oldName, newName);
|
|
188
|
+
this.getFormulaCells().forEach(cell => {
|
|
189
|
+
const f = this.getFormula(cell);
|
|
190
|
+
if (f.renameSheet(oldName, newName)) {
|
|
191
|
+
cell.formula = f.createFormulaString();
|
|
192
|
+
renamed = true;
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
return renamed;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.CalculationModel = CalculationModel;
|
|
199
|
+
//# sourceMappingURL=calculationModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculationModel.js","sourceRoot":"","sources":["../../src/calculations/calculationModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../src/calculations/conditions.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAC,MAAM,CAAC;AAEtC,wBAAgB,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAI,MAAM,CASvD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,WAoBjE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.evalCondition = exports.scalarCompare = void 0;
|
|
5
|
+
const core_1 = require("@omegagrid/core");
|
|
6
|
+
function scalarCompare(s1, s2) {
|
|
7
|
+
if ((isNaN(s1) || s1 == null) && (isNaN(s2) || s2 == null)) {
|
|
8
|
+
s1 = s1 == null ? '' : core_1.utils.removeAccents(s1.toString()).toLowerCase();
|
|
9
|
+
s2 = s2 == null ? '' : core_1.utils.removeAccents(s2.toString()).toLowerCase();
|
|
10
|
+
}
|
|
11
|
+
if (s1 > s2)
|
|
12
|
+
return 1;
|
|
13
|
+
if (s1 < s2)
|
|
14
|
+
return -1;
|
|
15
|
+
return 0;
|
|
16
|
+
}
|
|
17
|
+
exports.scalarCompare = scalarCompare;
|
|
18
|
+
function evalCondition(condition, value) {
|
|
19
|
+
const isStringValue = core_1.utils.isString(value);
|
|
20
|
+
if (core_1.utils.isString(condition)) {
|
|
21
|
+
condition = condition.toString().trim();
|
|
22
|
+
if (condition.startsWith('=')) {
|
|
23
|
+
return scalarCompare(value, isStringValue ? condition.substring(1) : parseFloat(condition.substring(1))) == 0;
|
|
24
|
+
}
|
|
25
|
+
else if (condition.startsWith('>')) {
|
|
26
|
+
return scalarCompare(value, isStringValue ? condition.substring(1) : parseFloat(condition.substring(1))) > 0;
|
|
27
|
+
}
|
|
28
|
+
else if (condition.startsWith('<')) {
|
|
29
|
+
return scalarCompare(value, isStringValue ? condition.substring(1) : parseFloat(condition.substring(1))) < 0;
|
|
30
|
+
}
|
|
31
|
+
else if (condition.startsWith('>=')) {
|
|
32
|
+
return scalarCompare(value, isStringValue ? condition.substring(2) : parseFloat(condition.substring(2))) >= 0;
|
|
33
|
+
}
|
|
34
|
+
else if (condition.startsWith('<=')) {
|
|
35
|
+
return scalarCompare(value, isStringValue ? condition.substring(2) : parseFloat(condition.substring(2))) <= 0;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return scalarCompare(value, isStringValue ? condition : (isNaN(condition) ? (condition || '') : parseFloat(condition))) == 0;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
return value == condition;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.evalCondition = evalCondition;
|
|
46
|
+
//# sourceMappingURL=conditions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/calculations/conditions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Matrix } from "@omegagrid/core";
|
|
2
|
+
import { RangeAddress } from "../common";
|
|
3
|
+
import { CellModel, GridModel } from "../model";
|
|
4
|
+
import { Operator } from "./operators";
|
|
5
|
+
export declare class CalculationContext {
|
|
6
|
+
readonly model: GridModel;
|
|
7
|
+
currentCell: CellModel;
|
|
8
|
+
constructor(model: GridModel);
|
|
9
|
+
getModel: (sheet: string) => GridModel;
|
|
10
|
+
/**
|
|
11
|
+
* Returns cell value
|
|
12
|
+
* @param a1 cell addres
|
|
13
|
+
* @param sheet sheet name
|
|
14
|
+
* @returns cell value
|
|
15
|
+
*/
|
|
16
|
+
cl: (a1: RangeAddress, sheet?: string) => unknown;
|
|
17
|
+
/**
|
|
18
|
+
* Returns range value matrix
|
|
19
|
+
* @param a1 cell addres
|
|
20
|
+
* @param sheet sheet name
|
|
21
|
+
* @returns cell value matrix
|
|
22
|
+
*/
|
|
23
|
+
rn: (a1: RangeAddress, sheet?: string) => Matrix<unknown>;
|
|
24
|
+
/**
|
|
25
|
+
* Returns cell value by range name
|
|
26
|
+
* @param name range (cell) name
|
|
27
|
+
* @param sheet sheet name
|
|
28
|
+
* @returns cell value
|
|
29
|
+
*/
|
|
30
|
+
nv: (name: string, sheet?: string) => unknown;
|
|
31
|
+
/**
|
|
32
|
+
* Returns cell value matrix for named range
|
|
33
|
+
* @param a1 range address
|
|
34
|
+
* @param sheet sheet name
|
|
35
|
+
* @returns cell value matrix
|
|
36
|
+
*/
|
|
37
|
+
nr: (name: string, sheet?: string) => unknown;
|
|
38
|
+
/**
|
|
39
|
+
* returns formula function
|
|
40
|
+
* @param name function name
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
fn: (name: string) => import("..").FormulaFunction;
|
|
44
|
+
/**
|
|
45
|
+
* Performs matrix operation
|
|
46
|
+
* @param operand1
|
|
47
|
+
* @param operand2
|
|
48
|
+
* @param operator
|
|
49
|
+
* @return value
|
|
50
|
+
*/
|
|
51
|
+
op: (operand1: Matrix, operand2: Matrix, operator: Operator) => Matrix;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/calculations/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAa,YAAY,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;AAExD,qBAAa,kBAAkB;aAIF,KAAK,EAAE,SAAS;IAF5C,WAAW,EAAE,SAAS,CAAC;gBAEK,KAAK,EAAE,SAAS;IAE5C,QAAQ,UAAW,MAAM,eAIxB;IAED;;;;;OAKG;IACH,EAAE,OAAQ,YAAY,UAAU,MAAM,KAAG,OAAO,CAG9C;IAEF;;;;;OAKG;IACH,EAAE,OAAQ,YAAY,UAAU,MAAM,qBAGrC;IAED;;;;;OAKG;IACH,EAAE,SAAU,MAAM,UAAU,MAAM,KAAG,OAAO,CAG1C;IAEF;;;;;OAKG;IACH,EAAE,SAAU,MAAM,UAAU,MAAM,KAAG,OAAO,CAK1C;IAEF;;;;OAIG;IACH,EAAE,SAAU,MAAM,kCAIhB;IAEF;;;;;;OAMG;IACH,EAAE,iDAAkD,QAAQ,YAE3D;CACD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CalculationContext = void 0;
|
|
4
|
+
const common_1 = require("../common");
|
|
5
|
+
const functions_1 = require("./functions");
|
|
6
|
+
const operators_1 = require("./operators");
|
|
7
|
+
class CalculationContext {
|
|
8
|
+
constructor(model) {
|
|
9
|
+
this.model = model;
|
|
10
|
+
this.getModel = (sheet) => {
|
|
11
|
+
const m = sheet ? this.model.getConnectedModel(sheet) : this.model;
|
|
12
|
+
if (m)
|
|
13
|
+
return m;
|
|
14
|
+
throw new Error(`Sheet "${sheet}" not found`);
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Returns cell value
|
|
18
|
+
* @param a1 cell addres
|
|
19
|
+
* @param sheet sheet name
|
|
20
|
+
* @returns cell value
|
|
21
|
+
*/
|
|
22
|
+
this.cl = (a1, sheet) => {
|
|
23
|
+
const m = this.getModel(sheet);
|
|
24
|
+
return m.calculations.evaluate(m.getCellByA1(a1));
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Returns range value matrix
|
|
28
|
+
* @param a1 cell addres
|
|
29
|
+
* @param sheet sheet name
|
|
30
|
+
* @returns cell value matrix
|
|
31
|
+
*/
|
|
32
|
+
this.rn = (a1, sheet) => {
|
|
33
|
+
const m = this.getModel(sheet);
|
|
34
|
+
return m.getValuesInRange(common_1.CellRange.fromA1(a1));
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Returns cell value by range name
|
|
38
|
+
* @param name range (cell) name
|
|
39
|
+
* @param sheet sheet name
|
|
40
|
+
* @returns cell value
|
|
41
|
+
*/
|
|
42
|
+
this.nv = (name, sheet) => {
|
|
43
|
+
const m = this.getModel(sheet);
|
|
44
|
+
return m.calculations.evaluate(m.getCellByName(name, this.currentCell.range));
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Returns cell value matrix for named range
|
|
48
|
+
* @param a1 range address
|
|
49
|
+
* @param sheet sheet name
|
|
50
|
+
* @returns cell value matrix
|
|
51
|
+
*/
|
|
52
|
+
this.nr = (name, sheet) => {
|
|
53
|
+
const m = this.getModel(sheet);
|
|
54
|
+
const matrix = m.getValueMatrixByName(name);
|
|
55
|
+
if (matrix.length === 1 && matrix[0].length === 1)
|
|
56
|
+
return matrix[0][0];
|
|
57
|
+
return matrix;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* returns formula function
|
|
61
|
+
* @param name function name
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
this.fn = (name) => {
|
|
65
|
+
const fn = functions_1.functions.get(name);
|
|
66
|
+
if (fn)
|
|
67
|
+
return fn;
|
|
68
|
+
throw new Error(`Function "${name}" not found`);
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Performs matrix operation
|
|
72
|
+
* @param operand1
|
|
73
|
+
* @param operand2
|
|
74
|
+
* @param operator
|
|
75
|
+
* @return value
|
|
76
|
+
*/
|
|
77
|
+
this.op = (operand1, operand2, operator) => {
|
|
78
|
+
return (0, operators_1.matrixOperation)(operand1, operand2, operator);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.CalculationContext = CalculationContext;
|
|
83
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/calculations/context.ts"],"names":[],"mappings":";;;AACA,sCAAoD;AAEpD,2CAAwC;AACxC,2CAAwD;AAExD,MAAa,kBAAkB;IAI9B,YAA4B,KAAgB;QAAhB,UAAK,GAAL,KAAK,CAAW;QAE5C,aAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;YAC5B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACnE,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,aAAa,CAAC,CAAA;QAC9C,CAAC,CAAA;QAED;;;;;WAKG;QACH,OAAE,GAAG,CAAC,EAAgB,EAAE,KAAc,EAAW,EAAE;YAClD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF;;;;;WAKG;QACH,OAAE,GAAG,CAAC,EAAgB,EAAE,KAAc,EAAE,EAAE;YACzC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC,gBAAgB,CAAC,kBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC,CAAA;QAED;;;;;WAKG;QACH,OAAE,GAAG,CAAC,IAAY,EAAE,KAAc,EAAW,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC;QAEF;;;;;WAKG;QACH,OAAE,GAAG,CAAC,IAAY,EAAE,KAAc,EAAW,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,OAAO,MAAM,CAAC;QACf,CAAC,CAAC;QAEF;;;;WAIG;QACH,OAAE,GAAG,CAAC,IAAY,EAAE,EAAE;YACrB,MAAM,EAAE,GAAG,qBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,EAAE;gBAAE,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF;;;;;;WAMG;QACH,OAAE,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAE,QAAkB,EAAU,EAAE;YACvE,OAAO,IAAA,2BAAe,EAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC,CAAA;IA1E+C,CAAC;CA2EjD;AA/ED,gDA+EC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Token, Tokenizer, TokenType } from "./tokenization";
|
|
2
|
+
import { FormulaFunction } from '../types';
|
|
3
|
+
import { CellRange } from "../common";
|
|
4
|
+
import { Direction } from "@omegagrid/core";
|
|
5
|
+
import { CellModel } from "../model";
|
|
6
|
+
export type FormulaString = string;
|
|
7
|
+
export type FormulaContext = {
|
|
8
|
+
cell: CellModel;
|
|
9
|
+
formula: Formula;
|
|
10
|
+
};
|
|
11
|
+
export type FormulaColorItem = {
|
|
12
|
+
color: string;
|
|
13
|
+
address: string;
|
|
14
|
+
sheet?: string;
|
|
15
|
+
type: TokenType;
|
|
16
|
+
tokenIndex: number;
|
|
17
|
+
};
|
|
18
|
+
type ExpressionNode = {
|
|
19
|
+
/** token */
|
|
20
|
+
t: string;
|
|
21
|
+
/** token type */
|
|
22
|
+
tt: TokenType;
|
|
23
|
+
/** sheet */
|
|
24
|
+
s?: string;
|
|
25
|
+
/** children */
|
|
26
|
+
c?: ExpressionNode[];
|
|
27
|
+
};
|
|
28
|
+
export declare const isFormula: (value: string) => boolean;
|
|
29
|
+
export declare const prefixFormula: (value: string) => string;
|
|
30
|
+
export declare const stripFormulaPrefix: (value: string) => string;
|
|
31
|
+
export declare class Formula {
|
|
32
|
+
private expression;
|
|
33
|
+
readonly tokenizer: Tokenizer;
|
|
34
|
+
private _formula;
|
|
35
|
+
private _variables;
|
|
36
|
+
private _cells;
|
|
37
|
+
private _ranges;
|
|
38
|
+
private _fn;
|
|
39
|
+
get fn(): FormulaFunction;
|
|
40
|
+
private _tokens;
|
|
41
|
+
get tokens(): Token[];
|
|
42
|
+
get variables(): [number, string, string?][];
|
|
43
|
+
get cells(): [number, CellRange, string?][];
|
|
44
|
+
get ranges(): [number, CellRange, string?][];
|
|
45
|
+
get colors(): Map<string, FormulaColorItem>;
|
|
46
|
+
constructor(expression: FormulaString, tokenizer: Tokenizer);
|
|
47
|
+
findTokenIndexAtPosition(pos: number): number;
|
|
48
|
+
getTokenPosition(index: number): {
|
|
49
|
+
min: number;
|
|
50
|
+
max: number;
|
|
51
|
+
};
|
|
52
|
+
updateToken(index: number, newValue: string): void;
|
|
53
|
+
removeToken(index: number): void;
|
|
54
|
+
insertToken(index: number, value: string, type: TokenType): void;
|
|
55
|
+
clone(): Formula;
|
|
56
|
+
updateDependecies(): void;
|
|
57
|
+
getNamedColor(name: string): string;
|
|
58
|
+
createFormulaString(html?: boolean, fnPrefix?: string): string;
|
|
59
|
+
createExpressionTree(): ExpressionNode;
|
|
60
|
+
createExpressionJSCode(node: ExpressionNode, parent?: ExpressionNode, arrayMode?: boolean): string;
|
|
61
|
+
compile(): string;
|
|
62
|
+
toString(prefix?: boolean): string;
|
|
63
|
+
toExcelString(): string;
|
|
64
|
+
shift(index: number, offset: number, direction: Direction, maxIndex?: number): this;
|
|
65
|
+
hasSheetReference(sheet: string): boolean;
|
|
66
|
+
renameSheet(oldName: string, newName: string): boolean;
|
|
67
|
+
}
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=formula.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../../src/calculations/formula.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,MAAM,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,cAAc,GAAG;IACrB,YAAY;IACT,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,EAAE,EAAE,SAAS,CAAC;IACd,YAAY;IACZ,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,eAAe;IACZ,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;CACxB,CAAA;AAED,eAAO,MAAM,SAAS,UAAW,MAAM,YAAuE,CAAC;AAC/G,eAAO,MAAM,aAAa,UAAW,MAAM,WAAqD,CAAC;AACjG,eAAO,MAAM,kBAAkB,UAAW,MAAM,WAAkD,CAAC;AAMnG,qBAAa,OAAO;IAkCP,OAAO,CAAC,UAAU;aAAiC,SAAS,EAAE,SAAS;IAhCnF,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,UAAU,CAA8B;IAEhD,OAAO,CAAC,MAAM,CAAiC;IAE/C,OAAO,CAAC,OAAO,CAAiC;IAEhD,OAAO,CAAC,GAAG,CAAkB;IAC7B,IAAI,EAAE,oBAAgH;IAEtH,OAAO,CAAC,OAAO,CAAU;IACzB,IAAI,MAAM,YAA0B;IAEpC,IAAI,SAAS,gCAA6B;IAC1C,IAAI,KAAK,mCAAyB;IAClC,IAAI,MAAM,mCAA0B;IAEpC,IAAI,MAAM,kCAWT;gBAEmB,UAAU,EAAE,aAAa,EAAkB,SAAS,EAAE,SAAS;IAKnF,wBAAwB,CAAC,GAAG,EAAE,MAAM;IASpC,gBAAgB,CAAC,KAAK,EAAE,MAAM;;;;IAQ9B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAM3C,WAAW,CAAC,KAAK,EAAE,MAAM;IAMzB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAMzD,KAAK;IAIL,iBAAiB;IA0BjB,aAAa,CAAC,IAAI,EAAE,MAAM;IAI1B,mBAAmB,CAAC,IAAI,UAAQ,EAAE,QAAQ,GAAE,MAAa;IAiDzD,oBAAoB,IAAK,cAAc;IAwGvC,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,OAAO,GAAI,MAAM;IAgCnG,OAAO;IAKP,QAAQ,CAAC,MAAM,UAAQ;IAIvB,aAAa;IAIb,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAE,MAAa;IAwBlF,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAO/B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CA0B5C"}
|