@piserve-tech/form-submission 1.3.272 → 1.3.273
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.
|
@@ -77,49 +77,67 @@ export class WhenClauseService {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
evaluateCondition(answer, operator, value) {
|
|
80
|
-
|
|
80
|
+
// treat null/undefined/empty-string/empty-array as "no answer"
|
|
81
|
+
if (answer === null || answer === undefined)
|
|
81
82
|
return false;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
if (typeof answer === 'string' && answer === '')
|
|
84
|
+
return false;
|
|
85
|
+
if (Array.isArray(answer) && answer.length === 0)
|
|
86
|
+
return false;
|
|
87
|
+
// helpers to normalize values to arrays of lower-case strings (for string ops)
|
|
88
|
+
const toStr = (v) => v === null || v === undefined ? '' : String(v).toLowerCase();
|
|
89
|
+
const ensureArray = (v) => {
|
|
90
|
+
if (Array.isArray(v))
|
|
91
|
+
return v.map((x) => toStr(x));
|
|
92
|
+
// if comma-separated string => split, else single element array
|
|
93
|
+
if (typeof v === 'string' && v.indexOf(',') !== -1) {
|
|
94
|
+
return v
|
|
95
|
+
.split(',')
|
|
96
|
+
.map((x) => x.trim())
|
|
97
|
+
.map((x) => toStr(x));
|
|
98
|
+
}
|
|
99
|
+
return [toStr(v)];
|
|
100
|
+
};
|
|
101
|
+
const ansArr = ensureArray(answer);
|
|
102
|
+
const valArr = ensureArray(value);
|
|
103
|
+
// numeric comparisons: only when both sides are scalars (non-array) and numeric
|
|
104
|
+
const isNumericScalar = (x) => !Array.isArray(x) && x !== null && x !== undefined && !Number.isNaN(Number(x));
|
|
85
105
|
switch (operator) {
|
|
86
|
-
// Number comparisons
|
|
87
106
|
case '<':
|
|
88
|
-
|
|
107
|
+
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
108
|
+
return Number(answer) < Number(value);
|
|
109
|
+
return false;
|
|
89
110
|
case '>':
|
|
90
|
-
|
|
111
|
+
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
112
|
+
return Number(answer) > Number(value);
|
|
113
|
+
return false;
|
|
91
114
|
case '<=':
|
|
92
|
-
|
|
115
|
+
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
116
|
+
return Number(answer) <= Number(value);
|
|
117
|
+
return false;
|
|
93
118
|
case '>=':
|
|
94
|
-
|
|
119
|
+
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
120
|
+
return Number(answer) >= Number(value);
|
|
121
|
+
return false;
|
|
122
|
+
// equality: true if any answer element equals any value element
|
|
95
123
|
case '=':
|
|
96
|
-
return
|
|
124
|
+
return ansArr.some((a) => valArr.some((v) => a === v));
|
|
97
125
|
case '!=':
|
|
98
|
-
return
|
|
99
|
-
//
|
|
126
|
+
return !ansArr.some((a) => valArr.some((v) => a === v));
|
|
127
|
+
// LIKE / NOT LIKE: check substring match anywhere in any answer element
|
|
100
128
|
case 'LIKE':
|
|
101
|
-
return
|
|
129
|
+
return ansArr.some((a) => valArr.some((v) => a.includes(v)));
|
|
102
130
|
case 'NOT LIKE':
|
|
103
|
-
return !
|
|
131
|
+
return !ansArr.some((a) => valArr.some((v) => a.includes(v)));
|
|
104
132
|
case 'BEGIN WITH':
|
|
105
|
-
return
|
|
133
|
+
return ansArr.some((a) => valArr.some((v) => a.startsWith(v)));
|
|
106
134
|
case 'END WITH':
|
|
107
|
-
return
|
|
108
|
-
//
|
|
135
|
+
return ansArr.some((a) => valArr.some((v) => a.endsWith(v)));
|
|
136
|
+
// IN / NOT IN: true if any answer element exists in value list
|
|
109
137
|
case 'IN':
|
|
110
|
-
return
|
|
111
|
-
? val.includes(ans)
|
|
112
|
-
: String(val)
|
|
113
|
-
.split(',')
|
|
114
|
-
.map((v) => v.trim())
|
|
115
|
-
.includes(String(ans));
|
|
138
|
+
return ansArr.some((a) => valArr.includes(a));
|
|
116
139
|
case 'NOT IN':
|
|
117
|
-
return
|
|
118
|
-
? !val.includes(ans)
|
|
119
|
-
: !String(val)
|
|
120
|
-
.split(',')
|
|
121
|
-
.map((v) => v.trim())
|
|
122
|
-
.includes(String(ans));
|
|
140
|
+
return !ansArr.some((a) => valArr.includes(a));
|
|
123
141
|
default:
|
|
124
142
|
return false;
|
|
125
143
|
}
|
|
@@ -292,4 +310,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
292
310
|
providedIn: 'root',
|
|
293
311
|
}]
|
|
294
312
|
}], ctorParameters: function () { return []; } });
|
|
295
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlbkNsYXVzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9zZXJ2aWNlcy93aGVuQ2xhdXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLGlCQUFpQjtJQUk1QjtRQUhRLDBCQUFxQixHQUFVLEVBQUUsQ0FBQztRQUNsQyxzQkFBaUIsR0FBa0MsRUFBRSxDQUFDO1FBQzlELGtCQUFhLEdBQVksSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQUVoQixpQkFBaUI7UUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxVQUFVLENBQUM7UUFDOUIsT0FBTyxDQUFDLENBQUMsQ0FDUCxJQUFJO1lBQ0osSUFBSSxDQUFDLFFBQVE7WUFDYixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxJQUFTO1FBQ2YsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRWxCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQzVDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDMUMsQ0FBQztZQUVGLElBQUksQ0FBQyxNQUFN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QGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJtaXNzaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3N1Ym1pc3Npb24ubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgV2hlbkNsYXVzZVNlcnZpY2Uge1xuICBwcml2YXRlIGFjdGl2ZVdoZW5DbGF1c2VHcmlkczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBxdWVzdGlvbkFuc3dlck1hcDogeyBbcXVlc3Rpb25JZDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgaXNJbml0aWFsTG9hZDogYm9vbGVhbiA9IHRydWU7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBtYXJrTG9hZENvbXBsZXRlZCgpIHtcbiAgICB0aGlzLmlzSW5pdGlhbExvYWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGdyaWQgaGFzIGFuIGFjdGl2ZSB3aGVuIGNsYXVzZVxuICAgKi9cbiAgaXNBY3RpdmVXaGVuQ2xhdXNlKGdyaWQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHdoZW4gPSBncmlkPy53aGVuQ2xhdXNlO1xuICAgIHJldHVybiAhIShcbiAgICAgIHdoZW4gJiZcbiAgICAgIHdoZW4uYWN0aXZhdGUgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkod2hlbi53aGVuQ2xhdXNlQ29uZGl0aW9uKSAmJlxuICAgICAgd2hlbi53aGVuQ2xhdXNlQ29uZGl0aW9uLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGdyaWQgdG8gdHJhY2tpbmcgbGlzdCBpZiBpdCBoYXMgYW4gYWN0aXZlIHdoZW4gY2xhdXNlXG4gICAqL1xuICBhZGRHcmlkKGdyaWQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghZ3JpZCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuaXNBY3RpdmVXaGVuQ2xhdXNlKGdyaWQpKSB7XG4gICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmFjdGl2ZVdoZW5DbGF1c2VHcmlkcy5zb21lKFxuICAgICAgICAoZykgPT4gZy5lbGVtZW50Py5pZCA9PT0gZ3JpZC5lbGVtZW50Py5pZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVXaGVuQ2xhdXNlR3JpZHMucHVzaChncmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRRdWVzdGlvbkFuc3dlcihxdWVzdGlvbklkOiBzdHJpbmcsIGFuc3dlcjogYW55LGluaXRpYWw6Ym9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCFxdWVzdGlvbklkKSByZXR1cm47XG4gICAgdGhpcy5xdWVzdGlvbkFuc3dlck1hcFtxdWVzdGlvbklkXSA9IGFuc3dlcjtcbiAgICB0aGlzLmV2YWx1YXRlQWxsV2hlbkNsYXVzZXMoaW5pdGlhbCk7XG4gIH1cblxuICBnZXRBbnN3ZXIocXVlc3Rpb25JZDogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkFuc3dlck1hcFtxdWVzdGlvbklkXTtcbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVBbGxXaGVuQ2xhdXNlcyhpbml0aWFsOmJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB2aXNpYmxlR3JpZHM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGdyaWQgb2YgdGhpcy5hY3RpdmVXaGVuQ2xhdXNlR3JpZHMpIHtcbiAgICAgIGNvbnN0IHdoZW4gPSBncmlkLndoZW5DbGF1c2U7XG4gICAgICBjb25zdCBjb25kaXRpb25zID0gd2hlbi53aGVuQ2xhdXNlQ29uZGl0aW9uO1xuXG4gICAgICBpZiAoIWNvbmRpdGlvbnMgfHwgIWNvbmRpdGlvbnMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgbGV0IG92ZXJhbGxSZXN1bHQgPSB0cnVlO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmRpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2xhdXNlID0gY29uZGl0aW9uc1tpXTtcbiAgICAgICAgY29uc3QgbG9naWMgPSAoY2xhdXNlLmxvZ2ljIHx8IChpID09PSAwID8gJ0FORCcgOiAnQU5EJykpLnRvVXBwZXJDYXNlKCk7IC8vIERlZmF1bHQgdG8gQU5EIGZvciBmaXJzdFxuICAgICAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLmdldEFuc3dlcihjbGF1c2UucXVlc3Rpb25pZCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGVDb25kaXRpb24oXG4gICAgICAgICAgYW5zd2VyLFxuICAgICAgICAgIGNsYXVzZS5jb25kaXRpb24sXG4gICAgICAgICAgY2xhdXNlLnZhbHVlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ29tYmluZSByZXN1bHRzIGJhc2VkIG9uIGxvZ2ljIChBTkQgLyBPUilcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICBvdmVyYWxsUmVzdWx0ID0gcmVzdWx0OyAvLyBpbml0aWFsaXplIHdpdGggZmlyc3QgY29uZGl0aW9uXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGxvZ2ljID09PSAnQU5EJykge1xuICAgICAgICAgICAgb3ZlcmFsbFJlc3VsdCA9IG92ZXJhbGxSZXN1bHQgJiYgcmVzdWx0O1xuICAgICAgICAgIH0gZWxzZSBpZiAobG9naWMgPT09ICdPUicpIHtcbiAgICAgICAgICAgIG92ZXJhbGxSZXN1bHQgPSBvdmVyYWxsUmVzdWx0IHx8IHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8g4pyFIElmIG92ZXJhbGxSZXN1bHQgaXMgdHJ1ZSwgc2hvdyBlbGVtZW50OyBlbHNlIGhpZGVcbiAgICAgIGdyaWQuc2hvdyA9IG92ZXJhbGxSZXN1bHQ7XG4gICAgICBpZiAoIW92ZXJhbGxSZXN1bHQgJiYgIWluaXRpYWwpIHtcbiAgICAgICAgZ3JpZC5lbGVtZW50LmFuc3dlciA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAob3ZlcmFsbFJlc3VsdCkgdmlzaWJsZUdyaWRzLnB1c2goZ3JpZCk7XG4gICAgfVxuICB9XG5cbiAgZXZhbHVhdGVDb25kaXRpb24oYW5zd2VyOiBhbnksIG9wZXJhdG9yOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoYW5zd2VyID09PSBudWxsIHx8IGFuc3dlciA9PT0gdW5kZWZpbmVkIHx8IGFuc3dlciA9PT0gJycpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENvbnZlcnQgdG8gbG93ZXJjYXNlIGZvciBzdHJpbmcgY29tcGFyaXNvblxuICAgIGNvbnN0IGFucyA9IHR5cGVvZiBhbnN3ZXIgPT09ICdzdHJpbmcnID8gYW5zd2VyLnRvTG93ZXJDYXNlKCkgOiBhbnN3ZXI7XG4gICAgY29uc3QgdmFsID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcblxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgIC8vIE51bWJlciBjb21wYXJpc29uc1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIHJldHVybiBOdW1iZXIoYW5zKSA8IE51bWJlcih2YWwpO1xuICAgICAgY2FzZSAnPic6XG4gICAgICAgIHJldHVybiBOdW1iZXIoYW5zKSA+IE51bWJlcih2YWwpO1xuICAgICAgY2FzZSAnPD0nOlxuICAgICAgICByZXR1cm4gTnVtYmVyKGFucykgPD0gTnVtYmVyKHZhbCk7XG4gICAgICBjYXNlICc+PSc6XG4gICAgICAgIHJldHVybiBOdW1iZXIoYW5zKSA+PSBOdW1iZXIodmFsKTtcbiAgICAgIGNhc2UgJz0nOlxuICAgICAgICByZXR1cm4gYW5zID09IHZhbDtcbiAgICAgIGNhc2UgJyE9JzpcbiAgICAgICAgcmV0dXJuIGFucyAhPSB2YWw7XG5cbiAgICAgIC8vIFN0cmluZyBjb21wYXJpc29uc1xuICAgICAgY2FzZSAnTElLRSc6XG4gICAgICAgIHJldHVybiBhbnMuaW5jbHVkZXModmFsKTtcbiAgICAgIGNhc2UgJ05PVCBMSUtFJzpcbiAgICAgICAgcmV0dXJuICFhbnMuaW5jbHVkZXModmFsKTtcbiAgICAgIGNhc2UgJ0JFR0lOIFdJVEgnOlxuICAgICAgICByZXR1cm4gYW5zLnN0YXJ0c1dpdGgodmFsKTtcbiAgICAgIGNhc2UgJ0VORCBXSVRIJzpcbiAgICAgICAgcmV0dXJuIGFucy5lbmRzV2l0aCh2YWwpO1xuXG4gICAgICAvLyBBcnJheS1iYXNlZFxuICAgICAgY2FzZSAnSU4nOlxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgICAgPyB2YWwuaW5jbHVkZXMoYW5zKVxuICAgICAgICAgIDogU3RyaW5nKHZhbClcbiAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgLm1hcCgodikgPT4gdi50cmltKCkpXG4gICAgICAgICAgICAgIC5pbmNsdWRlcyhTdHJpbmcoYW5zKSk7XG4gICAgICBjYXNlICdOT1QgSU4nOlxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgICAgPyAhdmFsLmluY2x1ZGVzKGFucylcbiAgICAgICAgICA6ICFTdHJpbmcodmFsKVxuICAgICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgICAubWFwKCh2KSA9PiB2LnRyaW0oKSlcbiAgICAgICAgICAgICAgLmluY2x1ZGVzKFN0cmluZyhhbnMpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFkZEdyaWRzRnJvbVN1YmZvcm0oc3ViZm9ybTogYW55KTogdm9pZCB7XG4gICAgaWYgKCFzdWJmb3JtIHx8ICFBcnJheS5pc0FycmF5KHN1YmZvcm0ucm93cykpIHJldHVybjtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHN1YmZvcm0ucm93cykge1xuICAgICAgaWYgKCFyb3cuZ3JpZCB8fCAhQXJyYXkuaXNBcnJheShyb3cuZ3JpZCkpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IGdyaWQgb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgLy8gMe+4j+KDoyBBZGQgdGhpcyBncmlkIGl0c2VsZiBpZiBpdCBoYXMgYW4gYWN0aXZlIHdoZW5DbGF1c2VcbiAgICAgICAgdGhpcy5hZGRHcmlkKGdyaWQpO1xuXG4gICAgICAgIC8vIDLvuI/ig6MgVGhlbiwgcmVjdXJzaXZlbHkgcHJvY2VzcyBuZXN0ZWQgY2hpbGRMb2dpY3MgaW5zaWRlIGl0cyBlbGVtZW50XG4gICAgICAgIGlmIChncmlkLmVsZW1lbnQ/LmNoaWxkTG9naWNzPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NDaGlsZExvZ2ljcyhncmlkLmVsZW1lbnQuY2hpbGRMb2dpY3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgY2hpbGRMb2dpY3Mgc3RydWN0dXJlXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NDaGlsZExvZ2ljcyhjaGlsZExvZ2ljczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRMb2dpY3MpKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IGxvZ2ljIG9mIGNoaWxkTG9naWNzKSB7XG4gICAgICAvLyAx77iP4oOjIEVhY2ggbG9naWMgbWF5IGhhdmUgaXRzIG93biByb3dzIChzaW1pbGFyIHRvIHN1YmZvcm0gcm93cylcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxvZ2ljLnJvd3MpKSB7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3cuZ3JpZCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JpZCBvZiByb3cuZ3JpZCkge1xuICAgICAgICAgICAgICAvLyBDaGVjayB3aGVuQ2xhdXNlIGZvciB0aGlzIG5lc3RlZCBncmlkXG4gICAgICAgICAgICAgIHRoaXMuYWRkR3JpZChncmlkKTtcblxuICAgICAgICAgICAgICAvLyAy77iP4oOjIFJlY3Vyc2UgYWdhaW4gaWYgdGhpcyBuZXN0ZWQgcXVlc3Rpb24gYWxzbyBoYXMgaXRzIG93biBjaGlsZExvZ2ljc1xuICAgICAgICAgICAgICBpZiAoZ3JpZC5lbGVtZW50Py5jaGlsZExvZ2ljcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ2hpbGRMb2dpY3MoZ3JpZC5lbGVtZW50LmNoaWxkTG9naWNzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAz77iP4oOjIEEgbG9naWMgaXRzZWxmIG1pZ2h0IGRpcmVjdGx5IGNvbnRhaW4gbmVzdGVkIGxvZ2ljc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobG9naWMuY2hpbGRMb2dpY3MpKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0NoaWxkTG9naWNzKGxvZ2ljLmNoaWxkTG9naWNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIEFMTCBlbGVtZW50cyB3aXRoIGFuIGFjdGl2ZSB3aGVuQ2xhdXNlIGluc2lkZSBhIHN1YmZvcm0sXG4gICAqIGluY2x1ZGluZyBuZXN0ZWQgY2hpbGRMb2dpY3MgKHJlY3Vyc2l2ZSlcbiAgICovXG4gIGdldFdoZW5DbGF1c2VFbGVtZW50cyhzdWJmb3JtOiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKCFzdWJmb3JtIHx8ICFBcnJheS5pc0FycmF5KHN1YmZvcm0ucm93cykpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByb3cgb2Ygc3ViZm9ybS5yb3dzKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93LmdyaWQpKSBjb250aW51ZTtcblxuICAgICAgZm9yIChjb25zdCBncmlkIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgIC8vIDHvuI/ig6MgQWRkIHRoaXMgZ3JpZCBpZiBpdCBoYXMgYW4gYWN0aXZlIHdoZW5DbGF1c2VcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVXaGVuQ2xhdXNlKGdyaWQpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ3JpZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAy77iP4oOjIFByb2Nlc3MgbmVzdGVkIGNoaWxkTG9naWNzIGluc2lkZSB0aGlzIGVsZW1lbnRcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JpZC5lbGVtZW50Py5jaGlsZExvZ2ljcykpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0RWxlbWVudHNGcm9tQ2hpbGRMb2dpY3MoZ3JpZC5lbGVtZW50LmNoaWxkTG9naWNzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGdhdGhlciBncmlkcyB3aXRoIGFjdGl2ZSB3aGVuQ2xhdXNlIGluc2lkZSBjaGlsZExvZ2ljc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50c0Zyb21DaGlsZExvZ2ljcyhjaGlsZExvZ2ljczogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgZm91bmQ6IGFueVtdID0gW107XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRMb2dpY3MpKSByZXR1cm4gZm91bmQ7XG5cbiAgICBmb3IgKGNvbnN0IGxvZ2ljIG9mIGNoaWxkTG9naWNzKSB7XG4gICAgICAvLyBFYWNoIGxvZ2ljIGNhbiBoYXZlIHJvd3NcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxvZ2ljLnJvd3MpKSB7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93LmdyaWQpKSBjb250aW51ZTtcblxuICAgICAgICAgIGZvciAoY29uc3QgZ3JpZCBvZiByb3cuZ3JpZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVXaGVuQ2xhdXNlKGdyaWQpKSB7XG4gICAgICAgICAgICAgIGZvdW5kLnB1c2goZ3JpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJlY3Vyc2UgZGVlcGVyIGlmIHRoaXMgZ3JpZCBoYXMgbmVzdGVkIGNoaWxkTG9naWNzXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkLmVsZW1lbnQ/LmNoaWxkTG9naWNzKSkge1xuICAgICAgICAgICAgICBmb3VuZC5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RWxlbWVudHNGcm9tQ2hpbGRMb2dpY3MoZ3JpZC5lbGVtZW50LmNoaWxkTG9naWNzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBMb2dpYyBpdHNlbGYgbWF5IGhhdmUgbmVzdGVkIGNoaWxkTG9naWNzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsb2dpYy5jaGlsZExvZ2ljcykpIHtcbiAgICAgICAgZm91bmQucHVzaCguLi50aGlzLmdldEVsZW1lbnRzRnJvbUNoaWxkTG9naWNzKGxvZ2ljLmNoaWxkTG9naWNzKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgY2hlY2tFbGVtZW50VmlzaWJpbGl0eShpZDogc3RyaW5nLCBzdWJtaXNzaW9uOiBTdWJtaXNzaW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpZCB8fCAhc3VibWlzc2lvbiB8fCAhQXJyYXkuaXNBcnJheShzdWJtaXNzaW9uLmFuc3dlcnMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gZGVmYXVsdCB2aXNpYmxlIGlmIGludmFsaWQgaW5wdXRcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGVkQW5zd2VyID0gc3VibWlzc2lvbi5hbnN3ZXJzLmZpbmQoXG4gICAgICAoYW5zKSA9PiBhbnMucXVlc3Rpb25JZCA9PT0gaWRcbiAgICApO1xuXG4gICAgLy8gUmV0dXJuIHRoZSAnc2hvdycgZmxhZyBpZiBmb3VuZCwgZWxzZSBkZWZhdWx0IHRvIHRydWVcbiAgICByZXR1cm4gbWF0Y2hlZEFuc3dlciA/IG1hdGNoZWRBbnN3ZXIuc2hvdyA/PyB0cnVlIDogdHJ1ZTtcbiAgfVxuXG4gIGV2YWx1YXRlU3ViZm9ybVdoZW5DbGF1c2VzKFxuICAgIGNoYW5nZWRBbnN3ZXI6IGFueSxcbiAgICBzdWJtaXNzaW9uOiBTdWJtaXNzaW9uLFxuICAgIGNoYW5nZWRRdWVzdGlvbklkOiBzdHJpbmcsXG4gICAgZWxlbWVudHNXaXRoV2hlbkNsYXVzZTogYW55XG4gICkge1xuICAgIGlmICghZWxlbWVudHNXaXRoV2hlbkNsYXVzZS5sZW5ndGgpIHJldHVybjtcblxuICAgIGZvciAoY29uc3QgZ3JpZCBvZiBlbGVtZW50c1dpdGhXaGVuQ2xhdXNlKSB7XG4gICAgICBjb25zdCBlbGVtZW50SWQgPSBncmlkLmVsZW1lbnQuaWQ7XG4gICAgICBjb25zdCB3aGVuID0gZ3JpZC53aGVuQ2xhdXNlO1xuICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHdoZW4ud2hlbkNsYXVzZUNvbmRpdGlvbjtcblxuICAgICAgaWYgKCFjb25kaXRpb25zPy5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICBsZXQgb3ZlcmFsbFJlc3VsdCA9IHRydWU7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZGl0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjbGF1c2UgPSBjb25kaXRpb25zW2ldO1xuXG4gICAgICAgIGNvbnN0IGxvZ2ljID0gKGNsYXVzZS5sb2dpYyB8fCAoaSA9PT0gMCA/ICdBTkQnIDogJ0FORCcpKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIC8vIERldGVybWluZSB3aGljaCBhbnN3ZXIgdG8gdXNlIGZvciB0aGlzIGNvbmRpdGlvblxuICAgICAgICBsZXQgYW5zd2VyVG9DaGVjazogYW55O1xuXG4gICAgICAgIGlmIChjbGF1c2UucXVlc3Rpb25pZCA9PT0gY2hhbmdlZFF1ZXN0aW9uSWQpIHtcbiAgICAgICAgICAvLyBVc2UgdXBkYXRlZCBhbnN3ZXIgZm9yIHRoZSBjaGFuZ2VkIHF1ZXN0aW9uXG4gICAgICAgICAgYW5zd2VyVG9DaGVjayA9IGNoYW5nZWRBbnN3ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRmV0Y2ggZXhpc3RpbmcgdmFsdWUgZnJvbSBzdWJtaXNzaW9uIGZvciBvdGhlciBxdWVzdGlvbnNcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHN1Ym1pc3Npb24uYW5zd2Vycy5maW5kKFxuICAgICAgICAgICAgKGEpID0+IGEucXVlc3Rpb25JZCA9PT0gY2xhdXNlLnF1ZXN0aW9uaWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGFuc3dlclRvQ2hlY2sgPSBleGlzdGluZz8uYW5zd2VyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbihcbiAgICAgICAgICBhbnN3ZXJUb0NoZWNrLFxuICAgICAgICAgIGNsYXVzZS5jb25kaXRpb24sXG4gICAgICAgICAgY2xhdXNlLnZhbHVlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQXBwbHkgQU5EL09SIGxvZ2ljXG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgb3ZlcmFsbFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdmVyYWxsUmVzdWx0ID1cbiAgICAgICAgICAgIGxvZ2ljID09PSAnQU5EJyA/IG92ZXJhbGxSZXN1bHQgJiYgcmVzdWx0IDogb3ZlcmFsbFJlc3VsdCB8fCByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIHNob3cgZmxhZyBmb3IgdGhlIGVsZW1lbnQgY29udHJvbGxlZCBieSB0aGlzIHdoZW5DbGF1c2VcbiAgICAgIGNvbnN0IG1hdGNoZWRBbnN3ZXIgPSBzdWJtaXNzaW9uLmFuc3dlcnMuZmluZChcbiAgICAgICAgKGFucykgPT4gYW5zLnF1ZXN0aW9uSWQgPT09IGVsZW1lbnRJZFxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVkQW5zd2VyKSB7XG4gICAgICAgIG1hdGNoZWRBbnN3ZXIuc2hvdyA9IG92ZXJhbGxSZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTZXJ2aWNlKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIHRyYWNrZWQgZ3JpZHNcbiAgICB0aGlzLmFjdGl2ZVdoZW5DbGF1c2VHcmlkcyA9IFtdO1xuICBcbiAgICAvLyBDbGVhciBzdG9yZWQgcXVlc3Rpb24g4oaSIGFuc3dlciBtYXBcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2VyTWFwID0ge307XG4gIFxuICAgIC8vIFJlc2V0IHZpc2liaWxpdHkgbG9naWMgdG8gaW5pdGlhbCBzdGF0ZVxuICB9XG5cbiAgZ2V0QWN0aXZlV2hlbkNsYXVzZUdyaWRzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVXaGVuQ2xhdXNlR3JpZHM7XG4gIH1cbn1cbiJdfQ==
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlbkNsYXVzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9zZXJ2aWNlcy93aGVuQ2xhdXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLGlCQUFpQjtJQUk1QjtRQUhRLDBCQUFxQixHQUFVLEVBQUUsQ0FBQztRQUNsQyxzQkFBaUIsR0FBa0MsRUFBRSxDQUFDO1FBQzlELGtCQUFhLEdBQVksSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQUVoQixpQkFBaUI7UUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxVQUFVLENBQUM7UUFDOUIsT0FBTyxDQUFDLENBQUMsQ0FDUCxJQUFJO1lBQ0osSUFBSSxDQUFDLFFBQVE7WUFDYixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxJQUFTO1FBQ2YsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRWxCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQzVDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDMUMsQ0FBQztZQUVGLElBQUksQ0FBQyxNQUFN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TSxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDO2lCQUN2RTthQUNGO1lBRUQsaUVBQWlFO1lBQ2pFLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUMzQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQ3RDLENBQUM7WUFDRixJQUFJLGFBQWEsRUFBRTtnQkFDakIsYUFBYSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7YUFDcEM7U0FDRjtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1Ysc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFaEMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFNUIsMENBQTBDO0lBQzVDLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQzsrR0F0WFUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1Ym1pc3Npb24gfSBmcm9tICcuLi9tb2RlbHMvc3VibWlzc2lvbi5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXaGVuQ2xhdXNlU2VydmljZSB7XG4gIHByaXZhdGUgYWN0aXZlV2hlbkNsYXVzZUdyaWRzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIHF1ZXN0aW9uQW5zd2VyTWFwOiB7IFtxdWVzdGlvbklkOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBpc0luaXRpYWxMb2FkOiBib29sZWFuID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG1hcmtMb2FkQ29tcGxldGVkKCkge1xuICAgIHRoaXMuaXNJbml0aWFsTG9hZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgZ3JpZCBoYXMgYW4gYWN0aXZlIHdoZW4gY2xhdXNlXG4gICAqL1xuICBpc0FjdGl2ZVdoZW5DbGF1c2UoZ3JpZDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgd2hlbiA9IGdyaWQ/LndoZW5DbGF1c2U7XG4gICAgcmV0dXJuICEhKFxuICAgICAgd2hlbiAmJlxuICAgICAgd2hlbi5hY3RpdmF0ZSAmJlxuICAgICAgQXJyYXkuaXNBcnJheSh3aGVuLndoZW5DbGF1c2VDb25kaXRpb24pICYmXG4gICAgICB3aGVuLndoZW5DbGF1c2VDb25kaXRpb24ubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZ3JpZCB0byB0cmFja2luZyBsaXN0IGlmIGl0IGhhcyBhbiBhY3RpdmUgd2hlbiBjbGF1c2VcbiAgICovXG4gIGFkZEdyaWQoZ3JpZDogYW55KTogdm9pZCB7XG4gICAgaWYgKCFncmlkKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5pc0FjdGl2ZVdoZW5DbGF1c2UoZ3JpZCkpIHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuYWN0aXZlV2hlbkNsYXVzZUdyaWRzLnNvbWUoXG4gICAgICAgIChnKSA9PiBnLmVsZW1lbnQ/LmlkID09PSBncmlkLmVsZW1lbnQ/LmlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICB0aGlzLmFjdGl2ZVdoZW5DbGF1c2VHcmlkcy5wdXNoKGdyaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldFF1ZXN0aW9uQW5zd2VyKHF1ZXN0aW9uSWQ6IHN0cmluZywgYW5zd2VyOiBhbnksaW5pdGlhbDpib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIXF1ZXN0aW9uSWQpIHJldHVybjtcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2VyTWFwW3F1ZXN0aW9uSWRdID0gYW5zd2VyO1xuICAgIHRoaXMuZXZhbHVhdGVBbGxXaGVuQ2xhdXNlcyhpbml0aWFsKTtcbiAgfVxuXG4gIGdldEFuc3dlcihxdWVzdGlvbklkOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQW5zd2VyTWFwW3F1ZXN0aW9uSWRdO1xuICB9XG5cbiAgcHJpdmF0ZSBldmFsdWF0ZUFsbFdoZW5DbGF1c2VzKGluaXRpYWw6Ym9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHZpc2libGVHcmlkczogYW55W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZ3JpZCBvZiB0aGlzLmFjdGl2ZVdoZW5DbGF1c2VHcmlkcykge1xuICAgICAgY29uc3Qgd2hlbiA9IGdyaWQud2hlbkNsYXVzZTtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB3aGVuLndoZW5DbGF1c2VDb25kaXRpb247XG5cbiAgICAgIGlmICghY29uZGl0aW9ucyB8fCAhY29uZGl0aW9ucy5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICBsZXQgb3ZlcmFsbFJlc3VsdCA9IHRydWU7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZGl0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjbGF1c2UgPSBjb25kaXRpb25zW2ldO1xuICAgICAgICBjb25zdCBsb2dpYyA9IChjbGF1c2UubG9naWMgfHwgKGkgPT09IDAgPyAnQU5EJyA6ICdBTkQnKSkudG9VcHBlckNhc2UoKTsgLy8gRGVmYXVsdCB0byBBTkQgZm9yIGZpcnN0XG4gICAgICAgIGNvbnN0IGFuc3dlciA9IHRoaXMuZ2V0QW5zd2VyKGNsYXVzZS5xdWVzdGlvbmlkKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbihcbiAgICAgICAgICBhbnN3ZXIsXG4gICAgICAgICAgY2xhdXNlLmNvbmRpdGlvbixcbiAgICAgICAgICBjbGF1c2UudmFsdWVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBDb21iaW5lIHJlc3VsdHMgYmFzZWQgb24gbG9naWMgKEFORCAvIE9SKVxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIG92ZXJhbGxSZXN1bHQgPSByZXN1bHQ7IC8vIGluaXRpYWxpemUgd2l0aCBmaXJzdCBjb25kaXRpb25cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobG9naWMgPT09ICdBTkQnKSB7XG4gICAgICAgICAgICBvdmVyYWxsUmVzdWx0ID0gb3ZlcmFsbFJlc3VsdCAmJiByZXN1bHQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChsb2dpYyA9PT0gJ09SJykge1xuICAgICAgICAgICAgb3ZlcmFsbFJlc3VsdCA9IG92ZXJhbGxSZXN1bHQgfHwgcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDinIUgSWYgb3ZlcmFsbFJlc3VsdCBpcyB0cnVlLCBzaG93IGVsZW1lbnQ7IGVsc2UgaGlkZVxuICAgICAgZ3JpZC5zaG93ID0gb3ZlcmFsbFJlc3VsdDtcbiAgICAgIGlmICghb3ZlcmFsbFJlc3VsdCAmJiAhaW5pdGlhbCkge1xuICAgICAgICBncmlkLmVsZW1lbnQuYW5zd2VyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChvdmVyYWxsUmVzdWx0KSB2aXNpYmxlR3JpZHMucHVzaChncmlkKTtcbiAgICB9XG4gIH1cblxuICBldmFsdWF0ZUNvbmRpdGlvbihhbnN3ZXI6IGFueSwgb3BlcmF0b3I6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICBcbiAgICAvLyB0cmVhdCBudWxsL3VuZGVmaW5lZC9lbXB0eS1zdHJpbmcvZW1wdHktYXJyYXkgYXMgXCJubyBhbnN3ZXJcIlxuICAgIGlmIChhbnN3ZXIgPT09IG51bGwgfHwgYW5zd2VyID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIGFuc3dlciA9PT0gJ3N0cmluZycgJiYgYW5zd2VyID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFuc3dlcikgJiYgYW5zd2VyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBcbiAgICAvLyBoZWxwZXJzIHRvIG5vcm1hbGl6ZSB2YWx1ZXMgdG8gYXJyYXlzIG9mIGxvd2VyLWNhc2Ugc3RyaW5ncyAoZm9yIHN0cmluZyBvcHMpXG4gICAgY29uc3QgdG9TdHIgPSAodjogYW55KSA9PlxuICAgICAgdiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyh2KS50b0xvd2VyQ2FzZSgpO1xuICBcbiAgICBjb25zdCBlbnN1cmVBcnJheSA9ICh2OiBhbnkpOiBzdHJpbmdbXSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkgcmV0dXJuIHYubWFwKCh4KSA9PiB0b1N0cih4KSk7XG4gICAgICAvLyBpZiBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nID0+IHNwbGl0LCBlbHNlIHNpbmdsZSBlbGVtZW50IGFycmF5XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYuaW5kZXhPZignLCcpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdlxuICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgLm1hcCgoeCkgPT4geC50cmltKCkpXG4gICAgICAgICAgLm1hcCgoeCkgPT4gdG9TdHIoeCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFt0b1N0cih2KV07XG4gICAgfTtcbiAgXG4gICAgY29uc3QgYW5zQXJyID0gZW5zdXJlQXJyYXkoYW5zd2VyKTtcbiAgICBjb25zdCB2YWxBcnIgPSBlbnN1cmVBcnJheSh2YWx1ZSk7XG4gIFxuICAgIC8vIG51bWVyaWMgY29tcGFyaXNvbnM6IG9ubHkgd2hlbiBib3RoIHNpZGVzIGFyZSBzY2FsYXJzIChub24tYXJyYXkpIGFuZCBudW1lcmljXG4gICAgY29uc3QgaXNOdW1lcmljU2NhbGFyID0gKHg6IGFueSkgPT5cbiAgICAgICFBcnJheS5pc0FycmF5KHgpICYmIHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHgpKTtcbiAgXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGlmIChpc051bWVyaWNTY2FsYXIoYW5zd2VyKSAmJiBpc051bWVyaWNTY2FsYXIodmFsdWUpKVxuICAgICAgICAgIHJldHVybiBOdW1iZXIoYW5zd2VyKSA8IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJz4nOlxuICAgICAgICBpZiAoaXNOdW1lcmljU2NhbGFyKGFuc3dlcikgJiYgaXNOdW1lcmljU2NhbGFyKHZhbHVlKSlcbiAgICAgICAgICByZXR1cm4gTnVtYmVyKGFuc3dlcikgPiBOdW1iZXIodmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICc8PSc6XG4gICAgICAgIGlmIChpc051bWVyaWNTY2FsYXIoYW5zd2VyKSAmJiBpc051bWVyaWNTY2FsYXIodmFsdWUpKVxuICAgICAgICAgIHJldHVybiBOdW1iZXIoYW5zd2VyKSA8PSBOdW1iZXIodmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICc+PSc6XG4gICAgICAgIGlmIChpc051bWVyaWNTY2FsYXIoYW5zd2VyKSAmJiBpc051bWVyaWNTY2FsYXIodmFsdWUpKVxuICAgICAgICAgIHJldHVybiBOdW1iZXIoYW5zd2VyKSA+PSBOdW1iZXIodmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gIFxuICAgICAgLy8gZXF1YWxpdHk6IHRydWUgaWYgYW55IGFuc3dlciBlbGVtZW50IGVxdWFscyBhbnkgdmFsdWUgZWxlbWVudFxuICAgICAgY2FzZSAnPSc6XG4gICAgICAgIHJldHVybiBhbnNBcnIuc29tZSgoYSkgPT4gdmFsQXJyLnNvbWUoKHYpID0+IGEgPT09IHYpKTtcbiAgXG4gICAgICBjYXNlICchPSc6XG4gICAgICAgIHJldHVybiAhYW5zQXJyLnNvbWUoKGEpID0+IHZhbEFyci5zb21lKCh2KSA9PiBhID09PSB2KSk7XG4gIFxuICAgICAgLy8gTElLRSAvIE5PVCBMSUtFOiBjaGVjayBzdWJzdHJpbmcgbWF0Y2ggYW55d2hlcmUgaW4gYW55IGFuc3dlciBlbGVtZW50XG4gICAgICBjYXNlICdMSUtFJzpcbiAgICAgICAgcmV0dXJuIGFuc0Fyci5zb21lKChhKSA9PiB2YWxBcnIuc29tZSgodikgPT4gYS5pbmNsdWRlcyh2KSkpO1xuICAgICAgY2FzZSAnTk9UIExJS0UnOlxuICAgICAgICByZXR1cm4gIWFuc0Fyci5zb21lKChhKSA9PiB2YWxBcnIuc29tZSgodikgPT4gYS5pbmNsdWRlcyh2KSkpO1xuICBcbiAgICAgIGNhc2UgJ0JFR0lOIFdJVEgnOlxuICAgICAgICByZXR1cm4gYW5zQXJyLnNvbWUoKGEpID0+IHZhbEFyci5zb21lKCh2KSA9PiBhLnN0YXJ0c1dpdGgodikpKTtcbiAgICAgIGNhc2UgJ0VORCBXSVRIJzpcbiAgICAgICAgcmV0dXJuIGFuc0Fyci5zb21lKChhKSA9PiB2YWxBcnIuc29tZSgodikgPT4gYS5lbmRzV2l0aCh2KSkpO1xuICBcbiAgICAgIC8vIElOIC8gTk9UIElOOiB0cnVlIGlmIGFueSBhbnN3ZXIgZWxlbWVudCBleGlzdHMgaW4gdmFsdWUgbGlzdFxuICAgICAgY2FzZSAnSU4nOlxuICAgICAgICByZXR1cm4gYW5zQXJyLnNvbWUoKGEpID0+IHZhbEFyci5pbmNsdWRlcyhhKSk7XG4gICAgICBjYXNlICdOT1QgSU4nOlxuICAgICAgICByZXR1cm4gIWFuc0Fyci5zb21lKChhKSA9PiB2YWxBcnIuaW5jbHVkZXMoYSkpO1xuICBcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gIFxuXG4gIGFkZEdyaWRzRnJvbVN1YmZvcm0oc3ViZm9ybTogYW55KTogdm9pZCB7XG4gICAgaWYgKCFzdWJmb3JtIHx8ICFBcnJheS5pc0FycmF5KHN1YmZvcm0ucm93cykpIHJldHVybjtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHN1YmZvcm0ucm93cykge1xuICAgICAgaWYgKCFyb3cuZ3JpZCB8fCAhQXJyYXkuaXNBcnJheShyb3cuZ3JpZCkpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IGdyaWQgb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgLy8gMe+4j+KDoyBBZGQgdGhpcyBncmlkIGl0c2VsZiBpZiBpdCBoYXMgYW4gYWN0aXZlIHdoZW5DbGF1c2VcbiAgICAgICAgdGhpcy5hZGRHcmlkKGdyaWQpO1xuXG4gICAgICAgIC8vIDLvuI/ig6MgVGhlbiwgcmVjdXJzaXZlbHkgcHJvY2VzcyBuZXN0ZWQgY2hpbGRMb2dpY3MgaW5zaWRlIGl0cyBlbGVtZW50XG4gICAgICAgIGlmIChncmlkLmVsZW1lbnQ/LmNoaWxkTG9naWNzPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NDaGlsZExvZ2ljcyhncmlkLmVsZW1lbnQuY2hpbGRMb2dpY3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgY2hpbGRMb2dpY3Mgc3RydWN0dXJlXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NDaGlsZExvZ2ljcyhjaGlsZExvZ2ljczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRMb2dpY3MpKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IGxvZ2ljIG9mIGNoaWxkTG9naWNzKSB7XG4gICAgICAvLyAx77iP4oOjIEVhY2ggbG9naWMgbWF5IGhhdmUgaXRzIG93biByb3dzIChzaW1pbGFyIHRvIHN1YmZvcm0gcm93cylcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxvZ2ljLnJvd3MpKSB7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3cuZ3JpZCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JpZCBvZiByb3cuZ3JpZCkge1xuICAgICAgICAgICAgICAvLyBDaGVjayB3aGVuQ2xhdXNlIGZvciB0aGlzIG5lc3RlZCBncmlkXG4gICAgICAgICAgICAgIHRoaXMuYWRkR3JpZChncmlkKTtcblxuICAgICAgICAgICAgICAvLyAy77iP4oOjIFJlY3Vyc2UgYWdhaW4gaWYgdGhpcyBuZXN0ZWQgcXVlc3Rpb24gYWxzbyBoYXMgaXRzIG93biBjaGlsZExvZ2ljc1xuICAgICAgICAgICAgICBpZiAoZ3JpZC5lbGVtZW50Py5jaGlsZExvZ2ljcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ2hpbGRMb2dpY3MoZ3JpZC5lbGVtZW50LmNoaWxkTG9naWNzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAz77iP4oOjIEEgbG9naWMgaXRzZWxmIG1pZ2h0IGRpcmVjdGx5IGNvbnRhaW4gbmVzdGVkIGxvZ2ljc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobG9naWMuY2hpbGRMb2dpY3MpKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0NoaWxkTG9naWNzKGxvZ2ljLmNoaWxkTG9naWNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIEFMTCBlbGVtZW50cyB3aXRoIGFuIGFjdGl2ZSB3aGVuQ2xhdXNlIGluc2lkZSBhIHN1YmZvcm0sXG4gICAqIGluY2x1ZGluZyBuZXN0ZWQgY2hpbGRMb2dpY3MgKHJlY3Vyc2l2ZSlcbiAgICovXG4gIGdldFdoZW5DbGF1c2VFbGVtZW50cyhzdWJmb3JtOiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKCFzdWJmb3JtIHx8ICFBcnJheS5pc0FycmF5KHN1YmZvcm0ucm93cykpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByb3cgb2Ygc3ViZm9ybS5yb3dzKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93LmdyaWQpKSBjb250aW51ZTtcblxuICAgICAgZm9yIChjb25zdCBncmlkIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgIC8vIDHvuI/ig6MgQWRkIHRoaXMgZ3JpZCBpZiBpdCBoYXMgYW4gYWN0aXZlIHdoZW5DbGF1c2VcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVXaGVuQ2xhdXNlKGdyaWQpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ3JpZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAy77iP4oOjIFByb2Nlc3MgbmVzdGVkIGNoaWxkTG9naWNzIGluc2lkZSB0aGlzIGVsZW1lbnRcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JpZC5lbGVtZW50Py5jaGlsZExvZ2ljcykpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0RWxlbWVudHNGcm9tQ2hpbGRMb2dpY3MoZ3JpZC5lbGVtZW50LmNoaWxkTG9naWNzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGdhdGhlciBncmlkcyB3aXRoIGFjdGl2ZSB3aGVuQ2xhdXNlIGluc2lkZSBjaGlsZExvZ2ljc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50c0Zyb21DaGlsZExvZ2ljcyhjaGlsZExvZ2ljczogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgZm91bmQ6IGFueVtdID0gW107XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRMb2dpY3MpKSByZXR1cm4gZm91bmQ7XG5cbiAgICBmb3IgKGNvbnN0IGxvZ2ljIG9mIGNoaWxkTG9naWNzKSB7XG4gICAgICAvLyBFYWNoIGxvZ2ljIGNhbiBoYXZlIHJvd3NcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxvZ2ljLnJvd3MpKSB7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93LmdyaWQpKSBjb250aW51ZTtcblxuICAgICAgICAgIGZvciAoY29uc3QgZ3JpZCBvZiByb3cuZ3JpZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVXaGVuQ2xhdXNlKGdyaWQpKSB7XG4gICAgICAgICAgICAgIGZvdW5kLnB1c2goZ3JpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJlY3Vyc2UgZGVlcGVyIGlmIHRoaXMgZ3JpZCBoYXMgbmVzdGVkIGNoaWxkTG9naWNzXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkLmVsZW1lbnQ/LmNoaWxkTG9naWNzKSkge1xuICAgICAgICAgICAgICBmb3VuZC5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RWxlbWVudHNGcm9tQ2hpbGRMb2dpY3MoZ3JpZC5lbGVtZW50LmNoaWxkTG9naWNzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBMb2dpYyBpdHNlbGYgbWF5IGhhdmUgbmVzdGVkIGNoaWxkTG9naWNzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsb2dpYy5jaGlsZExvZ2ljcykpIHtcbiAgICAgICAgZm91bmQucHVzaCguLi50aGlzLmdldEVsZW1lbnRzRnJvbUNoaWxkTG9naWNzKGxvZ2ljLmNoaWxkTG9naWNzKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgY2hlY2tFbGVtZW50VmlzaWJpbGl0eShpZDogc3RyaW5nLCBzdWJtaXNzaW9uOiBTdWJtaXNzaW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpZCB8fCAhc3VibWlzc2lvbiB8fCAhQXJyYXkuaXNBcnJheShzdWJtaXNzaW9uLmFuc3dlcnMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gZGVmYXVsdCB2aXNpYmxlIGlmIGludmFsaWQgaW5wdXRcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGVkQW5zd2VyID0gc3VibWlzc2lvbi5hbnN3ZXJzLmZpbmQoXG4gICAgICAoYW5zKSA9PiBhbnMucXVlc3Rpb25JZCA9PT0gaWRcbiAgICApO1xuXG4gICAgLy8gUmV0dXJuIHRoZSAnc2hvdycgZmxhZyBpZiBmb3VuZCwgZWxzZSBkZWZhdWx0IHRvIHRydWVcbiAgICByZXR1cm4gbWF0Y2hlZEFuc3dlciA/IG1hdGNoZWRBbnN3ZXIuc2hvdyA/PyB0cnVlIDogdHJ1ZTtcbiAgfVxuXG4gIGV2YWx1YXRlU3ViZm9ybVdoZW5DbGF1c2VzKFxuICAgIGNoYW5nZWRBbnN3ZXI6IGFueSxcbiAgICBzdWJtaXNzaW9uOiBTdWJtaXNzaW9uLFxuICAgIGNoYW5nZWRRdWVzdGlvbklkOiBzdHJpbmcsXG4gICAgZWxlbWVudHNXaXRoV2hlbkNsYXVzZTogYW55XG4gICkge1xuICAgIGlmICghZWxlbWVudHNXaXRoV2hlbkNsYXVzZS5sZW5ndGgpIHJldHVybjtcblxuICAgIGZvciAoY29uc3QgZ3JpZCBvZiBlbGVtZW50c1dpdGhXaGVuQ2xhdXNlKSB7XG4gICAgICBjb25zdCBlbGVtZW50SWQgPSBncmlkLmVsZW1lbnQuaWQ7XG4gICAgICBjb25zdCB3aGVuID0gZ3JpZC53aGVuQ2xhdXNlO1xuICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHdoZW4ud2hlbkNsYXVzZUNvbmRpdGlvbjtcblxuICAgICAgaWYgKCFjb25kaXRpb25zPy5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICBsZXQgb3ZlcmFsbFJlc3VsdCA9IHRydWU7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZGl0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjbGF1c2UgPSBjb25kaXRpb25zW2ldO1xuXG4gICAgICAgIGNvbnN0IGxvZ2ljID0gKGNsYXVzZS5sb2dpYyB8fCAoaSA9PT0gMCA/ICdBTkQnIDogJ0FORCcpKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIC8vIERldGVybWluZSB3aGljaCBhbnN3ZXIgdG8gdXNlIGZvciB0aGlzIGNvbmRpdGlvblxuICAgICAgICBsZXQgYW5zd2VyVG9DaGVjazogYW55O1xuXG4gICAgICAgIGlmIChjbGF1c2UucXVlc3Rpb25pZCA9PT0gY2hhbmdlZFF1ZXN0aW9uSWQpIHtcbiAgICAgICAgICAvLyBVc2UgdXBkYXRlZCBhbnN3ZXIgZm9yIHRoZSBjaGFuZ2VkIHF1ZXN0aW9uXG4gICAgICAgICAgYW5zd2VyVG9DaGVjayA9IGNoYW5nZWRBbnN3ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRmV0Y2ggZXhpc3RpbmcgdmFsdWUgZnJvbSBzdWJtaXNzaW9uIGZvciBvdGhlciBxdWVzdGlvbnNcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHN1Ym1pc3Npb24uYW5zd2Vycy5maW5kKFxuICAgICAgICAgICAgKGEpID0+IGEucXVlc3Rpb25JZCA9PT0gY2xhdXNlLnF1ZXN0aW9uaWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGFuc3dlclRvQ2hlY2sgPSBleGlzdGluZz8uYW5zd2VyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbihcbiAgICAgICAgICBhbnN3ZXJUb0NoZWNrLFxuICAgICAgICAgIGNsYXVzZS5jb25kaXRpb24sXG4gICAgICAgICAgY2xhdXNlLnZhbHVlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQXBwbHkgQU5EL09SIGxvZ2ljXG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgb3ZlcmFsbFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdmVyYWxsUmVzdWx0ID1cbiAgICAgICAgICAgIGxvZ2ljID09PSAnQU5EJyA/IG92ZXJhbGxSZXN1bHQgJiYgcmVzdWx0IDogb3ZlcmFsbFJlc3VsdCB8fCByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIHNob3cgZmxhZyBmb3IgdGhlIGVsZW1lbnQgY29udHJvbGxlZCBieSB0aGlzIHdoZW5DbGF1c2VcbiAgICAgIGNvbnN0IG1hdGNoZWRBbnN3ZXIgPSBzdWJtaXNzaW9uLmFuc3dlcnMuZmluZChcbiAgICAgICAgKGFucykgPT4gYW5zLnF1ZXN0aW9uSWQgPT09IGVsZW1lbnRJZFxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVkQW5zd2VyKSB7XG4gICAgICAgIG1hdGNoZWRBbnN3ZXIuc2hvdyA9IG92ZXJhbGxSZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTZXJ2aWNlKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIHRyYWNrZWQgZ3JpZHNcbiAgICB0aGlzLmFjdGl2ZVdoZW5DbGF1c2VHcmlkcyA9IFtdO1xuICBcbiAgICAvLyBDbGVhciBzdG9yZWQgcXVlc3Rpb24g4oaSIGFuc3dlciBtYXBcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2VyTWFwID0ge307XG4gIFxuICAgIC8vIFJlc2V0IHZpc2liaWxpdHkgbG9naWMgdG8gaW5pdGlhbCBzdGF0ZVxuICB9XG5cbiAgZ2V0QWN0aXZlV2hlbkNsYXVzZUdyaWRzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVXaGVuQ2xhdXNlR3JpZHM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -786,49 +786,67 @@ class WhenClauseService {
|
|
|
786
786
|
}
|
|
787
787
|
}
|
|
788
788
|
evaluateCondition(answer, operator, value) {
|
|
789
|
-
|
|
789
|
+
// treat null/undefined/empty-string/empty-array as "no answer"
|
|
790
|
+
if (answer === null || answer === undefined)
|
|
790
791
|
return false;
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
792
|
+
if (typeof answer === 'string' && answer === '')
|
|
793
|
+
return false;
|
|
794
|
+
if (Array.isArray(answer) && answer.length === 0)
|
|
795
|
+
return false;
|
|
796
|
+
// helpers to normalize values to arrays of lower-case strings (for string ops)
|
|
797
|
+
const toStr = (v) => v === null || v === undefined ? '' : String(v).toLowerCase();
|
|
798
|
+
const ensureArray = (v) => {
|
|
799
|
+
if (Array.isArray(v))
|
|
800
|
+
return v.map((x) => toStr(x));
|
|
801
|
+
// if comma-separated string => split, else single element array
|
|
802
|
+
if (typeof v === 'string' && v.indexOf(',') !== -1) {
|
|
803
|
+
return v
|
|
804
|
+
.split(',')
|
|
805
|
+
.map((x) => x.trim())
|
|
806
|
+
.map((x) => toStr(x));
|
|
807
|
+
}
|
|
808
|
+
return [toStr(v)];
|
|
809
|
+
};
|
|
810
|
+
const ansArr = ensureArray(answer);
|
|
811
|
+
const valArr = ensureArray(value);
|
|
812
|
+
// numeric comparisons: only when both sides are scalars (non-array) and numeric
|
|
813
|
+
const isNumericScalar = (x) => !Array.isArray(x) && x !== null && x !== undefined && !Number.isNaN(Number(x));
|
|
794
814
|
switch (operator) {
|
|
795
|
-
// Number comparisons
|
|
796
815
|
case '<':
|
|
797
|
-
|
|
816
|
+
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
817
|
+
return Number(answer) < Number(value);
|
|
818
|
+
return false;
|
|
798
819
|
case '>':
|
|
799
|
-
|
|
820
|
+
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
821
|
+
return Number(answer) > Number(value);
|
|
822
|
+
return false;
|
|
800
823
|
case '<=':
|
|
801
|
-
|
|
824
|
+
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
825
|
+
return Number(answer) <= Number(value);
|
|
826
|
+
return false;
|
|
802
827
|
case '>=':
|
|
803
|
-
|
|
828
|
+
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
829
|
+
return Number(answer) >= Number(value);
|
|
830
|
+
return false;
|
|
831
|
+
// equality: true if any answer element equals any value element
|
|
804
832
|
case '=':
|
|
805
|
-
return
|
|
833
|
+
return ansArr.some((a) => valArr.some((v) => a === v));
|
|
806
834
|
case '!=':
|
|
807
|
-
return
|
|
808
|
-
//
|
|
835
|
+
return !ansArr.some((a) => valArr.some((v) => a === v));
|
|
836
|
+
// LIKE / NOT LIKE: check substring match anywhere in any answer element
|
|
809
837
|
case 'LIKE':
|
|
810
|
-
return
|
|
838
|
+
return ansArr.some((a) => valArr.some((v) => a.includes(v)));
|
|
811
839
|
case 'NOT LIKE':
|
|
812
|
-
return !
|
|
840
|
+
return !ansArr.some((a) => valArr.some((v) => a.includes(v)));
|
|
813
841
|
case 'BEGIN WITH':
|
|
814
|
-
return
|
|
842
|
+
return ansArr.some((a) => valArr.some((v) => a.startsWith(v)));
|
|
815
843
|
case 'END WITH':
|
|
816
|
-
return
|
|
817
|
-
//
|
|
844
|
+
return ansArr.some((a) => valArr.some((v) => a.endsWith(v)));
|
|
845
|
+
// IN / NOT IN: true if any answer element exists in value list
|
|
818
846
|
case 'IN':
|
|
819
|
-
return
|
|
820
|
-
? val.includes(ans)
|
|
821
|
-
: String(val)
|
|
822
|
-
.split(',')
|
|
823
|
-
.map((v) => v.trim())
|
|
824
|
-
.includes(String(ans));
|
|
847
|
+
return ansArr.some((a) => valArr.includes(a));
|
|
825
848
|
case 'NOT IN':
|
|
826
|
-
return
|
|
827
|
-
? !val.includes(ans)
|
|
828
|
-
: !String(val)
|
|
829
|
-
.split(',')
|
|
830
|
-
.map((v) => v.trim())
|
|
831
|
-
.includes(String(ans));
|
|
849
|
+
return !ansArr.some((a) => valArr.includes(a));
|
|
832
850
|
default:
|
|
833
851
|
return false;
|
|
834
852
|
}
|