@omegagrid/grid-core 0.10.0 → 0.10.2

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.
Files changed (201) hide show
  1. package/package.json +3 -3
  2. package/dist/__generated/functions.d.ts +0 -4
  3. package/dist/__generated/functions.d.ts.map +0 -1
  4. package/dist/__generated/functions.js +0 -45
  5. package/dist/__generated/functions.js.map +0 -1
  6. package/dist/calculations/autofill.d.ts +0 -7
  7. package/dist/calculations/autofill.d.ts.map +0 -1
  8. package/dist/calculations/autofill.js +0 -84
  9. package/dist/calculations/autofill.js.map +0 -1
  10. package/dist/calculations/conditions.d.ts +0 -4
  11. package/dist/calculations/conditions.d.ts.map +0 -1
  12. package/dist/calculations/conditions.js +0 -41
  13. package/dist/calculations/conditions.js.map +0 -1
  14. package/dist/calculations/context.d.ts +0 -53
  15. package/dist/calculations/context.d.ts.map +0 -1
  16. package/dist/calculations/context.js +0 -85
  17. package/dist/calculations/context.js.map +0 -1
  18. package/dist/calculations/formula.d.ts +0 -89
  19. package/dist/calculations/formula.d.ts.map +0 -1
  20. package/dist/calculations/formula.js +0 -443
  21. package/dist/calculations/formula.js.map +0 -1
  22. package/dist/calculations/functions/dates.d.ts +0 -13
  23. package/dist/calculations/functions/dates.d.ts.map +0 -1
  24. package/dist/calculations/functions/dates.js +0 -58
  25. package/dist/calculations/functions/dates.js.map +0 -1
  26. package/dist/calculations/functions/index.d.ts +0 -11
  27. package/dist/calculations/functions/index.d.ts.map +0 -1
  28. package/dist/calculations/functions/index.js +0 -21
  29. package/dist/calculations/functions/index.js.map +0 -1
  30. package/dist/calculations/functions/logical.d.ts +0 -11
  31. package/dist/calculations/functions/logical.d.ts.map +0 -1
  32. package/dist/calculations/functions/logical.js +0 -50
  33. package/dist/calculations/functions/logical.js.map +0 -1
  34. package/dist/calculations/functions/lookup.d.ts +0 -18
  35. package/dist/calculations/functions/lookup.d.ts.map +0 -1
  36. package/dist/calculations/functions/lookup.js +0 -169
  37. package/dist/calculations/functions/lookup.js.map +0 -1
  38. package/dist/calculations/functions/math.d.ts +0 -72
  39. package/dist/calculations/functions/math.d.ts.map +0 -1
  40. package/dist/calculations/functions/math.js +0 -182
  41. package/dist/calculations/functions/math.js.map +0 -1
  42. package/dist/calculations/functions/special.d.ts +0 -2
  43. package/dist/calculations/functions/special.d.ts.map +0 -1
  44. package/dist/calculations/functions/special.js +0 -51
  45. package/dist/calculations/functions/special.js.map +0 -1
  46. package/dist/calculations/functions/statistical.d.ts +0 -7
  47. package/dist/calculations/functions/statistical.d.ts.map +0 -1
  48. package/dist/calculations/functions/statistical.js +0 -47
  49. package/dist/calculations/functions/statistical.js.map +0 -1
  50. package/dist/calculations/functions/text.d.ts +0 -29
  51. package/dist/calculations/functions/text.d.ts.map +0 -1
  52. package/dist/calculations/functions/text.js +0 -58
  53. package/dist/calculations/functions/text.js.map +0 -1
  54. package/dist/calculations/helpers.d.ts +0 -13
  55. package/dist/calculations/helpers.d.ts.map +0 -1
  56. package/dist/calculations/helpers.js +0 -32
  57. package/dist/calculations/helpers.js.map +0 -1
  58. package/dist/calculations/index.d.ts +0 -7
  59. package/dist/calculations/index.d.ts.map +0 -1
  60. package/dist/calculations/index.js +0 -7
  61. package/dist/calculations/index.js.map +0 -1
  62. package/dist/calculations/operators.d.ts +0 -19
  63. package/dist/calculations/operators.d.ts.map +0 -1
  64. package/dist/calculations/operators.js +0 -58
  65. package/dist/calculations/operators.js.map +0 -1
  66. package/dist/calculations/tokenization.d.ts +0 -36
  67. package/dist/calculations/tokenization.d.ts.map +0 -1
  68. package/dist/calculations/tokenization.js +0 -203
  69. package/dist/calculations/tokenization.js.map +0 -1
  70. package/dist/common/index.d.ts +0 -2
  71. package/dist/common/index.d.ts.map +0 -1
  72. package/dist/common/index.js +0 -2
  73. package/dist/common/index.js.map +0 -1
  74. package/dist/common/range.d.ts +0 -66
  75. package/dist/common/range.d.ts.map +0 -1
  76. package/dist/common/range.js +0 -222
  77. package/dist/common/range.js.map +0 -1
  78. package/dist/constants.d.ts +0 -68
  79. package/dist/constants.d.ts.map +0 -1
  80. package/dist/constants.js +0 -127
  81. package/dist/constants.js.map +0 -1
  82. package/dist/index.d.ts +0 -8
  83. package/dist/index.d.ts.map +0 -1
  84. package/dist/index.js +0 -8
  85. package/dist/index.js.map +0 -1
  86. package/dist/model/calculationModel.d.ts +0 -30
  87. package/dist/model/calculationModel.d.ts.map +0 -1
  88. package/dist/model/calculationModel.js +0 -206
  89. package/dist/model/calculationModel.js.map +0 -1
  90. package/dist/model/cellModel.d.ts +0 -134
  91. package/dist/model/cellModel.d.ts.map +0 -1
  92. package/dist/model/cellModel.js +0 -371
  93. package/dist/model/cellModel.js.map +0 -1
  94. package/dist/model/columnModel.d.ts +0 -160
  95. package/dist/model/columnModel.d.ts.map +0 -1
  96. package/dist/model/columnModel.js +0 -159
  97. package/dist/model/columnModel.js.map +0 -1
  98. package/dist/model/commentModel.d.ts +0 -58
  99. package/dist/model/commentModel.d.ts.map +0 -1
  100. package/dist/model/commentModel.js +0 -81
  101. package/dist/model/commentModel.js.map +0 -1
  102. package/dist/model/conditionalFormats.d.ts +0 -104
  103. package/dist/model/conditionalFormats.d.ts.map +0 -1
  104. package/dist/model/conditionalFormats.js +0 -414
  105. package/dist/model/conditionalFormats.js.map +0 -1
  106. package/dist/model/cssStyle.d.ts +0 -20
  107. package/dist/model/cssStyle.d.ts.map +0 -1
  108. package/dist/model/cssStyle.js +0 -301
  109. package/dist/model/cssStyle.js.map +0 -1
  110. package/dist/model/dependencies.d.ts +0 -30
  111. package/dist/model/dependencies.d.ts.map +0 -1
  112. package/dist/model/dependencies.js +0 -139
  113. package/dist/model/dependencies.js.map +0 -1
  114. package/dist/model/dependencyModel.d.ts +0 -9
  115. package/dist/model/dependencyModel.d.ts.map +0 -1
  116. package/dist/model/dependencyModel.js +0 -9
  117. package/dist/model/dependencyModel.js.map +0 -1
  118. package/dist/model/elementModel.d.ts +0 -103
  119. package/dist/model/elementModel.d.ts.map +0 -1
  120. package/dist/model/elementModel.js +0 -181
  121. package/dist/model/elementModel.js.map +0 -1
  122. package/dist/model/filterModel.d.ts +0 -35
  123. package/dist/model/filterModel.d.ts.map +0 -1
  124. package/dist/model/filterModel.js +0 -153
  125. package/dist/model/filterModel.js.map +0 -1
  126. package/dist/model/gridModel.d.ts +0 -181
  127. package/dist/model/gridModel.d.ts.map +0 -1
  128. package/dist/model/gridModel.js +0 -797
  129. package/dist/model/gridModel.js.map +0 -1
  130. package/dist/model/groupModel.d.ts +0 -26
  131. package/dist/model/groupModel.d.ts.map +0 -1
  132. package/dist/model/groupModel.js +0 -112
  133. package/dist/model/groupModel.js.map +0 -1
  134. package/dist/model/history.d.ts +0 -24
  135. package/dist/model/history.d.ts.map +0 -1
  136. package/dist/model/history.js +0 -35
  137. package/dist/model/history.js.map +0 -1
  138. package/dist/model/index.d.ts +0 -23
  139. package/dist/model/index.d.ts.map +0 -1
  140. package/dist/model/index.js +0 -23
  141. package/dist/model/index.js.map +0 -1
  142. package/dist/model/iterableRange.d.ts +0 -49
  143. package/dist/model/iterableRange.d.ts.map +0 -1
  144. package/dist/model/iterableRange.js +0 -108
  145. package/dist/model/iterableRange.js.map +0 -1
  146. package/dist/model/merges.d.ts +0 -34
  147. package/dist/model/merges.d.ts.map +0 -1
  148. package/dist/model/merges.js +0 -123
  149. package/dist/model/merges.js.map +0 -1
  150. package/dist/model/namingModel.d.ts +0 -25
  151. package/dist/model/namingModel.d.ts.map +0 -1
  152. package/dist/model/namingModel.js +0 -77
  153. package/dist/model/namingModel.js.map +0 -1
  154. package/dist/model/options.d.ts +0 -257
  155. package/dist/model/options.d.ts.map +0 -1
  156. package/dist/model/options.js +0 -35
  157. package/dist/model/options.js.map +0 -1
  158. package/dist/model/rowModel.d.ts +0 -104
  159. package/dist/model/rowModel.d.ts.map +0 -1
  160. package/dist/model/rowModel.js +0 -155
  161. package/dist/model/rowModel.js.map +0 -1
  162. package/dist/model/selectionModel.d.ts +0 -19
  163. package/dist/model/selectionModel.d.ts.map +0 -1
  164. package/dist/model/selectionModel.js +0 -40
  165. package/dist/model/selectionModel.js.map +0 -1
  166. package/dist/model/sortingModel.d.ts +0 -46
  167. package/dist/model/sortingModel.d.ts.map +0 -1
  168. package/dist/model/sortingModel.js +0 -157
  169. package/dist/model/sortingModel.js.map +0 -1
  170. package/dist/model/style.d.ts +0 -90
  171. package/dist/model/style.d.ts.map +0 -1
  172. package/dist/model/style.js +0 -34
  173. package/dist/model/style.js.map +0 -1
  174. package/dist/model/styleModel.d.ts +0 -22
  175. package/dist/model/styleModel.d.ts.map +0 -1
  176. package/dist/model/styleModel.js +0 -91
  177. package/dist/model/styleModel.js.map +0 -1
  178. package/dist/model/tableTheme.d.ts +0 -46
  179. package/dist/model/tableTheme.d.ts.map +0 -1
  180. package/dist/model/tableTheme.js +0 -93
  181. package/dist/model/tableTheme.js.map +0 -1
  182. package/dist/model/validations.d.ts +0 -5
  183. package/dist/model/validations.d.ts.map +0 -1
  184. package/dist/model/validations.js +0 -24
  185. package/dist/model/validations.js.map +0 -1
  186. package/dist/sparklines/index.d.ts +0 -2
  187. package/dist/sparklines/index.d.ts.map +0 -1
  188. package/dist/sparklines/index.js +0 -2
  189. package/dist/sparklines/index.js.map +0 -1
  190. package/dist/sparklines/sparklines.d.ts +0 -59
  191. package/dist/sparklines/sparklines.d.ts.map +0 -1
  192. package/dist/sparklines/sparklines.js +0 -176
  193. package/dist/sparklines/sparklines.js.map +0 -1
  194. package/dist/types.d.ts +0 -103
  195. package/dist/types.d.ts.map +0 -1
  196. package/dist/types.js +0 -2
  197. package/dist/types.js.map +0 -1
  198. package/dist/utils.d.ts +0 -4
  199. package/dist/utils.d.ts.map +0 -1
  200. package/dist/utils.js +0 -11
  201. package/dist/utils.js.map +0 -1
@@ -1,443 +0,0 @@
1
- import { TokenType } from "./tokenization";
2
- import { CellRange } from "../common";
3
- import { operatorMap } from "./operators";
4
- import { isArrayFunction } from "./helpers";
5
- export const isFormula = (value) => value && value.length > 0 && value.charAt(0) == '=' ? true : false;
6
- export const prefixFormula = (value) => isFormula(value) ? value : ('=' + (value ?? ''));
7
- export const stripFormulaPrefix = (value) => isFormula(value) ? value.substring(1) : value;
8
- const colors = ['#5B97FF', '#FF616B', '#B77CFF', '#00B02C', '#FC58BE', '#FF9000', '#2EB0B3'];
9
- const getColor = (index) => colors[index % colors.length];
10
- const xlPrefixes = new Map([
11
- ['FORMULATEXT', '_xlfn.'],
12
- ['CONCAT', '_xlfn.'],
13
- ['INDIRECT', '_xlfn.'],
14
- ['ISOWEEKNUM', '_xlfn.'],
15
- ['SWITCH', '_xlfn.'],
16
- ['XOR', '_xlfn.'],
17
- ]);
18
- const getXlFunctionPrefix = (fn) => {
19
- return xlPrefixes.get(fn) ?? '';
20
- };
21
- export class Formula {
22
- get fn() { return this._fn ?? (this._fn = (new Function('t', 'ctx', 'return ' + this.compile()))); }
23
- get tokens() { return this._tokens; }
24
- get variables() { return this._variables; }
25
- get cells() { return this._cells; }
26
- get ranges() { return this._ranges; }
27
- get colors() {
28
- if (!this._colors) {
29
- this._colors = new Map();
30
- let sheet;
31
- this._tokens.forEach((t, i) => {
32
- if ([TokenType.Cell, TokenType.Range].includes(t[1])) {
33
- const key = (sheet ? ('\'' + sheet + '\'!') : '') + t[0];
34
- this._colors.set(key, { color: getColor(this._colors.size), address: t[0], sheet: sheet, type: t[1], tokenIndex: i });
35
- sheet = null;
36
- }
37
- else if (t[1] == TokenType.Sheet) {
38
- sheet = t[0];
39
- }
40
- });
41
- }
42
- return this._colors;
43
- }
44
- constructor(expression, tokenizer) {
45
- this.expression = expression;
46
- this.tokenizer = tokenizer;
47
- this._tokens = tokenizer.tokenize(this.expression);
48
- this.updateDependecies();
49
- }
50
- findTokenIndexAtPosition(pos) {
51
- let i = 0;
52
- return this._tokens.findIndex(token => {
53
- const size = token[0].length;
54
- if (pos >= i && pos <= i + size)
55
- return true;
56
- i += size;
57
- });
58
- }
59
- /**
60
- * Finds sheet token for the given reange token index
61
- *
62
- * @param tokenIndex
63
- */
64
- findSheetTokenIndex(tokenIndex) {
65
- const token = this._tokens[tokenIndex];
66
- if (![TokenType.Cell, TokenType.Range].includes(token[1]))
67
- return -1;
68
- if (tokenIndex == 0 || this._tokens[tokenIndex - 1][1] != TokenType.SheetSeparator)
69
- return -1;
70
- let i = tokenIndex - 2;
71
- while (i >= 0) {
72
- if (this._tokens[i][1] == TokenType.Sheet)
73
- return i;
74
- i--;
75
- }
76
- return -1;
77
- }
78
- /**
79
- * Removes sheet token for the given token index (range or sheet itself)
80
- * @param tokenIndex
81
- * @returns number of tokens removed
82
- */
83
- removeSheetToken(tokenIndex) {
84
- if (this._tokens[tokenIndex][1] != TokenType.Sheet) {
85
- tokenIndex = this.findSheetTokenIndex(tokenIndex);
86
- }
87
- if (tokenIndex > -1) {
88
- if (tokenIndex > 0 && this._tokens[tokenIndex - 1][1] == TokenType.SheetQuote)
89
- tokenIndex--;
90
- let maxIndex = tokenIndex;
91
- while (maxIndex < this._tokens.length && [
92
- TokenType.SheetSeparator, TokenType.SheetQuote, TokenType.Sheet
93
- ].includes(this._tokens[maxIndex][1])) {
94
- maxIndex++;
95
- }
96
- this._tokens.splice(tokenIndex, maxIndex - tokenIndex);
97
- return maxIndex - tokenIndex;
98
- }
99
- return 0;
100
- }
101
- getNamedColor(name) {
102
- return this.colors.get(name)?.color ?? 'inherit';
103
- }
104
- getTokenPosition(index) {
105
- let min = 0;
106
- for (let i = 0; i < index; i++) {
107
- min += this._tokens[i][0].length;
108
- }
109
- return { min: min, max: min + this._tokens[index][0].length };
110
- }
111
- updateToken(index, newValue) {
112
- this._fn = null;
113
- this._formula = null;
114
- this._xlFormula = null;
115
- this._tokens[index][0] = newValue;
116
- }
117
- removeToken(index) {
118
- this._fn = null;
119
- this._formula = null;
120
- this._xlFormula = null;
121
- this._tokens.splice(index, 1);
122
- }
123
- /**
124
- * Inserts a new token at the given index
125
- * @param index
126
- * @param value
127
- * @param type
128
- * @returns number of inserted tokens
129
- */
130
- insertToken(index, value, type) {
131
- this._fn = null;
132
- this._formula = null;
133
- this._xlFormula = null;
134
- const tokens = [];
135
- if (type == TokenType.Sheet && /\s/.test(value)) {
136
- tokens.push([this.tokenizer.options.sheetQuote, TokenType.SheetQuote]);
137
- tokens.push([value, TokenType.Sheet]);
138
- tokens.push([this.tokenizer.options.sheetQuote, TokenType.SheetQuote]);
139
- }
140
- else {
141
- tokens.push([value, type]);
142
- }
143
- tokens.push(['!', TokenType.SheetSeparator]);
144
- this._tokens.splice(index, 0, ...tokens);
145
- return tokens.length;
146
- }
147
- clone() {
148
- return new Formula(this.createFormulaString(), this.tokenizer);
149
- }
150
- updateDependecies() {
151
- this._variables = [];
152
- this._cells = [];
153
- this._ranges = [];
154
- let sheet;
155
- this._tokens.forEach((t, i) => {
156
- switch (t[1]) {
157
- case TokenType.Sheet:
158
- sheet = t[0];
159
- break;
160
- case TokenType.Variable:
161
- this._variables.push([i, t[0], sheet]);
162
- sheet = undefined;
163
- break;
164
- case TokenType.Cell:
165
- this._cells.push([i, CellRange.fromA1(t[0]), sheet]);
166
- sheet = undefined;
167
- break;
168
- case TokenType.Range:
169
- this._ranges.push([i, CellRange.fromA1(t[0]), sheet]);
170
- sheet = undefined;
171
- break;
172
- }
173
- });
174
- }
175
- createFormulaString(html = false, fnPrefixes = false) {
176
- const opts = this.tokenizer.options;
177
- let formula = '';
178
- let token;
179
- let sheet;
180
- let colorKey;
181
- for (let i = 0; i < this._tokens.length; i++) {
182
- token = this._tokens[i];
183
- switch (token[1]) {
184
- case TokenType.SheetQuote:
185
- formula += '\'';
186
- break;
187
- case TokenType.SheetSeparator:
188
- formula += '!';
189
- break;
190
- case TokenType.Sheet:
191
- sheet = token[0];
192
- formula += html ? `<span style="font-style:italic">${sheet}</span>` : sheet;
193
- break;
194
- case TokenType.Variable:
195
- formula += token[0];
196
- break;
197
- case TokenType.Range:
198
- case TokenType.Cell:
199
- colorKey = (sheet ? ('\'' + sheet + '\'!') : '') + token[0];
200
- formula += html ? `<span style="color:${this.getNamedColor(colorKey)}">${token[0]}</span>` : token[0];
201
- sheet = null;
202
- break;
203
- case TokenType.StringQuote:
204
- formula += opts.stringQuote;
205
- break;
206
- case TokenType.String:
207
- formula += token[0].replace(new RegExp(opts.stringQuote, 'g'), '\\' + opts.stringQuote);
208
- break;
209
- case TokenType.ArgumentSeparator:
210
- formula += opts.argumentSeparator;
211
- break;
212
- case TokenType.Function:
213
- formula += (fnPrefixes ? getXlFunctionPrefix(token[0]) : '') + token[0];
214
- break;
215
- case TokenType.Unknown:
216
- formula += html
217
- ? `<span style="background:#f00;color:#fff">${token[0]}</span>`
218
- : token[0];
219
- break;
220
- default:
221
- formula += token[0];
222
- break;
223
- }
224
- }
225
- return formula;
226
- }
227
- createExpressionTree() {
228
- const nodeStack = [];
229
- const operatorStack = [];
230
- const tokens = this.tokens;
231
- let token, operator;
232
- let op1, op2;
233
- let sheet = null;
234
- let nodes;
235
- for (let i = 0; i < tokens.length; i++) {
236
- token = tokens[i];
237
- switch (token[1]) {
238
- case TokenType.Sheet:
239
- sheet = token[0];
240
- break;
241
- case TokenType.Cell:
242
- case TokenType.Range:
243
- nodeStack.push({ t: token[0], tt: token[1], s: sheet });
244
- sheet = null;
245
- break;
246
- case TokenType.Number:
247
- case TokenType.String:
248
- case TokenType.Boolean:
249
- case TokenType.Variable:
250
- nodeStack.push({ t: token[0], tt: token[1] });
251
- break;
252
- case TokenType.Operator:
253
- if (nodeStack.length == 0)
254
- nodeStack.push({ t: '', tt: TokenType.Operand }); // generic operand
255
- op1 = operatorMap.get(token[0]);
256
- while (operatorStack.length > 0) {
257
- op2 = operatorMap.get(operatorStack[operatorStack.length - 1][0]);
258
- if (!op2)
259
- break;
260
- // operators with higher precedence or equal precedence and left associativity
261
- if (!(op1[2] === 0 && op1[1] <= op2[1]) && !(op1[2] === 1 && op1[1] < op2[1]))
262
- break;
263
- operator = operatorStack.pop();
264
- nodes = [nodeStack.pop(), nodeStack.pop()].reverse();
265
- nodeStack.push({ t: operator[0], tt: operator[1], c: nodes });
266
- }
267
- operatorStack.push(token);
268
- break;
269
- case TokenType.Function:
270
- operatorStack.push(token);
271
- break;
272
- case TokenType.OpenBracket:
273
- operatorStack.push(token);
274
- break;
275
- case TokenType.ArgumentSeparator:
276
- while (operatorStack.length > 0) {
277
- // evaluate expression until previous argument separator or open bracket
278
- operator = operatorStack[operatorStack.length - 1];
279
- if ([TokenType.OpenBracket, TokenType.ArgumentSeparator].includes(operator[1])) {
280
- break;
281
- }
282
- operator = operatorStack.pop();
283
- nodes = [nodeStack.pop(), nodeStack.pop()].reverse();
284
- nodeStack.push({ t: operator[0], tt: operator[1], c: nodes });
285
- }
286
- operatorStack.push(token);
287
- break;
288
- case TokenType.CloseBracket:
289
- nodes = [];
290
- while (operatorStack.length > 0) {
291
- if (operatorStack[operatorStack.length - 1][1] === TokenType.OpenBracket) {
292
- break;
293
- }
294
- operator = operatorStack.pop();
295
- if (operator[1] == TokenType.Operator) {
296
- // nodes array contains operands for the current operator
297
- nodes.push({ t: operator[0], tt: operator[1], c: [nodeStack.pop(), nodeStack.pop()].reverse() });
298
- }
299
- else if (operator[1] == TokenType.ArgumentSeparator) {
300
- // nodes array contains arguments of the function
301
- if (nodeStack.length > 0)
302
- nodes.push(nodeStack.pop());
303
- }
304
- }
305
- operatorStack.pop(); // pop the open bracket
306
- if (operatorStack.length > 0 && operatorStack[operatorStack.length - 1][1] === TokenType.Function) {
307
- // current token is closing bracket of a function
308
- operator = operatorStack.pop(); // pop function from operator stack
309
- nodes = nodes.reverse();
310
- if (nodeStack.length > 0 && tokens[i - 1][1] !== TokenType.OpenBracket) {
311
- nodes.unshift(nodeStack.pop()); // prepend first argument unless the function has zero arguments
312
- }
313
- nodeStack.push({ t: operator[0], tt: operator[1], c: nodes });
314
- }
315
- else {
316
- // current token is closing bracket of an expression
317
- nodeStack.push(...nodes);
318
- }
319
- break;
320
- }
321
- }
322
- while (operatorStack.length > 0) {
323
- operator = operatorStack.pop();
324
- nodeStack.push({ t: operator[0], tt: operator[1], c: [nodeStack.pop(), nodeStack.pop()].reverse() });
325
- }
326
- return nodeStack.pop();
327
- }
328
- createExpressionJSCode(node, parent, arrayMode) {
329
- let args;
330
- switch (node.tt) {
331
- case TokenType.Range:
332
- return 't.rn(\'' + node.t + '\'' + (node.s ? (',\'' + node.s + '\'') : '') + ')';
333
- case TokenType.Cell:
334
- return 't.cl(\'' + node.t + '\'' + (node.s ? (',\'' + node.s + '\'') : '') + ')';
335
- case TokenType.Operand:
336
- return 't.cl()';
337
- case TokenType.Variable:
338
- if (arrayMode || parent?.tt === TokenType.Function) {
339
- return 't.nr(\'' + node.t + '\'' + (node.s ? (',\'' + node.s + '\'') : '') + ')';
340
- }
341
- else {
342
- return 't.nv(\'' + node.t + '\'' + (node.s ? (',\'' + node.s + '\'') : '') + ')';
343
- }
344
- case TokenType.String:
345
- return '\'' + node.t.replace(/'/g, "\\'") + '\'';
346
- case TokenType.Boolean:
347
- return node.t[0].toUpperCase() == 'T' ? '1' : '0';
348
- case TokenType.Function:
349
- args = node.c.map(n => this.createExpressionJSCode(n, node, arrayMode || isArrayFunction(node.t)));
350
- return 't.fn(\'' + node.t + '\').call(ctx' + (args.length > 0 ? (',' + args.join(',')) : '') + ')';
351
- case TokenType.Operator:
352
- if (arrayMode) {
353
- args = node.c.map(n => this.createExpressionJSCode(n, node, arrayMode || isArrayFunction(node.t)));
354
- return 't.op(' + args[0] + ',' + args[1] + ',\'' + node.t + '\')';
355
- }
356
- else if (operatorMap.has(node.t)) {
357
- return '(' + node.c.map(n => this.createExpressionJSCode(n, node, arrayMode)).join(operatorMap.get(node.t)[0]) + ')';
358
- }
359
- else {
360
- return null;
361
- }
362
- default:
363
- return node.t;
364
- }
365
- }
366
- compile() {
367
- const tree = this.createExpressionTree();
368
- return this.createExpressionJSCode(tree);
369
- }
370
- toString(prefix = false) {
371
- return (prefix ? '=' : '') + (this._formula ?? (this._formula = this.createFormulaString()));
372
- }
373
- toExcelString() {
374
- return (this._xlFormula ?? (this._xlFormula = this.createFormulaString(false, true)));
375
- }
376
- shift(options) {
377
- const { index, offset, direction, maxIndex, sheet, allSheets } = options;
378
- if (this._cells)
379
- this._cells.forEach(cell => {
380
- if (!allSheets && cell[2] != null && cell[2] != sheet)
381
- return;
382
- switch (direction) {
383
- case 'up':
384
- cell[1].shiftUp(index, offset, maxIndex);
385
- break;
386
- case 'right':
387
- cell[1].shiftRight(index, offset, maxIndex);
388
- break;
389
- case 'down':
390
- cell[1].shiftDown(index, offset, maxIndex);
391
- break;
392
- case 'left':
393
- cell[1].shiftLeft(index, offset, maxIndex);
394
- break;
395
- }
396
- this._tokens[cell[0]][0] = cell[1].A1;
397
- });
398
- if (this._ranges)
399
- this._ranges.forEach(range => {
400
- if (!allSheets && range[2] != null && range[2] != sheet)
401
- return;
402
- switch (direction) {
403
- case 'up':
404
- range[1].shiftUp(index, offset, maxIndex);
405
- break;
406
- case 'right':
407
- range[1].shiftRight(index, offset, maxIndex);
408
- break;
409
- case 'down':
410
- range[1].shiftDown(index, offset, maxIndex);
411
- break;
412
- case 'left':
413
- range[1].shiftLeft(index, offset, maxIndex);
414
- break;
415
- }
416
- this._tokens[range[0]][0] = range[1].A1;
417
- });
418
- return this;
419
- }
420
- hasSheetReference(sheet) {
421
- for (const cell of this._cells)
422
- if (cell[2] == sheet)
423
- return true;
424
- for (const range of this._ranges)
425
- if (range[2] == sheet)
426
- return true;
427
- for (const variable of this._variables)
428
- if (variable[2] == sheet)
429
- return true;
430
- return false;
431
- }
432
- renameSheet(oldName, newName) {
433
- let renamed = false;
434
- this._tokens.forEach(t => {
435
- if (t[1] == TokenType.Sheet && t[0] == oldName) {
436
- t[0] = newName;
437
- renamed = true;
438
- }
439
- });
440
- return renamed;
441
- }
442
- }
443
- //# sourceMappingURL=formula.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formula.js","sourceRoot":"","sources":["../../src/calculations/formula.ts"],"names":[],"mappings":"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","sourcesContent":["import { Token, Tokenizer, TokenType } from \"./tokenization\";\nimport { FormulaFunction, ShiftOptions } from '../types';\nimport { CellRange } from \"../common\";\nimport { CellModel } from \"../model\";\nimport { Operator, operatorMap, OperatorSpec } from \"./operators\";\nimport { isArrayFunction } from \"./helpers\";\n\nexport type FormulaString = string;\n\nexport type FormulaContext = {\n\tcell: CellModel,\n\tformula: Formula\n}\n\nexport type FormulaColorItem = {\n\tcolor: string,\n\taddress: string,\n\tsheet?: string,\n\ttype: TokenType,\n\ttokenIndex: number\n}\n\ntype ExpressionNode = {\n\t/** token */\n t: string,\n\t/** token type */\n\ttt: TokenType,\n\t/** sheet */\n\ts?: string,\n\t/** children */\n c?: ExpressionNode[],\n}\n\nexport const isFormula = (value: string) => value && value.length > 0 && value.charAt(0) == '=' ? true : false;\nexport const prefixFormula = (value: string) => isFormula(value) ? value : ('=' + (value ?? ''));\nexport const stripFormulaPrefix = (value: string) => isFormula(value) ? value.substring(1) : value;\n\nconst colors = ['#5B97FF', '#FF616B', '#B77CFF', '#00B02C', '#FC58BE', '#FF9000', '#2EB0B3'];\nconst getColor = (index: number) => colors[index % colors.length];\n\n\nconst xlPrefixes = new Map<string, string>([\n\t['FORMULATEXT', '_xlfn.'],\n\t['CONCAT', '_xlfn.'],\n\t['INDIRECT', '_xlfn.'],\n\t['ISOWEEKNUM', '_xlfn.'],\n\t['SWITCH', '_xlfn.'],\n\t['XOR', '_xlfn.'],\n]);\n\nconst getXlFunctionPrefix = (fn: string) => {\n\treturn xlPrefixes.get(fn) ?? '';\n}\n\nexport class Formula {\n\n\tprivate _formula: string;\n\tprivate _xlFormula: string;\n\t\n\t// [index, variable, sheet]\n\tprivate _variables: [number, string, string?][];\n\t// [index, range, sheet]\n\tprivate _cells: [number, CellRange, string?][];\n\t// [index, range, sheet]\n\tprivate _ranges: [number, CellRange, string?][];\n\n\tprivate _fn: FormulaFunction;\n\tget fn() { return this._fn ?? (this._fn = (new Function('t', 'ctx', 'return ' + this.compile())) as FormulaFunction) }\n\n\tprivate _tokens: Token[];\n\tget tokens() { return this._tokens }\n\n\tget variables() { return this._variables }\n\tget cells() { return this._cells }\n\tget ranges() { return this._ranges }\n\n\n\tprivate _colors: Map<string, FormulaColorItem>;\n\n\tget colors() {\n\t\tif (!this._colors) {\n\t\t\tthis._colors = new Map<string, FormulaColorItem>();\n\t\t\tlet sheet: string;\n\t\t\tthis._tokens.forEach((t, i) => {\n\t\t\t\tif ([TokenType.Cell, TokenType.Range].includes(t[1])) {\n\t\t\t\t\tconst key = (sheet ? ('\\'' + sheet + '\\'!') : '') + t[0];\n\t\t\t\t\tthis._colors.set(key, {color: getColor(this._colors.size), address: t[0], sheet: sheet, type: t[1], tokenIndex: i});\n\t\t\t\t\tsheet = null;\n\t\t\t\t} else if (t[1] == TokenType.Sheet) {\n\t\t\t\t\tsheet = t[0];\n\t\t\t\t}\t\n\t\t\t});\n\t\t}\n\t\treturn this._colors;\n\t}\n\n\tconstructor(private expression: FormulaString, public readonly tokenizer: Tokenizer) {\n\t\tthis._tokens = tokenizer.tokenize(this.expression);\n\t\tthis.updateDependecies();\n\t}\n\n\tfindTokenIndexAtPosition(pos: number) {\n\t\tlet i = 0;\n\t\treturn this._tokens.findIndex(token => {\n\t\t\tconst size = token[0].length;\n\t\t\tif (pos >= i && pos <= i + size) return true;\n\t\t\ti += size;\n\t\t});\n\t}\n\n\t/**\n\t * Finds sheet token for the given reange token index\n\t * \n\t * @param tokenIndex \n\t */\n\tfindSheetTokenIndex(tokenIndex: number) : number {\n\t\tconst token = this._tokens[tokenIndex];\n\t\tif (![TokenType.Cell, TokenType.Range].includes(token[1])) return -1;\n\t\tif (tokenIndex == 0 || this._tokens[tokenIndex - 1][1] != TokenType.SheetSeparator) return -1;\n\t\tlet i = tokenIndex - 2;\n\t\twhile (i >= 0) {\n\t\t\tif (this._tokens[i][1] == TokenType.Sheet) return i;\n\t\t\ti--;\n\t\t}\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Removes sheet token for the given token index (range or sheet itself)\n\t * @param tokenIndex \n\t * @returns number of tokens removed\n\t */\n\tremoveSheetToken(tokenIndex: number) {\n\t\tif (this._tokens[tokenIndex][1] != TokenType.Sheet) {\n\t\t\ttokenIndex = this.findSheetTokenIndex(tokenIndex);\n\t\t}\n\n\t\tif (tokenIndex > -1) {\n\t\t\tif (tokenIndex > 0 && this._tokens[tokenIndex - 1][1] == TokenType.SheetQuote) tokenIndex--;\n\t\t\tlet maxIndex = tokenIndex;\n\t\t\twhile (maxIndex < this._tokens.length && [\n\t\t\t\tTokenType.SheetSeparator, TokenType.SheetQuote, TokenType.Sheet\n\t\t\t].includes(this._tokens[maxIndex][1])) {\n\t\t\t\tmaxIndex++;\n\t\t\t}\n\t\t\tthis._tokens.splice(tokenIndex, maxIndex - tokenIndex);\n\t\t\treturn maxIndex - tokenIndex;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tgetNamedColor(name: string) {\n\t\treturn this.colors.get(name)?.color ?? 'inherit';\n\t}\n\n\tgetTokenPosition(index: number) {\n\t\tlet min = 0;\n\t\tfor (let i = 0; i < index; i++) {\n\t\t\tmin += this._tokens[i][0].length;\n\t\t}\n\t\treturn {min: min, max: min + this._tokens[index][0].length};\n\t}\n\n\tupdateToken(index: number, newValue: string) {\n\t\tthis._fn = null;\n\t\tthis._formula = null;\n\t\tthis._xlFormula = null;\n\t\tthis._tokens[index][0] = newValue;\n\t}\n\n\tremoveToken(index: number) {\n\t\tthis._fn = null;\n\t\tthis._formula = null;\n\t\tthis._xlFormula = null;\n\t\tthis._tokens.splice(index, 1);\n\t}\n\n\t/**\n\t * Inserts a new token at the given index\n\t * @param index \n\t * @param value \n\t * @param type \n\t * @returns number of inserted tokens\n\t */\n\tinsertToken(index: number, value: string, type: TokenType) : number {\n\t\tthis._fn = null;\n\t\tthis._formula = null;\n\t\tthis._xlFormula = null;\n\t\tconst tokens: Token[] = [];\n\t\tif (type == TokenType.Sheet && /\\s/.test(value)) {\n\t\t\ttokens.push([this.tokenizer.options.sheetQuote, TokenType.SheetQuote]);\n\t\t\ttokens.push([value, TokenType.Sheet]);\n\t\t\ttokens.push([this.tokenizer.options.sheetQuote, TokenType.SheetQuote]);\n\t\t} else {\n\t\t\ttokens.push([value, type]);\n\t\t}\n\t\ttokens.push(['!', TokenType.SheetSeparator]);\n\t\tthis._tokens.splice(index, 0, ...tokens);\n\t\treturn tokens.length;\n\t}\n\n\tclone() {\n\t\treturn new Formula(this.createFormulaString(), this.tokenizer);\n\t}\n\n\tupdateDependecies() {\n\t\tthis._variables = [];\n\t\tthis._cells = [];\n\t\tthis._ranges = [];\n\t\tlet sheet: string;\n\t\tthis._tokens.forEach((t, i) => {\n\t\t\tswitch (t[1]) {\n\t\t\t\tcase TokenType.Sheet:\n\t\t\t\t\tsheet = t[0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Variable:\n\t\t\t\t\tthis._variables.push([i, t[0], sheet]);\n\t\t\t\t\tsheet = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Cell:\n\t\t\t\t\tthis._cells.push([i, CellRange.fromA1(t[0]), sheet]);\n\t\t\t\t\tsheet = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Range:\n\t\t\t\t\tthis._ranges.push([i, CellRange.fromA1(t[0]), sheet]);\n\t\t\t\t\tsheet = undefined;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n\n\tcreateFormulaString(html = false, fnPrefixes = false) {\n\t\tconst opts = this.tokenizer.options;\n\t\tlet formula = '';\n\t\tlet token: Token;\n\t\tlet sheet: string;\n\t\tlet colorKey: string;\n\n\t\tfor (let i = 0; i < this._tokens.length; i++) {\n\t\t\ttoken = this._tokens[i];\n\t\t\tswitch (token[1]) {\n\t\t\t\tcase TokenType.SheetQuote:\n\t\t\t\t\tformula += '\\'';\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.SheetSeparator:\n\t\t\t\t\tformula += '!';\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Sheet:\n\t\t\t\t\tsheet = token[0];\n\t\t\t\t\tformula += html ? `<span style=\"font-style:italic\">${sheet}</span>` : sheet;\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Variable:\n\t\t\t\t\tformula += token[0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Range:\n\t\t\t\tcase TokenType.Cell:\n\t\t\t\t\tcolorKey = (sheet ? ('\\'' + sheet + '\\'!') : '') + token[0];\n\t\t\t\t\tformula += html ? `<span style=\"color:${this.getNamedColor(colorKey)}\">${token[0]}</span>` : token[0];\n\t\t\t\t\tsheet = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.StringQuote:\n\t\t\t\t\tformula += opts.stringQuote;\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.String:\n\t\t\t\t\tformula += token[0].replace(new RegExp(opts.stringQuote, 'g'), '\\\\' + opts.stringQuote);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.ArgumentSeparator:\n\t\t\t\t\tformula += opts.argumentSeparator;\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Function:\n\t\t\t\t\tformula += (fnPrefixes ? getXlFunctionPrefix(token[0]) : '') + token[0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Unknown:\n\t\t\t\t\tformula += html \n\t\t\t\t\t\t? `<span style=\"background:#f00;color:#fff\">${token[0]}</span>`\n\t\t\t\t\t\t: token[0];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tformula += token[0];\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn formula;\n\t}\n\n\tcreateExpressionTree() : ExpressionNode {\n\t\tconst nodeStack: ExpressionNode[] = [];\n\t\tconst operatorStack: Token[] = [];\n\t\tconst tokens = this.tokens;\n\n\t\tlet token: Token, operator: Token;\n\t\tlet op1: OperatorSpec, op2: OperatorSpec;\n\t\tlet sheet: string = null;\n\t\tlet nodes: ExpressionNode[];\n\t\t\n\t\tfor (let i = 0; i < tokens.length; i++) {\n\t\t\ttoken = tokens[i];\n\t\t\tswitch (token[1]) {\n\t\t\t\tcase TokenType.Sheet:\n\t\t\t\t\tsheet = token[0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Cell:\n\t\t\t\tcase TokenType.Range:\n\t\t\t\t\tnodeStack.push({t: token[0], tt: token[1], s: sheet});\n\t\t\t\t\tsheet = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Number:\n\t\t\t\tcase TokenType.String:\n\t\t\t\tcase TokenType.Boolean:\n\t\t\t\tcase TokenType.Variable:\n\t\t\t\t\tnodeStack.push({t: token[0], tt: token[1]});\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Operator:\n\t\t\t\t\tif (nodeStack.length == 0) nodeStack.push({t: '', tt: TokenType.Operand}); // generic operand\n\t\t\t\t\top1 = operatorMap.get(token[0] as Operator);\n\t\t\t\t\twhile (operatorStack.length > 0) {\n\t\t\t\t\t\top2 = operatorMap.get(operatorStack[operatorStack.length - 1][0] as Operator);\n\t\t\t\t\t\tif (!op2) break;\n\n\t\t\t\t\t\t// operators with higher precedence or equal precedence and left associativity\n\t\t\t\t\t\tif (!(op1[2] === 0 && op1[1] <= op2[1]) && !(op1[2] === 1 && op1[1] < op2[1])) break;\n\t\t\t\t\t\toperator = operatorStack.pop();\n\t\t\t\t\t\tnodes = [nodeStack.pop(), nodeStack.pop()].reverse();\n\t\t\t\t\t\tnodeStack.push({t: operator[0], tt: operator[1], c: nodes});\n\t\t\t\t\t}\n\t\t\t\t\toperatorStack.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.Function:\n\t\t\t\t\toperatorStack.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.OpenBracket:\n\t\t\t\t\toperatorStack.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.ArgumentSeparator:\n\t\t\t\t\twhile (operatorStack.length > 0) {\n\t\t\t\t\t\t// evaluate expression until previous argument separator or open bracket\n\t\t\t\t\t\toperator = operatorStack[operatorStack.length - 1];\n\t\t\t\t\t\tif ([TokenType.OpenBracket, TokenType.ArgumentSeparator].includes(operator[1])) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\toperator = operatorStack.pop();\n\t\t\t\t\t\tnodes = [nodeStack.pop(), nodeStack.pop()].reverse();\n\t\t\t\t\t\tnodeStack.push({t: operator[0], tt: operator[1], c: nodes});\n\t\t\t\t\t}\n\t\t\t\t\toperatorStack.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.CloseBracket:\n\t\t\t\t\tnodes = [];\n\t\t\t\t\twhile (operatorStack.length > 0) {\n\t\t\t\t\t\tif (operatorStack[operatorStack.length - 1][1] === TokenType.OpenBracket) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\toperator = operatorStack.pop();\n\t\t\t\t\t\tif (operator[1] == TokenType.Operator) {\n\t\t\t\t\t\t\t// nodes array contains operands for the current operator\n\t\t\t\t\t\t\tnodes.push({t: operator[0], tt: operator[1], c: [nodeStack.pop(), nodeStack.pop()].reverse()});\n\t\t\t\t\t\t} else if (operator[1] == TokenType.ArgumentSeparator) {\n\t\t\t\t\t\t\t// nodes array contains arguments of the function\n\t\t\t\t\t\t\tif (nodeStack.length > 0) nodes.push(nodeStack.pop());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\toperatorStack.pop(); // pop the open bracket\n\n\t\t\t\t\tif (operatorStack.length > 0 && operatorStack[operatorStack.length - 1][1] === TokenType.Function) {\n\t\t\t\t\t\t// current token is closing bracket of a function\n\t\t\t\t\t\toperator = operatorStack.pop(); // pop function from operator stack\n\t\t\t\t\t\tnodes = nodes.reverse();\n\t\t\t\t\t\tif (nodeStack.length > 0 && tokens[i - 1][1] !== TokenType.OpenBracket) {\n\t\t\t\t\t\t\tnodes.unshift(nodeStack.pop()); // prepend first argument unless the function has zero arguments\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnodeStack.push({t: operator[0], tt: operator[1], c: nodes});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// current token is closing bracket of an expression\n\t\t\t\t\t\tnodeStack.push(...nodes);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\n\t\twhile (operatorStack.length > 0) {\n\t\t\toperator = operatorStack.pop();\n\t\t\tnodeStack.push({t: operator[0], tt: operator[1], c: [nodeStack.pop(), nodeStack.pop()].reverse()});\n\t\t}\n\n\t\treturn nodeStack.pop();\n\t}\n\n\tcreateExpressionJSCode(node: ExpressionNode, parent?: ExpressionNode, arrayMode?: boolean) : string {\n\t\tlet args: string[];\n\t\tswitch (node.tt) {\n\t\t\tcase TokenType.Range:\n\t\t\t\treturn 't.rn(\\'' + node.t + '\\'' + (node.s ? (',\\'' + node.s + '\\'') : '') + ')';\n\t\t\tcase TokenType.Cell:\n\t\t\t\treturn 't.cl(\\'' + node.t + '\\'' + (node.s ? (',\\'' + node.s + '\\'') : '') + ')';\n\t\t\tcase TokenType.Operand:\n\t\t\t\treturn 't.cl()';\n\t\t\tcase TokenType.Variable:\n\t\t\t\tif (arrayMode || parent?.tt === TokenType.Function) {\n\t\t\t\t\treturn 't.nr(\\'' + node.t + '\\'' + (node.s ? (',\\'' + node.s + '\\'') : '') + ')';\n\t\t\t\t} else {\n\t\t\t\t\treturn 't.nv(\\'' + node.t + '\\'' + (node.s ? (',\\'' + node.s + '\\'') : '') + ')';\n\t\t\t\t}\n\t\t\tcase TokenType.String:\n\t\t\t\treturn '\\'' + node.t.replace(/'/g, \"\\\\'\") + '\\'';\n\t\t\tcase TokenType.Boolean:\n\t\t\t\treturn node.t[0].toUpperCase() == 'T' ? '1' : '0';\n\t\t\tcase TokenType.Function:\n\t\t\t\targs = node.c.map(n => this.createExpressionJSCode(n, node, arrayMode || isArrayFunction(node.t)));\n\t\t\t\treturn 't.fn(\\'' + node.t + '\\').call(ctx' + (args.length > 0 ? (',' + args.join(',')) : '') + ')';\n\t\t\tcase TokenType.Operator:\n\t\t\t\tif (arrayMode) {\n\t\t\t\t\targs = node.c.map(n => this.createExpressionJSCode(n, node, arrayMode || isArrayFunction(node.t)));\n\t\t\t\t\treturn 't.op(' + args[0] + ',' + args[1] + ',\\'' + node.t + '\\')';\t\n\t\t\t\t} else if (operatorMap.has(node.t as Operator)) {\n\t\t\t\t\treturn '(' + node.c.map(n => this.createExpressionJSCode(n, node, arrayMode)).join(operatorMap.get(node.t as Operator)[0]) + ')';\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn node.t;\n\t\t}\n\t}\n\n\tcompile() {\n\t\tconst tree = this.createExpressionTree();\n\t\treturn this.createExpressionJSCode(tree);\n\t}\n\n\ttoString(prefix = false) { \n\t\treturn (prefix ? '=' : '') + (this._formula ?? (this._formula = this.createFormulaString()));\n\t}\n\n\ttoExcelString() {\n\t\treturn (this._xlFormula ?? (this._xlFormula = this.createFormulaString(false, true)));\n\t}\n\n\tshift(options: ShiftOptions) {\n\t\tconst { index, offset, direction, maxIndex, sheet, allSheets } = options;\n\t\tif (this._cells) this._cells.forEach(cell => {\n\t\t\tif (!allSheets && cell[2] != null && cell[2] != sheet) return;\n\t\t\tswitch (direction) {\n\t\t\t\tcase 'up': cell[1].shiftUp(index, offset, maxIndex); break;\n\t\t\t\tcase 'right': cell[1].shiftRight(index, offset, maxIndex); break;\n\t\t\t\tcase 'down': cell[1].shiftDown(index, offset, maxIndex); break;\n\t\t\t\tcase 'left': cell[1].shiftLeft(index, offset, maxIndex); break;\n\t\t\t}\n\t\t\tthis._tokens[cell[0]][0] = cell[1].A1;\n\t\t});\n\t\tif (this._ranges) this._ranges.forEach(range => {\n\t\t\tif (!allSheets && range[2] != null && range[2] != sheet) return;\n\t\t\tswitch (direction) {\n\t\t\t\tcase 'up': range[1].shiftUp(index, offset, maxIndex); break;\n\t\t\t\tcase 'right': range[1].shiftRight(index, offset, maxIndex); break;\n\t\t\t\tcase 'down': range[1].shiftDown(index, offset, maxIndex); break;\n\t\t\t\tcase 'left': range[1].shiftLeft(index, offset, maxIndex); break;\n\t\t\t}\n\t\t\tthis._tokens[range[0]][0] = range[1].A1;\n\t\t});\n\t\treturn this;\n\t}\n\n\thasSheetReference(sheet: string) {\n\t\tfor (const cell of this._cells) if (cell[2] == sheet) return true;\n\t\tfor (const range of this._ranges) if (range[2] == sheet) return true;\n\t\tfor (const variable of this._variables) if (variable[2] == sheet) return true;\n\t\treturn false;\n\t}\n\n\trenameSheet(oldName: string, newName: string) {\n\t\tlet renamed = false;\n\t\tthis._tokens.forEach(t => {\n\t\t\tif (t[1] == TokenType.Sheet && t[0] == oldName) {\n\t\t\t\tt[0] = newName;\n\t\t\t\trenamed = true;\n\t\t\t}\n\t\t});\n\t\treturn renamed;\n\t}\n\n}"]}
@@ -1,13 +0,0 @@
1
- import { Arg, DateArg } from "../helpers";
2
- export declare function datevalue(date: DateArg): number;
3
- export declare function weekday(sn: DateArg, returnType?: number): number;
4
- export declare function workday(sn: Arg<DateArg>, count: number, _holidays?: number[]): number;
5
- export declare function today(): number;
6
- export declare function isBlank(value: Arg): boolean;
7
- export declare function date(year: number, month: number, day: number): number;
8
- export declare function year(sn: DateArg): number;
9
- export declare function month(sn: DateArg): number;
10
- export declare function day(sn: DateArg): number;
11
- export declare function eomonth(sn: DateArg, months: number): number;
12
- export declare function isoweeknum(sn: DateArg): number;
13
- //# sourceMappingURL=dates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/calculations/functions/dates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAU,MAAM,YAAY,CAAC;AAelD,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GACe,MAAM,CAC3D;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,UAOvD;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAE5E;AAED,wBAAgB,KAAK,WAEpB;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,WAGjC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAE5D;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,OAAO,UAE/B;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,OAAO,UAEhC;AAED,wBAAgB,GAAG,CAAC,EAAE,EAAE,OAAO,UAE9B;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAKlD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,UAErC"}
@@ -1,58 +0,0 @@
1
- import { dates } from "@omegagrid/core";
2
- import { scalar } from "../helpers";
3
- import { getISOWeek, startOfDay } from "date-fns";
4
- import { getLocale } from "@omegagrid/localize";
5
- import { utils } from "@omegagrid/core";
6
- function toDate(d) {
7
- if (d instanceof Date)
8
- return d;
9
- return utils.isString(d) ? dates.parse(d, getLocale()) : dates.serialDateToDate(d);
10
- }
11
- function toSN(d) {
12
- if (utils.isNumber(d))
13
- return d;
14
- return dates.dateToSerialDate(d instanceof Date ? d : dates.parse(d, getLocale()));
15
- }
16
- export function datevalue(date) {
17
- return (utils.isString(date) ? toSN(date) : date);
18
- }
19
- export function weekday(sn, returnType) {
20
- const d = toDate(sn).getDay();
21
- switch (returnType) {
22
- case 2: return d;
23
- case 3: return d - 1;
24
- default: return (d % 7) + 1; // 1
25
- }
26
- }
27
- export function workday(sn, count, _holidays) {
28
- return dates.workday(toSN(scalar(sn)), count);
29
- }
30
- export function today() {
31
- return dates.dateToSerialDate(startOfDay(new Date()));
32
- }
33
- export function isBlank(value) {
34
- value = scalar(value);
35
- return value == null || value === '';
36
- }
37
- export function date(year, month, day) {
38
- return dates.dateToSerialDate(new Date(year, month - 1, day));
39
- }
40
- export function year(sn) {
41
- return toDate(sn).getFullYear();
42
- }
43
- export function month(sn) {
44
- return toDate(sn).getMonth() + 1;
45
- }
46
- export function day(sn) {
47
- return toDate(sn).getDate();
48
- }
49
- export function eomonth(sn, months) {
50
- const d = toDate(sn);
51
- d.setMonth(d.getMonth() + months + 1);
52
- d.setDate(0);
53
- return dates.dateToSerialDate(d);
54
- }
55
- export function isoweeknum(sn) {
56
- return getISOWeek(toDate(sn));
57
- }
58
- //# sourceMappingURL=dates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../../src/calculations/functions/dates.ts"],"names":[],"mappings":"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","sourcesContent":["import { dates } from \"@omegagrid/core\";\nimport { Arg, DateArg, scalar } from \"../helpers\";\nimport { getISOWeek, startOfDay } from \"date-fns\";\nimport { getLocale } from \"@omegagrid/localize\";\nimport { utils } from \"@omegagrid/core\";\n\nfunction toDate(d: DateArg) : Date{\n\tif (d instanceof Date) return d;\n\treturn utils.isString(d) ? dates.parse(d as string, getLocale()) : dates.serialDateToDate(d as number);\n}\n\nfunction toSN(d: DateArg) : number {\n\tif (utils.isNumber(d)) return d as number;\n\treturn dates.dateToSerialDate(d instanceof Date ? d : dates.parse(d as string, getLocale()))\n}\n\nexport function datevalue(date: DateArg) {\n\treturn (utils.isString(date) ? toSN(date) : date) as number;\n}\n\nexport function weekday(sn: DateArg, returnType?: number) {\n\tconst d = toDate(sn).getDay();\n\tswitch (returnType) {\n\t\tcase 2: return d;\n\t\tcase 3: return d - 1;\n\t\tdefault: return (d % 7) + 1; // 1\n\t}\n}\n\nexport function workday(sn: Arg<DateArg>, count: number, _holidays?: number[]) {\n\treturn dates.workday(toSN(scalar(sn)), count);\n}\n\nexport function today() {\n\treturn dates.dateToSerialDate(startOfDay(new Date()));\n}\n\nexport function isBlank(value: Arg) {\n\tvalue = scalar(value);\n\treturn value == null || value === '';\n}\n\nexport function date(year: number, month: number, day: number) {\n\treturn dates.dateToSerialDate(new Date(year, month - 1, day));\n}\n\nexport function year(sn: DateArg) {\n\treturn toDate(sn).getFullYear();\n}\n\nexport function month(sn: DateArg) {\n\treturn toDate(sn).getMonth() + 1;\n}\n\nexport function day(sn: DateArg) {\n\treturn toDate(sn).getDate();\n}\n\nexport function eomonth(sn: DateArg, months: number) {\n\tconst d = toDate(sn);\n\td.setMonth(d.getMonth() + months + 1);\n\td.setDate(0);\n\treturn dates.dateToSerialDate(d);\n}\n\nexport function isoweeknum(sn: DateArg) {\n\treturn getISOWeek(toDate(sn));\n}\n"]}
@@ -1,11 +0,0 @@
1
- import * as textFunctions from './text';
2
- import * as dateFunctions from './dates';
3
- import * as mathFunctions from './math';
4
- import * as lookupFunctions from './lookup';
5
- import * as specialFunctions from './special';
6
- import * as logicalFunctions from './logical';
7
- import * as statisticalFunctions from './statistical';
8
- import { FormulaFunction } from '../../types';
9
- declare const _map: Map<string, FormulaFunction>;
10
- export { _map, textFunctions as text, dateFunctions as date, mathFunctions as math, lookupFunctions as lookup, specialFunctions as special, logicalFunctions as logical, statisticalFunctions as statistical };
11
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/calculations/functions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,aAAa,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,aAAa,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,eAAe,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,gBAAgB,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,gBAAgB,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,oBAAoB,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAU9C,QAAA,MAAM,IAAI,8BAAqC,CAAC;AAShD,OAAO,EACN,IAAI,EACJ,aAAa,IAAI,IAAI,EACrB,aAAa,IAAI,IAAI,EACrB,aAAa,IAAI,IAAI,EACrB,eAAe,IAAI,MAAM,EACzB,gBAAgB,IAAI,OAAO,EAC3B,gBAAgB,IAAI,OAAO,EAC3B,oBAAoB,IAAI,WAAW,EACnC,CAAC"}
@@ -1,21 +0,0 @@
1
- import * as textFunctions from './text';
2
- import * as dateFunctions from './dates';
3
- import * as mathFunctions from './math';
4
- import * as lookupFunctions from './lookup';
5
- import * as specialFunctions from './special';
6
- import * as logicalFunctions from './logical';
7
- import * as statisticalFunctions from './statistical';
8
- import { utils } from '@omegagrid/core';
9
- function addModuleFunctions(map, module) {
10
- Object.keys(module).forEach(name => map.set(utils.trim(name, '_').replace(/_/g, '.').toUpperCase(), module[name]));
11
- }
12
- const _map = new Map();
13
- addModuleFunctions(_map, textFunctions);
14
- addModuleFunctions(_map, dateFunctions);
15
- addModuleFunctions(_map, mathFunctions);
16
- addModuleFunctions(_map, lookupFunctions);
17
- addModuleFunctions(_map, logicalFunctions);
18
- addModuleFunctions(_map, specialFunctions);
19
- addModuleFunctions(_map, statisticalFunctions);
20
- export { _map, textFunctions as text, dateFunctions as date, mathFunctions as math, lookupFunctions as lookup, specialFunctions as special, logicalFunctions as logical, statisticalFunctions as statistical };
21
- //# sourceMappingURL=index.js.map