@wemake4u/form-player-se 1.0.23 → 1.0.25
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/esm2022/lib/components/actionsCellRenderer/actionsCellRenderer.component.mjs +69 -0
- package/esm2022/lib/components/deleteRowRenderer/deleteRowRenderer.component.mjs +25 -0
- package/esm2022/lib/components/hostCellRenderer/hostCellRenderer.component.mjs +101 -0
- package/esm2022/lib/components/objectURLRenderer/objectURLRenderer.component.mjs +27 -0
- package/esm2022/lib/components/setFilter/setFilter.component.mjs +111 -0
- package/esm2022/lib/dialog/dialog.component.mjs +15 -7
- package/esm2022/lib/directives/collapse.directive.mjs +20 -12
- package/esm2022/lib/directives/date.directive.mjs +2 -2
- package/esm2022/lib/directives/dialog.directive.mjs +2 -1
- package/esm2022/lib/directives/dropdown.directive.mjs +23 -5
- package/esm2022/lib/directives/formIndex.directive.mjs +25 -0
- package/esm2022/lib/directives/grid.directive.mjs +94 -17
- package/esm2022/lib/directives/readonly.directive.mjs +101 -0
- package/esm2022/lib/directives/updateblur.directive.mjs +10 -3
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +64 -26
- package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +96 -95
- package/esm2022/lib/dynamic-host/dynamic-host.component.mjs +121 -0
- package/esm2022/lib/locale/locale-de.mjs +3 -2
- package/esm2022/lib/locale/locale-en.mjs +3 -2
- package/esm2022/lib/locale/locale-es.mjs +3 -2
- package/esm2022/lib/locale/locale-fr.mjs +3 -2
- package/esm2022/lib/locale/locale-it.mjs +3 -2
- package/esm2022/lib/locale/locale-pt.mjs +3 -2
- package/esm2022/lib/services/chart.service.mjs +62 -56
- package/esm2022/lib/services/dialog.service.mjs +1 -1
- package/esm2022/lib/services/feel.service.mjs +186 -19
- package/esm2022/lib/services/form.service.mjs +360 -0
- package/esm2022/lib/services/formatter.service.mjs +68 -54
- package/esm2022/lib/services/function.service.mjs +9 -5
- package/esm2022/lib/services/global.service.mjs +42 -0
- package/esm2022/lib/services/grid.service.mjs +189 -53
- package/esm2022/lib/services/metadata.service.mjs +1 -8
- package/esm2022/lib/services/programmability.service.mjs +338 -64
- package/esm2022/lib/services/weak.service.mjs +3 -5
- package/esm2022/lib/utils/feelable.mjs +28 -0
- package/esm2022/lib/utils/groupByRow.mjs +3 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/wemake4u-form-player-se.mjs +1896 -577
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
- package/lib/components/actionsCellRenderer/actionsCellRenderer.component.d.ts +18 -0
- package/lib/components/deleteRowRenderer/deleteRowRenderer.component.d.ts +49 -0
- package/lib/components/hostCellRenderer/hostCellRenderer.component.d.ts +29 -0
- package/lib/components/objectURLRenderer/objectURLRenderer.component.d.ts +50 -0
- package/lib/{utils/setFilter.d.ts → components/setFilter/setFilter.component.d.ts} +1 -0
- package/lib/dialog/dialog.component.d.ts +11 -0
- package/lib/directives/collapse.directive.d.ts +7 -4
- package/lib/directives/dropdown.directive.d.ts +4 -0
- package/lib/directives/formIndex.directive.d.ts +10 -0
- package/lib/directives/grid.directive.d.ts +21 -4
- package/lib/directives/readonly.directive.d.ts +28 -0
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +28 -4
- package/lib/dynamic-form/dynamic-form.component.d.ts +20 -10
- package/lib/dynamic-host/dynamic-host.component.d.ts +27 -0
- package/lib/locale/locale-de.d.ts +1 -0
- package/lib/locale/locale-en.d.ts +1 -0
- package/lib/locale/locale-es.d.ts +1 -0
- package/lib/locale/locale-fr.d.ts +1 -0
- package/lib/locale/locale-it.d.ts +1 -0
- package/lib/locale/locale-pt.d.ts +1 -0
- package/lib/locale/locale.d.ts +7 -0
- package/lib/services/chart.service.d.ts +5 -2
- package/lib/services/dialog.service.d.ts +0 -1
- package/lib/services/feel.service.d.ts +8 -0
- package/lib/services/form.service.d.ts +51 -0
- package/lib/services/formatter.service.d.ts +8 -6
- package/lib/services/function.service.d.ts +1 -1
- package/lib/services/global.service.d.ts +16 -0
- package/lib/services/grid.service.d.ts +16 -4
- package/lib/services/metadata.service.d.ts +0 -3
- package/lib/services/programmability.service.d.ts +33 -5
- package/lib/utils/feelable.d.ts +2 -0
- package/lib/utils/groupByRow.d.ts +2 -0
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
- package/esm2022/lib/directives/disable.directive.mjs +0 -71
- package/esm2022/lib/directives/disableform.directive.mjs +0 -42
- package/esm2022/lib/utils/gridCells.mjs +0 -108
- package/esm2022/lib/utils/patchForm.mjs +0 -75
- package/esm2022/lib/utils/setFilter.mjs +0 -111
- package/lib/directives/disable.directive.d.ts +0 -20
- package/lib/directives/disableform.directive.d.ts +0 -17
- package/lib/utils/gridCells.d.ts +0 -110
- package/lib/utils/patchForm.d.ts +0 -9
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { evaluate as evaluateTemplate } from 'feelers';
|
|
2
|
+
import { buildSimpleTree, parser, evaluate as evaluateTemplate } from 'feelers';
|
|
3
3
|
import { unaryTest, evaluate, parseExpression } from 'feelin';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
+
const PathExpression = "PathExpression";
|
|
6
|
+
const VariableName = "VariableName";
|
|
7
|
+
const FunctionInvocation = "FunctionInvocation";
|
|
8
|
+
const PositionalParameters = "PositionalParameters";
|
|
9
|
+
const NamedParameters = "NamedParameters";
|
|
10
|
+
const ParameterName = "ParameterName";
|
|
11
|
+
const StringLiteral = "StringLiteral";
|
|
12
|
+
const NumericLiteral = "NumericLiteral";
|
|
13
|
+
const List = "List";
|
|
14
|
+
const StatusDependency = "$status";
|
|
5
15
|
export class FeelService {
|
|
6
16
|
constructor() { }
|
|
7
17
|
evalTemplate(template, context = {}) {
|
|
@@ -34,33 +44,190 @@ export class FeelService {
|
|
|
34
44
|
return true;
|
|
35
45
|
}
|
|
36
46
|
};
|
|
47
|
+
const nodes = [{ type: "root", text: expression, children: [], parent: null }];
|
|
48
|
+
const peek = () => {
|
|
49
|
+
return nodes.length > 0 ? nodes[nodes.length - 1] : null;
|
|
50
|
+
};
|
|
51
|
+
const isAllowedPathExpression = (node) => {
|
|
52
|
+
if (node.type === VariableName) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
if (node.type !== PathExpression || !Array.isArray(node.children)) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return node.children.every(isAllowedPathExpression);
|
|
59
|
+
};
|
|
60
|
+
const getPathExpression = (item) => {
|
|
61
|
+
if (item.type === VariableName) {
|
|
62
|
+
return [item.text];
|
|
63
|
+
}
|
|
64
|
+
if (item.type === PathExpression) {
|
|
65
|
+
return item.children.flatMap(getPathExpression);
|
|
66
|
+
}
|
|
67
|
+
return [];
|
|
68
|
+
};
|
|
37
69
|
parseExpression(expression, context).iterate({
|
|
38
70
|
enter: (node) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
71
|
+
const type = node.name;
|
|
72
|
+
const text = expression.substring(node.from, node.to);
|
|
73
|
+
const parent = peek();
|
|
74
|
+
const item = { type, text, children: [], parent: parent };
|
|
75
|
+
if (parent) {
|
|
76
|
+
parent.children.push(item);
|
|
44
77
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
78
|
+
nodes.push(item);
|
|
79
|
+
},
|
|
80
|
+
leave: (node) => {
|
|
81
|
+
if (nodes.length > 0) {
|
|
82
|
+
const item = nodes.pop();
|
|
83
|
+
if (!item)
|
|
84
|
+
return;
|
|
85
|
+
const parent = peek();
|
|
86
|
+
if (item.type === PathExpression) {
|
|
87
|
+
const ignore = (parent?.type === FunctionInvocation
|
|
88
|
+
|| parent?.type === PathExpression
|
|
89
|
+
|| item.children.length == 0
|
|
90
|
+
|| !isAllowedPathExpression(item));
|
|
91
|
+
if (!ignore) {
|
|
92
|
+
const pathExpression = getPathExpression(item);
|
|
93
|
+
if (addSet(pathExpression.join('.'))) {
|
|
94
|
+
dependencies.push(pathExpression);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (item.type === VariableName) {
|
|
99
|
+
const ignore = (parent?.type === FunctionInvocation
|
|
100
|
+
|| parent?.type === PathExpression);
|
|
101
|
+
if (!ignore) {
|
|
102
|
+
const pathExpression = item.text;
|
|
103
|
+
if (addSet(pathExpression)) {
|
|
104
|
+
dependencies.push(pathExpression);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if (item.type === FunctionInvocation) {
|
|
109
|
+
const functionName = this.getFunctionName(item, getPathExpression);
|
|
110
|
+
if (functionName == "fn.status") {
|
|
111
|
+
const statusDeps = this.getStatusDependencies(item);
|
|
112
|
+
if (statusDeps && addSet(statusDeps.join('.'))) {
|
|
113
|
+
dependencies.push(statusDeps);
|
|
53
114
|
}
|
|
54
|
-
}
|
|
55
|
-
dependencies.push(path);
|
|
115
|
+
}
|
|
56
116
|
}
|
|
57
|
-
return false;
|
|
58
117
|
}
|
|
59
|
-
return true;
|
|
60
118
|
}
|
|
61
119
|
});
|
|
62
120
|
return dependencies;
|
|
63
121
|
}
|
|
122
|
+
getTemplateDependencies(expression, context = {}) {
|
|
123
|
+
if (!expression)
|
|
124
|
+
return [];
|
|
125
|
+
const simpleTree = buildSimpleTree(parser.parse(expression), expression);
|
|
126
|
+
const result = [];
|
|
127
|
+
function traverse(nodeArray) {
|
|
128
|
+
for (const node of nodeArray) {
|
|
129
|
+
if (node.name === 'FeelBlock' && node.content) {
|
|
130
|
+
result.push(node.content);
|
|
131
|
+
}
|
|
132
|
+
if (node.children && node.children.length > 0) {
|
|
133
|
+
traverse(node.children);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
traverse([simpleTree]);
|
|
138
|
+
const arrayExpression = `[ ${result.join(', ')} ]`;
|
|
139
|
+
return this.getDependencies(arrayExpression, context);
|
|
140
|
+
}
|
|
141
|
+
//#region Private Members
|
|
142
|
+
findAncestor(node, predicate) {
|
|
143
|
+
let current = node.parent;
|
|
144
|
+
while (current !== null) {
|
|
145
|
+
if (predicate(current)) {
|
|
146
|
+
return current;
|
|
147
|
+
}
|
|
148
|
+
current = current.parent;
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
findDescendant(node, predicate) {
|
|
153
|
+
for (const child of node.children) {
|
|
154
|
+
if (predicate(child)) {
|
|
155
|
+
return child;
|
|
156
|
+
}
|
|
157
|
+
const found = this.findDescendant(child, predicate);
|
|
158
|
+
if (found !== null) {
|
|
159
|
+
return found;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
findChild(node, predicate) {
|
|
165
|
+
for (const child of node.children) {
|
|
166
|
+
if (predicate(child)) {
|
|
167
|
+
return child;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
findChildren(node, predicate) {
|
|
173
|
+
return node.children.filter(predicate);
|
|
174
|
+
}
|
|
175
|
+
getFunctionName(node, pathResolver) {
|
|
176
|
+
const pathExpression = this.findChild(node, (n) => n.type === PathExpression);
|
|
177
|
+
if (pathExpression) {
|
|
178
|
+
return pathResolver(pathExpression).join('.');
|
|
179
|
+
}
|
|
180
|
+
const variableName = this.findChild(node, (n) => n.type === VariableName);
|
|
181
|
+
if (variableName) {
|
|
182
|
+
return pathResolver(variableName).join('.');
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
getStatusDependencies(node) {
|
|
187
|
+
if (node.type != FunctionInvocation)
|
|
188
|
+
return [];
|
|
189
|
+
let pathParameter = null;
|
|
190
|
+
const namedParameters = this.findChild(node, (n) => n.type === NamedParameters);
|
|
191
|
+
if (namedParameters) {
|
|
192
|
+
const pathName = this.findDescendant(namedParameters, (n) => n.type == ParameterName && n.text === "path");
|
|
193
|
+
const namedParameter = pathName?.parent;
|
|
194
|
+
if (namedParameter && namedParameter.children.length > 1) {
|
|
195
|
+
pathParameter = namedParameter.children[1];
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const positionalParameters = this.findChild(node, (n) => n.type === PositionalParameters);
|
|
199
|
+
if (positionalParameters) {
|
|
200
|
+
pathParameter = positionalParameters.children[0];
|
|
201
|
+
}
|
|
202
|
+
if (pathParameter) {
|
|
203
|
+
const getPathExpression = (item) => {
|
|
204
|
+
if (item.type === StringLiteral) {
|
|
205
|
+
return this.splitQuoted(item.text);
|
|
206
|
+
}
|
|
207
|
+
else if (item.type === NumericLiteral) {
|
|
208
|
+
return [item.text];
|
|
209
|
+
}
|
|
210
|
+
else if (item.type === List) {
|
|
211
|
+
const items = this.findChildren(item, (n) => n.type !== "[" && n.type !== "]");
|
|
212
|
+
if (items.every(n => n.type === StringLiteral || n.type === NumericLiteral)) {
|
|
213
|
+
return items.flatMap(getPathExpression);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return [];
|
|
217
|
+
};
|
|
218
|
+
const path = getPathExpression(pathParameter);
|
|
219
|
+
if (path.length > 0)
|
|
220
|
+
return [StatusDependency, ...path];
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
splitQuoted(input, separator = '.') {
|
|
225
|
+
input = (input ?? "").slice(1, -1);
|
|
226
|
+
return input
|
|
227
|
+
.split(separator)
|
|
228
|
+
.map(part => part.trim())
|
|
229
|
+
.filter(part => part.length > 0);
|
|
230
|
+
}
|
|
64
231
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
65
232
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelService, providedIn: 'root' });
|
|
66
233
|
}
|
|
@@ -70,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
70
237
|
providedIn: 'root'
|
|
71
238
|
}]
|
|
72
239
|
}], ctorParameters: () => [] });
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZmVlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBSzlELE1BQU0sT0FBTyxXQUFXO0lBRXRCLGdCQUFnQixDQUFDO0lBRWpCLFlBQVksQ0FBQyxRQUFnQixFQUFFLFVBQWUsRUFBRTtRQUM5QyxPQUFPLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQUEsQ0FBQztJQUVGLGNBQWMsQ0FBQyxVQUFrQixFQUFFLFVBQStCLEVBQUU7UUFDbEUsT0FBTyxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFBQSxDQUFDO0lBRUYsYUFBYSxDQUFDLFVBQWtCLEVBQUUsVUFBK0IsRUFBRSxFQUFFLFFBQWEsSUFBSTtRQUNwRixJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxDQUFDO2dCQUNPLENBQUM7WUFDUCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUFBLENBQUM7SUFFRixlQUFlLENBQUMsVUFBa0IsRUFBRSxVQUErQixFQUFFO1FBQ25FLE1BQU0sWUFBWSxHQUEwQixFQUFFLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQzlCLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4QixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7aUJBQ0ksQ0FBQztnQkFDSixTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixlQUFlLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMzQyxLQUFLLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN0RCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNqQixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMxQixDQUFDO2dCQUNILENBQUM7cUJBQ0ksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFLENBQUM7b0JBQ3hDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3RELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2pCLE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFOzRCQUM1QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFLENBQUM7Z0NBQ3BDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0NBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ2xCLENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7d0dBNURVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBldmFsdWF0ZSBhcyBldmFsdWF0ZVRlbXBsYXRlIH0gZnJvbSAnZmVlbGVycyc7XHJcbmltcG9ydCB7IHVuYXJ5VGVzdCwgZXZhbHVhdGUsIHBhcnNlRXhwcmVzc2lvbiB9IGZyb20gJ2ZlZWxpbic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWVsU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIGV2YWxUZW1wbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nLCBjb250ZXh0OiBhbnkgPSB7fSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZXZhbHVhdGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgZXZhbEV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nLCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBhbnkge1xyXG4gICAgcmV0dXJuIGV2YWx1YXRlKGV4cHJlc3Npb24sIGNvbnRleHQpO1xyXG4gIH07XHJcblxyXG4gIGV2YWxVbmFyeVRlc3QoZXhwcmVzc2lvbjogc3RyaW5nLCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sIGlucHV0OiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb250ZXh0Wyc/J10gPSBpbnB1dDtcclxuICAgICAgcmV0dXJuIHVuYXJ5VGVzdChleHByZXNzaW9uLCBjb250ZXh0KTtcclxuICAgIH0gICAgXHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgZGVsZXRlIGNvbnRleHRbJz8nXTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBnZXREZXBlbmRlbmNpZXMoZXhwcmVzc2lvbjogc3RyaW5nLCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiAoc3RyaW5nIHwgc3RyaW5nW10pW10ge1xyXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10gPSBbXTtcclxuICAgIGNvbnN0IHVuaXF1ZVNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgY29uc3QgYWRkU2V0ID0gKHRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAodW5pcXVlU2V0Lmhhcyh0ZXh0KSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB1bmlxdWVTZXQuYWRkKHRleHQpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9O1xyXG4gICAgcGFyc2VFeHByZXNzaW9uKGV4cHJlc3Npb24sIGNvbnRleHQpLml0ZXJhdGUoe1xyXG4gICAgICBlbnRlcjogKG5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChub2RlLm5hbWUgPT09ICdWYXJpYWJsZU5hbWUnKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcobm9kZS5mcm9tLCBub2RlLnRvKTtcclxuICAgICAgICAgIGlmIChhZGRTZXQodGV4dCkpIHtcclxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2godGV4dCk7XHJcbiAgICAgICAgICB9ICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlLm5hbWUgPT09ICdQYXRoRXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBleHByZXNzaW9uLnN1YnN0cmluZyhub2RlLmZyb20sIG5vZGUudG8pO1xyXG4gICAgICAgICAgaWYgKGFkZFNldCh0ZXh0KSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXRoOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICBub2RlLml0ZXJhdGUoKHN1Ym5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChzdWJub2RlLm5hbWUgPT09ICdWYXJpYWJsZU5hbWUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcoc3Vibm9kZS5mcm9tLCBzdWJub2RlLnRvKTtcclxuICAgICAgICAgICAgICAgIHBhdGgucHVzaChwYXJ0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChwYXRoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRlcGVuZGVuY2llcztcclxuICB9XHJcbn1cclxuIl19
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZmVlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsUUFBUSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFFOUQsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUM7QUFDeEMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDO0FBQ3BDLE1BQU0sa0JBQWtCLEdBQUcsb0JBQW9CLENBQUM7QUFDaEQsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQUNwRCxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQUMxQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUM7QUFDdEMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBQ3RDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0FBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQixNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUtuQyxNQUFNLE9BQU8sV0FBVztJQUV0QixnQkFBZ0IsQ0FBQztJQUVqQixZQUFZLENBQUMsUUFBZ0IsRUFBRSxVQUFlLEVBQUU7UUFDOUMsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUFBLENBQUM7SUFFRixjQUFjLENBQUMsVUFBa0IsRUFBRSxVQUErQixFQUFFO1FBQ2xFLE9BQU8sUUFBUSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lB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QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbEMsT0FBTyxLQUFLO2FBQ1QsS0FBSyxDQUFDLFNBQVMsQ0FBQzthQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO3dHQXhQVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYnVpbGRTaW1wbGVUcmVlLCBwYXJzZXIsIGV2YWx1YXRlIGFzIGV2YWx1YXRlVGVtcGxhdGUgfSBmcm9tICdmZWVsZXJzJztcclxuaW1wb3J0IHsgdW5hcnlUZXN0LCBldmFsdWF0ZSwgcGFyc2VFeHByZXNzaW9uIH0gZnJvbSAnZmVlbGluJztcclxuXHJcbmNvbnN0IFBhdGhFeHByZXNzaW9uID0gXCJQYXRoRXhwcmVzc2lvblwiO1xyXG5jb25zdCBWYXJpYWJsZU5hbWUgPSBcIlZhcmlhYmxlTmFtZVwiO1xyXG5jb25zdCBGdW5jdGlvbkludm9jYXRpb24gPSBcIkZ1bmN0aW9uSW52b2NhdGlvblwiO1xyXG5jb25zdCBQb3NpdGlvbmFsUGFyYW1ldGVycyA9IFwiUG9zaXRpb25hbFBhcmFtZXRlcnNcIjtcclxuY29uc3QgTmFtZWRQYXJhbWV0ZXJzID0gXCJOYW1lZFBhcmFtZXRlcnNcIjtcclxuY29uc3QgUGFyYW1ldGVyTmFtZSA9IFwiUGFyYW1ldGVyTmFtZVwiO1xyXG5jb25zdCBTdHJpbmdMaXRlcmFsID0gXCJTdHJpbmdMaXRlcmFsXCI7XHJcbmNvbnN0IE51bWVyaWNMaXRlcmFsID0gXCJOdW1lcmljTGl0ZXJhbFwiO1xyXG5jb25zdCBMaXN0ID0gXCJMaXN0XCI7XHJcbmNvbnN0IFN0YXR1c0RlcGVuZGVuY3kgPSBcIiRzdGF0dXNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZlZWxTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgZXZhbFRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcsIGNvbnRleHQ6IGFueSA9IHt9KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBldmFsdWF0ZVRlbXBsYXRlKHRlbXBsYXRlLCBjb250ZXh0KTtcclxuICB9O1xyXG5cclxuICBldmFsRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcsIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IGFueSB7XHJcbiAgICByZXR1cm4gZXZhbHVhdGUoZXhwcmVzc2lvbiwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgZXZhbFVuYXJ5VGVzdChleHByZXNzaW9uOiBzdHJpbmcsIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSwgaW5wdXQ6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnRleHRbJz8nXSA9IGlucHV0O1xyXG4gICAgICByZXR1cm4gdW5hcnlUZXN0KGV4cHJlc3Npb24sIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgIGRlbGV0ZSBjb250ZXh0Wyc/J107XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZ2V0RGVwZW5kZW5jaWVzKGV4cHJlc3Npb246IHN0cmluZywgY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogKHN0cmluZyB8IHN0cmluZ1tdKVtdIHtcclxuICAgIGNvbnN0IGRlcGVuZGVuY2llczogKHN0cmluZyB8IHN0cmluZ1tdKVtdID0gW107XHJcbiAgICBjb25zdCB1bmlxdWVTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgIGNvbnN0IGFkZFNldCA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKHVuaXF1ZVNldC5oYXModGV4dCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdW5pcXVlU2V0LmFkZCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBub2RlczogTm9kZUl0ZW1bXSA9IFt7IHR5cGU6IFwicm9vdFwiLCB0ZXh0OiBleHByZXNzaW9uLCBjaGlsZHJlbjogW10sIHBhcmVudDogbnVsbCB9XTtcclxuXHJcbiAgICBjb25zdCBwZWVrID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdIDogbnVsbDtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24gPSAobm9kZTogTm9kZUl0ZW0pOiBib29sZWFuID0+IHtcclxuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gVmFyaWFibGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gUGF0aEV4cHJlc3Npb24gfHwgIUFycmF5LmlzQXJyYXkobm9kZS5jaGlsZHJlbikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uZXZlcnkoaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBnZXRQYXRoRXhwcmVzc2lvbiA9IChpdGVtOiBOb2RlSXRlbSk6IHN0cmluZ1tdID0+IHtcclxuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gVmFyaWFibGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIFtpdGVtLnRleHRdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFBhdGhFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW4uZmxhdE1hcChnZXRQYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfTtcclxuXHJcbiAgICBwYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgY29udGV4dCkuaXRlcmF0ZSh7XHJcbiAgICAgIGVudGVyOiAobm9kZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IG5vZGUubmFtZTtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcobm9kZS5mcm9tLCBub2RlLnRvKTtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBwZWVrKCk7XHJcbiAgICAgICAgY29uc3QgaXRlbTogTm9kZUl0ZW0gPSB7IHR5cGUsIHRleHQsIGNoaWxkcmVuOiBbXSwgcGFyZW50OiBwYXJlbnQgfTtcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZXMucHVzaChpdGVtKTtcclxuICAgICAgfSxcclxuICAgICAgbGVhdmU6IChub2RlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAobm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IG5vZGVzLnBvcCgpO1xyXG4gICAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBwZWVrKCk7XHJcblxyXG4gICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gUGF0aEV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgY29uc3QgaWdub3JlID0gKHBhcmVudD8udHlwZSA9PT0gRnVuY3Rpb25JbnZvY2F0aW9uXHJcbiAgICAgICAgICAgICAgfHwgcGFyZW50Py50eXBlID09PSBQYXRoRXhwcmVzc2lvblxyXG4gICAgICAgICAgICAgIHx8IGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09IDBcclxuICAgICAgICAgICAgICB8fCAhaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24oaXRlbSkpO1xyXG4gICAgICAgICAgICBpZiAoIWlnbm9yZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhFeHByZXNzaW9uID0gZ2V0UGF0aEV4cHJlc3Npb24oaXRlbSk7XHJcbiAgICAgICAgICAgICAgaWYgKGFkZFNldChwYXRoRXhwcmVzc2lvbi5qb2luKCcuJykpKSB7XHJcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChwYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFZhcmlhYmxlTmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpZ25vcmUgPSAocGFyZW50Py50eXBlID09PSBGdW5jdGlvbkludm9jYXRpb25cclxuICAgICAgICAgICAgICB8fCBwYXJlbnQ/LnR5cGUgPT09IFBhdGhFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgaWYgKCFpZ25vcmUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwYXRoRXhwcmVzc2lvbiA9IGl0ZW0udGV4dDtcclxuICAgICAgICAgICAgICBpZiAoYWRkU2V0KHBhdGhFeHByZXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2gocGF0aEV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09IEZ1bmN0aW9uSW52b2NhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZShpdGVtLCBnZXRQYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgIGlmIChmdW5jdGlvbk5hbWUgPT0gXCJmbi5zdGF0dXNcIikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0RlcHMgPSB0aGlzLmdldFN0YXR1c0RlcGVuZGVuY2llcyhpdGVtKTtcclxuICAgICAgICAgICAgICBpZiAoc3RhdHVzRGVwcyAmJiBhZGRTZXQoc3RhdHVzRGVwcy5qb2luKCcuJykpKSB7XHJcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChzdGF0dXNEZXBzKTtcclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZGVwZW5kZW5jaWVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGVEZXBlbmRlbmNpZXMoZXhwcmVzc2lvbjogc3RyaW5nLCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiAoc3RyaW5nIHwgc3RyaW5nW10pW10ge1xyXG4gICAgaWYgKCFleHByZXNzaW9uKSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3Qgc2ltcGxlVHJlZSA9IGJ1aWxkU2ltcGxlVHJlZShwYXJzZXIucGFyc2UoZXhwcmVzc2lvbiksIGV4cHJlc3Npb24pO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShub2RlQXJyYXk6IGFueVtdKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2RlQXJyYXkpIHtcclxuICAgICAgICBpZiAobm9kZS5uYW1lID09PSAnRmVlbEJsb2NrJyAmJiBub2RlLmNvbnRlbnQpIHtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUuY29udGVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdHJhdmVyc2Uobm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJhdmVyc2UoW3NpbXBsZVRyZWVdKTtcclxuXHJcbiAgICBjb25zdCBhcnJheUV4cHJlc3Npb24gPSBgWyAke3Jlc3VsdC5qb2luKCcsICcpfSBdYDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZXREZXBlbmRlbmNpZXMoYXJyYXlFeHByZXNzaW9uLCBjb250ZXh0KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBQcml2YXRlIE1lbWJlcnNcclxuXHJcbiAgcHJpdmF0ZSBmaW5kQW5jZXN0b3Iobm9kZTogTm9kZUl0ZW0sIHByZWRpY2F0ZTogKGNoaWxkOiBOb2RlSXRlbSkgPT4gYm9vbGVhbik6IE5vZGVJdGVtIHwgbnVsbCB7XHJcbiAgICBsZXQgY3VycmVudCA9IG5vZGUucGFyZW50O1xyXG4gICAgd2hpbGUgKGN1cnJlbnQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHByZWRpY2F0ZShjdXJyZW50KSkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kRGVzY2VuZGFudChub2RlOiBOb2RlSXRlbSwgcHJlZGljYXRlOiAoY2hpbGQ6IE5vZGVJdGVtKSA9PiBib29sZWFuKTogTm9kZUl0ZW0gfCBudWxsIHtcclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZERlc2NlbmRhbnQoY2hpbGQsIHByZWRpY2F0ZSk7XHJcbiAgICAgIGlmIChmb3VuZCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmb3VuZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDaGlsZChub2RlOiBOb2RlSXRlbSwgcHJlZGljYXRlOiAoY2hpbGQ6IE5vZGVJdGVtKSA9PiBib29sZWFuKTogTm9kZUl0ZW0gfCBudWxsIHtcclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDaGlsZHJlbihub2RlOiBOb2RlSXRlbSwgcHJlZGljYXRlOiAoY2hpbGQ6IE5vZGVJdGVtKSA9PiBib29sZWFuKTogTm9kZUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5maWx0ZXIocHJlZGljYXRlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RnVuY3Rpb25OYW1lKG5vZGU6IE5vZGVJdGVtLCBwYXRoUmVzb2x2ZXI6IChpdGVtOiBOb2RlSXRlbSkgPT4gc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcclxuXHJcbiAgICBjb25zdCBwYXRoRXhwcmVzc2lvbiA9IHRoaXMuZmluZENoaWxkKG5vZGUsIChuKSA9PiBuLnR5cGUgPT09IFBhdGhFeHByZXNzaW9uKTtcclxuICAgIGlmIChwYXRoRXhwcmVzc2lvbikge1xyXG4gICAgICByZXR1cm4gcGF0aFJlc29sdmVyKHBhdGhFeHByZXNzaW9uKS5qb2luKCcuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdmFyaWFibGVOYW1lID0gdGhpcy5maW5kQ2hpbGQobm9kZSwgKG4pID0+IG4udHlwZSA9PT0gVmFyaWFibGVOYW1lKTtcclxuICAgIGlmICh2YXJpYWJsZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIHBhdGhSZXNvbHZlcih2YXJpYWJsZU5hbWUpLmpvaW4oJy4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3RhdHVzRGVwZW5kZW5jaWVzKG5vZGU6IE5vZGVJdGVtKTogc3RyaW5nW10gfCBudWxsIHtcclxuICAgIGlmIChub2RlLnR5cGUgIT0gRnVuY3Rpb25JbnZvY2F0aW9uKSByZXR1cm4gW107XHJcblxyXG4gICAgbGV0IHBhdGhQYXJhbWV0ZXI6IE5vZGVJdGVtIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzID0gdGhpcy5maW5kQ2hpbGQobm9kZSwgKG4pID0+IG4udHlwZSA9PT0gTmFtZWRQYXJhbWV0ZXJzKTtcclxuXHJcbiAgICBpZiAobmFtZWRQYXJhbWV0ZXJzKSB7XHJcbiAgICAgIGNvbnN0IHBhdGhOYW1lID0gdGhpcy5maW5kRGVzY2VuZGFudChuYW1lZFBhcmFtZXRlcnMsIChuKSA9PiBuLnR5cGUgPT0gUGFyYW1ldGVyTmFtZSAmJiBuLnRleHQgPT09IFwicGF0aFwiKTtcclxuICAgICAgY29uc3QgbmFtZWRQYXJhbWV0ZXIgPSBwYXRoTmFtZT8ucGFyZW50O1xyXG4gICAgICBpZiAobmFtZWRQYXJhbWV0ZXIgJiYgbmFtZWRQYXJhbWV0ZXIuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHBhdGhQYXJhbWV0ZXIgPSBuYW1lZFBhcmFtZXRlci5jaGlsZHJlblsxXTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gdGhpcy5maW5kQ2hpbGQobm9kZSwgKG4pID0+IG4udHlwZSA9PT0gUG9zaXRpb25hbFBhcmFtZXRlcnMpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbmFsUGFyYW1ldGVycykge1xyXG4gICAgICBwYXRoUGFyYW1ldGVyID0gcG9zaXRpb25hbFBhcmFtZXRlcnMuY2hpbGRyZW5bMF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhdGhQYXJhbWV0ZXIpIHtcclxuXHJcbiAgICAgIGNvbnN0IGdldFBhdGhFeHByZXNzaW9uID0gKGl0ZW06IE5vZGVJdGVtKTogc3RyaW5nW10gPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IFN0cmluZ0xpdGVyYWwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnNwbGl0UXVvdGVkKGl0ZW0udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gTnVtZXJpY0xpdGVyYWwpIHtcclxuICAgICAgICAgIHJldHVybiBbaXRlbS50ZXh0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS50eXBlID09PSBMaXN0KSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZmluZENoaWxkcmVuKGl0ZW0sIChuKSA9PiBuLnR5cGUgIT09IFwiW1wiICYmIG4udHlwZSAhPT0gXCJdXCIpO1xyXG4gICAgICAgICAgaWYgKGl0ZW1zLmV2ZXJ5KG4gPT4gbi50eXBlID09PSBTdHJpbmdMaXRlcmFsIHx8IG4udHlwZSA9PT0gTnVtZXJpY0xpdGVyYWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5mbGF0TWFwKGdldFBhdGhFeHByZXNzaW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcGF0aCA9IGdldFBhdGhFeHByZXNzaW9uKHBhdGhQYXJhbWV0ZXIpO1xyXG4gICAgICBpZiAocGF0aC5sZW5ndGggPiAwKSAgICAgIFxyXG4gICAgICAgIHJldHVybiBbU3RhdHVzRGVwZW5kZW5jeSwgLi4ucGF0aF07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzcGxpdFF1b3RlZChpbnB1dDogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyA9ICcuJyk6IHN0cmluZ1tdIHtcclxuICAgIGlucHV0ID0gKGlucHV0ID8/IFwiXCIpLnNsaWNlKDEsIC0xKVxyXG4gICAgcmV0dXJuIGlucHV0XHJcbiAgICAgIC5zcGxpdChzZXBhcmF0b3IpXHJcbiAgICAgIC5tYXAocGFydCA9PiBwYXJ0LnRyaW0oKSlcclxuICAgICAgLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMCk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG5cclxuaW50ZXJmYWNlIE5vZGVJdGVtIHtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGNoaWxkcmVuOiBOb2RlSXRlbVtdO1xyXG4gIHBhcmVudDogTm9kZUl0ZW0gfCBudWxsO1xyXG59XHJcbiJdfQ==
|