@pega/cosmos-react-condition-builder 9.0.0-build.7.4 → 9.0.0-build.8.0
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/evaluator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/evaluator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,SAAS,EAET,KAAK,EAEN,MAAM,2BAA2B,CAAC;AAOnC,KAAK,aAAa,GACd,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,IAAI,GACJ,SAAS,GACT,IAAI,GACJ,eAAe,GACf,aAAa,EAAE,CAAC;AACpB,KAAK,eAAe,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC;AA0bxD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAoBT"}
|
|
@@ -16,87 +16,157 @@ const isNumberArray = (value) => {
|
|
|
16
16
|
const isDateInputParam = (value) => {
|
|
17
17
|
return typeof value === 'string' || typeof value === 'number' || value instanceof Date;
|
|
18
18
|
};
|
|
19
|
+
const evaluateUndefined = (rhsValue, comparator, lhsValue) => {
|
|
20
|
+
const positiveComparators = [
|
|
21
|
+
'EQ',
|
|
22
|
+
'STARTS_WITH',
|
|
23
|
+
'ENDS_WITH',
|
|
24
|
+
'IS_FALSE',
|
|
25
|
+
'IS_TRUE',
|
|
26
|
+
'CONTAINS',
|
|
27
|
+
'GT',
|
|
28
|
+
'GTE',
|
|
29
|
+
'LT',
|
|
30
|
+
'LTE',
|
|
31
|
+
'IS_NULL',
|
|
32
|
+
'IN'
|
|
33
|
+
];
|
|
34
|
+
const negativeComparators = [
|
|
35
|
+
'NEQ',
|
|
36
|
+
'NOT_ENDS_WITH',
|
|
37
|
+
'NOT_STARTS_WITH',
|
|
38
|
+
'IS_NOT_NULL',
|
|
39
|
+
'NOT_IN'
|
|
40
|
+
];
|
|
41
|
+
if (rhsValue === undefined && lhsValue === undefined) {
|
|
42
|
+
return !!['EQ', 'GTE', 'LTE'].includes(comparator);
|
|
43
|
+
}
|
|
44
|
+
if ((rhsValue === undefined && lhsValue !== undefined) ||
|
|
45
|
+
(rhsValue !== undefined && lhsValue === undefined)) {
|
|
46
|
+
if (positiveComparators.includes(comparator))
|
|
47
|
+
return false;
|
|
48
|
+
if (negativeComparators.includes(comparator))
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
};
|
|
53
|
+
const isBoolLike = (val) => val === null ||
|
|
54
|
+
val === undefined ||
|
|
55
|
+
typeof val === 'boolean' ||
|
|
56
|
+
val === 'true' ||
|
|
57
|
+
val === 'false';
|
|
58
|
+
const normalizeBool = (val) => {
|
|
59
|
+
if (val === true || val === 'true')
|
|
60
|
+
return true;
|
|
61
|
+
if (val === false || val === 'false')
|
|
62
|
+
return false;
|
|
63
|
+
};
|
|
19
64
|
const QUOTE = '"';
|
|
20
65
|
/** Evaluates leaf conditions with BOOLEAN fields */
|
|
21
66
|
function evaluateBoolCondition(lhsValue, comparator, rhsValue // undefined for IS_TRUE/IS_FALSE comparators
|
|
22
67
|
) {
|
|
68
|
+
if (!isBoolLike(lhsValue)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (rhsValue && !isBoolLike(rhsValue)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
if ([rhsValue, lhsValue].includes(undefined) && !['IS_TRUE', 'IS_FALSE'].includes(comparator)) {
|
|
75
|
+
return evaluateUndefined(rhsValue, comparator, lhsValue);
|
|
76
|
+
}
|
|
77
|
+
const lhs = normalizeBool(lhsValue);
|
|
78
|
+
const rhs = normalizeBool(rhsValue);
|
|
23
79
|
switch (comparator) {
|
|
24
80
|
case 'IS_TRUE':
|
|
25
|
-
return
|
|
81
|
+
return lhs === true;
|
|
26
82
|
case 'IS_FALSE':
|
|
27
|
-
return
|
|
83
|
+
return lhs === false;
|
|
28
84
|
case 'EQ':
|
|
29
|
-
return
|
|
85
|
+
return lhs === rhs;
|
|
30
86
|
case 'NEQ':
|
|
31
|
-
return
|
|
87
|
+
return lhs !== rhs;
|
|
32
88
|
default:
|
|
33
89
|
return false; // Not needed
|
|
34
90
|
}
|
|
35
91
|
}
|
|
36
92
|
/** Evaluates leaf conditions with TEXT fields */
|
|
37
93
|
function evaluateTextCondition(lhsValue, comparator, rhsValue) {
|
|
38
|
-
lhsValue
|
|
39
|
-
|
|
40
|
-
|
|
94
|
+
if ((lhsValue === undefined && (isStringArray(rhsValue) || typeof rhsValue === 'string')) ||
|
|
95
|
+
(typeof lhsValue === 'string' && rhsValue === undefined) ||
|
|
96
|
+
(lhsValue === undefined && rhsValue === undefined)) {
|
|
97
|
+
return evaluateUndefined(rhsValue, comparator, lhsValue);
|
|
98
|
+
}
|
|
99
|
+
if ((typeof rhsValue !== 'string' && !isStringArray(rhsValue)) || typeof lhsValue !== 'string') {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
const normalizedLhs = lhsValue.toLowerCase();
|
|
103
|
+
if (isStringArray(rhsValue)) {
|
|
41
104
|
const lhsInRhs = rhsValue
|
|
42
105
|
.map(v => {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
v = v.slice(1, -1);
|
|
106
|
+
let val = v.toLowerCase().trim();
|
|
107
|
+
if (val.startsWith(QUOTE) && val.endsWith(QUOTE)) {
|
|
108
|
+
val = val.slice(1, -1);
|
|
47
109
|
}
|
|
48
|
-
return
|
|
110
|
+
return val;
|
|
49
111
|
})
|
|
50
|
-
.includes(
|
|
51
|
-
return comparator === 'IN' ? lhsInRhs : !lhsInRhs;
|
|
112
|
+
.includes(normalizedLhs);
|
|
113
|
+
return comparator === 'IN' ? lhsInRhs : !lhsInRhs;
|
|
52
114
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if (rhsValue.startsWith(QUOTE) && rhsValue.endsWith(QUOTE)) {
|
|
57
|
-
rhsValue = rhsValue.slice(1, -1);
|
|
115
|
+
let normalizedRhs = rhsValue.toLowerCase().trim();
|
|
116
|
+
if (normalizedRhs.startsWith(QUOTE) && normalizedRhs.endsWith(QUOTE)) {
|
|
117
|
+
normalizedRhs = normalizedRhs.slice(1, -1);
|
|
58
118
|
}
|
|
59
119
|
switch (comparator) {
|
|
60
120
|
case 'EQ':
|
|
61
|
-
return
|
|
121
|
+
return normalizedLhs === normalizedRhs;
|
|
62
122
|
case 'NEQ':
|
|
63
|
-
return
|
|
123
|
+
return normalizedLhs !== normalizedRhs;
|
|
64
124
|
case 'STARTS_WITH':
|
|
65
|
-
return
|
|
125
|
+
return normalizedLhs.startsWith(normalizedRhs);
|
|
66
126
|
case 'NOT_STARTS_WITH':
|
|
67
|
-
return !
|
|
127
|
+
return !normalizedLhs.startsWith(normalizedRhs);
|
|
68
128
|
case 'ENDS_WITH':
|
|
69
|
-
return
|
|
129
|
+
return normalizedLhs.endsWith(normalizedRhs);
|
|
70
130
|
case 'NOT_ENDS_WITH':
|
|
71
|
-
return !
|
|
131
|
+
return !normalizedLhs.endsWith(normalizedRhs);
|
|
72
132
|
case 'CONTAINS':
|
|
73
|
-
return
|
|
133
|
+
return normalizedLhs.includes(normalizedRhs);
|
|
74
134
|
case 'NOT_CONTAINS':
|
|
75
|
-
return !
|
|
135
|
+
return !normalizedLhs.includes(normalizedRhs);
|
|
76
136
|
default:
|
|
77
|
-
return false;
|
|
137
|
+
return false;
|
|
78
138
|
}
|
|
79
139
|
}
|
|
80
140
|
/** Evaluates leaf conditions with DECIMAL/INTEGER fields */
|
|
81
141
|
function evaluateNumericCondition(lhsValue, comparator, rhsValue) {
|
|
142
|
+
if ((lhsValue === undefined && (isNumberArray(rhsValue) || typeof rhsValue === 'number')) ||
|
|
143
|
+
(typeof lhsValue === 'number' && rhsValue === undefined) ||
|
|
144
|
+
(lhsValue === undefined && rhsValue === undefined)) {
|
|
145
|
+
return evaluateUndefined(rhsValue, comparator, lhsValue);
|
|
146
|
+
}
|
|
147
|
+
if (typeof lhsValue !== 'number' || (typeof rhsValue !== 'number' && !isNumberArray(rhsValue))) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
82
150
|
// For IN/NOT_IN comparators, the rhsValue is of type `number[]`
|
|
83
|
-
if (
|
|
84
|
-
const lhsInRhs = rhsValue.includes(lhsValue);
|
|
151
|
+
if (isNumberArray(rhsValue)) {
|
|
152
|
+
const lhsInRhs = typeof lhsValue === 'number' ? rhsValue.includes(lhsValue) : false;
|
|
85
153
|
return comparator === 'IN' ? lhsInRhs : !lhsInRhs; // Handling IN/NOT_IN comparators
|
|
86
154
|
}
|
|
155
|
+
const lhsNumber = typeof lhsValue === 'number' ? lhsValue : NaN;
|
|
156
|
+
const rhsNumber = typeof rhsValue === 'number' ? rhsValue : NaN;
|
|
87
157
|
switch (comparator) {
|
|
88
158
|
case 'EQ':
|
|
89
159
|
return lhsValue === rhsValue;
|
|
90
160
|
case 'NEQ':
|
|
91
161
|
return lhsValue !== rhsValue;
|
|
92
162
|
case 'GT':
|
|
93
|
-
return
|
|
163
|
+
return lhsNumber > rhsNumber;
|
|
94
164
|
case 'GTE':
|
|
95
|
-
return
|
|
165
|
+
return lhsNumber >= rhsNumber;
|
|
96
166
|
case 'LT':
|
|
97
|
-
return
|
|
167
|
+
return lhsNumber < rhsNumber;
|
|
98
168
|
case 'LTE':
|
|
99
|
-
return
|
|
169
|
+
return lhsNumber <= rhsNumber;
|
|
100
170
|
default:
|
|
101
171
|
return false; // Not needed
|
|
102
172
|
}
|
|
@@ -240,21 +310,12 @@ function evaluateLeafCondition(leaf, data, fields, delimiter) {
|
|
|
240
310
|
}
|
|
241
311
|
switch (field.type) {
|
|
242
312
|
case 'BOOLEAN':
|
|
243
|
-
return
|
|
244
|
-
(rhsValue === undefined || typeof rhsValue === 'boolean')
|
|
245
|
-
? evaluateBoolCondition(lhsValue, comparator, rhsValue)
|
|
246
|
-
: false;
|
|
313
|
+
return evaluateBoolCondition(lhsValue, comparator, rhsValue);
|
|
247
314
|
case 'TEXT':
|
|
248
|
-
return
|
|
249
|
-
(typeof rhsValue === 'string' || isStringArray(rhsValue))
|
|
250
|
-
? evaluateTextCondition(lhsValue, comparator, rhsValue)
|
|
251
|
-
: false;
|
|
315
|
+
return evaluateTextCondition(lhsValue, comparator, rhsValue);
|
|
252
316
|
case 'DECIMAL':
|
|
253
317
|
case 'INTEGER':
|
|
254
|
-
return
|
|
255
|
-
(typeof rhsValue === 'number' || isNumberArray(rhsValue))
|
|
256
|
-
? evaluateNumericCondition(lhsValue, comparator, rhsValue)
|
|
257
|
-
: false;
|
|
318
|
+
return evaluateNumericCondition(lhsValue, comparator, rhsValue);
|
|
258
319
|
case 'TIME_ONLY':
|
|
259
320
|
if (typeof lhsValue === 'string' && typeof rhsValue === 'string')
|
|
260
321
|
return evaluateNumericCondition(convertTimeValueToMs(lhsValue), comparator, convertTimeValueToMs(rhsValue));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/evaluator.ts"],"names":[],"mappings":"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","sourcesContent":["// cspell:words YYYYQQ, YYYYMM, YYYYMMDD, YYYYMMDDHH\nimport { deepGet, hasProp } from '@pega/cosmos-react-core';\n\nimport type {\n Condition,\n LeafCondition,\n Field,\n RhsWithDateFunction\n} from '../ConditionBuilder.types';\n\nimport { getItem } from './utils';\nimport type { Comparator, FieldType } from './types';\nimport transformComplexCondition from './transformer';\nimport { convertTimeValueToMs } from './time-utils';\n\ntype EvaluatorData =\n | string\n | number\n | boolean\n | bigint\n | null\n | undefined\n | Date\n | EvaluateDataObj\n | EvaluatorData[];\ntype EvaluateDataObj = { [key: string]: EvaluatorData };\n\nconst isStringArray = (value: EvaluatorData): value is string[] => {\n if (!Array.isArray(value)) return false;\n return value.every(item => typeof item === 'string');\n};\n\nconst isNumberArray = (value: EvaluatorData): value is number[] => {\n if (!Array.isArray(value)) return false;\n return value.every(item => typeof item === 'number');\n};\n\nconst isDateInputParam = (value: EvaluatorData): value is string | number | Date => {\n return typeof value === 'string' || typeof value === 'number' || value instanceof Date;\n};\n\nconst QUOTE = '\"';\n/** Evaluates leaf conditions with BOOLEAN fields */\nfunction evaluateBoolCondition(\n lhsValue: boolean,\n comparator: Comparator,\n rhsValue?: boolean // undefined for IS_TRUE/IS_FALSE comparators\n): boolean {\n switch (comparator) {\n case 'IS_TRUE':\n return lhsValue === true;\n case 'IS_FALSE':\n return lhsValue === false;\n case 'EQ':\n return lhsValue === rhsValue;\n case 'NEQ':\n return lhsValue !== rhsValue;\n default:\n return false; // Not needed\n }\n}\n\n/** Evaluates leaf conditions with TEXT fields */\nfunction evaluateTextCondition(\n lhsValue: string,\n comparator: Comparator,\n rhsValue: string | string[]\n): boolean {\n lhsValue = lhsValue.toLowerCase(); // Converting to lowerCase to perform case-insensitive comparisons\n\n // For IN/NOT_IN comparators, the rhsValue is of type `string[]`\n if (Array.isArray(rhsValue)) {\n const lhsInRhs = rhsValue\n .map(v => {\n v = v.toLowerCase().trim();\n // Handle text in quotes\n if (v.startsWith(QUOTE) && v.endsWith(QUOTE)) {\n v = v.slice(1, -1);\n }\n return v;\n })\n .includes(lhsValue); // Converting to lowerCase to perform case-insensitive comparisons\n return comparator === 'IN' ? lhsInRhs : !lhsInRhs; // Handling IN/NOT_IN comparators\n }\n // Converting to lowerCase to perform case-insensitive comparisons\n rhsValue = rhsValue.toLowerCase().trim();\n\n // Handle if rhs is in quotes\n if (rhsValue.startsWith(QUOTE) && rhsValue.endsWith(QUOTE)) {\n rhsValue = rhsValue.slice(1, -1);\n }\n switch (comparator) {\n case 'EQ':\n return lhsValue === rhsValue;\n case 'NEQ':\n return lhsValue !== rhsValue;\n case 'STARTS_WITH':\n return lhsValue.startsWith(rhsValue);\n case 'NOT_STARTS_WITH':\n return !lhsValue.startsWith(rhsValue);\n case 'ENDS_WITH':\n return lhsValue.endsWith(rhsValue);\n case 'NOT_ENDS_WITH':\n return !lhsValue.endsWith(rhsValue);\n case 'CONTAINS':\n return lhsValue.includes(rhsValue);\n case 'NOT_CONTAINS':\n return !lhsValue.includes(rhsValue);\n default:\n return false; // Not needed\n }\n}\n\n/** Evaluates leaf conditions with DECIMAL/INTEGER fields */\nfunction evaluateNumericCondition(\n lhsValue: number,\n comparator: Comparator,\n rhsValue: number | number[]\n): boolean {\n // For IN/NOT_IN comparators, the rhsValue is of type `number[]`\n if (Array.isArray(rhsValue)) {\n const lhsInRhs: boolean = rhsValue.includes(lhsValue);\n return comparator === 'IN' ? lhsInRhs : !lhsInRhs; // Handling IN/NOT_IN comparators\n }\n\n switch (comparator) {\n case 'EQ':\n return lhsValue === rhsValue;\n case 'NEQ':\n return lhsValue !== rhsValue;\n case 'GT':\n return lhsValue > rhsValue;\n case 'GTE':\n return lhsValue >= rhsValue;\n case 'LT':\n return lhsValue < rhsValue;\n case 'LTE':\n return lhsValue <= rhsValue;\n default:\n return false; // Not needed\n }\n}\n\n/** Returns different date parts in local time from the given date object */\nfunction getDateParts(date: Date): {\n YYYY: string;\n QQ: string;\n MM: string;\n DD: string;\n HH: string;\n mm: string;\n ss: string;\n} {\n return {\n YYYY: date.getFullYear().toString().padStart(4, '0'),\n QQ: (3 * Math.floor(date.getMonth() / 3) + 1).toString().padStart(2, '0'), // MM value for the quarter's starting month\n MM: (date.getMonth() + 1).toString().padStart(2, '0'),\n DD: date.getDate().toString().padStart(2, '0'),\n HH: date.getHours().toString().padStart(2, '0'),\n mm: date.getMinutes().toString().padStart(2, '0'),\n ss: date.getSeconds().toString().padStart(2, '0')\n };\n}\n\n/** Returns the value of a given field from data obj */\nfunction resolveValueFromData(\n path: string,\n data: EvaluateDataObj,\n delimiter?: string\n): EvaluatorData {\n if (!delimiter || !path.includes(delimiter)) {\n return data[path];\n }\n\n return deepGet(data, path.split(delimiter));\n}\n\n/** Evaluates leaf conditions with Date-functions */\nfunction evaluateDateFuncCondition(\n lhsValue: string,\n fieldType: FieldType,\n comparator: Comparator,\n rhs: RhsWithDateFunction\n): boolean {\n if (fieldType === 'DATE_ONLY') lhsValue += 'T00:00:00'; // `T00:00:00` is needed for the `Date()` constructor to treat it as local (not UTC)\n const lhsDateObj = new Date(lhsValue);\n const {\n YYYY: lhsYYYY,\n QQ: lhsQQ,\n MM: lhsMM,\n DD: lhsDD,\n HH: lhsHH,\n mm: lhsMinute,\n ss: lhsSecond\n } = getDateParts(lhsDateObj);\n\n // Determine a numeric representation of the values for the given date function\n let lhsNumVal = 0;\n let rhsNumVal = 0;\n switch (rhs.dateFunction) {\n case 'YEARS':\n // Using YYYY as a number\n lhsNumVal = Number(lhsYYYY);\n rhsNumVal = Number((rhs.value as string).slice(0, 4));\n break;\n case 'QUARTERS':\n // Using YYYYQQ as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsQQ}`);\n rhsNumVal = Number((rhs.value as string).replace(/-/g, '').slice(0, 6));\n break;\n case 'MONTHS':\n // Using YYYYMM as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsMM}`);\n rhsNumVal = Number((rhs.value as string).replace(/-/g, '').slice(0, 6));\n break;\n case 'WEEKS': {\n // Identify the start of week for the given LHS\n const lhsDayStart = new Date(`${lhsYYYY}-${lhsMM}-${lhsDD}T00:00:00`); // `T00:00:00` is needed for the `Date()` constructor to treat it as local (not UTC)\n const lhsDay = lhsDayStart.getDay() || 7; // 'getDay()' returns 0 for Sundays\n const lhsWeekStart = new Date(lhsDayStart.getTime() - (lhsDay - 1) * 24 * 60 * 60 * 1000);\n const { YYYY: weekStartYYYY, MM: weekStartMM, DD: weekStartDD } = getDateParts(lhsWeekStart);\n\n // Using YYYYMMDD of the week-start-day as a number\n lhsNumVal = Number(`${weekStartYYYY}${weekStartMM}${weekStartDD}`);\n rhsNumVal = Number((rhs.value as string).replace(/-/g, ''));\n break;\n }\n case 'DAYS':\n // Using YYYYMMDD as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsMM}${lhsDD}`);\n rhsNumVal = Number((rhs.value as string).replace(/-/g, ''));\n break;\n case 'HOURS':\n // Using YYYYMMDDHH as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsMM}${lhsDD}${lhsHH}`);\n rhsNumVal = Number((rhs.value as string).replace(/-|T/g, '').slice(0, 10));\n break;\n case 'MINUTES':\n // Using YYYYMMDDHH as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsMM}${lhsDD}${lhsHH}${lhsMinute}`);\n rhsNumVal = Number((rhs.value as string).replace(/-|T|:/g, '').slice(0, 12));\n break;\n case 'SECONDS':\n // Using YYYYMMDDHH as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsMM}${lhsDD}${lhsHH}${lhsMinute}${lhsSecond}`);\n rhsNumVal = Number((rhs.value as string).replace(/-|T|:/g, '').slice(0, 14));\n break;\n case 'HOURS_OF_DAY':\n lhsNumVal = Number(lhsHH);\n rhsNumVal = Number(rhs.value);\n break;\n case 'MONTHS_OF_YEAR':\n lhsNumVal = Number(lhsMM);\n rhsNumVal = rhs.value as number;\n break;\n case 'DAYS_OF_MONTH':\n lhsNumVal = Number(lhsDD);\n rhsNumVal = rhs.value as number;\n break;\n case 'DAYS_OF_WEEK':\n lhsNumVal = lhsDateObj.getDay() || 7; // 'getDay()' returns 0 for Sundays\n rhsNumVal = rhs.value as number;\n break;\n default: // Not needed\n }\n\n // Compare the numeric representations\n return evaluateNumericCondition(lhsNumVal, comparator, rhsNumVal);\n}\n\n/** Evaluates a leaf node in a condition tree for the given data document */\nfunction evaluateLeafCondition(\n leaf: LeafCondition,\n data: EvaluateDataObj,\n fields: Field[],\n delimiter?: string\n): boolean {\n // For safety against any malformed nodes or unexpected types/formats in data-values\n try {\n const { lhs, comparator, rhs } = leaf;\n\n // Determine LHS and RHS values\n const lhsValue = resolveValueFromData(lhs.field, data, delimiter);\n let rhsValue: EvaluatorData;\n if (rhs) {\n if (hasProp(rhs, 'field')) {\n rhsValue = resolveValueFromData(rhs.field, data, delimiter); // If RHS is another field\n } else if (hasProp(rhs, 'value')) {\n rhsValue = rhs.value; // If RHS is a single value\n } else if (hasProp(rhs, 'relativeDate')) {\n rhsValue = true; // TODO: When we transform relative dates to LT/GT statements, we won't need this.\n } else if (hasProp(rhs, 'parameterId')) {\n rhsValue = resolveValueFromData(rhs.parameterId, data, delimiter); // If RHS is of type PARAMETER\n } else if (hasProp(rhs, 'values')) {\n rhsValue = rhs.values; // If RHS is a list of values\n } else {\n rhsValue = { start: rhs.start, end: rhs.end }; // If RHS is a definition of range\n }\n }\n\n // Handle NULL comparators common to all field-types\n const isNullValue = lhsValue === null || lhsValue === undefined;\n if (comparator === 'IS_NULL') {\n return isNullValue;\n }\n if (comparator === 'IS_NOT_NULL') {\n return !isNullValue;\n }\n\n // For all other comparators, evaluate separately by field-type\n const field = getItem(fields, lhs.field);\n if (field === undefined || !hasProp(field, 'type')) {\n return false; // If the corresponding field is not found in the input fields\n }\n switch (field.type) {\n case 'BOOLEAN':\n return typeof lhsValue === 'boolean' &&\n (rhsValue === undefined || typeof rhsValue === 'boolean')\n ? evaluateBoolCondition(lhsValue, comparator, rhsValue)\n : false;\n case 'TEXT':\n return typeof lhsValue === 'string' &&\n (typeof rhsValue === 'string' || isStringArray(rhsValue))\n ? evaluateTextCondition(lhsValue, comparator, rhsValue)\n : false;\n case 'DECIMAL':\n case 'INTEGER':\n return typeof lhsValue === 'number' &&\n (typeof rhsValue === 'number' || isNumberArray(rhsValue))\n ? evaluateNumericCondition(lhsValue, comparator, rhsValue)\n : false;\n case 'TIME_ONLY':\n if (typeof lhsValue === 'string' && typeof rhsValue === 'string')\n return evaluateNumericCondition(\n convertTimeValueToMs(lhsValue),\n comparator,\n convertTimeValueToMs(rhsValue)\n );\n if (typeof lhsValue === 'string' && typeof rhsValue === 'number')\n return evaluateNumericCondition(convertTimeValueToMs(lhsValue), comparator, rhsValue);\n if (typeof lhsValue === 'number' && typeof rhsValue === 'string')\n return evaluateNumericCondition(lhsValue, comparator, convertTimeValueToMs(rhsValue));\n if (typeof lhsValue === 'number' && typeof rhsValue === 'number')\n return evaluateNumericCondition(lhsValue, comparator, rhsValue);\n return false;\n case 'DATE_TIME':\n case 'DATE_ONLY': {\n if (rhs && hasProp(rhs, 'dateFunction')) {\n return typeof lhsValue === 'string'\n ? evaluateDateFuncCondition(lhsValue, field.type, comparator, rhs)\n : false;\n }\n\n if (rhs && hasProp(rhs, 'relativeDate')) {\n return true; // TODO: When we transform relative dates to LT/GT statements, we won't need this.\n }\n\n // Both the values are expected to be in an ISO-8601 format\n if (isDateInputParam(lhsValue) && isDateInputParam(rhsValue)) {\n const lhsDate = new Date(lhsValue);\n const rhsDate = rhsValue instanceof Date ? rhsValue.toISOString() : rhsValue.toString();\n const [, timePart] = rhsDate.split('T');\n if (timePart) {\n const [, , seconds] = timePart.split(':');\n if (!seconds) {\n lhsDate.setSeconds(0, 0);\n } else if (!seconds.includes('.')) {\n lhsDate.setMilliseconds(0);\n }\n }\n\n return evaluateNumericCondition(\n lhsDate.getTime(),\n comparator,\n new Date(rhsValue).getTime()\n );\n }\n return false;\n }\n default:\n return false; // Not needed\n }\n } catch {\n return false;\n }\n}\n\n/**\n * Evaluates a condition tree for the given data document\n * NOTE: The output is nondeterministic if:\n * - any of the nodes in the input Condition are in an unexpected format (invalid keys, comparators etc.)\n * - any null/undefined values are encountered in the input data, unless they are used with an IS_NULL/IS_NOT_NULL comparator\n * - stringified values are encountered for BOOLEAN/DECIMAL/INTEGER fields\n * - non-ISO strings are passed for DATE_TIME/DATE_ONLY fields\n * - TIME_ONLY data values are not passed as `number of milliseconds since the start of day`\n */\nexport default function evaluateCondition(\n condition: Condition,\n data: EvaluateDataObj,\n fields: Field[],\n delimiter?: string\n): boolean {\n // For safety against any malformed trees\n try {\n // Update relative date conditions to be LT/GT date range conditions\n const updatedCondition: Condition = transformComplexCondition(condition, fields);\n if (hasProp(updatedCondition, 'AND')) {\n // Return true if all the child nodes are true\n return updatedCondition.AND.every(child => evaluateCondition(child, data, fields, delimiter));\n }\n if (hasProp(updatedCondition, 'OR')) {\n // Return true if any one of the child nodes is true\n return updatedCondition.OR.some(child => evaluateCondition(child, data, fields, delimiter));\n }\n if (hasProp(updatedCondition, 'NOT')) {\n return !evaluateCondition(updatedCondition.NOT, data, fields, delimiter);\n }\n return evaluateLeafCondition(updatedCondition.condition, data, fields, delimiter);\n } catch {\n return false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/evaluator.ts"],"names":[],"mappings":"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","sourcesContent":["// cspell:words YYYYQQ, YYYYMM, YYYYMMDD, YYYYMMDDHH\n\nimport { deepGet, hasProp } from '@pega/cosmos-react-core';\n\nimport type {\n Condition,\n LeafCondition,\n Field,\n RhsWithDateFunction\n} from '../ConditionBuilder.types';\n\nimport { getItem } from './utils';\nimport type { Comparator, FieldType } from './types';\nimport transformComplexCondition from './transformer';\nimport { convertTimeValueToMs } from './time-utils';\n\ntype EvaluatorData =\n | string\n | number\n | boolean\n | bigint\n | null\n | undefined\n | Date\n | EvaluateDataObj\n | EvaluatorData[];\ntype EvaluateDataObj = { [key: string]: EvaluatorData };\n\nconst isStringArray = (value: EvaluatorData): value is string[] => {\n if (!Array.isArray(value)) return false;\n return value.every(item => typeof item === 'string');\n};\n\nconst isNumberArray = (value: EvaluatorData): value is number[] => {\n if (!Array.isArray(value)) return false;\n return value.every(item => typeof item === 'number');\n};\n\nconst isDateInputParam = (value: EvaluatorData): value is string | number | Date => {\n return typeof value === 'string' || typeof value === 'number' || value instanceof Date;\n};\n\nconst evaluateUndefined = (\n rhsValue: EvaluatorData,\n comparator: Comparator,\n lhsValue: EvaluatorData\n): boolean => {\n const positiveComparators: Comparator[] = [\n 'EQ',\n 'STARTS_WITH',\n 'ENDS_WITH',\n 'IS_FALSE',\n 'IS_TRUE',\n 'CONTAINS',\n 'GT',\n 'GTE',\n 'LT',\n 'LTE',\n 'IS_NULL',\n 'IN'\n ];\n const negativeComparators: Comparator[] = [\n 'NEQ',\n 'NOT_ENDS_WITH',\n 'NOT_STARTS_WITH',\n 'IS_NOT_NULL',\n 'NOT_IN'\n ];\n\n if (rhsValue === undefined && lhsValue === undefined) {\n return !!['EQ', 'GTE', 'LTE'].includes(comparator);\n }\n\n if (\n (rhsValue === undefined && lhsValue !== undefined) ||\n (rhsValue !== undefined && lhsValue === undefined)\n ) {\n if (positiveComparators.includes(comparator)) return false;\n if (negativeComparators.includes(comparator)) return true;\n }\n return false;\n};\n\nconst isBoolLike = (val: EvaluatorData): boolean =>\n val === null ||\n val === undefined ||\n typeof val === 'boolean' ||\n val === 'true' ||\n val === 'false';\n\nconst normalizeBool = (val: EvaluatorData) => {\n if (val === true || val === 'true') return true;\n if (val === false || val === 'false') return false;\n};\n\nconst QUOTE = '\"';\n/** Evaluates leaf conditions with BOOLEAN fields */\nfunction evaluateBoolCondition(\n lhsValue: EvaluatorData,\n comparator: Comparator,\n rhsValue?: EvaluatorData // undefined for IS_TRUE/IS_FALSE comparators\n): boolean {\n if (!isBoolLike(lhsValue)) {\n return false;\n }\n if (rhsValue && !isBoolLike(rhsValue)) {\n return false;\n }\n\n if ([rhsValue, lhsValue].includes(undefined) && !['IS_TRUE', 'IS_FALSE'].includes(comparator)) {\n return evaluateUndefined(rhsValue, comparator, lhsValue);\n }\n\n const lhs = normalizeBool(lhsValue);\n const rhs = normalizeBool(rhsValue);\n\n switch (comparator) {\n case 'IS_TRUE':\n return lhs === true;\n case 'IS_FALSE':\n return lhs === false;\n case 'EQ':\n return lhs === rhs;\n case 'NEQ':\n return lhs !== rhs;\n default:\n return false; // Not needed\n }\n}\n\n/** Evaluates leaf conditions with TEXT fields */\nfunction evaluateTextCondition(\n lhsValue: EvaluatorData,\n comparator: Comparator,\n rhsValue: EvaluatorData\n): boolean {\n if (\n (lhsValue === undefined && (isStringArray(rhsValue) || typeof rhsValue === 'string')) ||\n (typeof lhsValue === 'string' && rhsValue === undefined) ||\n (lhsValue === undefined && rhsValue === undefined)\n ) {\n return evaluateUndefined(rhsValue, comparator, lhsValue);\n }\n\n if ((typeof rhsValue !== 'string' && !isStringArray(rhsValue)) || typeof lhsValue !== 'string') {\n return false;\n }\n const normalizedLhs = lhsValue.toLowerCase();\n\n if (isStringArray(rhsValue)) {\n const lhsInRhs = rhsValue\n .map(v => {\n let val = v.toLowerCase().trim();\n if (val.startsWith(QUOTE) && val.endsWith(QUOTE)) {\n val = val.slice(1, -1);\n }\n return val;\n })\n .includes(normalizedLhs);\n return comparator === 'IN' ? lhsInRhs : !lhsInRhs;\n }\n\n let normalizedRhs = rhsValue.toLowerCase().trim();\n if (normalizedRhs.startsWith(QUOTE) && normalizedRhs.endsWith(QUOTE)) {\n normalizedRhs = normalizedRhs.slice(1, -1);\n }\n\n switch (comparator) {\n case 'EQ':\n return normalizedLhs === normalizedRhs;\n case 'NEQ':\n return normalizedLhs !== normalizedRhs;\n case 'STARTS_WITH':\n return normalizedLhs.startsWith(normalizedRhs);\n case 'NOT_STARTS_WITH':\n return !normalizedLhs.startsWith(normalizedRhs);\n case 'ENDS_WITH':\n return normalizedLhs.endsWith(normalizedRhs);\n case 'NOT_ENDS_WITH':\n return !normalizedLhs.endsWith(normalizedRhs);\n case 'CONTAINS':\n return normalizedLhs.includes(normalizedRhs);\n case 'NOT_CONTAINS':\n return !normalizedLhs.includes(normalizedRhs);\n default:\n return false;\n }\n}\n\n/** Evaluates leaf conditions with DECIMAL/INTEGER fields */\nfunction evaluateNumericCondition(\n lhsValue: EvaluatorData,\n comparator: Comparator,\n rhsValue: EvaluatorData\n): boolean {\n if (\n (lhsValue === undefined && (isNumberArray(rhsValue) || typeof rhsValue === 'number')) ||\n (typeof lhsValue === 'number' && rhsValue === undefined) ||\n (lhsValue === undefined && rhsValue === undefined)\n ) {\n return evaluateUndefined(rhsValue, comparator, lhsValue);\n }\n\n if (typeof lhsValue !== 'number' || (typeof rhsValue !== 'number' && !isNumberArray(rhsValue))) {\n return false;\n }\n // For IN/NOT_IN comparators, the rhsValue is of type `number[]`\n if (isNumberArray(rhsValue)) {\n const lhsInRhs: boolean = typeof lhsValue === 'number' ? rhsValue.includes(lhsValue) : false;\n return comparator === 'IN' ? lhsInRhs : !lhsInRhs; // Handling IN/NOT_IN comparators\n }\n\n const lhsNumber = typeof lhsValue === 'number' ? lhsValue : NaN;\n const rhsNumber = typeof rhsValue === 'number' ? rhsValue : NaN;\n\n switch (comparator) {\n case 'EQ':\n return lhsValue === rhsValue;\n case 'NEQ':\n return lhsValue !== rhsValue;\n case 'GT':\n return lhsNumber > rhsNumber;\n case 'GTE':\n return lhsNumber >= rhsNumber;\n case 'LT':\n return lhsNumber < rhsNumber;\n case 'LTE':\n return lhsNumber <= rhsNumber;\n default:\n return false; // Not needed\n }\n}\n\n/** Returns different date parts in local time from the given date object */\nfunction getDateParts(date: Date): {\n YYYY: string;\n QQ: string;\n MM: string;\n DD: string;\n HH: string;\n mm: string;\n ss: string;\n} {\n return {\n YYYY: date.getFullYear().toString().padStart(4, '0'),\n QQ: (3 * Math.floor(date.getMonth() / 3) + 1).toString().padStart(2, '0'), // MM value for the quarter's starting month\n MM: (date.getMonth() + 1).toString().padStart(2, '0'),\n DD: date.getDate().toString().padStart(2, '0'),\n HH: date.getHours().toString().padStart(2, '0'),\n mm: date.getMinutes().toString().padStart(2, '0'),\n ss: date.getSeconds().toString().padStart(2, '0')\n };\n}\n\n/** Returns the value of a given field from data obj */\nfunction resolveValueFromData(\n path: string,\n data: EvaluateDataObj,\n delimiter?: string\n): EvaluatorData {\n if (!delimiter || !path.includes(delimiter)) {\n return data[path];\n }\n\n return deepGet(data, path.split(delimiter));\n}\n\n/** Evaluates leaf conditions with Date-functions */\nfunction evaluateDateFuncCondition(\n lhsValue: string,\n fieldType: FieldType,\n comparator: Comparator,\n rhs: RhsWithDateFunction\n): boolean {\n if (fieldType === 'DATE_ONLY') lhsValue += 'T00:00:00'; // `T00:00:00` is needed for the `Date()` constructor to treat it as local (not UTC)\n const lhsDateObj = new Date(lhsValue);\n const {\n YYYY: lhsYYYY,\n QQ: lhsQQ,\n MM: lhsMM,\n DD: lhsDD,\n HH: lhsHH,\n mm: lhsMinute,\n ss: lhsSecond\n } = getDateParts(lhsDateObj);\n\n // Determine a numeric representation of the values for the given date function\n let lhsNumVal = 0;\n let rhsNumVal = 0;\n switch (rhs.dateFunction) {\n case 'YEARS':\n // Using YYYY as a number\n lhsNumVal = Number(lhsYYYY);\n rhsNumVal = Number((rhs.value as string).slice(0, 4));\n break;\n case 'QUARTERS':\n // Using YYYYQQ as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsQQ}`);\n rhsNumVal = Number((rhs.value as string).replace(/-/g, '').slice(0, 6));\n break;\n case 'MONTHS':\n // Using YYYYMM as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsMM}`);\n rhsNumVal = Number((rhs.value as string).replace(/-/g, '').slice(0, 6));\n break;\n case 'WEEKS': {\n // Identify the start of week for the given LHS\n const lhsDayStart = new Date(`${lhsYYYY}-${lhsMM}-${lhsDD}T00:00:00`); // `T00:00:00` is needed for the `Date()` constructor to treat it as local (not UTC)\n const lhsDay = lhsDayStart.getDay() || 7; // 'getDay()' returns 0 for Sundays\n const lhsWeekStart = new Date(lhsDayStart.getTime() - (lhsDay - 1) * 24 * 60 * 60 * 1000);\n const { YYYY: weekStartYYYY, MM: weekStartMM, DD: weekStartDD } = getDateParts(lhsWeekStart);\n\n // Using YYYYMMDD of the week-start-day as a number\n lhsNumVal = Number(`${weekStartYYYY}${weekStartMM}${weekStartDD}`);\n rhsNumVal = Number((rhs.value as string).replace(/-/g, ''));\n break;\n }\n case 'DAYS':\n // Using YYYYMMDD as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsMM}${lhsDD}`);\n rhsNumVal = Number((rhs.value as string).replace(/-/g, ''));\n break;\n case 'HOURS':\n // Using YYYYMMDDHH as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsMM}${lhsDD}${lhsHH}`);\n rhsNumVal = Number((rhs.value as string).replace(/-|T/g, '').slice(0, 10));\n break;\n case 'MINUTES':\n // Using YYYYMMDDHH as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsMM}${lhsDD}${lhsHH}${lhsMinute}`);\n rhsNumVal = Number((rhs.value as string).replace(/-|T|:/g, '').slice(0, 12));\n break;\n case 'SECONDS':\n // Using YYYYMMDDHH as a number\n lhsNumVal = Number(`${lhsYYYY}${lhsMM}${lhsDD}${lhsHH}${lhsMinute}${lhsSecond}`);\n rhsNumVal = Number((rhs.value as string).replace(/-|T|:/g, '').slice(0, 14));\n break;\n case 'HOURS_OF_DAY':\n lhsNumVal = Number(lhsHH);\n rhsNumVal = Number(rhs.value);\n break;\n case 'MONTHS_OF_YEAR':\n lhsNumVal = Number(lhsMM);\n rhsNumVal = rhs.value as number;\n break;\n case 'DAYS_OF_MONTH':\n lhsNumVal = Number(lhsDD);\n rhsNumVal = rhs.value as number;\n break;\n case 'DAYS_OF_WEEK':\n lhsNumVal = lhsDateObj.getDay() || 7; // 'getDay()' returns 0 for Sundays\n rhsNumVal = rhs.value as number;\n break;\n default: // Not needed\n }\n\n // Compare the numeric representations\n return evaluateNumericCondition(lhsNumVal, comparator, rhsNumVal);\n}\n\n/** Evaluates a leaf node in a condition tree for the given data document */\nfunction evaluateLeafCondition(\n leaf: LeafCondition,\n data: EvaluateDataObj,\n fields: Field[],\n delimiter?: string\n): boolean {\n // For safety against any malformed nodes or unexpected types/formats in data-values\n try {\n const { lhs, comparator, rhs } = leaf;\n\n // Determine LHS and RHS values\n const lhsValue = resolveValueFromData(lhs.field, data, delimiter);\n let rhsValue: EvaluatorData;\n if (rhs) {\n if (hasProp(rhs, 'field')) {\n rhsValue = resolveValueFromData(rhs.field, data, delimiter); // If RHS is another field\n } else if (hasProp(rhs, 'value')) {\n rhsValue = rhs.value; // If RHS is a single value\n } else if (hasProp(rhs, 'relativeDate')) {\n rhsValue = true; // TODO: When we transform relative dates to LT/GT statements, we won't need this.\n } else if (hasProp(rhs, 'parameterId')) {\n rhsValue = resolveValueFromData(rhs.parameterId, data, delimiter); // If RHS is of type PARAMETER\n } else if (hasProp(rhs, 'values')) {\n rhsValue = rhs.values; // If RHS is a list of values\n } else {\n rhsValue = { start: rhs.start, end: rhs.end }; // If RHS is a definition of range\n }\n }\n\n // Handle NULL comparators common to all field-types\n const isNullValue = lhsValue === null || lhsValue === undefined;\n if (comparator === 'IS_NULL') {\n return isNullValue;\n }\n if (comparator === 'IS_NOT_NULL') {\n return !isNullValue;\n }\n\n // For all other comparators, evaluate separately by field-type\n const field = getItem(fields, lhs.field);\n if (field === undefined || !hasProp(field, 'type')) {\n return false; // If the corresponding field is not found in the input fields\n }\n switch (field.type) {\n case 'BOOLEAN':\n return evaluateBoolCondition(lhsValue, comparator, rhsValue);\n case 'TEXT':\n return evaluateTextCondition(lhsValue, comparator, rhsValue);\n case 'DECIMAL':\n case 'INTEGER':\n return evaluateNumericCondition(lhsValue, comparator, rhsValue);\n case 'TIME_ONLY':\n if (typeof lhsValue === 'string' && typeof rhsValue === 'string')\n return evaluateNumericCondition(\n convertTimeValueToMs(lhsValue),\n comparator,\n convertTimeValueToMs(rhsValue)\n );\n if (typeof lhsValue === 'string' && typeof rhsValue === 'number')\n return evaluateNumericCondition(convertTimeValueToMs(lhsValue), comparator, rhsValue);\n if (typeof lhsValue === 'number' && typeof rhsValue === 'string')\n return evaluateNumericCondition(lhsValue, comparator, convertTimeValueToMs(rhsValue));\n if (typeof lhsValue === 'number' && typeof rhsValue === 'number')\n return evaluateNumericCondition(lhsValue, comparator, rhsValue);\n return false;\n case 'DATE_TIME':\n case 'DATE_ONLY': {\n if (rhs && hasProp(rhs, 'dateFunction')) {\n return typeof lhsValue === 'string'\n ? evaluateDateFuncCondition(lhsValue, field.type, comparator, rhs)\n : false;\n }\n\n if (rhs && hasProp(rhs, 'relativeDate')) {\n return true; // TODO: When we transform relative dates to LT/GT statements, we won't need this.\n }\n\n // Both the values are expected to be in an ISO-8601 format\n if (isDateInputParam(lhsValue) && isDateInputParam(rhsValue)) {\n const lhsDate = new Date(lhsValue);\n const rhsDate = rhsValue instanceof Date ? rhsValue.toISOString() : rhsValue.toString();\n const [, timePart] = rhsDate.split('T');\n if (timePart) {\n const [, , seconds] = timePart.split(':');\n if (!seconds) {\n lhsDate.setSeconds(0, 0);\n } else if (!seconds.includes('.')) {\n lhsDate.setMilliseconds(0);\n }\n }\n\n return evaluateNumericCondition(\n lhsDate.getTime(),\n comparator,\n new Date(rhsValue).getTime()\n );\n }\n return false;\n }\n default:\n return false; // Not needed\n }\n } catch {\n return false;\n }\n}\n\n/**\n * Evaluates a condition tree for the given data document\n * NOTE: The output is nondeterministic if:\n * - any of the nodes in the input Condition are in an unexpected format (invalid keys, comparators etc.)\n * - any null/undefined values are encountered in the input data, unless they are used with an IS_NULL/IS_NOT_NULL comparator\n * - stringified values are encountered for BOOLEAN/DECIMAL/INTEGER fields\n * - non-ISO strings are passed for DATE_TIME/DATE_ONLY fields\n * - TIME_ONLY data values are not passed as `number of milliseconds since the start of day`\n */\nexport default function evaluateCondition(\n condition: Condition,\n data: EvaluateDataObj,\n fields: Field[],\n delimiter?: string\n): boolean {\n // For safety against any malformed trees\n try {\n // Update relative date conditions to be LT/GT date range conditions\n const updatedCondition: Condition = transformComplexCondition(condition, fields);\n if (hasProp(updatedCondition, 'AND')) {\n // Return true if all the child nodes are true\n return updatedCondition.AND.every(child => evaluateCondition(child, data, fields, delimiter));\n }\n if (hasProp(updatedCondition, 'OR')) {\n // Return true if any one of the child nodes is true\n return updatedCondition.OR.some(child => evaluateCondition(child, data, fields, delimiter));\n }\n if (hasProp(updatedCondition, 'NOT')) {\n return !evaluateCondition(updatedCondition.NOT, data, fields, delimiter);\n }\n return evaluateLeafCondition(updatedCondition.condition, data, fields, delimiter);\n } catch {\n return false;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pega/cosmos-react-condition-builder",
|
|
3
|
-
"version": "9.0.0-build.
|
|
3
|
+
"version": "9.0.0-build.8.0",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"author": "Pegasystems",
|
|
6
6
|
"sideEffects": [
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"build": "tsc -b tsconfig.build.json"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@pega/cosmos-react-core": "9.0.0-build.
|
|
20
|
+
"@pega/cosmos-react-core": "9.0.0-build.8.0",
|
|
21
21
|
"@types/react": "^17.0.62 || ^18.3.3",
|
|
22
22
|
"@types/react-dom": "^17.0.20 || ^18.3.0",
|
|
23
23
|
"@types/styled-components": "^5.1.26",
|