@hmcts/ccd-case-ui-toolkit 6.13.0-test1 → 6.13.9-eui-7744-mv-upgrade

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +486 -258
  2. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
  3. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -1
  4. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
  5. package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +20 -3
  6. package/esm2015/lib/shared/components/palette/case-file-view/components/case-file-view-folder-selector/case-file-view-folder-selector.component.js +1 -1
  7. package/esm2015/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.js +30 -19
  8. package/esm2015/lib/shared/components/palette/case-flag/write-case-flag-field.component.js +35 -24
  9. package/esm2015/lib/shared/components/palette/datetime-picker/datetime-picker.component.js +10 -3
  10. package/esm2015/lib/shared/components/palette/palette.module.js +2 -2
  11. package/esm2015/lib/shared/components/search-result/search-result.component.js +10 -14
  12. package/esm2015/lib/shared/directives/conditional-show/domain/conditional-show.model.js +103 -200
  13. package/esm2015/lib/shared/directives/conditional-show/services/condition-parser.service.js +201 -0
  14. package/esm2015/lib/shared/directives/conditional-show/services/condition.peg.js +103 -0
  15. package/esm2015/lib/shared/domain/case-flag/hmcts-service-detail.model.js +1 -1
  16. package/esm2015/lib/shared/services/case-flag/case-flag-refdata.service.js +25 -4
  17. package/fesm2015/hmcts-ccd-case-ui-toolkit.js +502 -238
  18. package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
  19. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +1 -0
  20. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
  21. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +3 -1
  22. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
  23. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +2 -0
  24. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
  25. package/lib/shared/components/palette/datetime-picker/datetime-picker.component.d.ts.map +1 -1
  26. package/lib/shared/directives/conditional-show/domain/conditional-show.model.d.ts +13 -30
  27. package/lib/shared/directives/conditional-show/domain/conditional-show.model.d.ts.map +1 -1
  28. package/lib/shared/directives/conditional-show/services/condition-parser.service.d.ts +30 -0
  29. package/lib/shared/directives/conditional-show/services/condition-parser.service.d.ts.map +1 -0
  30. package/lib/shared/directives/conditional-show/services/condition.peg.d.ts +3 -0
  31. package/lib/shared/directives/conditional-show/services/condition.peg.d.ts.map +1 -0
  32. package/lib/shared/domain/case-flag/hmcts-service-detail.model.d.ts.map +1 -1
  33. package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts +14 -3
  34. package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts.map +1 -1
  35. 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 || conditions.length === 0) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXBhcnNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9kaXJlY3RpdmVzL2NvbmRpdGlvbmFsLXNob3cvc2VydmljZXMvY29uZGl0aW9uLXBhcnNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sR0FBRyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFckYsTUFBTSxPQUFPLGVBQWU7SUFFMUI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBaUI7UUFDbkMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFBO1NBQUU7UUFBQSxDQUFDO1FBQ2hDLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFXLEVBQUUsVUFBaUIsRUFBRSxJQUFhO1FBQ2xFLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQTtTQUFFO1FBQUEsQ0FBQztRQUM1RCxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTNDLE1BQU0sTUFBTSxHQUFZLFVBQVUsQ0FBQyxN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QUssQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDN0Y7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzdEO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3BGO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBVztRQUN2QyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFhLEVBQUUsS0FBVTtRQUNwRCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgX3Njb3JlIGZyb20gJ3VuZGVyc2NvcmUnO1xuaW1wb3J0IHBlZyBmcm9tICcuL2NvbmRpdGlvbi5wZWcnO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWVsZHMvZmllbGRzLnV0aWxzJztcbmltcG9ydCB7IFNob3dDb25kaXRpb24gfSBmcm9tICcuLi8uLi9jb25kaXRpb25hbC1zaG93L2RvbWFpbi9jb25kaXRpb25hbC1zaG93Lm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvblBhcnNlciB7XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSByYXcgZm9ybXVsYSBhbmQgb3V0cHV0IHN0cnVjdHVyZWQgY29uZGl0aW9uIGRhdGFcbiAgICogdGhhdCBjYW4gYmUgdXNlZCBpbiBldmFsdWF0aW5nIHNob3cvaGlkZSBsb2dpY1xuICAgKiBAcGFyYW0gY29uZGl0aW9uIHJhdyBmb3JtdWxhIGUuZy4gVGV4dEZpZWxkID0gXCJIZWxsb1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHBhcnNlKGNvbmRpdGlvbjogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIWNvbmRpdGlvbikgeyByZXR1cm4gbnVsbCB9O1xuICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5yZXBsYWNlKC9DT05UQUlOUy9nLCAnIENPTlRBSU5TJyk7XG4gICAgcmV0dXJuIHBlZy5wYXJzZShjb25kaXRpb24udHJpbSgpLCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIGN1cnJlbnQgZmllbGRzIGFnYWluc3QgdGhlIGNvbmRpdGlvbnNcbiAgICogQHBhcmFtIGZpZWxkcyB0aGUgY3VycmVudCBwYWdlIGZpZWxkcyBhbmQgdGhlaXIgdmFsdWVcbiAgICogQHBhcmFtIGNvbmRpdGlvbnMgVGhlIFBlZ0pTIGZvcm11bGEgb3V0cHV0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGV2YWx1YXRlKGZpZWxkczogYW55LCBjb25kaXRpb25zOiBhbnlbXSwgcGF0aD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghY29uZGl0aW9ucyB8fCBjb25kaXRpb25zLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gdHJ1ZSB9O1xuICAgIGNvbnN0IHZhbGlkSm9pbkNvbXBhcmF0b3JzID0gWydBTkQnLCAnT1InXTtcblxuICAgIGNvbnN0IHJlc3VsdDogYm9vbGVhbiA9IGNvbmRpdGlvbnMucmVkdWNlKChhY2N1bXVsYXRvcjogYm9vbGVhbiwgY29uZGl0aW9uLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBpc0pvaW5Db21wYXJhdG9yID0gKGNvbXBhcmF0b3I6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAgICAgKHR5cGVvZiBjb21wYXJhdG9yID09PSAnc3RyaW5nJyAmJiB2YWxpZEpvaW5Db21wYXJhdG9ycy5pbmRleE9mKGNvbXBhcmF0b3IpICE9PSAtMSk7XG5cbiAgICAgIGlmIChpc0pvaW5Db21wYXJhdG9yKGNvbmRpdGlvbikpIHsgcmV0dXJuIGFjY3VtdWxhdG9yIH07XG5cbiAgICAgIGxldCBjdXJyZW50Q29uZGl0aW9uUmVzdWx0ID0gdHJ1ZTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZGl0aW9uKSkge1xuICAgICAgICBjdXJyZW50Q29uZGl0aW9uUmVzdWx0ID0gdGhpcy5ldmFsdWF0ZShmaWVsZHMsIGNvbmRpdGlvbik7XG5cbiAgICAgICAgaWYgKGlzSm9pbkNvbXBhcmF0b3IoY29uZGl0aW9uc1tpbmRleCAtIDFdKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmV2YWx1YXRlSm9pbihhY2N1bXVsYXRvciwgY29uZGl0aW9uc1tpbmRleCAtIDFdLCBjdXJyZW50Q29uZGl0aW9uUmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29uZGl0aW9uLmNvbXBhcmF0b3IpIHtcbiAgICAgICAgY29uc3QgZm9ybXVsYSA9IGNvbmRpdGlvbi5maWVsZFJlZmVyZW5jZSArIGNvbmRpdGlvbi5jb21wYXJhdG9yICsgY29uZGl0aW9uLnZhbHVlO1xuICAgICAgICBjdXJyZW50Q29uZGl0aW9uUmVzdWx0ID0gdGhpcy5tYXRjaEVxdWFsaXR5Q29uZGl0aW9uKGZpZWxkcywgZm9ybXVsYSwgcGF0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0pvaW5Db21wYXJhdG9yKGNvbmRpdGlvbnNbaW5kZXggLSAxXSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVKb2luKGFjY3VtdWxhdG9yLCBjb25kaXRpb25zW2luZGV4IC0gMV0sIGN1cnJlbnRDb25kaXRpb25SZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudENvbmRpdGlvblJlc3VsdDtcbiAgICB9LCB0cnVlKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBldmFsdWF0ZUpvaW4obGVmdFJlc3VsdDogYm9vbGVhbiwgY29tcGFyYXRvciwgcmlnaHRSZXN1bHQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGNvbXBhcmF0b3IpIHtcbiAgICAgIGNhc2UgJ09SJzogcmV0dXJuIGxlZnRSZXN1bHQgfHwgcmlnaHRSZXN1bHQ7XG4gICAgICBjYXNlICdBTkQnOiByZXR1cm4gbGVmdFJlc3VsdCAmJiByaWdodFJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtYXRjaEVxdWFsaXR5Q29uZGl0aW9uKGZpZWxkczogb2JqZWN0LCBjb25kaXRpb246IHN0cmluZywgcGF0aD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFtmaWVsZCwgY29uZGl0aW9uU2VwYXJhdG9yXSA9IHRoaXMuZ2V0RmllbGQoY29uZGl0aW9uKTtcbiAgICBjb25zdCBbaGVhZCwgLi4udGFpbF0gPSBmaWVsZC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yQ29tcGxleENvbmRpdGlvbihmaWVsZHMsIGhlYWQsIHRhaWwsIHBhdGgpO1xuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSB0aGlzLnVucXVvdGVkKGNvbmRpdGlvbi5zcGxpdChjb25kaXRpb25TZXBhcmF0b3IpWzFdKTtcbiAgICBpZiAoY29uZGl0aW9uU2VwYXJhdG9yID09PSBTaG93Q29uZGl0aW9uLkNPTlRBSU5TKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGVja1ZhbHVlQ29udGFpbnMoZXhwZWN0ZWRWYWx1ZSwgY3VycmVudFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tWYWx1ZUVxdWFscyhleHBlY3RlZFZhbHVlLCBjdXJyZW50VmFsdWUsIGNvbmRpdGlvblNlcGFyYXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VmFsdWUoZmllbGRzOiBvYmplY3QsIGhlYWQ6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljTGlzdChmaWVsZHNbaGVhZF0pKSB7XG4gICAgICByZXR1cm4gZmllbGRzW2hlYWRdLnZhbHVlLmNvZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWVsZHNbaGVhZF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNEeW5hbWljTGlzdChkeW5hbWljbGlzdDogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFfc2NvcmUuaXNFbXB0eShkeW5hbWljbGlzdCkgJiZcbiAgICAgICAgKF9zY29yZS5oYXMoZHluYW1pY2xpc3QsICd2YWx1ZScpICYmIF9zY29yZS5oYXMoZHluYW1pY2xpc3QsICdsaXN0X2l0ZW1zJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0RmllbGQoY29uZGl0aW9uOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmc/XSB7XG4gICAgbGV0IHNlcGFyYXRvcjogc3RyaW5nID0gU2hvd0NvbmRpdGlvbi5DT05UQUlOUztcbiAgICBpZiAoY29uZGl0aW9uLmluZGV4T2YoU2hvd0NvbmRpdGlvbi5DT05UQUlOUykgPCAwKSB7XG4gICAgICBzZXBhcmF0b3IgPSBTaG93Q29uZGl0aW9uLkNPTkRJVElPTl9FUVVBTFM7XG4gICAgICBpZiAoY29uZGl0aW9uLmluZGV4T2YoU2hvd0NvbmRpdGlvbi5DT05ESVRJT05fTk9UX0VRVUFMUykgPiAtMSkge1xuICAgICAgICBzZXBhcmF0b3IgPSBTaG93Q29uZGl0aW9uLkNPTkRJVElPTl9OT1RfRVFVQUxTO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWyBjb25kaXRpb24uc3BsaXQoc2VwYXJhdG9yKVswXSwgc2VwYXJhdG9yIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGVja1ZhbHVlRXF1YWxzKGV4cGVjdGVkVmFsdWU6IHN0cmluZywgY3VycmVudFZhbHVlOiBhbnksIGNvbmRpdGlvblNlcGFyYW9yOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoZXhwZWN0ZWRWYWx1ZS5zZWFyY2goJ1ssXScpID4gLTEpIHsgLy8gZm9yICBtdWx0aS1zZWxlY3QgbGlzdFxuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tNdWx0aVNlbGVjdExpc3RFcXVhbHMoZXhwZWN0ZWRWYWx1ZSwgY3VycmVudFZhbHVlLCBjb25kaXRpb25TZXBhcmFvcik7XG4gICAgfSBlbHNlIGlmIChleHBlY3RlZFZhbHVlLmVuZHNXaXRoKCcqJykgJiYgY3VycmVudFZhbHVlICYmIGNvbmRpdGlvblNlcGFyYW9yICE9PSBTaG93Q29uZGl0aW9uLkNPTkRJVElPTl9OT1RfRVFVQUxTKSB7XG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZS5zdGFydHNXaXRoKHRoaXMucmVtb3ZlU3RhckNoYXIoZXhwZWN0ZWRWYWx1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4cGVjdGVkVmFsdWUgPT09ICcqJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hhbmdlZCBmcm9tICc9PT0nIHRvICc9PScgdG8gY292ZXIgbnVtYmVyIGZpZWxkIGNvbmRpdGlvbnNcbiAgICAgIGlmIChjb25kaXRpb25TZXBhcmFvciA9PT0gU2hvd0NvbmRpdGlvbi5DT05ESVRJT05fTk9UX0VRVUFMUykge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja1ZhbHVlTm90RXF1YWxzKGV4cGVjdGVkVmFsdWUsIGN1cnJlbnRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlID09IGV4cGVjdGVkVmFsdWUgfHwgdGhpcy5va0lmQm90aEVtcHR5KGV4cGVjdGVkVmFsdWUsIGN1cnJlbnRWYWx1ZSk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGVja1ZhbHVlTm90RXF1YWxzKGV4cGVjdGVkVmFsdWU6IHN0cmluZywgY3VycmVudFZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBmb3JtYXRDdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgPyBjdXJyZW50VmFsdWUudG9TdHJpbmcoKS50cmltKCkgOiAnJztcbiAgICBpZiAoJyonID09PSBleHBlY3RlZFZhbHVlICYmIGZvcm1hdEN1cnJlbnRWYWx1ZSAhPT0gJycpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZm9ybWF0RXhwZWN0ZWRWYWx1ZSA9IGV4cGVjdGVkVmFsdWUgPyBleHBlY3RlZFZhbHVlLnRvU3RyaW5nKCkudHJpbSgpIDogJyc7XG4gICAgcmV0dXJuIGZvcm1hdEN1cnJlbnRWYWx1ZSAhPSBmb3JtYXRFeHBlY3RlZFZhbHVlOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGVja011bHRpU2VsZWN0TGlzdEVxdWFscyhleHBlY3RlZFZhbHVlOiBzdHJpbmcsIGN1cnJlbnRWYWx1ZTogYW55LCBjb25kaXRpb25TZXBhcmF0b3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gZXhwZWN0ZWRWYWx1ZS5zcGxpdCgnLCcpLnNvcnQoKS50b1N0cmluZygpO1xuICAgIGNvbnN0IHZhbHVlcyA9IGN1cnJlbnRWYWx1ZSA/IGN1cnJlbnRWYWx1ZS5zb3J0KCkudG9TdHJpbmcoKSA6ICcnO1xuICAgIGlmIChjb25kaXRpb25TZXBhcmF0b3IgPT09IFNob3dDb25kaXRpb24uQ09ORElUSU9OX05PVF9FUVVBTFMpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZFZhbHVlcyAhPT0gdmFsdWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWRWYWx1ZXMgPT09IHZhbHVlcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGVja1ZhbHVlQ29udGFpbnMoZXhwZWN0ZWRWYWx1ZTogc3RyaW5nLCBjdXJyZW50VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChleHBlY3RlZFZhbHVlLnNlYXJjaCgnLCcpID4gLTEpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gZXhwZWN0ZWRWYWx1ZS5zcGxpdCgnLCcpLnNvcnQoKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGN1cnJlbnRWYWx1ZSA/IGN1cnJlbnRWYWx1ZS5zb3J0KCkudG9TdHJpbmcoKSA6ICcnO1xuICAgICAgcmV0dXJuIGV4cGVjdGVkVmFsdWVzLmV2ZXJ5KGl0ZW0gPT4gdmFsdWVzLnNlYXJjaChpdGVtKSA+PSAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVzID0gY3VycmVudFZhbHVlICYmIEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSA/IGN1cnJlbnRWYWx1ZS50b1N0cmluZygpIDogJyc7XG4gICAgICByZXR1cm4gdmFsdWVzLnNlYXJjaChleHBlY3RlZFZhbHVlKSA+PSAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHVucXVvdGVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXMgPSBzdHIucmVwbGFjZSgvXlwifFwiJC9nLCAnJyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpbmRWYWx1ZUZvckNvbXBsZXhDb25kaXRpb24oZmllbGRzOiBvYmplY3QsIGhlYWQ6IHN0cmluZywgdGFpbDogc3RyaW5nW10sIHBhdGg/OiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghZmllbGRzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodGFpbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKGZpZWxkcywgaGVhZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChGaWVsZHNVdGlscy5pc0FycmF5KGZpZWxkc1toZWFkXSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFZhbHVlRm9yQ29tcGxleENvbmRpdGlvbkluQXJyYXkoZmllbGRzLCBoZWFkLCB0YWlsLCBwYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRWYWx1ZUZvckNvbXBsZXhDb25kaXRpb25Gb3JQYXRoSWZBbnkoZmllbGRzLCBoZWFkLCB0YWlsLCBwYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmaW5kVmFsdWVGb3JDb21wbGV4Q29uZGl0aW9uRm9yUGF0aElmQW55KGZpZWxkczogb2JqZWN0LCBoZWFkOiBzdHJpbmcsIHRhaWw6IHN0cmluZ1tdLCBwYXRoPzogc3RyaW5nKTogYW55IHtcbiAgICBpZiAocGF0aCkge1xuICAgICAgY29uc3QgW18sIC4uLnBhdGhUYWlsXSA9IHBhdGguc3BsaXQoL1tfXSsvZyk7XG4gICAgICByZXR1cm4gdGhpcy5maW5kVmFsdWVGb3JDb21wbGV4Q29uZGl0aW9uKGZpZWxkc1toZWFkXSwgdGFpbFswXSwgdGFpbC5zbGljZSgxKSwgcGF0aFRhaWwuam9pbignXycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZmluZFZhbHVlRm9yQ29tcGxleENvbmRpdGlvbihmaWVsZHNbaGVhZF0sIHRhaWxbMF0sIHRhaWwuc2xpY2UoMSksIHBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpbmRWYWx1ZUZvckNvbXBsZXhDb25kaXRpb25JbkFycmF5KGZpZWxkczogb2JqZWN0LCBoZWFkOiBzdHJpbmcsIHRhaWw6IHN0cmluZ1tdLCBwYXRoPzogc3RyaW5nKTogYW55IHtcbiAgLy8gdXNlIHRoZSBwYXRoIHRvIHJlc29sdmUgd2hpY2ggYXJyYXkgZWxlbWVudCB3ZSByZWZlciB0b1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoaGVhZCkpIHtcbiAgICAgIGNvbnN0IFtfLCAuLi5wYXRoVGFpbF0gPSBwYXRoLnNwbGl0KC9bX10rL2cpO1xuICAgICAgaWYgKHBhdGhUYWlsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBhcnJheUluZGV4ID0gTnVtYmVyLnBhcnNlSW50KHBhdGhUYWlsWzBdLCAxMCk7XG4gICAgICAgICAgY29uc3QgW19fLCAuLi5kcm9wTnVtYmVyUGF0aF0gPSBwYXRoVGFpbDtcbiAgICAgICAgICByZXR1cm4gKGZpZWxkc1toZWFkXVthcnJheUluZGV4XSAhPT0gdW5kZWZpbmVkKSA/IHRoaXMuZmluZFZhbHVlRm9yQ29tcGxleENvbmRpdGlvbihcbiAgICAgICAgICBmaWVsZHNbaGVhZF1bYXJyYXlJbmRleF1bJ3ZhbHVlJ10sIHRhaWxbMF0sIHRhaWwuc2xpY2UoMSksIGRyb3BOdW1iZXJQYXRoLmpvaW4oJ18nKSkgOiBudWxsO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgcGFyc2luZyBudW1iZXInLCBwYXRoVGFpbFswXSwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignUGF0aCBpbiBmb3JtQXJyYXkgc2hvdWxkIHN0YXJ0IHdpdGggJywgaGVhZCwgJywgZnVsbCBwYXRoOiAnLCBwYXRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZW1vdmVTdGFyQ2hhcihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHN0ciAmJiBzdHIuaW5kZXhPZignKicpID4gLTEpIHtcbiAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIHN0ci5pbmRleE9mKCcqJykpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb2tJZkJvdGhFbXB0eShyaWdodDogc3RyaW5nLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsICYmIChyaWdodCA9PT0gJycpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,103 @@
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:FieldRef _? 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
+ FieldRef
66
+ = FieldReference / MetadataFieldReference
67
+
68
+ MetadataFieldReference
69
+ = s1:openSquare fr:FieldReference s2:closeSquare
70
+ { return s1 + fr + s2 }
71
+
72
+ FieldReference
73
+ = characters:[A-Za-z0-9._-]+ { return characters.join(""); }
74
+
75
+ openSquare
76
+ = "["
77
+
78
+ closeSquare
79
+ = "]"
80
+
81
+ number
82
+ = [0-9]+
83
+
84
+ quotedValue
85
+ = '"'val:[A-Za-z0-9.,* _&()/-]*'"'
86
+ { return val.join(""); }
87
+
88
+ bracket
89
+ = (_? "("+ _? / _? ")"+ _? )
90
+
91
+ operator
92
+ = "=" / "!=" / "CONTAINS"
93
+
94
+ ws "Whitespace"
95
+ = [ \t]
96
+
97
+ _ "One or more whitespaces"
98
+ = ws+
99
+
100
+ nl "New line"
101
+ = "\\n"`;
102
+ export default generate(conditionSource);
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLnBlZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvZGlyZWN0aXZlcy9jb25kaXRpb25hbC1zaG93L3NlcnZpY2VzL2NvbmRpdGlvbi5wZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVqQyxNQUFNLGVBQWUsR0FDbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQW1HUyxDQUFDO0FBRVosZUFBZSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJ3BlZ2pzJztcblxuY29uc3QgY29uZGl0aW9uU291cmNlID1cbiAgYHtcbiAgICBmdW5jdGlvbiBmbGF0KGFyciwgZGVwdGggPSAxKSB7XG4gICAgICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uIChhcnIsIGRlcHRoID0gMSkge1xuICAgICAgICBpZiAoZGVwdGgpIHJldHVybiBhcnI7XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgY29uY2F0ZW5hdGUgaW50byB0aGUgcGFyZW50IGFycmF5XG4gICAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAoYWNjLCB2YWwpIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoQXJyYXkuaXNBcnJheSh2YWwpID8gZmxhdHRlbih2YWwsIGRlcHRoIC0gMSkgOiB2YWwpO1xuICAgICAgfSwgW10pO1xuXG4gICAgICB9O1xuXG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyLCBkZXB0aCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIFN0YXJ0XG4gICAgPSBGb3JtdWxhXG5cbiAgRm9ybXVsYVxuICAgID0gRW5jbG9zZWRGb3JtdWxhXG4gICAgLyBPcGVuRm9ybXVsYVxuXG4gIEVuY2xvc2VkRm9ybXVsYVxuICAgID0gYnJhY2tldCBmb3JtdWxhOk9wZW5Gb3JtdWxhIGJyYWNrZXQgam9pbjooSm9pbkNvbXBhcmF0b3IpKlxuICAgICAgeyByZXR1cm4gZmxhdChbIFtmb3JtdWxhXSwgam9pblswXSBdLCAxKSB9XG5cbiAgT3BlbkZvcm11bGFcbiAgICA9IGVxOk9wZW5FcXVhbGl0eUNoZWNrIGpvaW5zOihKb2luQ29tcGFyYXRvcikqXG4gICAgICB7IHJldHVybiBmbGF0KFsgZXEsIGZsYXQoam9pbnMpIF0pIH1cblxuICBKb2luQ29tcGFyYXRvclxuICAgID0gY29tcDpDb21wYXJhdG9yIGVxOk9wZW5FcXVhbGl0eUNoZWNrXG4gICAgICB7IHJldHVybiBbY29tcCwgZXFdOyB9XG4gICAgICAvIENvbXBvdW5kSm9pbkNvbXBhcmF0b3JcblxuICBDb21wb3VuZEpvaW5Db21wYXJhdG9yXG4gICAgPSBjb21wOkNvbXBhcmF0b3IgYnJhY2tldCBmOk9wZW5Gb3JtdWxhIGJyYWNrZXRcbiAgICAgIHsgcmV0dXJuIFtjb21wLCBmIF0gfVxuXG4gIE9wZW5FcXVhbGl0eUNoZWNrXG4gICAgPSBmcjpGaWVsZFJlZiBfPyBvcDpvcGVyYXRvciBfPyB2YWw6VmFsdWVcbiAgICAgeyByZXR1cm4geyBmaWVsZFJlZmVyZW5jZTogZnIsIGNvbXBhcmF0b3I6IG9wLCB2YWx1ZTogdmFsIH0gfVxuXG4gIENvbXBhcmF0b3JcbiAgID0gXz8gYzonQU5EJyBfP1xuICAgeyByZXR1cm4gYzsgfVxuICAgLyBfPyBjOidPUicgXz9cbiAgIHsgcmV0dXJuIGM7IH1cblxuICBXb3JkXG4gICA9IGw6TGV0dGVyK1xuICAgeyByZXR1cm4gbC5qb2luKFwiXCIpOyB9XG5cbiAgTGV0dGVyXG4gICA9IFthLXpBLVpdXG5cbiAgVmFsdWVcbiAgID0gdjpxdW90ZWRWYWx1ZSAvIHY6V29yZFxuICAgeyByZXR1cm4gdi5qb2luKFwiXCIpIH1cbiAgIC8gdjpudW1iZXJcbiAgIHsgcmV0dXJuIHBhcnNlSW50KHYuam9pbihcIlwiKSkgfVxuXG4gIEZpZWxkUmVmXG4gICA9IEZpZWxkUmVmZXJlbmNlIC8gTWV0YWRhdGFGaWVsZFJlZmVyZW5jZVxuXG4gIE1ldGFkYXRhRmllbGRSZWZlcmVuY2VcbiAgICA9IHMxOm9wZW5TcXVhcmUgZnI6RmllbGRSZWZlcmVuY2UgczI6Y2xvc2VTcXVhcmVcbiAgICB7IHJldHVybiBzMSArIGZyICsgczIgfVxuXG4gIEZpZWxkUmVmZXJlbmNlXG4gICAgPSBjaGFyYWN0ZXJzOltBLVphLXowLTkuXy1dKyB7IHJldHVybiBjaGFyYWN0ZXJzLmpvaW4oXCJcIik7IH1cblxuICBvcGVuU3F1YXJlXG4gICA9IFwiW1wiXG5cbiAgY2xvc2VTcXVhcmVcbiAgID0gXCJdXCJcblxuICBudW1iZXJcbiAgID0gWzAtOV0rXG5cbiAgcXVvdGVkVmFsdWVcbiAgID0gJ1wiJ3ZhbDpbQS1aYS16MC05LiwqIF8mKCkvLV0qJ1wiJ1xuICAgeyByZXR1cm4gdmFsLmpvaW4oXCJcIik7IH1cblxuICBicmFja2V0XG4gICA9IChfPyBcIihcIisgXz8gLyBfPyBcIilcIisgXz8gKVxuXG4gIG9wZXJhdG9yXG4gICA9IFwiPVwiIC8gXCIhPVwiIC8gXCJDT05UQUlOU1wiXG5cbiAgd3MgXCJXaGl0ZXNwYWNlXCJcbiAgID0gWyBcXHRdXG5cbiAgXyBcIk9uZSBvciBtb3JlIHdoaXRlc3BhY2VzXCJcbiAgID0gd3MrXG5cbiAgbmwgXCJOZXcgbGluZVwiXG4gICA9IFwiXFxcXG5cImA7XG5cbmV4cG9ydCBkZWZhdWx0IGdlbmVyYXRlKGNvbmRpdGlvblNvdXJjZSk7XG4iXX0=
@@ -6,4 +6,4 @@ export class HmctsServiceDetail {
6
6
  this.service_id = 0;
7
7
  }
8
8
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG1jdHMtc2VydmljZS1kZXRhaWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2RvbWFpbi9jYXNlLWZsYWcvaG1jdHMtc2VydmljZS1kZXRhaWwubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQS9CO1FBU0UsZUFBVSxHQUFHLENBQUMsQ0FBQztJQUdqQixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERUTyB0byBwcm92aWRlIHR5cGluZyBvZiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgUmVmZXJlbmNlIERhdGEgTG9jYXRpb24gQVBJIGZvciBITUNUUyBzZXJ2aWNlIGRldGFpbHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBIbWN0c1NlcnZpY2VEZXRhaWwge1xuICBidXNpbmVzc19hcmVhOiBzdHJpbmc7XG4gIGNjZF9jYXNlX3R5cGVzOiBzdHJpbmdbXTtcbiAgY2NkX3NlcnZpY2VfbmFtZTogc3RyaW5nO1xuICBqdXJpc2RpY3Rpb246IHN0cmluZztcbiAgbGFzdF91cGRhdGU/OiBzdHJpbmc7XG4gIG9yZ191bml0OiBzdHJpbmc7XG4gIHNlcnZpY2VfY29kZT86IHN0cmluZztcbiAgc2VydmljZV9kZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc2VydmljZV9pZCA9IDA7XG4gIHNlcnZpY2Vfc2hvcnRfZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHN1Yl9idXNpbmVzc19hcmVhOiBzdHJpbmc7XG59XG4iXX0=
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 code. (For example, the "SSCS"
53
- * service has a corresponding service code of "BBA3".)
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
- getHmctsServiceDetails(serviceNames) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1mbGFnLXJlZmRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvY2FzZS1mbGFnL2Nhc2UtZmxhZy1yZWZkYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7OztBQUl0QyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ21CLElBQWlCLEVBQ2pCLFNBQTRCO1FBRDVCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7SUFDM0MsQ0FBQztJQUVMOzs7Ozs7O09BT0c7SUFDSSxtQkFBbUIsQ0FBQyxTQUFpQixFQUFFLFFBQThCLEVBQUUsYUFBdUI7UUFDbkcsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRXJELElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksUUFBUSxFQUFFO2dCQUNaLEdBQUcsSUFBSSxjQUFjLFFBQVEsRUFBRSxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO2dCQUN6QiwrRkFBK0Y7Z0JBQy9GLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7Z0JBQ2hELGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUM7YUFDdkU7WUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJO2lCQUNiLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUM7aUJBQzNCLElBQUk7WUFDSCxnSEFBZ0g7WUFDaEgsaUhBQWlIO1lBQ2pILG1CQUFtQjtZQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO29CQUNqSCwwR0FBMEc7b0JBQzFHLDJCQUEyQjtvQkFDM0IsT0FBTyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDO2lCQUNsRTtnQkFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDTDtRQUVELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxzQkFBc0IsQ0FBQyxZQUFxQjtRQUNqRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFaEQsSUFBSSxHQUFHLEVBQUU7WUFDUCxHQUFHLElBQUksY0FBYyxDQUFDO1lBQ3RCLElBQUksWUFBWSxFQUFFO2dCQUNoQixHQUFHLElBQUksb0JBQW9CLFlBQVksRUFBRSxDQUFDO2FBQzNDO1lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztTQUM5QztRQUVELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7OzRGQXBFVSxzQkFBc0I7OERBQXRCLHNCQUFzQixXQUF0QixzQkFBc0I7dUZBQXRCLHNCQUFzQjtjQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFic3RyYWN0QXBwQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLmNvbmZpZyc7XG5pbXBvcnQgeyBGbGFnVHlwZSwgSG1jdHNTZXJ2aWNlRGV0YWlsIH0gZnJvbSAnLi4vLi4vZG9tYWluL2Nhc2UtZmxhZyc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHsgUmVmZGF0YUNhc2VGbGFnVHlwZSB9IGZyb20gJy4vcmVmZGF0YS1jYXNlLWZsYWctdHlwZS5lbnVtJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhc2VGbGFnUmVmZGF0YVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwQ29uZmlnOiBBYnN0cmFjdEFwcENvbmZpZ1xuICApIHsgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIENhc2UgRmxhZyB0eXBlcyBmb3IgYW4gSE1DVFMgc2VydmljZS5cbiAgICpcbiAgICogQHBhcmFtIHNlcnZpY2VJZCBUaGUgSE1DVFMgU2VydmljZSBDb2RlIGZvciBhIGp1cmlzZGljdGlvbiBvciBzZXJ2aWNlLiAqKk5vdGU6KiogVGhpcyBpcyBfbm90XyB0aGUgc2VydmljZSBuYW1lXG4gICAqIEBwYXJhbSBmbGFnVHlwZSBgUEFSVFlgIGZvciBwYXJ0eS1sZXZlbCBmbGFnczsgYENBU0VgIGZvciBjYXNlLWxldmVsXG4gICAqIEBwYXJhbSB3ZWxzaFJlcXVpcmVkIGB0cnVlYCBpZiBXZWxzaCBsYW5ndWFnZSB2ZXJzaW9ucyBvZiBmbGFncyBhcmUgcmVxdWlyZWQ7IGBmYWxzZWAgb3RoZXJ3aXNlIChmdXR1cmUgZmVhdHVyZSlcbiAgICogQHJldHVybnMgQW4gYE9ic2VydmFibGVgIG9mIGFuIGFycmF5IG9mIGZsYWcgdHlwZXNcbiAgICovXG4gIHB1YmxpYyBnZXRDYXNlRmxhZ3NSZWZkYXRhKHNlcnZpY2VJZDogc3RyaW5nLCBmbGFnVHlwZT86IFJlZmRhdGFDYXNlRmxhZ1R5cGUsIHdlbHNoUmVxdWlyZWQ/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxGbGFnVHlwZVtdPiB7XG4gICAgbGV0IHVybCA9IHRoaXMuYXBwQ29uZmlnLmdldENhc2VGbGFnc1JlZmRhdGFBcGlVcmwoKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybCA9IHVybC5yZXBsYWNlKCc6c2lkJywgc2VydmljZUlkKTtcbiAgICAgIGlmIChmbGFnVHlwZSkge1xuICAgICAgICB1cmwgKz0gYD9mbGFnLXR5cGU9JHtmbGFnVHlwZX1gO1xuICAgICAgfVxuICAgICAgaWYgKHdlbHNoUmVxdWlyZWQgIT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiBmbGFnLXR5cGUgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHF1ZXJ5IHN0cmluZzsgaWYgc28sIGFwcGVuZCB3ZWxzaC1yZXF1aXJlZCB3aXRoICcmJ1xuICAgICAgICB1cmwuaW5kZXhPZignPycpID4gLTEgPyB1cmwgKz0gJyYnIDogdXJsICs9ICc/JztcbiAgICAgICAgd2Vsc2hSZXF1aXJlZCA/IHVybCArPSAnd2Vsc2gtcmVxdWlyZWQ9WScgOiB1cmwgKz0gJ3dlbHNoLXJlcXVpcmVkPU4nO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgIC5nZXQodXJsLCB7b2JzZXJ2ZTogJ2JvZHknfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gUmVmZXJlbmNlIERhdGEgQ29tbW9uIEFQSSByZXR1cm5zIGEgc2luZ2xlIG9iamVjdCB3aXRoIGEgXCJmbGFnc1wiIGFycmF5LCB3aGljaCBpdHNlbGYgY29udGFpbnMgYSBzaW5nbGUgb2JqZWN0XG4gICAgICAgICAgLy8gd2l0aCBhIFwiRmxhZ0RldGFpbHNcIiBhcnJheSwgd2hpY2ggY29udGFpbnMgYSBoaWVyYXJjaHkgb2YgZmxhZyB0eXBlcyBpbiBhbiBvYmplY3QgLSBvbmUgZWFjaCBmb3IgXCJQYXJ0eVwiIGZsYWdzXG4gICAgICAgICAgLy8gYW5kIFwiQ2FzZVwiIGZsYWdzXG4gICAgICAgICAgbWFwKGJvZHkgPT4ge1xuICAgICAgICAgICAgaWYgKCFib2R5IHx8ICFib2R5LmZsYWdzIHx8ICFib2R5LmZsYWdzLmxlbmd0aCB8fCAhYm9keS5mbGFnc1swXS5GbGFnRGV0YWlscyB8fCAhYm9keS5mbGFnc1swXS5GbGFnRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gTm90ZTogUmVmZXJlbmNlIERhdGEgQ29tbW9uIEFQSSBhcHBlYXJzIHRvIHJlc3BvbmQgd2l0aCBhIDQwNCBlcnJvciByYXRoZXIgdGhhbiBzZW5kIGFuIGVtcHR5IHJlc3BvbnNlLFxuICAgICAgICAgICAgICAvLyBzbyB0aGlzIG1heSBiZSByZWR1bmRhbnRcbiAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCdObyBmbGFnIHR5cGVzIGNvdWxkIGJlIHJldHJpZXZlZCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBib2R5LmZsYWdzWzBdLkZsYWdEZXRhaWxzO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgSE1DVFMgc2VydmljZSBkZXRhaWxzIGZvciBhIGp1cmlzZGljdGlvbiBvciBzZXJ2aWNlLCBpbmNsdWRpbmcgc2VydmljZSBjb2RlLiAoRm9yIGV4YW1wbGUsIHRoZSBcIlNTQ1NcIlxuICAgKiBzZXJ2aWNlIGhhcyBhIGNvcnJlc3BvbmRpbmcgc2VydmljZSBjb2RlIG9mIFwiQkJBM1wiLilcbiAgICpcbiAgICogQHBhcmFtIHNlcnZpY2VOYW1lcyBUaGUgc2VydmljZSBuYW1lKHMpIHRvIGxvb2sgdXAsIGNvbW1hLXNlcGFyYXRlZCBpZiBtb3JlIHRoYW4gb25lXG4gICAqIEByZXR1cm5zIEFuIGBPYnNlcnZhYmxlYCBvZiBhbiBhcnJheSBvZiBzZXJ2aWNlIGRldGFpbHNcbiAgICovXG4gIHB1YmxpYyBnZXRIbWN0c1NlcnZpY2VEZXRhaWxzKHNlcnZpY2VOYW1lcz86IHN0cmluZyk6IE9ic2VydmFibGU8SG1jdHNTZXJ2aWNlRGV0YWlsW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0TG9jYXRpb25SZWZBcGlVcmwoKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybCArPSAnL29yZ1NlcnZpY2VzJztcbiAgICAgIGlmIChzZXJ2aWNlTmFtZXMpIHtcbiAgICAgICAgdXJsICs9IGA/Y2NkU2VydmljZU5hbWVzPSR7c2VydmljZU5hbWVzfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge29ic2VydmU6ICdib2R5J30pO1xuICAgIH1cblxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxufVxuIl19
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1mbGFnLXJlZmRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvY2FzZS1mbGFnL2Nhc2UtZmxhZy1yZWZkYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7OztBQUl0QyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ21CLElBQWlCLEVBQ2pCLFNBQTRCO1FBRDVCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7SUFDM0MsQ0FBQztJQUVMOzs7Ozs7O09BT0c7SUFDSSxtQkFBbUIsQ0FBQyxTQUFpQixFQUFFLFFBQThCLEVBQUUsYUFBdUI7UUFDbkcsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRXJELElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksUUFBUSxFQUFFO2dCQUNaLEdBQUcsSUFBSSxjQUFjLFFBQVEsRUFBRSxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO2dCQUN6QiwrRkFBK0Y7Z0JBQy9GLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7Z0JBQ2hELGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUM7YUFDdkU7WUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJO2lCQUNiLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUM7aUJBQzNCLElBQUk7WUFDSCxnSEFBZ0g7WUFDaEgsaUhBQWlIO1lBQ2pILG1CQUFtQjtZQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO29CQUNqSCwwR0FBMEc7b0JBQzFHLDJCQUEyQjtvQkFDM0IsT0FBTyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDO2lCQUNsRTtnQkFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDTDtRQUVELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksbUNBQW1DLENBQUMsWUFBcUI7UUFDOUQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRWhELElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxJQUFJLGNBQWMsQ0FBQztZQUN0QixJQUFJLFlBQVksRUFBRTtnQkFDaEIsR0FBRyxJQUFJLG9CQUFvQixZQUFZLEVBQUUsQ0FBQzthQUMzQztZQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7U0FDOUM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxnQ0FBZ0MsQ0FBQyxVQUFtQjtRQUN6RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFaEQsSUFBSSxHQUFHLEVBQUU7WUFDUCxHQUFHLElBQUksY0FBYyxDQUFDO1lBQ3RCLElBQUksVUFBVSxFQUFFO2dCQUNkLEdBQUcsSUFBSSxnQkFBZ0IsVUFBVSxFQUFFLENBQUM7YUFDckM7WUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQzs7NEZBN0ZVLHNCQUFzQjs4REFBdEIsc0JBQXNCLFdBQXRCLHNCQUFzQjt1RkFBdEIsc0JBQXNCO2NBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7IEZsYWdUeXBlLCBIbWN0c1NlcnZpY2VEZXRhaWwgfSBmcm9tICcuLi8uLi9kb21haW4vY2FzZS1mbGFnJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vaHR0cCc7XG5pbXBvcnQgeyBSZWZkYXRhQ2FzZUZsYWdUeXBlIH0gZnJvbSAnLi9yZWZkYXRhLWNhc2UtZmxhZy10eXBlLmVudW0nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2FzZUZsYWdSZWZkYXRhU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBDb25maWc6IEFic3RyYWN0QXBwQ29uZmlnXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgQ2FzZSBGbGFnIHR5cGVzIGZvciBhbiBITUNUUyBzZXJ2aWNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZUlkIFRoZSBITUNUUyBTZXJ2aWNlIENvZGUgZm9yIGEganVyaXNkaWN0aW9uIG9yIHNlcnZpY2UuICoqTm90ZToqKiBUaGlzIGlzIF9ub3RfIHRoZSBzZXJ2aWNlIG5hbWVcbiAgICogQHBhcmFtIGZsYWdUeXBlIGBQQVJUWWAgZm9yIHBhcnR5LWxldmVsIGZsYWdzOyBgQ0FTRWAgZm9yIGNhc2UtbGV2ZWxcbiAgICogQHBhcmFtIHdlbHNoUmVxdWlyZWQgYHRydWVgIGlmIFdlbHNoIGxhbmd1YWdlIHZlcnNpb25zIG9mIGZsYWdzIGFyZSByZXF1aXJlZDsgYGZhbHNlYCBvdGhlcndpc2UgKGZ1dHVyZSBmZWF0dXJlKVxuICAgKiBAcmV0dXJucyBBbiBgT2JzZXJ2YWJsZWAgb2YgYW4gYXJyYXkgb2YgZmxhZyB0eXBlc1xuICAgKi9cbiAgcHVibGljIGdldENhc2VGbGFnc1JlZmRhdGEoc2VydmljZUlkOiBzdHJpbmcsIGZsYWdUeXBlPzogUmVmZGF0YUNhc2VGbGFnVHlwZSwgd2Vsc2hSZXF1aXJlZD86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEZsYWdUeXBlW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0Q2FzZUZsYWdzUmVmZGF0YUFwaVVybCgpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJzpzaWQnLCBzZXJ2aWNlSWQpO1xuICAgICAgaWYgKGZsYWdUeXBlKSB7XG4gICAgICAgIHVybCArPSBgP2ZsYWctdHlwZT0ke2ZsYWdUeXBlfWA7XG4gICAgICB9XG4gICAgICBpZiAod2Vsc2hSZXF1aXJlZCAhPSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGZsYWctdHlwZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcXVlcnkgc3RyaW5nOyBpZiBzbywgYXBwZW5kIHdlbHNoLXJlcXVpcmVkIHdpdGggJyYnXG4gICAgICAgIHVybC5pbmRleE9mKCc/JykgPiAtMSA/IHVybCArPSAnJicgOiB1cmwgKz0gJz8nO1xuICAgICAgICB3ZWxzaFJlcXVpcmVkID8gdXJsICs9ICd3ZWxzaC1yZXF1aXJlZD1ZJyA6IHVybCArPSAnd2Vsc2gtcmVxdWlyZWQ9Tic7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLmdldCh1cmwsIHtvYnNlcnZlOiAnYm9keSd9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBSZWZlcmVuY2UgRGF0YSBDb21tb24gQVBJIHJldHVybnMgYSBzaW5nbGUgb2JqZWN0IHdpdGggYSBcImZsYWdzXCIgYXJyYXksIHdoaWNoIGl0c2VsZiBjb250YWlucyBhIHNpbmdsZSBvYmplY3RcbiAgICAgICAgICAvLyB3aXRoIGEgXCJGbGFnRGV0YWlsc1wiIGFycmF5LCB3aGljaCBjb250YWlucyBhIGhpZXJhcmNoeSBvZiBmbGFnIHR5cGVzIGluIGFuIG9iamVjdCAtIG9uZSBlYWNoIGZvciBcIlBhcnR5XCIgZmxhZ3NcbiAgICAgICAgICAvLyBhbmQgXCJDYXNlXCIgZmxhZ3NcbiAgICAgICAgICBtYXAoYm9keSA9PiB7XG4gICAgICAgICAgICBpZiAoIWJvZHkgfHwgIWJvZHkuZmxhZ3MgfHwgIWJvZHkuZmxhZ3MubGVuZ3RoIHx8ICFib2R5LmZsYWdzWzBdLkZsYWdEZXRhaWxzIHx8ICFib2R5LmZsYWdzWzBdLkZsYWdEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBOb3RlOiBSZWZlcmVuY2UgRGF0YSBDb21tb24gQVBJIGFwcGVhcnMgdG8gcmVzcG9uZCB3aXRoIGEgNDA0IGVycm9yIHJhdGhlciB0aGFuIHNlbmQgYW4gZW1wdHkgcmVzcG9uc2UsXG4gICAgICAgICAgICAgIC8vIHNvIHRoaXMgbWF5IGJlIHJlZHVuZGFudFxuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ05vIGZsYWcgdHlwZXMgY291bGQgYmUgcmV0cmlldmVkJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJvZHkuZmxhZ3NbMF0uRmxhZ0RldGFpbHM7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBITUNUUyBzZXJ2aWNlIGRldGFpbHMgZm9yIGEganVyaXNkaWN0aW9uIG9yIHNlcnZpY2UsIGluY2x1ZGluZyBzZXJ2aWNlIGNvZGVzLiBNb3JlIHRoYW4gb25lXG4gICAqIHNlcnZpY2UgY29kZSBtYXkgYmUgcHJlc2VudC4gRm9yIGV4YW1wbGUsIHRoZSBEaXZvcmNlIGp1cmlzZGljdGlvbi9zZXJ2aWNlIGhhcyBjb3JyZXNwb25kaW5nIHNlcnZpY2UgY29kZXMgb2ZcbiAgICogXCJBQkExXCIgYW5kIFwiQUJBMlwiLlxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZU5hbWVzIFRoZSBzZXJ2aWNlIG5hbWUocykgdG8gbG9vayB1cCwgY29tbWEtc2VwYXJhdGVkIGlmIG1vcmUgdGhhbiBvbmVcbiAgICogQHJldHVybnMgQW4gYE9ic2VydmFibGVgIG9mIGFuIGFycmF5IG9mIHNlcnZpY2UgZGV0YWlsc1xuICAgKi9cbiAgcHVibGljIGdldEhtY3RzU2VydmljZURldGFpbHNCeVNlcnZpY2VOYW1lKHNlcnZpY2VOYW1lcz86IHN0cmluZyk6IE9ic2VydmFibGU8SG1jdHNTZXJ2aWNlRGV0YWlsW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0TG9jYXRpb25SZWZBcGlVcmwoKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybCArPSAnL29yZ1NlcnZpY2VzJztcbiAgICAgIGlmIChzZXJ2aWNlTmFtZXMpIHtcbiAgICAgICAgdXJsICs9IGA/Y2NkU2VydmljZU5hbWVzPSR7c2VydmljZU5hbWVzfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge29ic2VydmU6ICdib2R5J30pO1xuICAgIH1cblxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEhNQ1RTIHNlcnZpY2UgZGV0YWlscyBmb3IgYSBjYXNlIHR5cGUsIGluY2x1ZGluZyBzZXJ2aWNlIGNvZGUuIEZvciBleGFtcGxlLCB0aGVcbiAgICogXCJGaW5hbmNpYWxSZW1lZHlDb250ZXN0ZWRcIiBjYXNlIHR5cGUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaXZvcmNlIGp1cmlzZGljdGlvbi9zZXJ2aWNlIGFuZCBzZXJ2aWNlIGNvZGUgXCJBQkEyXCIuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBhIGNhc2UgdHlwZSBtaWdodCBub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGFueSBzZXJ2aWNlIGNvZGVzIG9mIGEganVyaXNkaWN0aW9uIG9yIHNlcnZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSBjYXNlVHlwZUlkIFRoZSBjYXNlIHR5cGUgSUQgdG8gbG9vayB1cFxuICAgKiBAcmV0dXJucyBBbiBgT2JzZXJ2YWJsZWAgb2YgYW4gYXJyYXkgb2Ygc2VydmljZSBkZXRhaWxzXG4gICAqL1xuICBwdWJsaWMgZ2V0SG1jdHNTZXJ2aWNlRGV0YWlsc0J5Q2FzZVR5cGUoY2FzZVR5cGVJZD86IHN0cmluZyk6IE9ic2VydmFibGU8SG1jdHNTZXJ2aWNlRGV0YWlsW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0TG9jYXRpb25SZWZBcGlVcmwoKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybCArPSAnL29yZ1NlcnZpY2VzJztcbiAgICAgIGlmIChjYXNlVHlwZUlkKSB7XG4gICAgICAgIHVybCArPSBgP2NjZENhc2VUeXBlPSR7Y2FzZVR5cGVJZH1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHtvYnNlcnZlOiAnYm9keSd9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cbn1cbiJdfQ==