@hmcts/ccd-case-ui-toolkit 6.10.7-rollback-case-link → 6.13.0-rc1
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/bundles/hmcts-ccd-case-ui-toolkit.umd.js +381 -234
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -1
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
- package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +15 -1
- package/esm2015/lib/shared/components/palette/case-file-view/components/case-file-view-folder-selector/case-file-view-folder-selector.component.js +1 -1
- package/esm2015/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.js +13 -15
- package/esm2015/lib/shared/components/palette/case-flag/write-case-flag-field.component.js +11 -8
- package/esm2015/lib/shared/components/palette/datetime-picker/datetime-picker.component.js +10 -3
- package/esm2015/lib/shared/components/search-result/search-result.component.js +10 -14
- package/esm2015/lib/shared/directives/conditional-show/domain/conditional-show.model.js +103 -200
- package/esm2015/lib/shared/directives/conditional-show/services/condition-parser.service.js +201 -0
- package/esm2015/lib/shared/directives/conditional-show/services/condition.peg.js +90 -0
- package/esm2015/lib/shared/domain/case-flag/hmcts-service-detail.model.js +1 -1
- package/esm2015/lib/shared/services/case-flag/case-flag-refdata.service.js +25 -4
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js +443 -215
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
- package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +1 -0
- package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +2 -1
- package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +1 -0
- package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/datetime-picker/datetime-picker.component.d.ts.map +1 -1
- package/lib/shared/directives/conditional-show/domain/conditional-show.model.d.ts +13 -30
- package/lib/shared/directives/conditional-show/domain/conditional-show.model.d.ts.map +1 -1
- package/lib/shared/directives/conditional-show/services/condition-parser.service.d.ts +30 -0
- package/lib/shared/directives/conditional-show/services/condition-parser.service.d.ts.map +1 -0
- package/lib/shared/directives/conditional-show/services/condition.peg.d.ts +3 -0
- package/lib/shared/directives/conditional-show/services/condition.peg.d.ts.map +1 -0
- package/lib/shared/domain/case-flag/hmcts-service-detail.model.d.ts.map +1 -1
- package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts +14 -3
- package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import * as _score from 'underscore';
|
|
2
|
+
import peg from './condition.peg';
|
|
3
|
+
import { FieldsUtils } from '../../../services/fields/fields.utils';
|
|
4
|
+
import { ShowCondition } from '../../conditional-show/domain/conditional-show.model';
|
|
5
|
+
export class ConditionParser {
|
|
6
|
+
/**
|
|
7
|
+
* Parse the raw formula and output structured condition data
|
|
8
|
+
* that can be used in evaluating show/hide logic
|
|
9
|
+
* @param condition raw formula e.g. TextField = "Hello"
|
|
10
|
+
*/
|
|
11
|
+
static parse(condition) {
|
|
12
|
+
if (!condition) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
;
|
|
16
|
+
condition = condition.replace(/CONTAINS/g, ' CONTAINS');
|
|
17
|
+
return peg.parse(condition.trim(), {});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Evaluate the current fields against the conditions
|
|
21
|
+
* @param fields the current page fields and their value
|
|
22
|
+
* @param conditions The PegJS formula output
|
|
23
|
+
*/
|
|
24
|
+
static evaluate(fields, conditions, path) {
|
|
25
|
+
if (!conditions) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
;
|
|
29
|
+
const validJoinComparators = ['AND', 'OR'];
|
|
30
|
+
const result = conditions.reduce((accumulator, condition, index) => {
|
|
31
|
+
const isJoinComparator = (comparator) => (typeof comparator === 'string' && validJoinComparators.indexOf(comparator) !== -1);
|
|
32
|
+
if (isJoinComparator(condition)) {
|
|
33
|
+
return accumulator;
|
|
34
|
+
}
|
|
35
|
+
;
|
|
36
|
+
let currentConditionResult = true;
|
|
37
|
+
if (Array.isArray(condition)) {
|
|
38
|
+
currentConditionResult = this.evaluate(fields, condition);
|
|
39
|
+
if (isJoinComparator(conditions[index - 1])) {
|
|
40
|
+
return this.evaluateJoin(accumulator, conditions[index - 1], currentConditionResult);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (condition.comparator) {
|
|
44
|
+
const formula = condition.fieldReference + condition.comparator + condition.value;
|
|
45
|
+
currentConditionResult = this.matchEqualityCondition(fields, formula, path);
|
|
46
|
+
}
|
|
47
|
+
if (isJoinComparator(conditions[index - 1])) {
|
|
48
|
+
return this.evaluateJoin(accumulator, conditions[index - 1], currentConditionResult);
|
|
49
|
+
}
|
|
50
|
+
return currentConditionResult;
|
|
51
|
+
}, true);
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
static evaluateJoin(leftResult, comparator, rightResult) {
|
|
55
|
+
switch (comparator) {
|
|
56
|
+
case 'OR': return leftResult || rightResult;
|
|
57
|
+
case 'AND': return leftResult && rightResult;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
static matchEqualityCondition(fields, condition, path) {
|
|
61
|
+
const [field, conditionSeparator] = this.getField(condition);
|
|
62
|
+
const [head, ...tail] = field.split('.');
|
|
63
|
+
const currentValue = this.findValueForComplexCondition(fields, head, tail, path);
|
|
64
|
+
const expectedValue = this.unquoted(condition.split(conditionSeparator)[1]);
|
|
65
|
+
if (conditionSeparator === ShowCondition.CONTAINS) {
|
|
66
|
+
return this.checkValueContains(expectedValue, currentValue);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return this.checkValueEquals(expectedValue, currentValue, conditionSeparator);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
static getValue(fields, head) {
|
|
73
|
+
if (this.isDynamicList(fields[head])) {
|
|
74
|
+
return fields[head].value.code;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
return fields[head];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
static isDynamicList(dynamiclist) {
|
|
81
|
+
return !_score.isEmpty(dynamiclist) &&
|
|
82
|
+
(_score.has(dynamiclist, 'value') && _score.has(dynamiclist, 'list_items'));
|
|
83
|
+
}
|
|
84
|
+
static getField(condition) {
|
|
85
|
+
let separator = ShowCondition.CONTAINS;
|
|
86
|
+
if (condition.indexOf(ShowCondition.CONTAINS) < 0) {
|
|
87
|
+
separator = ShowCondition.CONDITION_EQUALS;
|
|
88
|
+
if (condition.indexOf(ShowCondition.CONDITION_NOT_EQUALS) > -1) {
|
|
89
|
+
separator = ShowCondition.CONDITION_NOT_EQUALS;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return [condition.split(separator)[0], separator];
|
|
93
|
+
}
|
|
94
|
+
static checkValueEquals(expectedValue, currentValue, conditionSeparaor) {
|
|
95
|
+
if (expectedValue.search('[,]') > -1) { // for multi-select list
|
|
96
|
+
return this.checkMultiSelectListEquals(expectedValue, currentValue, conditionSeparaor);
|
|
97
|
+
}
|
|
98
|
+
else if (expectedValue.endsWith('*') && currentValue && conditionSeparaor !== ShowCondition.CONDITION_NOT_EQUALS) {
|
|
99
|
+
if (typeof currentValue === 'string') {
|
|
100
|
+
return currentValue.startsWith(this.removeStarChar(expectedValue));
|
|
101
|
+
}
|
|
102
|
+
return expectedValue === '*';
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// changed from '===' to '==' to cover number field conditions
|
|
106
|
+
if (conditionSeparaor === ShowCondition.CONDITION_NOT_EQUALS) {
|
|
107
|
+
return this.checkValueNotEquals(expectedValue, currentValue);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
return currentValue == expectedValue || this.okIfBothEmpty(expectedValue, currentValue); // tslint:disable-line
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
static checkValueNotEquals(expectedValue, currentValue) {
|
|
115
|
+
const formatCurrentValue = currentValue ? currentValue.toString().trim() : '';
|
|
116
|
+
if ('*' === expectedValue && formatCurrentValue !== '') {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
const formatExpectedValue = expectedValue ? expectedValue.toString().trim() : '';
|
|
120
|
+
return formatCurrentValue != formatExpectedValue; // tslint:disable-line
|
|
121
|
+
}
|
|
122
|
+
static checkMultiSelectListEquals(expectedValue, currentValue, conditionSeparator) {
|
|
123
|
+
const expectedValues = expectedValue.split(',').sort().toString();
|
|
124
|
+
const values = currentValue ? currentValue.sort().toString() : '';
|
|
125
|
+
if (conditionSeparator === ShowCondition.CONDITION_NOT_EQUALS) {
|
|
126
|
+
return expectedValues !== values;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
return expectedValues === values;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
static checkValueContains(expectedValue, currentValue) {
|
|
133
|
+
if (expectedValue.search(',') > -1) {
|
|
134
|
+
const expectedValues = expectedValue.split(',').sort();
|
|
135
|
+
const values = currentValue ? currentValue.sort().toString() : '';
|
|
136
|
+
return expectedValues.every(item => values.search(item) >= 0);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
const values = currentValue && Array.isArray(currentValue) ? currentValue.toString() : '';
|
|
140
|
+
return values.search(expectedValue) >= 0;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
static unquoted(str) {
|
|
144
|
+
const res = str.replace(/^"|"$/g, '');
|
|
145
|
+
return res;
|
|
146
|
+
}
|
|
147
|
+
static findValueForComplexCondition(fields, head, tail, path) {
|
|
148
|
+
if (!fields) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
if (tail.length === 0) {
|
|
152
|
+
return this.getValue(fields, head);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
if (FieldsUtils.isArray(fields[head])) {
|
|
156
|
+
return this.findValueForComplexConditionInArray(fields, head, tail, path);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
return this.findValueForComplexConditionForPathIfAny(fields, head, tail, path);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
static findValueForComplexConditionForPathIfAny(fields, head, tail, path) {
|
|
164
|
+
if (path) {
|
|
165
|
+
const [_, ...pathTail] = path.split(/[_]+/g);
|
|
166
|
+
return this.findValueForComplexCondition(fields[head], tail[0], tail.slice(1), pathTail.join('_'));
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
return this.findValueForComplexCondition(fields[head], tail[0], tail.slice(1), path);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
static findValueForComplexConditionInArray(fields, head, tail, path) {
|
|
173
|
+
// use the path to resolve which array element we refer to
|
|
174
|
+
if (path.startsWith(head)) {
|
|
175
|
+
const [_, ...pathTail] = path.split(/[_]+/g);
|
|
176
|
+
if (pathTail.length > 0) {
|
|
177
|
+
try {
|
|
178
|
+
const arrayIndex = Number.parseInt(pathTail[0], 10);
|
|
179
|
+
const [__, ...dropNumberPath] = pathTail;
|
|
180
|
+
return (fields[head][arrayIndex] !== undefined) ? this.findValueForComplexCondition(fields[head][arrayIndex]['value'], tail[0], tail.slice(1), dropNumberPath.join('_')) : null;
|
|
181
|
+
}
|
|
182
|
+
catch (e) {
|
|
183
|
+
console.error('Error while parsing number', pathTail[0], e);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
console.error('Path in formArray should start with ', head, ', full path: ', path);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
static removeStarChar(str) {
|
|
192
|
+
if (str && str.indexOf('*') > -1) {
|
|
193
|
+
return str.substring(0, str.indexOf('*'));
|
|
194
|
+
}
|
|
195
|
+
return str;
|
|
196
|
+
}
|
|
197
|
+
static okIfBothEmpty(right, value) {
|
|
198
|
+
return value === null && (right === '');
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXBhcnNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9kaXJlY3RpdmVzL2NvbmRpdGlvbmFsLXNob3cvc2VydmljZXMvY29uZGl0aW9uLXBhcnNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sR0FBRyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFckYsTUFBTSxPQUFPLGVBQWU7SUFFMUI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBaUI7UUFDbkMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFBO1NBQUU7UUFBQSxDQUFDO1FBQ2hDLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFXLEVBQUUsVUFBaUIsRUFBRSxJQUFhO1FBQ2xFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQTtTQUFFO1FBQUEsQ0FBQztRQUNqQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTNDLE1BQU0sTUFBTSxHQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFvQixFQUFFLFNBQVMs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QUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDN0Y7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzdEO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3BGO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBVztRQUN2QyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFhLEVBQUUsS0FBVTtRQUNwRCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgX3Njb3JlIGZyb20gJ3VuZGVyc2NvcmUnO1xuaW1wb3J0IHBlZyBmcm9tICcuL2NvbmRpdGlvbi5wZWcnO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWVsZHMvZmllbGRzLnV0aWxzJztcbmltcG9ydCB7IFNob3dDb25kaXRpb24gfSBmcm9tICcuLi8uLi9jb25kaXRpb25hbC1zaG93L2RvbWFpbi9jb25kaXRpb25hbC1zaG93Lm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvblBhcnNlciB7XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSByYXcgZm9ybXVsYSBhbmQgb3V0cHV0IHN0cnVjdHVyZWQgY29uZGl0aW9uIGRhdGFcbiAgICogdGhhdCBjYW4gYmUgdXNlZCBpbiBldmFsdWF0aW5nIHNob3cvaGlkZSBsb2dpY1xuICAgKiBAcGFyYW0gY29uZGl0aW9uIHJhdyBmb3JtdWxhIGUuZy4gVGV4dEZpZWxkID0gXCJIZWxsb1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHBhcnNlKGNvbmRpdGlvbjogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIWNvbmRpdGlvbikgeyByZXR1cm4gbnVsbCB9O1xuICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5yZXBsYWNlKC9DT05UQUlOUy9nLCAnIENPTlRBSU5TJyk7XG4gICAgcmV0dXJuIHBlZy5wYXJzZShjb25kaXRpb24udHJpbSgpLCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIGN1cnJlbnQgZmllbGRzIGFnYWluc3QgdGhlIGNvbmRpdGlvbnNcbiAgICogQHBhcmFtIGZpZWxkcyB0aGUgY3VycmVudCBwYWdlIGZpZWxkcyBhbmQgdGhlaXIgdmFsdWVcbiAgICogQHBhcmFtIGNvbmRpdGlvbnMgVGhlIFBlZ0pTIGZvcm11bGEgb3V0cHV0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGV2YWx1YXRlKGZpZWxkczogYW55LCBjb25kaXRpb25zOiBhbnlbXSwgcGF0aD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghY29uZGl0aW9ucykgeyByZXR1cm4gdHJ1ZSB9O1xuICAgIGNvbnN0IHZhbGlkSm9pbkNvbXBhcmF0b3JzID0gWydBTkQnLCAnT1InXTtcblxuICAgIGNvbnN0IHJlc3VsdDogYm9vbGVhbiA9IGNvbmRpdGlvbnMucmVkdWNlKChhY2N1bXVsYXRvcjogYm9vbGVhbiwgY29uZGl0aW9uLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBpc0pvaW5Db21wYXJhdG9yID0gKGNvbXBhcmF0b3I6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAgICAgKHR5cGVvZiBjb21wYXJhdG9yID09PSAnc3RyaW5nJyAmJiB2YWxpZEpvaW5Db21wYXJhdG9ycy5pbmRleE9mKGNvbXBhcmF0b3IpICE9PSAtMSk7XG5cbiAgICAgIGlmIChpc0pvaW5Db21wYXJhdG9yKGNvbmRpdGlvbikpIHsgcmV0dXJuIGFjY3VtdWxhdG9yIH07XG5cbiAgICAgIGxldCBjdXJyZW50Q29uZGl0aW9uUmVzdWx0ID0gdHJ1ZTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZGl0aW9uKSkge1xuICAgICAgICBjdXJyZW50Q29uZGl0aW9uUmVzdWx0ID0gdGhpcy5ldmFsdWF0ZShmaWVsZHMsIGNvbmRpdGlvbik7XG5cbiAgICAgICAgaWYgKGlzSm9pbkNvbXBhcmF0b3IoY29uZGl0aW9uc1tpbmRleCAtIDFdKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmV2YWx1YXRlSm9pbihhY2N1bXVsYXRvciwgY29uZGl0aW9uc1tpbmRleCAtIDFdLCBjdXJyZW50Q29uZGl0aW9uUmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29uZGl0aW9uLmNvbXBhcmF0b3IpIHtcbiAgICAgICAgY29uc3QgZm9ybXVsYSA9IGNvbmRpdGlvbi5maWVsZFJlZmVyZW5jZSArIGNvbmRpdGlvbi5jb21wYXJhdG9yICsgY29uZGl0aW9uLnZhbHVlO1xuICAgICAgICBjdXJyZW50Q29uZGl0aW9uUmVzdWx0ID0gdGhpcy5tYXRjaEVxdWFsaXR5Q29uZGl0aW9uKGZpZWxkcywgZm9ybXVsYSwgcGF0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0pvaW5Db21wYXJhdG9yKGNvbmRpdGlvbnNbaW5kZXggLSAxXSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVKb2luKGFjY3VtdWxhdG9yLCBjb25kaXRpb25zW2luZGV4IC0gMV0sIGN1cnJlbnRDb25kaXRpb25SZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudENvbmRpdGlvblJlc3VsdDtcbiAgICB9LCB0cnVlKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBldmFsdWF0ZUpvaW4obGVmdFJlc3VsdDogYm9vbGVhbiwgY29tcGFyYXRvciwgcmlnaHRSZXN1bHQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGNvbXBhcmF0b3IpIHtcbiAgICAgIGNhc2UgJ09SJzogcmV0dXJuIGxlZnRSZXN1bHQgfHwgcmlnaHRSZXN1bHQ7XG4gICAgICBjYXNlICdBTkQnOiByZXR1cm4gbGVmdFJlc3VsdCAmJiByaWdodFJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtYXRjaEVxdWFsaXR5Q29uZGl0aW9uKGZpZWxkczogb2JqZWN0LCBjb25kaXRpb246IHN0cmluZywgcGF0aD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFtmaWVsZCwgY29uZGl0aW9uU2VwYXJhdG9yXSA9IHRoaXMuZ2V0RmllbGQoY29uZGl0aW9uKTtcbiAgICBjb25zdCBbaGVhZCwgLi4udGFpbF0gPSBmaWVsZC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yQ29tcGxleENvbmRpdGlvbihmaWVsZHMsIGhlYWQsIHRhaWwsIHBhdGgpO1xuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSB0aGlzLnVucXVvdGVkKGNvbmRpdGlvbi5zcGxpdChjb25kaXRpb25TZXBhcmF0b3IpWzFdKTtcbiAgICBpZiAoY29uZGl0aW9uU2VwYXJhdG9yID09PSBTaG93Q29uZGl0aW9uLkNPTlRBSU5TKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGVja1ZhbHVlQ29udGFpbnMoZXhwZWN0ZWRWYWx1ZSwgY3VycmVudFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tWYWx1ZUVxdWFscyhleHBlY3RlZFZhbHVlLCBjdXJyZW50VmFsdWUsIGNvbmRpdGlvblNlcGFyYXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VmFsdWUoZmllbGRzOiBvYmplY3QsIGhlYWQ6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljTGlzdChmaWVsZHNbaGVhZF0pKSB7XG4gICAgICByZXR1cm4gZmllbGRzW2hlYWRdLnZhbHVlLmNvZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWVsZHNbaGVhZF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNEeW5hbWljTGlzdChkeW5hbWljbGlzdDogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFfc2NvcmUuaXNFbXB0eShkeW5hbWljbGlzdCkgJiZcbiAgICAgICAgKF9zY29yZS5oYXMoZHluYW1pY2xpc3QsICd2YWx1ZScpICYmIF9zY29yZS5oYXMoZHluYW1pY2xpc3QsICdsaXN0X2l0ZW1zJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0RmllbGQoY29uZGl0aW9uOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmc/XSB7XG4gICAgbGV0IHNlcGFyYXRvcjogc3RyaW5nID0gU2hvd0NvbmRpdGlvbi5DT05UQUlOUztcbiAgICBpZiAoY29uZGl0aW9uLmluZGV4T2YoU2hvd0NvbmRpdGlvbi5DT05UQUlOUykgPCAwKSB7XG4gICAgICBzZXBhcmF0b3IgPSBTaG93Q29uZGl0aW9uLkNPTkRJVElPTl9FUVVBTFM7XG4gICAgICBpZiAoY29uZGl0aW9uLmluZGV4T2YoU2hvd0NvbmRpdGlvbi5DT05ESVRJT05fTk9UX0VRVUFMUykgPiAtMSkge1xuICAgICAgICBzZXBhcmF0b3IgPSBTaG93Q29uZGl0aW9uLkNPTkRJVElPTl9OT1RfRVFVQUxTO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWyBjb25kaXRpb24uc3BsaXQoc2VwYXJhdG9yKVswXSwgc2VwYXJhdG9yIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGVja1ZhbHVlRXF1YWxzKGV4cGVjdGVkVmFsdWU6IHN0cmluZywgY3VycmVudFZhbHVlOiBhbnksIGNvbmRpdGlvblNlcGFyYW9yOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoZXhwZWN0ZWRWYWx1ZS5zZWFyY2goJ1ssXScpID4gLTEpIHsgLy8gZm9yICBtdWx0aS1zZWxlY3QgbGlzdFxuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tNdWx0aVNlbGVjdExpc3RFcXVhbHMoZXhwZWN0ZWRWYWx1ZSwgY3VycmVudFZhbHVlLCBjb25kaXRpb25TZXBhcmFvcik7XG4gICAgfSBlbHNlIGlmIChleHBlY3RlZFZhbHVlLmVuZHNXaXRoKCcqJykgJiYgY3VycmVudFZhbHVlICYmIGNvbmRpdGlvblNlcGFyYW9yICE9PSBTaG93Q29uZGl0aW9uLkNPTkRJVElPTl9OT1RfRVFVQUxTKSB7XG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZS5zdGFydHNXaXRoKHRoaXMucmVtb3ZlU3RhckNoYXIoZXhwZWN0ZWRWYWx1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4cGVjdGVkVmFsdWUgPT09ICcqJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hhbmdlZCBmcm9tICc9PT0nIHRvICc9PScgdG8gY292ZXIgbnVtYmVyIGZpZWxkIGNvbmRpdGlvbnNcbiAgICAgIGlmIChjb25kaXRpb25TZXBhcmFvciA9PT0gU2hvd0NvbmRpdGlvbi5DT05ESVRJT05fTk9UX0VRVUFMUykge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja1ZhbHVlTm90RXF1YWxzKGV4cGVjdGVkVmFsdWUsIGN1cnJlbnRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlID09IGV4cGVjdGVkVmFsdWUgfHwgdGhpcy5va0lmQm90aEVtcHR5KGV4cGVjdGVkVmFsdWUsIGN1cnJlbnRWYWx1ZSk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGVja1ZhbHVlTm90RXF1YWxzKGV4cGVjdGVkVmFsdWU6IHN0cmluZywgY3VycmVudFZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBmb3JtYXRDdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgPyBjdXJyZW50VmFsdWUudG9TdHJpbmcoKS50cmltKCkgOiAnJztcbiAgICBpZiAoJyonID09PSBleHBlY3RlZFZhbHVlICYmIGZvcm1hdEN1cnJlbnRWYWx1ZSAhPT0gJycpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZm9ybWF0RXhwZWN0ZWRWYWx1ZSA9IGV4cGVjdGVkVmFsdWUgPyBleHBlY3RlZFZhbHVlLnRvU3RyaW5nKCkudHJpbSgpIDogJyc7XG4gICAgcmV0dXJuIGZvcm1hdEN1cnJlbnRWYWx1ZSAhPSBmb3JtYXRFeHBlY3RlZFZhbHVlOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGVja011bHRpU2VsZWN0TGlzdEVxdWFscyhleHBlY3RlZFZhbHVlOiBzdHJpbmcsIGN1cnJlbnRWYWx1ZTogYW55LCBjb25kaXRpb25TZXBhcmF0b3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gZXhwZWN0ZWRWYWx1ZS5zcGxpdCgnLCcpLnNvcnQoKS50b1N0cmluZygpO1xuICAgIGNvbnN0IHZhbHVlcyA9IGN1cnJlbnRWYWx1ZSA/IGN1cnJlbnRWYWx1ZS5zb3J0KCkudG9TdHJpbmcoKSA6ICcnO1xuICAgIGlmIChjb25kaXRpb25TZXBhcmF0b3IgPT09IFNob3dDb25kaXRpb24uQ09ORElUSU9OX05PVF9FUVVBTFMpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZFZhbHVlcyAhPT0gdmFsdWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWRWYWx1ZXMgPT09IHZhbHVlcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGVja1ZhbHVlQ29udGFpbnMoZXhwZWN0ZWRWYWx1ZTogc3RyaW5nLCBjdXJyZW50VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChleHBlY3RlZFZhbHVlLnNlYXJjaCgnLCcpID4gLTEpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gZXhwZWN0ZWRWYWx1ZS5zcGxpdCgnLCcpLnNvcnQoKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGN1cnJlbnRWYWx1ZSA/IGN1cnJlbnRWYWx1ZS5zb3J0KCkudG9TdHJpbmcoKSA6ICcnO1xuICAgICAgcmV0dXJuIGV4cGVjdGVkVmFsdWVzLmV2ZXJ5KGl0ZW0gPT4gdmFsdWVzLnNlYXJjaChpdGVtKSA+PSAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVzID0gY3VycmVudFZhbHVlICYmIEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSA/IGN1cnJlbnRWYWx1ZS50b1N0cmluZygpIDogJyc7XG4gICAgICByZXR1cm4gdmFsdWVzLnNlYXJjaChleHBlY3RlZFZhbHVlKSA+PSAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHVucXVvdGVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXMgPSBzdHIucmVwbGFjZSgvXlwifFwiJC9nLCAnJyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpbmRWYWx1ZUZvckNvbXBsZXhDb25kaXRpb24oZmllbGRzOiBvYmplY3QsIGhlYWQ6IHN0cmluZywgdGFpbDogc3RyaW5nW10sIHBhdGg/OiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghZmllbGRzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodGFpbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKGZpZWxkcywgaGVhZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChGaWVsZHNVdGlscy5pc0FycmF5KGZpZWxkc1toZWFkXSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFZhbHVlRm9yQ29tcGxleENvbmRpdGlvbkluQXJyYXkoZmllbGRzLCBoZWFkLCB0YWlsLCBwYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRWYWx1ZUZvckNvbXBsZXhDb25kaXRpb25Gb3JQYXRoSWZBbnkoZmllbGRzLCBoZWFkLCB0YWlsLCBwYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmaW5kVmFsdWVGb3JDb21wbGV4Q29uZGl0aW9uRm9yUGF0aElmQW55KGZpZWxkczogb2JqZWN0LCBoZWFkOiBzdHJpbmcsIHRhaWw6IHN0cmluZ1tdLCBwYXRoPzogc3RyaW5nKTogYW55IHtcbiAgICBpZiAocGF0aCkge1xuICAgICAgY29uc3QgW18sIC4uLnBhdGhUYWlsXSA9IHBhdGguc3BsaXQoL1tfXSsvZyk7XG4gICAgICByZXR1cm4gdGhpcy5maW5kVmFsdWVGb3JDb21wbGV4Q29uZGl0aW9uKGZpZWxkc1toZWFkXSwgdGFpbFswXSwgdGFpbC5zbGljZSgxKSwgcGF0aFRhaWwuam9pbignXycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZmluZFZhbHVlRm9yQ29tcGxleENvbmRpdGlvbihmaWVsZHNbaGVhZF0sIHRhaWxbMF0sIHRhaWwuc2xpY2UoMSksIHBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpbmRWYWx1ZUZvckNvbXBsZXhDb25kaXRpb25JbkFycmF5KGZpZWxkczogb2JqZWN0LCBoZWFkOiBzdHJpbmcsIHRhaWw6IHN0cmluZ1tdLCBwYXRoPzogc3RyaW5nKTogYW55IHtcbiAgLy8gdXNlIHRoZSBwYXRoIHRvIHJlc29sdmUgd2hpY2ggYXJyYXkgZWxlbWVudCB3ZSByZWZlciB0b1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoaGVhZCkpIHtcbiAgICAgIGNvbnN0IFtfLCAuLi5wYXRoVGFpbF0gPSBwYXRoLnNwbGl0KC9bX10rL2cpO1xuICAgICAgaWYgKHBhdGhUYWlsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBhcnJheUluZGV4ID0gTnVtYmVyLnBhcnNlSW50KHBhdGhUYWlsWzBdLCAxMCk7XG4gICAgICAgICAgY29uc3QgW19fLCAuLi5kcm9wTnVtYmVyUGF0aF0gPSBwYXRoVGFpbDtcbiAgICAgICAgICByZXR1cm4gKGZpZWxkc1toZWFkXVthcnJheUluZGV4XSAhPT0gdW5kZWZpbmVkKSA/IHRoaXMuZmluZFZhbHVlRm9yQ29tcGxleENvbmRpdGlvbihcbiAgICAgICAgICBmaWVsZHNbaGVhZF1bYXJyYXlJbmRleF1bJ3ZhbHVlJ10sIHRhaWxbMF0sIHRhaWwuc2xpY2UoMSksIGRyb3BOdW1iZXJQYXRoLmpvaW4oJ18nKSkgOiBudWxsO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgcGFyc2luZyBudW1iZXInLCBwYXRoVGFpbFswXSwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignUGF0aCBpbiBmb3JtQXJyYXkgc2hvdWxkIHN0YXJ0IHdpdGggJywgaGVhZCwgJywgZnVsbCBwYXRoOiAnLCBwYXRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZW1vdmVTdGFyQ2hhcihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHN0ciAmJiBzdHIuaW5kZXhPZignKicpID4gLTEpIHtcbiAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIHN0ci5pbmRleE9mKCcqJykpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb2tJZkJvdGhFbXB0eShyaWdodDogc3RyaW5nLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsICYmIChyaWdodCA9PT0gJycpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { generate } from 'pegjs';
|
|
2
|
+
const conditionSource = `{
|
|
3
|
+
function flat(arr, depth = 1) {
|
|
4
|
+
var flatten = function (arr, depth = 1) {
|
|
5
|
+
if (depth) return arr;
|
|
6
|
+
|
|
7
|
+
// Otherwise, concatenate into the parent array
|
|
8
|
+
return arr.reduce(function (acc, val) {
|
|
9
|
+
return acc.concat(Array.isArray(val) ? flatten(val, depth - 1) : val);
|
|
10
|
+
}, []);
|
|
11
|
+
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return flatten(arr, depth - 1);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
Start
|
|
19
|
+
= Formula
|
|
20
|
+
|
|
21
|
+
Formula
|
|
22
|
+
= EnclosedFormula
|
|
23
|
+
/ OpenFormula
|
|
24
|
+
|
|
25
|
+
EnclosedFormula
|
|
26
|
+
= bracket formula:OpenFormula bracket join:(JoinComparator)*
|
|
27
|
+
{ return flat([ [formula], join[0] ], 1) }
|
|
28
|
+
|
|
29
|
+
OpenFormula
|
|
30
|
+
= eq:OpenEqualityCheck joins:(JoinComparator)*
|
|
31
|
+
{ return flat([ eq, flat(joins) ]) }
|
|
32
|
+
|
|
33
|
+
JoinComparator
|
|
34
|
+
= comp:Comparator eq:OpenEqualityCheck
|
|
35
|
+
{ return [comp, eq]; }
|
|
36
|
+
/ CompoundJoinComparator
|
|
37
|
+
|
|
38
|
+
CompoundJoinComparator
|
|
39
|
+
= comp:Comparator bracket f:OpenFormula bracket
|
|
40
|
+
{ return [comp, f ] }
|
|
41
|
+
|
|
42
|
+
OpenEqualityCheck
|
|
43
|
+
= fr:FieldReference _? op:operator _? val:Value
|
|
44
|
+
{ return { fieldReference: fr, comparator: op, value: val } }
|
|
45
|
+
|
|
46
|
+
Comparator
|
|
47
|
+
= _? c:'AND' _?
|
|
48
|
+
{ return c; }
|
|
49
|
+
/ _? c:'OR' _?
|
|
50
|
+
{ return c; }
|
|
51
|
+
|
|
52
|
+
Word
|
|
53
|
+
= l:Letter+
|
|
54
|
+
{ return l.join(""); }
|
|
55
|
+
|
|
56
|
+
Letter
|
|
57
|
+
= [a-zA-Z]
|
|
58
|
+
|
|
59
|
+
Value
|
|
60
|
+
= v:quotedValue / v:Word
|
|
61
|
+
{ return v.join("") }
|
|
62
|
+
/ v:number
|
|
63
|
+
{ return parseInt(v.join("")) }
|
|
64
|
+
|
|
65
|
+
FieldReference
|
|
66
|
+
= characters:[A-Za-z0-9._]+ { return characters.join(""); }
|
|
67
|
+
|
|
68
|
+
number
|
|
69
|
+
= [0-9]+
|
|
70
|
+
|
|
71
|
+
quotedValue
|
|
72
|
+
= '"'val:[A-Za-z0-9.,* _-]*'"'
|
|
73
|
+
{ return val.join(""); }
|
|
74
|
+
|
|
75
|
+
bracket
|
|
76
|
+
= (_? "("+ _? / _? ")"+ _? )
|
|
77
|
+
|
|
78
|
+
operator
|
|
79
|
+
= "=" / "!=" / "CONTAINS"
|
|
80
|
+
|
|
81
|
+
ws "Whitespace"
|
|
82
|
+
= [ \t]
|
|
83
|
+
|
|
84
|
+
_ "One or more whitespaces"
|
|
85
|
+
= ws+
|
|
86
|
+
|
|
87
|
+
nl "New line"
|
|
88
|
+
= "\\n"`;
|
|
89
|
+
export default generate(conditionSource);
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLnBlZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvZGlyZWN0aXZlcy9jb25kaXRpb25hbC1zaG93L3NlcnZpY2VzL2NvbmRpdGlvbi5wZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVqQyxNQUFNLGVBQWUsR0FDbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBc0ZTLENBQUM7QUFFWixlQUFlLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSAncGVnanMnO1xuXG5jb25zdCBjb25kaXRpb25Tb3VyY2UgPVxuICBge1xuICAgIGZ1bmN0aW9uIGZsYXQoYXJyLCBkZXB0aCA9IDEpIHtcbiAgICAgIHZhciBmbGF0dGVuID0gZnVuY3Rpb24gKGFyciwgZGVwdGggPSAxKSB7XG4gICAgICAgIGlmIChkZXB0aCkgcmV0dXJuIGFycjtcblxuICAgICAgLy8gT3RoZXJ3aXNlLCBjb25jYXRlbmF0ZSBpbnRvIHRoZSBwYXJlbnQgYXJyYXlcbiAgICAgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHZhbCkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChBcnJheS5pc0FycmF5KHZhbCkgPyBmbGF0dGVuKHZhbCwgZGVwdGggLSAxKSA6IHZhbCk7XG4gICAgICB9LCBbXSk7XG5cbiAgICAgIH07XG5cbiAgICByZXR1cm4gZmxhdHRlbihhcnIsIGRlcHRoIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgU3RhcnRcbiAgICA9IEZvcm11bGFcblxuICBGb3JtdWxhXG4gICAgPSBFbmNsb3NlZEZvcm11bGFcbiAgICAvIE9wZW5Gb3JtdWxhXG5cbiAgRW5jbG9zZWRGb3JtdWxhXG4gICAgPSBicmFja2V0IGZvcm11bGE6T3BlbkZvcm11bGEgYnJhY2tldCBqb2luOihKb2luQ29tcGFyYXRvcikqXG4gICAgICB7IHJldHVybiBmbGF0KFsgW2Zvcm11bGFdLCBqb2luWzBdIF0sIDEpIH1cblxuICBPcGVuRm9ybXVsYVxuICAgID0gZXE6T3BlbkVxdWFsaXR5Q2hlY2sgam9pbnM6KEpvaW5Db21wYXJhdG9yKSpcbiAgICAgIHsgcmV0dXJuIGZsYXQoWyBlcSwgZmxhdChqb2lucykgXSkgfVxuXG4gIEpvaW5Db21wYXJhdG9yXG4gICAgPSBjb21wOkNvbXBhcmF0b3IgZXE6T3BlbkVxdWFsaXR5Q2hlY2tcbiAgICAgIHsgcmV0dXJuIFtjb21wLCBlcV07IH1cbiAgICAgIC8gQ29tcG91bmRKb2luQ29tcGFyYXRvclxuXG4gIENvbXBvdW5kSm9pbkNvbXBhcmF0b3JcbiAgICA9IGNvbXA6Q29tcGFyYXRvciBicmFja2V0IGY6T3BlbkZvcm11bGEgYnJhY2tldFxuICAgICAgeyByZXR1cm4gW2NvbXAsIGYgXSB9XG5cbiAgT3BlbkVxdWFsaXR5Q2hlY2tcbiAgICA9IGZyOkZpZWxkUmVmZXJlbmNlIF8/IG9wOm9wZXJhdG9yIF8/IHZhbDpWYWx1ZVxuICAgICB7IHJldHVybiB7IGZpZWxkUmVmZXJlbmNlOiBmciwgY29tcGFyYXRvcjogb3AsIHZhbHVlOiB2YWwgfSB9XG5cbiAgQ29tcGFyYXRvclxuICAgPSBfPyBjOidBTkQnIF8/XG4gICB7IHJldHVybiBjOyB9XG4gICAvIF8/IGM6J09SJyBfP1xuICAgeyByZXR1cm4gYzsgfVxuXG4gIFdvcmRcbiAgID0gbDpMZXR0ZXIrXG4gICB7IHJldHVybiBsLmpvaW4oXCJcIik7IH1cblxuICBMZXR0ZXJcbiAgID0gW2EtekEtWl1cblxuICBWYWx1ZVxuICAgPSB2OnF1b3RlZFZhbHVlIC8gdjpXb3JkXG4gICB7IHJldHVybiB2LmpvaW4oXCJcIikgfVxuICAgLyB2Om51bWJlclxuICAgeyByZXR1cm4gcGFyc2VJbnQodi5qb2luKFwiXCIpKSB9XG5cbiAgRmllbGRSZWZlcmVuY2VcbiAgICA9IGNoYXJhY3RlcnM6W0EtWmEtejAtOS5fXSsgeyByZXR1cm4gY2hhcmFjdGVycy5qb2luKFwiXCIpOyB9XG5cbiAgbnVtYmVyXG4gICA9IFswLTldK1xuXG4gIHF1b3RlZFZhbHVlXG4gICA9ICdcIid2YWw6W0EtWmEtejAtOS4sKiBfLV0qJ1wiJ1xuICAgeyByZXR1cm4gdmFsLmpvaW4oXCJcIik7IH1cblxuICBicmFja2V0XG4gICA9IChfPyBcIihcIisgXz8gLyBfPyBcIilcIisgXz8gKVxuXG4gIG9wZXJhdG9yXG4gICA9IFwiPVwiIC8gXCIhPVwiIC8gXCJDT05UQUlOU1wiXG5cbiAgd3MgXCJXaGl0ZXNwYWNlXCJcbiAgID0gWyBcXHRdXG5cbiAgXyBcIk9uZSBvciBtb3JlIHdoaXRlc3BhY2VzXCJcbiAgID0gd3MrXG5cbiAgbmwgXCJOZXcgbGluZVwiXG4gICA9IFwiXFxcXG5cImA7XG5cbmV4cG9ydCBkZWZhdWx0IGdlbmVyYXRlKGNvbmRpdGlvblNvdXJjZSk7XG4iXX0=
|
|
@@ -6,4 +6,4 @@ export class HmctsServiceDetail {
|
|
|
6
6
|
this.service_id = 0;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG1jdHMtc2VydmljZS1kZXRhaWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2RvbWFpbi9jYXNlLWZsYWcvaG1jdHMtc2VydmljZS1kZXRhaWwubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQS9CO1FBU1MsZUFBVSxHQUFHLENBQUMsQ0FBQztJQUd4QixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERUTyB0byBwcm92aWRlIHR5cGluZyBvZiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgUmVmZXJlbmNlIERhdGEgTG9jYXRpb24gQVBJIGZvciBITUNUUyBzZXJ2aWNlIGRldGFpbHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBIbWN0c1NlcnZpY2VEZXRhaWwge1xuICBwdWJsaWMgYnVzaW5lc3NfYXJlYTogc3RyaW5nO1xuICBwdWJsaWMgY2NkX2Nhc2VfdHlwZXM6IHN0cmluZ1tdO1xuICBwdWJsaWMgY2NkX3NlcnZpY2VfbmFtZTogc3RyaW5nO1xuICBwdWJsaWMganVyaXNkaWN0aW9uOiBzdHJpbmc7XG4gIHB1YmxpYyBsYXN0X3VwZGF0ZT86IHN0cmluZztcbiAgcHVibGljIG9yZ191bml0OiBzdHJpbmc7XG4gIHB1YmxpYyBzZXJ2aWNlX2NvZGU/OiBzdHJpbmc7XG4gIHB1YmxpYyBzZXJ2aWNlX2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgc2VydmljZV9pZCA9IDA7XG4gIHB1YmxpYyBzZXJ2aWNlX3Nob3J0X2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgc3ViX2J1c2luZXNzX2FyZWE6IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -49,13 +49,14 @@ export class CaseFlagRefdataService {
|
|
|
49
49
|
return of(null);
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
|
-
* Retrieves the HMCTS service details for a jurisdiction or service, including service
|
|
53
|
-
* service has
|
|
52
|
+
* Retrieves the HMCTS service details for a jurisdiction or service, including service codes. More than one
|
|
53
|
+
* service code may be present. For example, the Divorce jurisdiction/service has corresponding service codes of
|
|
54
|
+
* "ABA1" and "ABA2".
|
|
54
55
|
*
|
|
55
56
|
* @param serviceNames The service name(s) to look up, comma-separated if more than one
|
|
56
57
|
* @returns An `Observable` of an array of service details
|
|
57
58
|
*/
|
|
58
|
-
|
|
59
|
+
getHmctsServiceDetailsByServiceName(serviceNames) {
|
|
59
60
|
let url = this.appConfig.getLocationRefApiUrl();
|
|
60
61
|
if (url) {
|
|
61
62
|
url += '/orgServices';
|
|
@@ -66,10 +67,30 @@ export class CaseFlagRefdataService {
|
|
|
66
67
|
}
|
|
67
68
|
return of(null);
|
|
68
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Retrieves the HMCTS service details for a case type, including service code. For example, the
|
|
72
|
+
* "FinancialRemedyContested" case type is associated with the Divorce jurisdiction/service and service code "ABA2".
|
|
73
|
+
*
|
|
74
|
+
* Note that a case type might not be associated with any service codes of a jurisdiction or service.
|
|
75
|
+
*
|
|
76
|
+
* @param caseTypeId The case type ID to look up
|
|
77
|
+
* @returns An `Observable` of an array of service details
|
|
78
|
+
*/
|
|
79
|
+
getHmctsServiceDetailsByCaseType(caseTypeId) {
|
|
80
|
+
let url = this.appConfig.getLocationRefApiUrl();
|
|
81
|
+
if (url) {
|
|
82
|
+
url += '/orgServices';
|
|
83
|
+
if (caseTypeId) {
|
|
84
|
+
url += `?ccdCaseType=${caseTypeId}`;
|
|
85
|
+
}
|
|
86
|
+
return this.http.get(url, { observe: 'body' });
|
|
87
|
+
}
|
|
88
|
+
return of(null);
|
|
89
|
+
}
|
|
69
90
|
}
|
|
70
91
|
CaseFlagRefdataService.ɵfac = function CaseFlagRefdataService_Factory(t) { return new (t || CaseFlagRefdataService)(i0.ɵɵinject(i1.HttpService), i0.ɵɵinject(i2.AbstractAppConfig)); };
|
|
71
92
|
CaseFlagRefdataService.ɵprov = i0.ɵɵdefineInjectable({ token: CaseFlagRefdataService, factory: CaseFlagRefdataService.ɵfac });
|
|
72
93
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseFlagRefdataService, [{
|
|
73
94
|
type: Injectable
|
|
74
95
|
}], function () { return [{ type: i1.HttpService }, { type: i2.AbstractAppConfig }]; }, null); })();
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1mbGFnLXJlZmRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvY2FzZS1mbGFnL2Nhc2UtZmxhZy1yZWZkYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7OztBQUl0QyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ21CLElBQWlCLEVBQ2pCLFNBQTRCO1FBRDVCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7SUFDM0MsQ0FBQztJQUVMOzs7Ozs7O09BT0c7SUFDSSxtQkFBbUIsQ0FBQyxTQUFpQixFQUFFLFFBQThCLEVBQUUsYUFBdUI7UUFDbkcsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRXJELElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksUUFBUSxFQUFFO2dCQUNaLEdBQUcsSUFBSSxjQUFjLFFBQVEsRUFBRSxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO2dCQUN6QiwrRkFBK0Y7Z0JBQy9GLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7Z0JBQ2hELGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUM7YUFDdkU7WUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJO2lCQUNiLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUM7aUJBQzNCLElBQUk7WUFDSCxnSEFBZ0g7WUFDaEgsaUhBQWlIO1lBQ2pILG1CQUFtQjtZQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO29CQUNqSCwwR0FBMEc7b0JBQzFHLDJCQUEyQjtvQkFDM0IsT0FBTyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDO2lCQUNsRTtnQkFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDTDtRQUVELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksbUNBQW1DLENBQUMsWUFBcUI7UUFDOUQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRWhELElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxJQUFJLGNBQWMsQ0FBQztZQUN0QixJQUFJLFlBQVksRUFBRTtnQkFDaEIsR0FBRyxJQUFJLG9CQUFvQixZQUFZLEVBQUUsQ0FBQzthQUMzQztZQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7U0FDOUM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxnQ0FBZ0MsQ0FBQyxVQUFtQjtRQUN6RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFaEQsSUFBSSxHQUFHLEVBQUU7WUFDUCxHQUFHLElBQUksY0FBYyxDQUFDO1lBQ3RCLElBQUksVUFBVSxFQUFFO2dCQUNkLEdBQUcsSUFBSSxnQkFBZ0IsVUFBVSxFQUFFLENBQUM7YUFDckM7WUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQzs7NEZBN0ZVLHNCQUFzQjs4REFBdEIsc0JBQXNCLFdBQXRCLHNCQUFzQjt1RkFBdEIsc0JBQXNCO2NBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7IEZsYWdUeXBlLCBIbWN0c1NlcnZpY2VEZXRhaWwgfSBmcm9tICcuLi8uLi9kb21haW4vY2FzZS1mbGFnJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vaHR0cCc7XG5pbXBvcnQgeyBSZWZkYXRhQ2FzZUZsYWdUeXBlIH0gZnJvbSAnLi9yZWZkYXRhLWNhc2UtZmxhZy10eXBlLmVudW0nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2FzZUZsYWdSZWZkYXRhU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBDb25maWc6IEFic3RyYWN0QXBwQ29uZmlnXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgQ2FzZSBGbGFnIHR5cGVzIGZvciBhbiBITUNUUyBzZXJ2aWNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZUlkIFRoZSBITUNUUyBTZXJ2aWNlIENvZGUgZm9yIGEganVyaXNkaWN0aW9uIG9yIHNlcnZpY2UuICoqTm90ZToqKiBUaGlzIGlzIF9ub3RfIHRoZSBzZXJ2aWNlIG5hbWVcbiAgICogQHBhcmFtIGZsYWdUeXBlIGBQQVJUWWAgZm9yIHBhcnR5LWxldmVsIGZsYWdzOyBgQ0FTRWAgZm9yIGNhc2UtbGV2ZWxcbiAgICogQHBhcmFtIHdlbHNoUmVxdWlyZWQgYHRydWVgIGlmIFdlbHNoIGxhbmd1YWdlIHZlcnNpb25zIG9mIGZsYWdzIGFyZSByZXF1aXJlZDsgYGZhbHNlYCBvdGhlcndpc2UgKGZ1dHVyZSBmZWF0dXJlKVxuICAgKiBAcmV0dXJucyBBbiBgT2JzZXJ2YWJsZWAgb2YgYW4gYXJyYXkgb2YgZmxhZyB0eXBlc1xuICAgKi9cbiAgcHVibGljIGdldENhc2VGbGFnc1JlZmRhdGEoc2VydmljZUlkOiBzdHJpbmcsIGZsYWdUeXBlPzogUmVmZGF0YUNhc2VGbGFnVHlwZSwgd2Vsc2hSZXF1aXJlZD86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEZsYWdUeXBlW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0Q2FzZUZsYWdzUmVmZGF0YUFwaVVybCgpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJzpzaWQnLCBzZXJ2aWNlSWQpO1xuICAgICAgaWYgKGZsYWdUeXBlKSB7XG4gICAgICAgIHVybCArPSBgP2ZsYWctdHlwZT0ke2ZsYWdUeXBlfWA7XG4gICAgICB9XG4gICAgICBpZiAod2Vsc2hSZXF1aXJlZCAhPSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGZsYWctdHlwZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcXVlcnkgc3RyaW5nOyBpZiBzbywgYXBwZW5kIHdlbHNoLXJlcXVpcmVkIHdpdGggJyYnXG4gICAgICAgIHVybC5pbmRleE9mKCc/JykgPiAtMSA/IHVybCArPSAnJicgOiB1cmwgKz0gJz8nO1xuICAgICAgICB3ZWxzaFJlcXVpcmVkID8gdXJsICs9ICd3ZWxzaC1yZXF1aXJlZD1ZJyA6IHVybCArPSAnd2Vsc2gtcmVxdWlyZWQ9Tic7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLmdldCh1cmwsIHtvYnNlcnZlOiAnYm9keSd9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBSZWZlcmVuY2UgRGF0YSBDb21tb24gQVBJIHJldHVybnMgYSBzaW5nbGUgb2JqZWN0IHdpdGggYSBcImZsYWdzXCIgYXJyYXksIHdoaWNoIGl0c2VsZiBjb250YWlucyBhIHNpbmdsZSBvYmplY3RcbiAgICAgICAgICAvLyB3aXRoIGEgXCJGbGFnRGV0YWlsc1wiIGFycmF5LCB3aGljaCBjb250YWlucyBhIGhpZXJhcmNoeSBvZiBmbGFnIHR5cGVzIGluIGFuIG9iamVjdCAtIG9uZSBlYWNoIGZvciBcIlBhcnR5XCIgZmxhZ3NcbiAgICAgICAgICAvLyBhbmQgXCJDYXNlXCIgZmxhZ3NcbiAgICAgICAgICBtYXAoYm9keSA9PiB7XG4gICAgICAgICAgICBpZiAoIWJvZHkgfHwgIWJvZHkuZmxhZ3MgfHwgIWJvZHkuZmxhZ3MubGVuZ3RoIHx8ICFib2R5LmZsYWdzWzBdLkZsYWdEZXRhaWxzIHx8ICFib2R5LmZsYWdzWzBdLkZsYWdEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBOb3RlOiBSZWZlcmVuY2UgRGF0YSBDb21tb24gQVBJIGFwcGVhcnMgdG8gcmVzcG9uZCB3aXRoIGEgNDA0IGVycm9yIHJhdGhlciB0aGFuIHNlbmQgYW4gZW1wdHkgcmVzcG9uc2UsXG4gICAgICAgICAgICAgIC8vIHNvIHRoaXMgbWF5IGJlIHJlZHVuZGFudFxuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ05vIGZsYWcgdHlwZXMgY291bGQgYmUgcmV0cmlldmVkJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJvZHkuZmxhZ3NbMF0uRmxhZ0RldGFpbHM7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBITUNUUyBzZXJ2aWNlIGRldGFpbHMgZm9yIGEganVyaXNkaWN0aW9uIG9yIHNlcnZpY2UsIGluY2x1ZGluZyBzZXJ2aWNlIGNvZGVzLiBNb3JlIHRoYW4gb25lXG4gICAqIHNlcnZpY2UgY29kZSBtYXkgYmUgcHJlc2VudC4gRm9yIGV4YW1wbGUsIHRoZSBEaXZvcmNlIGp1cmlzZGljdGlvbi9zZXJ2aWNlIGhhcyBjb3JyZXNwb25kaW5nIHNlcnZpY2UgY29kZXMgb2ZcbiAgICogXCJBQkExXCIgYW5kIFwiQUJBMlwiLlxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZU5hbWVzIFRoZSBzZXJ2aWNlIG5hbWUocykgdG8gbG9vayB1cCwgY29tbWEtc2VwYXJhdGVkIGlmIG1vcmUgdGhhbiBvbmVcbiAgICogQHJldHVybnMgQW4gYE9ic2VydmFibGVgIG9mIGFuIGFycmF5IG9mIHNlcnZpY2UgZGV0YWlsc1xuICAgKi9cbiAgcHVibGljIGdldEhtY3RzU2VydmljZURldGFpbHNCeVNlcnZpY2VOYW1lKHNlcnZpY2VOYW1lcz86IHN0cmluZyk6IE9ic2VydmFibGU8SG1jdHNTZXJ2aWNlRGV0YWlsW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0TG9jYXRpb25SZWZBcGlVcmwoKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybCArPSAnL29yZ1NlcnZpY2VzJztcbiAgICAgIGlmIChzZXJ2aWNlTmFtZXMpIHtcbiAgICAgICAgdXJsICs9IGA/Y2NkU2VydmljZU5hbWVzPSR7c2VydmljZU5hbWVzfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge29ic2VydmU6ICdib2R5J30pO1xuICAgIH1cblxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEhNQ1RTIHNlcnZpY2UgZGV0YWlscyBmb3IgYSBjYXNlIHR5cGUsIGluY2x1ZGluZyBzZXJ2aWNlIGNvZGUuIEZvciBleGFtcGxlLCB0aGVcbiAgICogXCJGaW5hbmNpYWxSZW1lZHlDb250ZXN0ZWRcIiBjYXNlIHR5cGUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaXZvcmNlIGp1cmlzZGljdGlvbi9zZXJ2aWNlIGFuZCBzZXJ2aWNlIGNvZGUgXCJBQkEyXCIuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBhIGNhc2UgdHlwZSBtaWdodCBub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGFueSBzZXJ2aWNlIGNvZGVzIG9mIGEganVyaXNkaWN0aW9uIG9yIHNlcnZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSBjYXNlVHlwZUlkIFRoZSBjYXNlIHR5cGUgSUQgdG8gbG9vayB1cFxuICAgKiBAcmV0dXJucyBBbiBgT2JzZXJ2YWJsZWAgb2YgYW4gYXJyYXkgb2Ygc2VydmljZSBkZXRhaWxzXG4gICAqL1xuICBwdWJsaWMgZ2V0SG1jdHNTZXJ2aWNlRGV0YWlsc0J5Q2FzZVR5cGUoY2FzZVR5cGVJZD86IHN0cmluZyk6IE9ic2VydmFibGU8SG1jdHNTZXJ2aWNlRGV0YWlsW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0TG9jYXRpb25SZWZBcGlVcmwoKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybCArPSAnL29yZ1NlcnZpY2VzJztcbiAgICAgIGlmIChjYXNlVHlwZUlkKSB7XG4gICAgICAgIHVybCArPSBgP2NjZENhc2VUeXBlPSR7Y2FzZVR5cGVJZH1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHtvYnNlcnZlOiAnYm9keSd9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cbn1cbiJdfQ==
|