@pnp/spfx-controls-react 3.17.0-beta.7003036 → 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.
- package/lib/common/SPEntities.d.ts +5 -0
- package/lib/common/SPEntities.d.ts.map +1 -1
- package/lib/common/telemetry/version.js +1 -1
- package/lib/common/utilities/CustomFormatting.d.ts +31 -0
- package/lib/common/utilities/CustomFormatting.d.ts.map +1 -0
- package/lib/common/utilities/CustomFormatting.js +160 -0
- package/lib/common/utilities/CustomFormatting.js.map +1 -0
- package/lib/common/utilities/FormulaEvaluation.d.ts +21 -0
- package/lib/common/utilities/FormulaEvaluation.d.ts.map +1 -0
- package/lib/common/utilities/FormulaEvaluation.js +612 -0
- package/lib/common/utilities/FormulaEvaluation.js.map +1 -0
- package/lib/common/utilities/FormulaEvaluation.types.d.ts +23 -0
- package/lib/common/utilities/FormulaEvaluation.types.d.ts.map +1 -0
- package/lib/common/utilities/FormulaEvaluation.types.js +80 -0
- package/lib/common/utilities/FormulaEvaluation.types.js.map +1 -0
- package/lib/common/utilities/ICustomFormatting.d.ts +27 -0
- package/lib/common/utilities/ICustomFormatting.d.ts.map +1 -0
- package/lib/common/utilities/ICustomFormatting.js +2 -0
- package/lib/common/utilities/ICustomFormatting.js.map +1 -0
- package/lib/controls/dynamicForm/DynamicForm.d.ts +53 -5
- package/lib/controls/dynamicForm/DynamicForm.d.ts.map +1 -1
- package/lib/controls/dynamicForm/DynamicForm.js +828 -536
- package/lib/controls/dynamicForm/DynamicForm.js.map +1 -1
- package/lib/controls/dynamicForm/DynamicForm.module.css +2 -2
- package/lib/controls/dynamicForm/DynamicForm.module.scss.d.ts +4 -0
- package/lib/controls/dynamicForm/DynamicForm.module.scss.d.ts.map +1 -1
- package/lib/controls/dynamicForm/DynamicForm.module.scss.js +25 -21
- package/lib/controls/dynamicForm/DynamicForm.module.scss.js.map +1 -1
- package/lib/controls/dynamicForm/IDynamicFormProps.d.ts +12 -0
- package/lib/controls/dynamicForm/IDynamicFormProps.d.ts.map +1 -1
- package/lib/controls/dynamicForm/IDynamicFormState.d.ts +25 -0
- package/lib/controls/dynamicForm/IDynamicFormState.d.ts.map +1 -1
- package/lib/controls/dynamicForm/dynamicField/DynamicField.d.ts.map +1 -1
- package/lib/controls/dynamicForm/dynamicField/DynamicField.js +57 -42
- package/lib/controls/dynamicForm/dynamicField/DynamicField.js.map +1 -1
- package/lib/controls/dynamicForm/dynamicField/IDynamicFieldProps.d.ts +32 -11
- package/lib/controls/dynamicForm/dynamicField/IDynamicFieldProps.d.ts.map +1 -1
- package/lib/controls/fieldCollectionData/collectionDataItem/CollectionDataItem.js.map +1 -1
- package/lib/controls/webPartTitle/WebPartTitle.js +1 -1
- package/lib/controls/webPartTitle/WebPartTitle.js.map +1 -1
- package/lib/services/ISPService.d.ts +194 -0
- package/lib/services/ISPService.d.ts.map +1 -1
- package/lib/services/ISPService.js +13 -0
- package/lib/services/ISPService.js.map +1 -1
- package/lib/services/SPService.d.ts +10 -1
- package/lib/services/SPService.d.ts.map +1 -1
- package/lib/services/SPService.js +69 -0
- package/lib/services/SPService.js.map +1 -1
- package/lib/services/SPServiceMock.d.ts +3 -1
- package/lib/services/SPServiceMock.d.ts.map +1 -1
- package/lib/services/SPServiceMock.js +6 -0
- package/lib/services/SPServiceMock.js.map +1 -1
- package/package.json +1 -1
- package/release/manifests/45165954-80f9-44c1-9967-cd38ae92a33b.manifest.json +58 -3
- 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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"}
|