@pnp/spfx-controls-react 3.17.0-beta.6997969 → 3.17.0-beta.7072507

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 (117) hide show
  1. package/CHANGELOG.json +6 -2
  2. package/CHANGELOG.md +8 -0
  3. package/lib/common/SPEntities.d.ts +5 -0
  4. package/lib/common/SPEntities.d.ts.map +1 -1
  5. package/lib/common/telemetry/version.js +1 -1
  6. package/lib/common/utilities/CustomFormatting.d.ts +31 -0
  7. package/lib/common/utilities/CustomFormatting.d.ts.map +1 -0
  8. package/lib/common/utilities/CustomFormatting.js +160 -0
  9. package/lib/common/utilities/CustomFormatting.js.map +1 -0
  10. package/lib/common/utilities/FormulaEvaluation.d.ts +21 -0
  11. package/lib/common/utilities/FormulaEvaluation.d.ts.map +1 -0
  12. package/lib/common/utilities/FormulaEvaluation.js +612 -0
  13. package/lib/common/utilities/FormulaEvaluation.js.map +1 -0
  14. package/lib/common/utilities/FormulaEvaluation.types.d.ts +23 -0
  15. package/lib/common/utilities/FormulaEvaluation.types.d.ts.map +1 -0
  16. package/lib/common/utilities/FormulaEvaluation.types.js +80 -0
  17. package/lib/common/utilities/FormulaEvaluation.types.js.map +1 -0
  18. package/lib/common/utilities/ICustomFormatting.d.ts +27 -0
  19. package/lib/common/utilities/ICustomFormatting.d.ts.map +1 -0
  20. package/lib/common/utilities/ICustomFormatting.js +2 -0
  21. package/lib/common/utilities/ICustomFormatting.js.map +1 -0
  22. package/lib/controls/dynamicForm/DynamicForm.d.ts +56 -5
  23. package/lib/controls/dynamicForm/DynamicForm.d.ts.map +1 -1
  24. package/lib/controls/dynamicForm/DynamicForm.js +966 -545
  25. package/lib/controls/dynamicForm/DynamicForm.js.map +1 -1
  26. package/lib/controls/dynamicForm/DynamicForm.module.css +2 -2
  27. package/lib/controls/dynamicForm/DynamicForm.module.scss.d.ts +5 -0
  28. package/lib/controls/dynamicForm/DynamicForm.module.scss.d.ts.map +1 -1
  29. package/lib/controls/dynamicForm/DynamicForm.module.scss.js +25 -20
  30. package/lib/controls/dynamicForm/DynamicForm.module.scss.js.map +1 -1
  31. package/lib/controls/dynamicForm/IDynamicFormProps.d.ts +23 -0
  32. package/lib/controls/dynamicForm/IDynamicFormProps.d.ts.map +1 -1
  33. package/lib/controls/dynamicForm/IDynamicFormState.d.ts +28 -0
  34. package/lib/controls/dynamicForm/IDynamicFormState.d.ts.map +1 -1
  35. package/lib/controls/dynamicForm/dynamicField/DynamicField.d.ts.map +1 -1
  36. package/lib/controls/dynamicForm/dynamicField/DynamicField.js +57 -42
  37. package/lib/controls/dynamicForm/dynamicField/DynamicField.js.map +1 -1
  38. package/lib/controls/dynamicForm/dynamicField/IDynamicFieldProps.d.ts +32 -11
  39. package/lib/controls/dynamicForm/dynamicField/IDynamicFieldProps.d.ts.map +1 -1
  40. package/lib/controls/fieldCollectionData/collectionDataItem/CollectionDataItem.js.map +1 -1
  41. package/lib/controls/webPartTitle/WebPartTitle.js +1 -1
  42. package/lib/controls/webPartTitle/WebPartTitle.js.map +1 -1
  43. package/lib/loc/bg-bg.js +3 -0
  44. package/lib/loc/bg-bg.js.map +1 -1
  45. package/lib/loc/ca-es.js +3 -0
  46. package/lib/loc/ca-es.js.map +1 -1
  47. package/lib/loc/da-dk.js +3 -0
  48. package/lib/loc/da-dk.js.map +1 -1
  49. package/lib/loc/de-de.js +3 -0
  50. package/lib/loc/de-de.js.map +1 -1
  51. package/lib/loc/el-gr.js +3 -0
  52. package/lib/loc/el-gr.js.map +1 -1
  53. package/lib/loc/en-us.js +3 -0
  54. package/lib/loc/en-us.js.map +1 -1
  55. package/lib/loc/es-es.js +3 -0
  56. package/lib/loc/es-es.js.map +1 -1
  57. package/lib/loc/et-ee.js +3 -0
  58. package/lib/loc/et-ee.js.map +1 -1
  59. package/lib/loc/eu-es.js +3 -0
  60. package/lib/loc/eu-es.js.map +1 -1
  61. package/lib/loc/fi-fi.js +3 -0
  62. package/lib/loc/fi-fi.js.map +1 -1
  63. package/lib/loc/fr-ca.js +3 -0
  64. package/lib/loc/fr-ca.js.map +1 -1
  65. package/lib/loc/fr-fr.js +3 -0
  66. package/lib/loc/fr-fr.js.map +1 -1
  67. package/lib/loc/it-it.js +3 -0
  68. package/lib/loc/it-it.js.map +1 -1
  69. package/lib/loc/ja-jp.js +3 -0
  70. package/lib/loc/ja-jp.js.map +1 -1
  71. package/lib/loc/lt-lt.js +3 -0
  72. package/lib/loc/lt-lt.js.map +1 -1
  73. package/lib/loc/lv-lv.js +3 -0
  74. package/lib/loc/lv-lv.js.map +1 -1
  75. package/lib/loc/nb-no.js +3 -0
  76. package/lib/loc/nb-no.js.map +1 -1
  77. package/lib/loc/nl-nl.js +3 -0
  78. package/lib/loc/nl-nl.js.map +1 -1
  79. package/lib/loc/pl-pl.js +3 -0
  80. package/lib/loc/pl-pl.js.map +1 -1
  81. package/lib/loc/pt-br.js +3 -0
  82. package/lib/loc/pt-br.js.map +1 -1
  83. package/lib/loc/pt-pt.js +3 -0
  84. package/lib/loc/pt-pt.js.map +1 -1
  85. package/lib/loc/ro-ro.js +3 -0
  86. package/lib/loc/ro-ro.js.map +1 -1
  87. package/lib/loc/ru-ru.js +3 -0
  88. package/lib/loc/ru-ru.js.map +1 -1
  89. package/lib/loc/sk-sk.js +3 -0
  90. package/lib/loc/sk-sk.js.map +1 -1
  91. package/lib/loc/sr-latn-rs.js +3 -0
  92. package/lib/loc/sr-latn-rs.js.map +1 -1
  93. package/lib/loc/sv-se.js +3 -0
  94. package/lib/loc/sv-se.js.map +1 -1
  95. package/lib/loc/tr-tr.js +3 -0
  96. package/lib/loc/tr-tr.js.map +1 -1
  97. package/lib/loc/vi-vn.js +3 -0
  98. package/lib/loc/vi-vn.js.map +1 -1
  99. package/lib/loc/zh-cn.js +3 -0
  100. package/lib/loc/zh-cn.js.map +1 -1
  101. package/lib/loc/zh-tw.js +3 -0
  102. package/lib/loc/zh-tw.js.map +1 -1
  103. package/lib/services/ISPService.d.ts +194 -0
  104. package/lib/services/ISPService.d.ts.map +1 -1
  105. package/lib/services/ISPService.js +13 -0
  106. package/lib/services/ISPService.js.map +1 -1
  107. package/lib/services/SPService.d.ts +10 -1
  108. package/lib/services/SPService.d.ts.map +1 -1
  109. package/lib/services/SPService.js +69 -0
  110. package/lib/services/SPService.js.map +1 -1
  111. package/lib/services/SPServiceMock.d.ts +3 -1
  112. package/lib/services/SPServiceMock.d.ts.map +1 -1
  113. package/lib/services/SPServiceMock.js +6 -0
  114. package/lib/services/SPServiceMock.js.map +1 -1
  115. package/package.json +1 -1
  116. package/release/manifests/45165954-80f9-44c1-9967-cd38ae92a33b.manifest.json +58 -3
  117. package/tests/utils/formulaevaluation.test.ts +248 -0
@@ -0,0 +1,612 @@
1
+ import { ArrayLiteralNode, Token, ValidFuncNames } from "./FormulaEvaluation.types";
2
+ var operatorTypes = ["+", "-", "*", "/", "==", "!=", "<>", ">", "<", ">=", "<=", "&&", "||", "%", "&", "|", "?", ":"];
3
+ /** Each token pattern matches a particular token type. The tokenizer looks for matches in this order. */
4
+ var patterns = [
5
+ [/^\[\$?[a-zA-Z_][a-zA-Z_0-9.]*\]/, "VARIABLE"],
6
+ [/^@[a-zA-Z_][a-zA-Z_0-9.]*/, "VARIABLE"],
7
+ [/^[0-9]+(?:\.[0-9]+)?/, "NUMBER"],
8
+ [/^"([^"]*)"/, "STRING"],
9
+ [/^'([^']*)'/, "STRING"],
10
+ [/^\[[^\]]*\]/, "ARRAY"],
11
+ [new RegExp("^(".concat(ValidFuncNames.join('|'), ")\\(")), "FUNCTION"],
12
+ [/^(true|false)/, "BOOLEAN"],
13
+ [/^\w+/, "WORD"],
14
+ [/^&&|^\|\||^==|^<>/, "OPERATOR"],
15
+ [/^[+\-*/<>=%!&|?:,()[\]]/, "OPERATOR"], // Operators and special characters
16
+ ];
17
+ var FormulaEvaluation = /** @class */ (function () {
18
+ function FormulaEvaluation(context, webUrlOverride) {
19
+ if (context) {
20
+ this._meEmail = context.pageContext.user.email;
21
+ }
22
+ this.webUrl = webUrlOverride || (context === null || context === void 0 ? void 0 : context.pageContext.web.absoluteUrl) || '';
23
+ }
24
+ /** Evaluates a formula expression and returns the result, with optional context object for variables */
25
+ FormulaEvaluation.prototype.evaluate = function (expression, context) {
26
+ if (context === void 0) { context = {}; }
27
+ context.me = this._meEmail;
28
+ context.today = new Date();
29
+ var tokens = this.tokenize(expression, context);
30
+ var postfix = this.shuntingYard(tokens);
31
+ var ast = this.buildAST(postfix);
32
+ return this.evaluateASTNode(ast, context);
33
+ };
34
+ /** Tokenizes an expression into a list of tokens (primatives, operators, variables, function names, arrays etc) */
35
+ FormulaEvaluation.prototype.tokenize = function (expression, context) {
36
+ if (context === void 0) { context = {}; }
37
+ var tokens = [];
38
+ var i = 0;
39
+ while (i < expression.length) {
40
+ var match = null;
41
+ // For each pattern, try to match it from the current position in the expression
42
+ for (var _i = 0, patterns_1 = patterns; _i < patterns_1.length; _i++) {
43
+ var _a = patterns_1[_i], pattern = _a[0], tokenType = _a[1];
44
+ var regexResult = pattern.exec(expression.slice(i));
45
+ if (regexResult) {
46
+ match = regexResult[1] || regexResult[0];
47
+ // Unary minus is a special case that we need to
48
+ // capture in order to process negative numbers, or
49
+ // expressions such as 5 + - 3
50
+ if (tokenType === "OPERATOR" && match === "-" && (tokens.length === 0 || tokens[tokens.length - 1].type === "OPERATOR")) {
51
+ tokens.push(new Token("UNARY_MINUS", match));
52
+ i += match.length + expression.slice(i).indexOf(match);
53
+ }
54
+ else if (
55
+ // String literals, surrounded by single or double quotes
56
+ tokenType === "STRING") {
57
+ tokens.push(new Token(tokenType, match));
58
+ i += match.length + 2;
59
+ }
60
+ else if (tokenType === "WORD") {
61
+ // We only match words if they are a valid variable name
62
+ if (context && context[match]) {
63
+ tokens.push(new Token("VARIABLE", match));
64
+ }
65
+ i += match.length;
66
+ }
67
+ else {
68
+ // Otherwise, just add the token to the list
69
+ tokens.push(new Token(tokenType, match));
70
+ // console.log(`Added token: ${JSON.stringify({tokenType: tokenType, value: match})}`);
71
+ i += match.length + expression.slice(i).indexOf(match);
72
+ if (tokenType === "FUNCTION")
73
+ i -= 1;
74
+ }
75
+ break;
76
+ }
77
+ }
78
+ if (!match) {
79
+ // If no patterns matched, move to the next character
80
+ // console.log(`No match found for character: ${expression[i]}`);
81
+ i++;
82
+ }
83
+ }
84
+ return tokens;
85
+ };
86
+ FormulaEvaluation.prototype.shuntingYard = function (tokens) {
87
+ /** Stores re-ordered tokens to be returned by this algorithm / method */
88
+ var output = [[]];
89
+ /** Stores tokens temporarily pushed to a stack to help with re-ordering */
90
+ var stack = [[]];
91
+ /** Keeps track of parenthesis depth, important for nested expressions and method signatures */
92
+ var parenDepth = 0;
93
+ for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {
94
+ var token = tokens_1[_i];
95
+ // Numbers, strings, booleans, words, variables, and arrays are added to the output
96
+ if (token.type === "NUMBER" || token.type === "STRING" || token.type === "BOOLEAN" || token.type === "WORD" || token.type === "VARIABLE" || token.type === "ARRAY") {
97
+ output[parenDepth].push(token);
98
+ // Functions are pushed to the stack
99
+ }
100
+ else if (token.type === "FUNCTION") {
101
+ stack[parenDepth].push(token);
102
+ }
103
+ else if (token.type === "OPERATOR" || token.type === "UNARY_MINUS") {
104
+ // Left parenthesis are pushed to the stack
105
+ if (token.value === "(") {
106
+ parenDepth++;
107
+ stack[parenDepth] = [];
108
+ output[parenDepth] = [];
109
+ stack[parenDepth].push(token);
110
+ }
111
+ else if (token.value === ")") {
112
+ // When Right parenthesis is found, items are popped from stack to output until left parenthesis is found
113
+ while (stack[parenDepth].length > 0 && stack[parenDepth][stack[parenDepth].length - 1].value !== "(") {
114
+ output[parenDepth].push(stack[parenDepth].pop());
115
+ }
116
+ stack[parenDepth].pop(); // pop the left parenthesis
117
+ // If the item on top of the stack is a function name, parens were part of method signature,
118
+ // pop it to the output
119
+ if (stack[parenDepth].length > 0 && stack[parenDepth][stack[parenDepth].length - 1].type === "FUNCTION") {
120
+ output[parenDepth].push(stack[parenDepth].pop());
121
+ }
122
+ // Combine outputs
123
+ output[parenDepth - 1] = output[parenDepth - 1].concat(output[parenDepth]);
124
+ parenDepth--;
125
+ }
126
+ else if (token.value === ",") {
127
+ // When comma is found, items are popped from stack to output until left parenthesis is found
128
+ while (stack[parenDepth].length > 0 && stack[parenDepth][stack[parenDepth].length - 1].value !== "(") {
129
+ output[parenDepth].push(stack[parenDepth].pop());
130
+ }
131
+ // Combine outputs
132
+ output[parenDepth - 1] = output[parenDepth - 1].concat(output[parenDepth]);
133
+ output[parenDepth] = [];
134
+ }
135
+ else if (token.value === "?") {
136
+ while (stack[parenDepth].length > 0 && stack[parenDepth][stack[parenDepth].length - 1].value !== "(") {
137
+ output[parenDepth].push(stack[parenDepth].pop());
138
+ }
139
+ stack[parenDepth].push(token);
140
+ }
141
+ else {
142
+ // When an operator is found, items are popped from stack to output until an operator with lower precedence is found
143
+ var currentTokenPrecedence = this.getPrecedence(token.value.toString());
144
+ while (stack[parenDepth].length > 0) {
145
+ var topStackIsOperator = stack[parenDepth][stack[parenDepth].length - 1].type === "OPERATOR" || stack[parenDepth][stack[parenDepth].length - 1].type === "UNARY_MINUS";
146
+ var topStackPrecedence = this.getPrecedence(stack[parenDepth][stack[parenDepth].length - 1].value.toString());
147
+ if (stack[parenDepth][stack[parenDepth].length - 1].value === "(")
148
+ break;
149
+ if (topStackIsOperator && (currentTokenPrecedence.associativity === "left" ?
150
+ topStackPrecedence.precedence <= currentTokenPrecedence.precedence :
151
+ topStackPrecedence.precedence < currentTokenPrecedence.precedence)) {
152
+ break;
153
+ }
154
+ output[parenDepth].push(stack[parenDepth].pop());
155
+ }
156
+ stack[parenDepth].push(token);
157
+ }
158
+ }
159
+ }
160
+ // When there are no more tokens to read, pop any remaining tokens from the stack to the output
161
+ while (stack[parenDepth].length > 0) {
162
+ output[parenDepth].push(stack[parenDepth].pop());
163
+ }
164
+ // Combine all outputs
165
+ var finalOutput = [];
166
+ for (var i = 0; i <= parenDepth; i++) {
167
+ finalOutput = finalOutput.concat(output[i]);
168
+ }
169
+ return finalOutput;
170
+ };
171
+ FormulaEvaluation.prototype.buildAST = function (postfixTokens) {
172
+ // Tokens are arranged on a stack/array of node objects
173
+ var stack = [];
174
+ for (var _i = 0, postfixTokens_1 = postfixTokens; _i < postfixTokens_1.length; _i++) {
175
+ var token = postfixTokens_1[_i];
176
+ if (token.type === "STRING" || token.type === "NUMBER" || token.type === "BOOLEAN" || token.type === "VARIABLE") {
177
+ // Strings, numbers, booleans, function names, and variable names are pushed directly to the stack
178
+ stack.push(token);
179
+ }
180
+ else if (token.type === "UNARY_MINUS") {
181
+ // Unary minus has a single operand, we discard the minus token and push an object representing a negative number
182
+ var operand = stack.pop();
183
+ var numericValue = parseFloat(operand.value);
184
+ stack.push({ type: operand.type, value: -numericValue });
185
+ }
186
+ else if (token.type === "OPERATOR") {
187
+ // Operators have two operands, we pop them from the stack and push an object representing the operation
188
+ if (operatorTypes.includes(token.value)) {
189
+ if (token.value === "?") {
190
+ // Ternary operator has three operands, and left and right operators should be top of stack
191
+ var colonOperator = stack.pop();
192
+ if (colonOperator.operands) {
193
+ var rightOperand = colonOperator.operands[1];
194
+ var leftOperand = colonOperator.operands[0];
195
+ var condition = stack.pop();
196
+ stack.push({ type: "FUNCTION", value: "ternary", operands: [condition, leftOperand, rightOperand] });
197
+ }
198
+ }
199
+ else {
200
+ var rightOperand = stack.pop();
201
+ var leftOperand = stack.pop();
202
+ stack.push({ type: token.type, value: token.value, operands: [leftOperand, rightOperand] });
203
+ }
204
+ }
205
+ }
206
+ else if (token.type === "ARRAY") {
207
+ // At this stage, arrays are represented by a single token with a string value ie "[1,2,3]"
208
+ var arrayString = token.value;
209
+ // Remove leading and trailing square brackets
210
+ arrayString = arrayString.slice(1, -1);
211
+ // Split the string by commas and trim whitespace
212
+ var arrayElements = arrayString.split(',').map(function (element) { return element.trim(); });
213
+ stack.push(new ArrayLiteralNode(arrayElements));
214
+ }
215
+ else if (token.type === "FUNCTION") {
216
+ var arity = this._getFnArity(token.value);
217
+ var operands = [];
218
+ while (operands.length < arity) {
219
+ operands.push(stack.pop());
220
+ }
221
+ stack.push({ type: token.type, value: token.value, operands: operands.reverse() });
222
+ }
223
+ }
224
+ // At this stage, the stack should contain a single node representing the root of the AST
225
+ return stack[0];
226
+ };
227
+ FormulaEvaluation.prototype.evaluateASTNode = function (node, context) {
228
+ var _this = this;
229
+ var _a, _b;
230
+ if (context === void 0) { context = {}; }
231
+ if (!node)
232
+ return 0;
233
+ // If node is an object with a type and value property, it is an ASTNode and should be evaluated recursively
234
+ // otherwise it may actually be an object value that we need to return (as is the case with custom formatting)
235
+ if (typeof node === "object" && !(Object.prototype.hasOwnProperty.call(node, 'type') && Object.prototype.hasOwnProperty.call(node, 'value'))) {
236
+ return node;
237
+ }
238
+ // Each element in an ArrayLiteralNode is evaluated recursively
239
+ if (node instanceof ArrayLiteralNode) {
240
+ var evaluatedElements = node.elements.map(function (element) { return _this.evaluateASTNode(element, context); });
241
+ return evaluatedElements;
242
+ }
243
+ // If node is an actual array, it has likely already been transformed above
244
+ if (Array.isArray(node)) {
245
+ return node;
246
+ }
247
+ // Number and string literals are returned as-is
248
+ if (typeof node === "number" || typeof node === "string") {
249
+ return node;
250
+ }
251
+ // Nodes with a type of NUMBER are parsed to a number
252
+ if (node.type === "NUMBER") {
253
+ var numVal = Number(node.value);
254
+ if (isNaN(numVal)) {
255
+ throw new Error("Invalid number: ".concat(node.value));
256
+ }
257
+ return numVal;
258
+ }
259
+ // Nodes with a type of BOOLEAN are parsed to a boolean
260
+ if (node.type === "BOOLEAN") {
261
+ return node.value === "true" ? 1 : 0;
262
+ }
263
+ // WORD and STRING nodes are returned as-is
264
+ if (node.type === "WORD" || node.type === "STRING") {
265
+ return (_a = node.value) === null || _a === void 0 ? void 0 : _a.toString();
266
+ }
267
+ // VARIABLE nodes are looked up in the context object and returned
268
+ if (node.type === "VARIABLE") {
269
+ return (_b = context[node.value.replace(/^[[@]?\$?([a-zA-Z_][a-zA-Z_0-9.]*)\]?/, '$1')]) !== null && _b !== void 0 ? _b : null;
270
+ }
271
+ // OPERATOR nodes have their OPERANDS evaluated recursively, with the operator applied to the results
272
+ if (node.type === "OPERATOR" && operatorTypes.includes(node.value) && node.operands) {
273
+ var leftValue = this.evaluateASTNode(node.operands[0], context);
274
+ var rightValue = this.evaluateASTNode(node.operands[1], context);
275
+ // These operators are valid for both string and number operands
276
+ switch (node.value) {
277
+ case "==": return leftValue === rightValue ? 1 : 0;
278
+ case "!=": return leftValue !== rightValue ? 1 : 0;
279
+ case "<>": return leftValue !== rightValue ? 1 : 0;
280
+ case ">": return leftValue > rightValue ? 1 : 0;
281
+ case "<": return leftValue < rightValue ? 1 : 0;
282
+ case ">=": return leftValue >= rightValue ? 1 : 0;
283
+ case "<=": return leftValue <= rightValue ? 1 : 0;
284
+ case "&&": return (leftValue !== 0 && rightValue !== 0) ? 1 : 0;
285
+ case "||": return (leftValue !== 0 || rightValue !== 0) ? 1 : 0;
286
+ }
287
+ if (typeof leftValue === "string" || typeof rightValue === "string") {
288
+ // Concatenate strings if either operand is a string
289
+ if (node.value === "+") {
290
+ var concatString = (leftValue || "").toString() + (rightValue || "").toString();
291
+ return concatString;
292
+ }
293
+ else {
294
+ // Throw an error if the operator is not valid for strings
295
+ throw new Error("Invalid operation ".concat(node.value, " with string operand."));
296
+ }
297
+ }
298
+ // Both operands will be numbers at this point
299
+ switch (node.value) {
300
+ case "+": return leftValue + rightValue;
301
+ case "-": return leftValue - rightValue;
302
+ case "*": return leftValue * rightValue;
303
+ case "/": return leftValue / rightValue;
304
+ case "%": return leftValue % rightValue;
305
+ case "&": return leftValue & rightValue;
306
+ case "|": return leftValue | rightValue;
307
+ }
308
+ }
309
+ // Evaluation of function nodes is handled here:
310
+ if (node.type === "FUNCTION" && node.operands) {
311
+ // Evaluate operands recursively - casting to any here to allow for any type of operand
312
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
313
+ var funcArgs = node.operands.map(function (arg) { return _this.evaluateASTNode(arg, context); });
314
+ switch (node.value) {
315
+ /**
316
+ * Logical Functions
317
+ */
318
+ case 'if':
319
+ case 'ternary': {
320
+ var condition = funcArgs[0];
321
+ if (condition !== 0) {
322
+ return funcArgs[1];
323
+ }
324
+ else {
325
+ return funcArgs[2];
326
+ }
327
+ }
328
+ /**
329
+ * Math Functions
330
+ */
331
+ case "Number":
332
+ return Number(funcArgs[0]);
333
+ case "abs":
334
+ return Math.abs(funcArgs[0]);
335
+ case 'floor':
336
+ return Math.floor(funcArgs[0]);
337
+ case 'ceiling':
338
+ return Math.ceil(funcArgs[0]);
339
+ case 'pow': {
340
+ var basePow = funcArgs[0];
341
+ var exponentPow = funcArgs[1];
342
+ return Math.pow(basePow, exponentPow);
343
+ }
344
+ case 'cos': {
345
+ var angleCos = funcArgs[0];
346
+ return Math.cos(angleCos);
347
+ }
348
+ case 'sin': {
349
+ var angleSin = funcArgs[0];
350
+ return Math.sin(angleSin);
351
+ }
352
+ /**
353
+ * String Functions
354
+ */
355
+ case "toString":
356
+ return funcArgs[0].toString();
357
+ case 'lastIndexOf': {
358
+ var mainStrLastIndexOf = funcArgs[0];
359
+ var searchStrLastIndexOf = funcArgs[1];
360
+ return mainStrLastIndexOf.lastIndexOf(searchStrLastIndexOf);
361
+ }
362
+ case 'join': {
363
+ var arrayToJoin = node.operands[0].evaluate();
364
+ var separator = funcArgs[1];
365
+ return arrayToJoin.join(separator);
366
+ }
367
+ case 'substring': {
368
+ var mainStrSubstring = funcArgs[0] || '';
369
+ var start = funcArgs[1] || 0;
370
+ var end = funcArgs[2] || mainStrSubstring.length;
371
+ return mainStrSubstring.substr(start, end);
372
+ }
373
+ case 'toUpperCase': {
374
+ var strToUpper = funcArgs[0] || '';
375
+ return strToUpper.toUpperCase();
376
+ }
377
+ case 'toLowerCase': {
378
+ var strToLower = funcArgs[0] || '';
379
+ return strToLower.toLowerCase();
380
+ }
381
+ case 'startsWith': {
382
+ var mainStrStartsWith = funcArgs[0];
383
+ var searchStrStartsWith = funcArgs[1];
384
+ return mainStrStartsWith.startsWith(searchStrStartsWith);
385
+ }
386
+ case 'endsWith': {
387
+ var mainStrEndsWith = funcArgs[0];
388
+ var searchStrEndsWith = funcArgs[1];
389
+ return mainStrEndsWith.endsWith(searchStrEndsWith);
390
+ }
391
+ case 'replace': {
392
+ var mainStrReplace = funcArgs[0];
393
+ var searchStrReplace = funcArgs[1];
394
+ var replaceStr = funcArgs[2];
395
+ return mainStrReplace.replace(searchStrReplace, replaceStr);
396
+ }
397
+ case 'replaceAll': {
398
+ var mainStrReplaceAll = funcArgs[0];
399
+ var searchStrReplaceAll = funcArgs[1];
400
+ var replaceAllStr = funcArgs[2];
401
+ // Using a global regex to simulate replaceAll behavior
402
+ var globalRegex = new RegExp(searchStrReplaceAll, 'g');
403
+ return mainStrReplaceAll.replace(globalRegex, replaceAllStr);
404
+ }
405
+ case 'padStart': {
406
+ var mainStrPadStart = funcArgs[0];
407
+ var lengthPadStart = funcArgs[1];
408
+ var padStrStart = funcArgs[2];
409
+ return mainStrPadStart.padStart(lengthPadStart, padStrStart);
410
+ }
411
+ case 'padEnd': {
412
+ var mainStrPadEnd = funcArgs[0];
413
+ var lengthPadEnd = funcArgs[1];
414
+ var padStrEnd = funcArgs[2];
415
+ return mainStrPadEnd.padEnd(lengthPadEnd, padStrEnd);
416
+ }
417
+ case 'split': {
418
+ var mainStrSplit = funcArgs[0];
419
+ var delimiterSplit = funcArgs[1];
420
+ return mainStrSplit.split(delimiterSplit);
421
+ }
422
+ /**
423
+ * Date Functions
424
+ */
425
+ case 'toDate': {
426
+ var dateStr = funcArgs[0];
427
+ return new Date(dateStr);
428
+ }
429
+ case 'toDateString': {
430
+ var dateToDateString = new Date(funcArgs[0]);
431
+ return dateToDateString.toDateString();
432
+ }
433
+ case "toLocaleString": {
434
+ var dateToLocaleString = new Date(funcArgs[0]);
435
+ return dateToLocaleString.toLocaleString();
436
+ }
437
+ case "toLocaleDateString": {
438
+ var dateToLocaleDateString = new Date(funcArgs[0]);
439
+ return dateToLocaleDateString.toLocaleDateString();
440
+ }
441
+ case "toLocaleTimeString": {
442
+ var dateToLocaleTimeString = new Date(funcArgs[0]);
443
+ return dateToLocaleTimeString.toLocaleTimeString();
444
+ }
445
+ case 'getDate': {
446
+ var dateStrGetDate = funcArgs[0];
447
+ return new Date(dateStrGetDate).getDate();
448
+ }
449
+ case 'getMonth': {
450
+ var dateStrGetMonth = funcArgs[0];
451
+ return new Date(dateStrGetMonth).getMonth();
452
+ }
453
+ case 'getYear': {
454
+ var dateStrGetYear = funcArgs[0];
455
+ return new Date(dateStrGetYear).getFullYear();
456
+ }
457
+ case 'addDays': {
458
+ var dateStrAddDays = funcArgs[0];
459
+ var daysToAdd = funcArgs[1];
460
+ var dateAddDays = new Date(dateStrAddDays);
461
+ dateAddDays.setDate(dateAddDays.getDate() + daysToAdd);
462
+ return dateAddDays;
463
+ }
464
+ case 'addMinutes': {
465
+ var dateStrAddMinutes = funcArgs[0];
466
+ var minutesToAdd = funcArgs[1];
467
+ var dateAddMinutes = new Date(dateStrAddMinutes);
468
+ dateAddMinutes.setMinutes(dateAddMinutes.getMinutes() + minutesToAdd);
469
+ return dateAddMinutes;
470
+ }
471
+ /**
472
+ * SharePoint Functions
473
+ */
474
+ case 'getUserImage': {
475
+ var userEmail = funcArgs[0];
476
+ var userImage = this._getUserImageUrl(userEmail);
477
+ return userImage;
478
+ }
479
+ case 'getThumbnailImage': {
480
+ var imageUrl = funcArgs[0];
481
+ var thumbnailImage = this._getSharePointThumbnailUrl(imageUrl);
482
+ return thumbnailImage;
483
+ }
484
+ /**
485
+ * Array Functions
486
+ */
487
+ case "indexOf": {
488
+ var array = funcArgs[0];
489
+ var operand = funcArgs[1];
490
+ if (Array.isArray(array)) {
491
+ return array.indexOf(operand);
492
+ }
493
+ else if (typeof array === 'string') {
494
+ return array.indexOf(operand);
495
+ }
496
+ return -1; // Default to -1 if not found.
497
+ }
498
+ case "length": {
499
+ var array = funcArgs[0];
500
+ if (array instanceof ArrayLiteralNode) {
501
+ // treat as array literal
502
+ var value = array.evaluate();
503
+ return value.length;
504
+ }
505
+ else {
506
+ // treat as char Array
507
+ var value = this.evaluateASTNode(array, context);
508
+ return value.toString().length;
509
+ }
510
+ }
511
+ case 'appendTo': {
512
+ var mainArrayAppend = node.operands[0].evaluate();
513
+ var elementToAppend = funcArgs[1];
514
+ mainArrayAppend.push(elementToAppend);
515
+ return mainArrayAppend;
516
+ }
517
+ case 'removeFrom': {
518
+ var mainArrayRemove = node.operands[0].evaluate();
519
+ var elementToRemove = funcArgs[1];
520
+ var indexToRemove = mainArrayRemove.indexOf(elementToRemove);
521
+ if (indexToRemove !== -1) {
522
+ mainArrayRemove.splice(indexToRemove, 1);
523
+ }
524
+ return mainArrayRemove;
525
+ }
526
+ case 'loopIndex':
527
+ return 0; // This should ideally return the current loop index in context but is not implemented yet
528
+ }
529
+ }
530
+ return 0; // Default fallback
531
+ };
532
+ FormulaEvaluation.prototype.validate = function (expression) {
533
+ var validFunctionRegex = "(".concat(ValidFuncNames.map(function (fn) { return "".concat(fn, "\\("); }).join('|'), ")");
534
+ var pattern = new RegExp("^(?:@\\w+|\\[\\$?[\\w+.]\\]|\\d+(?:\\.\\d+)?|\"(?:[^\"]*)\"|'(?:[^']*)'|".concat(validFunctionRegex, "|[+\\-*/<>=%!&|?:,()\\[\\]]|\\?|:)"));
535
+ /* Explanation -
536
+ /@\\w+/ matches variables specified by the form @variableName.
537
+ /\\[\\$?\\w+\\/] matches variables specified by the forms [variableName] and [$variableName].
538
+ /\\d+(?:\\.\\d+)?/ matches numbers, including decimal numbers.
539
+ /"(?:[^"]*)"/ and /'(?:[^']*)'/ match string literals in double and single quotes, respectively.
540
+ /${validFunctionRegex}/ matches valid function names.
541
+ /\\?/ matches the ternary operator ?.
542
+ /:/ matches the colon :.
543
+ /[+\\-*/ //<>=%!&|?:,()\\[\\]]/ matches operators.
544
+ return pattern.test(expression);
545
+ };
546
+ /** Returns a precedence value for a token or operator */
547
+ FormulaEvaluation.prototype.getPrecedence = function (op) {
548
+ var _a;
549
+ // If the operator is a valid function name, return a high precedence value
550
+ if (ValidFuncNames.indexOf(op) >= 0)
551
+ return { precedence: 7, associativity: "left" };
552
+ // Otherwise, return the precedence value for the operator
553
+ var precedence = {
554
+ "+": { precedence: 4, associativity: "left" },
555
+ "-": { precedence: 4, associativity: "left" },
556
+ "*": { precedence: 5, associativity: "left" },
557
+ "/": { precedence: 5, associativity: "left" },
558
+ "%": { precedence: 5, associativity: "left" },
559
+ ">": { precedence: 3, associativity: "left" },
560
+ "<": { precedence: 3, associativity: "left" },
561
+ "==": { precedence: 3, associativity: "left" },
562
+ "!=": { precedence: 3, associativity: "left" },
563
+ "<>": { precedence: 3, associativity: "left" },
564
+ ">=": { precedence: 3, associativity: "left" },
565
+ "<=": { precedence: 3, associativity: "left" },
566
+ "&&": { precedence: 2, associativity: "left" },
567
+ "||": { precedence: 1, associativity: "left" },
568
+ "?": { precedence: 6, associativity: "left" },
569
+ ":": { precedence: 6, associativity: "left" },
570
+ ",": { precedence: 0, associativity: "left" },
571
+ };
572
+ return (_a = precedence[op]) !== null && _a !== void 0 ? _a : { precedence: 8, associativity: "left" };
573
+ };
574
+ FormulaEvaluation.prototype._getFnArity = function (fnName) {
575
+ switch (fnName) {
576
+ case "if":
577
+ case "substring":
578
+ case "replace":
579
+ case "replaceAll":
580
+ case "padStart":
581
+ case "padEnd":
582
+ case "ternary":
583
+ return 3;
584
+ case "pow":
585
+ case "indexOf":
586
+ case "lastIndexOf":
587
+ case "join":
588
+ case "startsWith":
589
+ case "endsWith":
590
+ case "split":
591
+ case "addDays":
592
+ case "addMinutes":
593
+ case "appendTo":
594
+ case "removeFrom":
595
+ return 2;
596
+ default:
597
+ return 1;
598
+ }
599
+ };
600
+ FormulaEvaluation.prototype._getSharePointThumbnailUrl = function (imageUrl) {
601
+ var filename = imageUrl.split('/').pop();
602
+ var url = imageUrl.replace(filename, '');
603
+ var _a = filename.split('.'), filenameNoExt = _a[0], ext = _a[1];
604
+ return "".concat(url, "_t/").concat(filenameNoExt, "_").concat(ext, ".jpg");
605
+ };
606
+ FormulaEvaluation.prototype._getUserImageUrl = function (userEmail) {
607
+ return "".concat(this.webUrl, "/_layouts/15/userphoto.aspx?size=L&accountname=").concat(userEmail);
608
+ };
609
+ return FormulaEvaluation;
610
+ }());
611
+ export { FormulaEvaluation };
612
+ //# sourceMappingURL=FormulaEvaluation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormulaEvaluation.js","sourceRoot":"","sources":["../../../src/common/utilities/FormulaEvaluation.ts"],"names":[],"mappings":"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"}