@wemake4u/form-player-se 1.0.48 → 1.0.50
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 +1 -1
- package/esm2022/lib/components/setFilter/setFilter.component.mjs +2 -2
- package/esm2022/lib/dialog/dialog.component.mjs +3 -2
- package/esm2022/lib/directives/date.directive.mjs +39 -35
- package/esm2022/lib/directives/dialog.directive.mjs +13 -13
- package/esm2022/lib/directives/dropdown.directive.mjs +59 -72
- package/esm2022/lib/directives/file.directive.mjs +212 -0
- package/esm2022/lib/directives/filemanager.directive.mjs +234 -0
- package/esm2022/lib/directives/filepicker.directive.mjs +8 -2
- package/esm2022/lib/directives/jsonfile.directive.mjs +59 -0
- package/esm2022/lib/directives/number.directive.mjs +3 -2
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +16 -69
- package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +6 -3
- package/esm2022/lib/locale/locale-de.mjs +6 -2
- package/esm2022/lib/locale/locale-en.mjs +6 -2
- package/esm2022/lib/locale/locale-es.mjs +6 -2
- package/esm2022/lib/locale/locale-fr.mjs +6 -2
- package/esm2022/lib/locale/locale-it.mjs +6 -2
- package/esm2022/lib/locale/locale-pt.mjs +6 -2
- package/esm2022/lib/services/compute.service.mjs +3 -3
- package/esm2022/lib/services/dialog.service.mjs +1 -1
- package/esm2022/lib/services/disable.service.mjs +2 -2
- package/esm2022/lib/services/programmability.service.mjs +5 -5
- package/fesm2022/wemake4u-form-player-se.mjs +685 -227
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
- package/lib/components/deleteRowRenderer/deleteRowRenderer.component.d.ts +4 -0
- package/lib/components/objectURLRenderer/objectURLRenderer.component.d.ts +4 -0
- package/lib/components/setFilter/setFilter.component.d.ts +4 -0
- package/lib/dialog/dialog.component.d.ts +28 -0
- package/lib/directives/date.directive.d.ts +4 -6
- package/lib/directives/dropdown.directive.d.ts +5 -2
- package/lib/directives/file.directive.d.ts +31 -0
- package/lib/directives/filemanager.directive.d.ts +47 -0
- package/lib/directives/filepicker.directive.d.ts +12 -0
- package/lib/directives/jsonfile.directive.d.ts +14 -0
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +29 -3
- package/lib/dynamic-form/dynamic-form.component.d.ts +29 -0
- package/lib/locale/locale-de.d.ts +4 -0
- package/lib/locale/locale-en.d.ts +4 -0
- package/lib/locale/locale-es.d.ts +4 -0
- package/lib/locale/locale-fr.d.ts +4 -0
- package/lib/locale/locale-it.d.ts +4 -0
- package/lib/locale/locale-pt.d.ts +4 -0
- package/lib/locale/locale.d.ts +28 -0
- package/lib/services/dialog.service.d.ts +2 -0
- package/package.json +2 -2
|
@@ -43,10 +43,11 @@ export class DropdownDirective {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
handleSearchable() {
|
|
46
|
-
const
|
|
46
|
+
const el = this.getPanelElementRef();
|
|
47
|
+
const searchable = el.nativeElement.querySelector('.searchable');
|
|
47
48
|
if (searchable) {
|
|
48
|
-
const dropDown = this.
|
|
49
|
-
const dropMenu =
|
|
49
|
+
const dropDown = this.getDropDownElement();
|
|
50
|
+
const dropMenu = this.getDropDownMenuElement();
|
|
50
51
|
const input = searchable.querySelector('input');
|
|
51
52
|
this.renderer.insertBefore(dropDown, searchable, dropMenu);
|
|
52
53
|
this.listenerService.listen(input, 'focus', () => {
|
|
@@ -68,6 +69,7 @@ export class DropdownDirective {
|
|
|
68
69
|
this.sirioSelect.panel.panelClosed
|
|
69
70
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
70
71
|
.subscribe(() => this.deactivate(searchable));
|
|
72
|
+
this.sirioSelect.panel.scroll = this.scroll.bind(this);
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
handleOptionsChanges() {
|
|
@@ -104,6 +106,15 @@ export class DropdownDirective {
|
|
|
104
106
|
this.onSelectionChanged(options);
|
|
105
107
|
});
|
|
106
108
|
}
|
|
109
|
+
getPanelElementRef() {
|
|
110
|
+
return this.sirioSelect.panel.elementRef;
|
|
111
|
+
}
|
|
112
|
+
getDropDownElement() {
|
|
113
|
+
return this.el.nativeElement.querySelector('.sirio-dropdown');
|
|
114
|
+
}
|
|
115
|
+
getDropDownMenuElement() {
|
|
116
|
+
return this.getPanelElementRef().nativeElement.querySelector('.sirio-dropdown-menu');
|
|
117
|
+
}
|
|
107
118
|
canValidate = false;
|
|
108
119
|
validator = this.validateOptions.bind(this);
|
|
109
120
|
addValidator() {
|
|
@@ -139,7 +150,7 @@ export class DropdownDirective {
|
|
|
139
150
|
if (!input)
|
|
140
151
|
return;
|
|
141
152
|
input.value = currentValue;
|
|
142
|
-
const dropMenu = this.
|
|
153
|
+
const dropMenu = this.getPanelElementRef().nativeElement;
|
|
143
154
|
this.sirioSelect.options.forEach((option) => {
|
|
144
155
|
this.show(option, true);
|
|
145
156
|
if (currentValue == option.text) {
|
|
@@ -147,6 +158,7 @@ export class DropdownDirective {
|
|
|
147
158
|
}
|
|
148
159
|
});
|
|
149
160
|
this.renderer.setStyle(element, 'display', 'inline-block');
|
|
161
|
+
this.doSerach(input);
|
|
150
162
|
setTimeout(() => {
|
|
151
163
|
input.setSelectionRange(input.value.length, input.value.length);
|
|
152
164
|
input.focus();
|
|
@@ -162,23 +174,7 @@ export class DropdownDirective {
|
|
|
162
174
|
case 'Escape':
|
|
163
175
|
return;
|
|
164
176
|
}
|
|
165
|
-
|
|
166
|
-
const exactMatch = this.sirioSelect.options.find(option => this.comparable(option.text) === value);
|
|
167
|
-
let firstMatch = true;
|
|
168
|
-
this.sirioSelect.options.forEach((option, index) => {
|
|
169
|
-
const comparableText = this.comparable(option.text);
|
|
170
|
-
const match = exactMatch
|
|
171
|
-
? comparableText === value
|
|
172
|
-
: comparableText.includes(value);
|
|
173
|
-
this.show(option, match);
|
|
174
|
-
if (match && firstMatch) {
|
|
175
|
-
option.setFocus();
|
|
176
|
-
firstMatch = false;
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
option.removeFocus();
|
|
180
|
-
}
|
|
181
|
-
});
|
|
177
|
+
this.doSerach(input);
|
|
182
178
|
}
|
|
183
179
|
onKeyDown(event) {
|
|
184
180
|
const panel = this.sirioSelect.panel;
|
|
@@ -195,20 +191,12 @@ export class DropdownDirective {
|
|
|
195
191
|
panel.optionFocused?.onOptionSelected(event);
|
|
196
192
|
}
|
|
197
193
|
else {
|
|
198
|
-
panel.close(
|
|
194
|
+
panel.close();
|
|
199
195
|
event?.preventDefault();
|
|
200
196
|
}
|
|
201
197
|
break;
|
|
202
|
-
case 'ArrowDown':
|
|
203
|
-
this.scrollDown();
|
|
204
|
-
event?.preventDefault();
|
|
205
|
-
break;
|
|
206
|
-
case 'ArrowUp':
|
|
207
|
-
this.scrollUp();
|
|
208
|
-
event?.preventDefault();
|
|
209
|
-
break;
|
|
210
198
|
case 'Escape':
|
|
211
|
-
panel.close(
|
|
199
|
+
panel.close();
|
|
212
200
|
break;
|
|
213
201
|
default:
|
|
214
202
|
break;
|
|
@@ -218,7 +206,7 @@ export class DropdownDirective {
|
|
|
218
206
|
switch (code) {
|
|
219
207
|
case 'Enter':
|
|
220
208
|
case 'Space':
|
|
221
|
-
panel.open(
|
|
209
|
+
panel.open();
|
|
222
210
|
event?.preventDefault();
|
|
223
211
|
break;
|
|
224
212
|
default:
|
|
@@ -238,68 +226,67 @@ export class DropdownDirective {
|
|
|
238
226
|
comparable(text) {
|
|
239
227
|
return text.toLowerCase().trim();
|
|
240
228
|
}
|
|
241
|
-
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
}
|
|
229
|
+
doSerach(input) {
|
|
230
|
+
const value = this.comparable(input.value);
|
|
231
|
+
const exactMatch = this.sirioSelect.options.find(option => this.comparable(option.text) === value);
|
|
232
|
+
let firstMatch = true;
|
|
233
|
+
this.sirioSelect.options.forEach((option, index) => {
|
|
234
|
+
const comparableText = this.comparable(option.text);
|
|
235
|
+
const match = exactMatch
|
|
236
|
+
? comparableText === value
|
|
237
|
+
: comparableText.includes(value);
|
|
238
|
+
this.show(option, match);
|
|
239
|
+
if (match && firstMatch) {
|
|
240
|
+
option.focus();
|
|
241
|
+
firstMatch = false;
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
option.removeFocus();
|
|
245
|
+
}
|
|
246
|
+
});
|
|
260
247
|
}
|
|
261
|
-
|
|
248
|
+
scroll(down = false) {
|
|
262
249
|
const panel = this.sirioSelect.panel;
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
panel.
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
const nextOptionFocused = this.findPreviousVisibleOption(panel.optionFocusedIndex - 1, panel.options);
|
|
269
|
-
if (nextOptionFocused) {
|
|
270
|
-
panel.scrollBarUp();
|
|
271
|
-
panel.optionFocused?.removeFocus();
|
|
272
|
-
nextOptionFocused?.setFocus();
|
|
250
|
+
const optionFocusedIndex = panel.optionFocusedIndex;
|
|
251
|
+
if (optionFocusedIndex === -1) {
|
|
252
|
+
panel.focusFirstOption();
|
|
273
253
|
return;
|
|
274
254
|
}
|
|
275
|
-
panel.
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
255
|
+
panel.blurCurrent();
|
|
256
|
+
let newIndex = down
|
|
257
|
+
? this.findNextVisibleOption(optionFocusedIndex + 1, panel.options)
|
|
258
|
+
: this.findPreviousVisibleOption(optionFocusedIndex - 1, panel.options);
|
|
259
|
+
if (newIndex === -1) {
|
|
260
|
+
newIndex = down
|
|
261
|
+
? this.findNextVisibleOption(0, panel.options)
|
|
262
|
+
: this.findPreviousVisibleOption(panel.options.length - 1, panel.options);
|
|
280
263
|
}
|
|
264
|
+
if (newIndex < 0 || newIndex >= panel.options.length)
|
|
265
|
+
return;
|
|
266
|
+
const nextOptionFocused = panel.options.get(newIndex);
|
|
267
|
+
nextOptionFocused?.focus();
|
|
281
268
|
}
|
|
282
269
|
findPreviousVisibleOption(startIndex, options) {
|
|
283
270
|
let i = startIndex;
|
|
284
271
|
while (i >= 0) {
|
|
285
272
|
const option = options.get(i);
|
|
286
273
|
if (!this.isHidden(option)) {
|
|
287
|
-
return
|
|
274
|
+
return i;
|
|
288
275
|
}
|
|
289
276
|
i--;
|
|
290
277
|
}
|
|
291
|
-
return
|
|
278
|
+
return -1;
|
|
292
279
|
}
|
|
293
280
|
findNextVisibleOption(startIndex, options) {
|
|
294
281
|
let i = startIndex;
|
|
295
282
|
while (i < options.length) {
|
|
296
283
|
const option = options.get(i);
|
|
297
284
|
if (!this.isHidden(option)) {
|
|
298
|
-
return
|
|
285
|
+
return i;
|
|
299
286
|
}
|
|
300
287
|
i++;
|
|
301
288
|
}
|
|
302
|
-
return
|
|
289
|
+
return -1;
|
|
303
290
|
}
|
|
304
291
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DropdownDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ListenerService }, { token: i0.DestroyRef }, { token: i2.SirioSelectComponent, host: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
305
292
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: DropdownDirective, isStandalone: true, selector: "[dropdown]", inputs: { component: ["register", "component"], onSelectionChanged: "onSelectionChanged" }, providers: [
|
|
@@ -323,4 +310,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
323
310
|
}], onSelectionChanged: [{
|
|
324
311
|
type: Input
|
|
325
312
|
}] } });
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZGlyZWN0aXZlcy9kcm9wZG93bi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBd0MsSUFBSSxFQUF5QixLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUcvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQVVoRSxNQUFNLE9BQU8saUJBQWlCO0lBS2xCO0lBQ0E7SUFDQTtJQUNBO0lBQ1E7SUFSQyxTQUFTLEdBQVEsSUFBSSxDQUFDO0lBQ2hDLGtCQUFrQixDQUF1QztJQUVsRSxZQUNVLEVBQWMsRUFDZCxRQUFtQixFQUNuQixlQUFnQyxFQUNoQyxVQUFzQixFQUNkLFdBQWlDO1FBSnpDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO0lBR25ELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sV0FB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Q2hCO2lCQUNGOzswQkFVSSxJQUFJO3lDQVJZLFNBQVM7c0JBQTNCLEtBQUs7dUJBQUMsVUFBVTtnQkFDUixrQkFBa0I7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgRWxlbWVudFJlZiwgSG9zdCwgUmVuZGVyZXIyLCBEZXN0cm95UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExpc3RlbmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xpc3RlbmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaXJpb1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ25neC1zaXJpby1saWInO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgRXZhbHVhdGVPcHRpb25zIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZHJvcGRvd25dJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgTGlzdGVuZXJTZXJ2aWNlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25EaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dChcInJlZ2lzdGVyXCIpIGNvbXBvbmVudDogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSBvblNlbGVjdGlvbkNoYW5nZWQ/OiAob3B0aW9ucz86IEV2YWx1YXRlT3B0aW9ucykgPT4gdm9pZDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lclNlcnZpY2U6IExpc3RlbmVyU2VydmljZSwgICAgXHJcbiAgICBwcml2YXRlIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYsXHJcbiAgICBASG9zdCgpIHByaXZhdGUgc2lyaW9TZWxlY3Q6IFNpcmlvU2VsZWN0Q29tcG9uZW50XHJcbiAgKSB7XHJcbiAgICBcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlVmFsdWUoKTtcclxuICAgIHRoaXMuaGFuZGxlU2VhcmNoYWJsZSgpO1xyXG4gICAgdGhpcy5oYW5kbGVPcHRpb25zQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5oYW5kbGVPcHRpb25TZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZFZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbW92ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZhbHN5VmFsdWVzID0gW251bGwsIGZhbHNlLCAwLCBcIlwiXTtcclxuXHJcbiAgICBpZiAodGhpcy5zaXJpb1NlbGVjdFxyXG4gICAgICAmJiBBcnJheS5pc0FycmF5KHRoaXMuc2lyaW9TZWxlY3Qub3B0aW9ucylcclxuICAgICAgJiYgZmFsc3lWYWx1ZXMuaW5jbHVkZXModGhpcy5zaXJpb1NlbGVjdC52YWx1ZSkpXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHZhbHVlT3B0aW9uID0gdGhpcy5zaXJpb1NlbGVjdC5vcHRpb25zLmZpbmQoXHJcbiAgICAgICAgb3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gdGhpcy5zaXJpb1NlbGVjdC52YWx1ZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHZhbHVlT3B0aW9uKSB7XHJcbiAgICAgICAgdmFsdWVPcHRpb24uaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU2VhcmNoYWJsZSgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBzZWFyY2hhYmxlID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWFyY2hhYmxlJyk7XHJcbiAgICBpZiAoc2VhcmNoYWJsZSkge1xyXG4gICAgICBjb25zdCBkcm9wRG93biA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2lyaW8tZHJvcGRvd24nKTtcclxuICAgICAgY29uc3QgZHJvcE1lbnUgPSBkcm9wRG93bi5xdWVyeVNlbGVjdG9yKCcuc2lyaW8tZHJvcGRvd24tbWVudScpO1xyXG4gICAgICBjb25zdCBpbnB1dCA9IHNlYXJjaGFibGUucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoZHJvcERvd24sIHNlYXJjaGFibGUsIGRyb3BNZW51KTtcclxuXHJcbiAgICAgIHRoaXMubGlzdGVuZXJTZXJ2aWNlLmxpc3RlbihpbnB1dCwgJ2ZvY3VzJywgKCkgPT4ge1xyXG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubGlzdGVuZXJTZXJ2aWNlLmxpc3RlbihpbnB1dCwgJ2JsdXInLCAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCAhPT0gZHJvcE1lbnUpXHJcbiAgICAgICAgICB0aGlzLnNpcmlvU2VsZWN0LnBhbmVsLmNsb3NlKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5saXN0ZW5lclNlcnZpY2UubGlzdGVuKGlucHV0LCAna2V5dXAnLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLm9uS2V5VXAoZXZlbnQsIGlucHV0KTsgICAgICAgIFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubGlzdGVuZXJTZXJ2aWNlLmxpc3RlbihpbnB1dCwgJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLm9uS2V5RG93bihldmVudCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zaXJpb1NlbGVjdC5wYW5lbC5wYW5lbE9wZW5lZFxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hY3RpdmF0ZShzZWFyY2hhYmxlKSk7XHJcblxyXG4gICAgICB0aGlzLnNpcmlvU2VsZWN0LnBhbmVsLnBhbmVsQ2xvc2VkXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRlYWN0aXZhdGUoc2VhcmNoYWJsZSkpO1xyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlT3B0aW9uc0NoYW5nZXMoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zaXJpb1NlbGVjdC5wYW5lbC5vcHRpb25zLmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmFsdWUoKTtcclxuICAgICAgICAgICAgdGhpcy5jYW5WYWxpZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU9wdGlvblNlbGVjdGVkKCk6IHZvaWQge1xyXG5cclxuICAgIGlmICghdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnNpcmlvU2VsZWN0LnBhbmVsLm9wdGlvblNlbGVjdGVkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xyXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb246IHtcclxuICAgICAgICAgICAgdmFsdWU6IGUuY29tcG9uZW50LnZhbHVlLFxyXG4gICAgICAgICAgICBsYWJlbDogZS5jb21wb25lbnQudGV4dFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uczogRXZhbHVhdGVPcHRpb25zID0ge1xyXG4gICAgICAgICAgZXh0ZW5kQ29udGV4dDogKCkgPT4gKHtcclxuICAgICAgICAgICAgXCJldmVudFwiOiBldmVudFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBpbnZva2VBcmdzOiBbZXZlbnRdXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZChvcHRpb25zKSAgICAgICAgXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW5WYWxpZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHZhbGlkYXRvciA9IHRoaXMudmFsaWRhdGVPcHRpb25zLmJpbmQodGhpcyk7XHJcblxyXG4gIHByaXZhdGUgYWRkVmFsaWRhdG9yKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaXJpb1NlbGVjdC5jb250cm9sPy5hZGRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlVmFsaWRhdG9yKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaXJpb1NlbGVjdC5jb250cm9sPy5yZW1vdmVWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVPcHRpb25zKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5jYW5WYWxpZGF0ZSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgdmFsdWVPcHRpb24gPSB0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnMuZmluZChcclxuICAgICAgICBvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSB2YWx1ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIXZhbHVlT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IGBcIiR7dmFsdWV9XCIgbm9uIMOoIHVuIHZhbG9yZSB2YWxpZG9gIH07XHJcbiAgICAgIH1cclxuICAgIH0gICAgXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaFZhbGlkYXRvcnMoKSB7XHJcbiAgICB0aGlzLnNpcmlvU2VsZWN0LmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVhY3RpdmF0ZShlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFjdGl2YXRlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICBsZXQgY3VycmVudFZhbHVlID0gXCJcIjtcclxuXHJcbiAgICBpZiAodGhpcy5zaXJpb1NlbGVjdC5vcHRpb25zU2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICBjdXJyZW50VmFsdWUgPSB0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnNTZWxlY3RlZFswXS50ZXh0XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcclxuXHJcbiAgICBpZiAoIWlucHV0KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaW5wdXQudmFsdWUgPSBjdXJyZW50VmFsdWU7XHJcblxyXG4gICAgY29uc3QgZHJvcE1lbnUgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNpcmlvLWRyb3Bkb3duLW1lbnUnKTtcclxuXHJcbiAgICB0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvdyhvcHRpb24sIHRydWUpO1xyXG4gICAgICBpZiAoY3VycmVudFZhbHVlID09IG9wdGlvbi50ZXh0KSB7XHJcbiAgICAgICAgZHJvcE1lbnUuc2Nyb2xsVG9wID0gdGhpcy5uYXRpdmUob3B0aW9uKS5vZmZzZXRUb3A7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGlucHV0LnZhbHVlLmxlbmd0aCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcclxuICAgICAgaW5wdXQuZm9jdXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbnB1dDogYW55KSB7XHJcbiAgICBjb25zdCB7IGNvZGUgfSA9IGV2ZW50O1xyXG5cclxuICAgIHN3aXRjaCAoY29kZSkge1xyXG4gICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgIGNhc2UgJ1NwYWNlJzpcclxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb21wYXJhYmxlKGlucHV0LnZhbHVlKTtcclxuXHJcbiAgICBjb25zdCBleGFjdE1hdGNoID0gdGhpcy5zaXJpb1NlbGVjdC5vcHRpb25zLmZpbmQob3B0aW9uID0+XHJcbiAgICAgIHRoaXMuY29tcGFyYWJsZShvcHRpb24udGV4dCkgPT09IHZhbHVlXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmaXJzdE1hdGNoID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBjb21wYXJhYmxlVGV4dCA9IHRoaXMuY29tcGFyYWJsZShvcHRpb24udGV4dCk7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gZXhhY3RNYXRjaFxyXG4gICAgICAgID8gY29tcGFyYWJsZVRleHQgPT09IHZhbHVlXHJcbiAgICAgICAgOiBjb21wYXJhYmxlVGV4dC5pbmNsdWRlcyh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuc2hvdyhvcHRpb24sIG1hdGNoKTtcclxuICAgICAgaWYgKG1hdGNoICYmIGZpcnN0TWF0Y2gpIHtcclxuICAgICAgICBvcHRpb24uc2V0Rm9jdXMoKTtcclxuICAgICAgICBmaXJzdE1hdGNoID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgb3B0aW9uLnJlbW92ZUZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zaXJpb1NlbGVjdC5wYW5lbDtcclxuICAgIGlmICghcGFuZWwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFuZWxJc09wZW4gPSBwYW5lbC5wYW5lbElzT3BlbjtcclxuICAgIGNvbnN0IHsgY29kZSB9ID0gZXZlbnQ7XHJcbiAgICBpZiAocGFuZWxJc09wZW4pIHtcclxuICAgICAgc3dpdGNoIChjb2RlKSB7XHJcbiAgICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgIGNhc2UgJ1NwYWNlJzpcclxuICAgICAgICAgIGlmIChwYW5lbC5vcHRpb25Gb2N1c2VkKSB7XHJcbiAgICAgICAgICAgIHBhbmVsLm9wdGlvbkZvY3VzZWQ/Lm9uT3B0aW9uU2VsZWN0ZWQoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHBhbmVsLmNsb3NlKGV2ZW50KTtcclxuICAgICAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGxEb3duKCk7XHJcbiAgICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICAgICAgdGhpcy5zY3JvbGxVcCgpO1xyXG4gICAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdFc2NhcGUnOlxyXG4gICAgICAgICAgcGFuZWwuY2xvc2UoZXZlbnQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXBhbmVsSXNPcGVuKSB7XHJcbiAgICAgIHN3aXRjaCAoY29kZSkge1xyXG4gICAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICBjYXNlICdTcGFjZSc6XHJcbiAgICAgICAgICBwYW5lbC5vcGVuKGV2ZW50KTtcclxuICAgICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdGl2ZShvcHRpb246IGFueSkge1xyXG4gICAgcmV0dXJuIG9wdGlvbi52aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNIaWRkZW4ob3B0aW9uOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLm5hdGl2ZShvcHRpb24pLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvdyhvcHRpb246IGFueSwgdmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMubmF0aXZlKG9wdGlvbikuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gJycgOiAnbm9uZSc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmFibGUodGV4dDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsRG93bigpIHtcclxuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zaXJpb1NlbGVjdC5wYW5lbDtcclxuICAgIGlmICghcGFuZWwub3B0aW9uRm9jdXNlZCkge1xyXG4gICAgICBwYW5lbC5zY3JvbGxCYXJUb3AoKTtcclxuICAgICAgcGFuZWwub3B0aW9ucy5maXJzdC5zZXRGb2N1cygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXh0T3B0aW9uRm9jdXNlZCA9IHRoaXMuZmluZE5leHRWaXNpYmxlT3B0aW9uKHBhbmVsLm9wdGlvbkZvY3VzZWRJbmRleCArIDEsIHBhbmVsLm9wdGlvbnMpO1xyXG4gICAgcGFuZWwuc2Nyb2xsQmFyRG93bigpO1xyXG4gICAgcGFuZWwub3B0aW9uRm9jdXNlZD8ucmVtb3ZlRm9jdXMoKTtcclxuICAgIGlmIChuZXh0T3B0aW9uRm9jdXNlZCkge1xyXG4gICAgICBuZXh0T3B0aW9uRm9jdXNlZD8uc2V0Rm9jdXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcGFuZWwuc2Nyb2xsQmFyVG9wKCk7XHJcbiAgICBjb25zdCBmaXJzdFZpc2libGUgPSB0aGlzLmZpbmROZXh0VmlzaWJsZU9wdGlvbigwLCBwYW5lbC5vcHRpb25zKTtcclxuICAgIGlmIChmaXJzdFZpc2libGUpIHtcclxuICAgICAgZmlyc3RWaXNpYmxlLnNldEZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbFVwKCkge1xyXG4gICAgY29uc3QgcGFuZWwgPSB0aGlzLnNpcmlvU2VsZWN0LnBhbmVsO1xyXG4gICAgaWYgKCFwYW5lbC5vcHRpb25Gb2N1c2VkKSB7XHJcbiAgICAgIHBhbmVsLnNjcm9sbEJhclRvcCgpO1xyXG4gICAgICBwYW5lbC5vcHRpb25zLmxhc3Quc2V0Rm9jdXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSAgICBcclxuICAgIGNvbnN0IG5leHRPcHRpb25Gb2N1c2VkID0gdGhpcy5maW5kUHJldmlvdXNWaXNpYmxlT3B0aW9uKHBhbmVsLm9wdGlvbkZvY3VzZWRJbmRleCAtIDEsIHBhbmVsLm9wdGlvbnMpO1xyXG4gICAgaWYgKG5leHRPcHRpb25Gb2N1c2VkKSB7XHJcbiAgICAgIHBhbmVsLnNjcm9sbEJhclVwKCk7XHJcbiAgICAgIHBhbmVsLm9wdGlvbkZvY3VzZWQ/LnJlbW92ZUZvY3VzKCk7XHJcbiAgICAgIG5leHRPcHRpb25Gb2N1c2VkPy5zZXRGb2N1cygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBwYW5lbC5vcHRpb25Gb2N1c2VkPy5yZW1vdmVGb2N1cygpO1xyXG4gICAgcGFuZWwuc2Nyb2xsQmFyQm90dG9tKCk7XHJcbiAgICBjb25zdCBsYXN0VmlzaWJsZSA9IHRoaXMuZmluZFByZXZpb3VzVmlzaWJsZU9wdGlvbihwYW5lbC5vcHRpb25zLmxlbmd0aCAtIDEsIHBhbmVsLm9wdGlvbnMpO1xyXG4gICAgaWYgKGxhc3RWaXNpYmxlKSB7XHJcbiAgICAgIGxhc3RWaXNpYmxlLnNldEZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRQcmV2aW91c1Zpc2libGVPcHRpb24oc3RhcnRJbmRleDogbnVtYmVyLCBvcHRpb25zOiBhbnkpOiBhbnkgfCBudWxsIHtcclxuICAgIGxldCBpID0gc3RhcnRJbmRleDtcclxuICAgIHdoaWxlIChpID49IDApIHtcclxuICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9ucy5nZXQoaSk7XHJcbiAgICAgIGlmICghdGhpcy5pc0hpZGRlbihvcHRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBpLS07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZE5leHRWaXNpYmxlT3B0aW9uKHN0YXJ0SW5kZXg6IG51bWJlciwgb3B0aW9uczogYW55KTogYW55IHwgbnVsbCB7XHJcbiAgICBsZXQgaSA9IHN0YXJ0SW5kZXg7XHJcbiAgICB3aGlsZSAoaSA8IG9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZ2V0KGkpO1xyXG4gICAgICBpZiAoIXRoaXMuaXNIaWRkZW4ob3B0aW9uKSkge1xyXG4gICAgICAgIHJldHVybiBvcHRpb247XHJcbiAgICAgIH1cclxuICAgICAgaSsrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZGlyZWN0aXZlcy9kcm9wZG93bi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBd0MsSUFBSSxFQUF5QixLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUcvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQVVoRSxNQUFNLE9BQU8saUJBQWlCO0lBS2xCO0lBQ0E7SUFDQTtJQUNBO0lBQ1E7SUFSQyxTQUFTLEdBQVEsSUFBSSxDQUFDO0lBQ2hDLGtCQUFrQixDQUF1QztJQUVsRSxZQUNVLEVBQWMsRUFDZCxRQUFtQixFQUNuQixlQUFnQyxFQUNoQyxVQUFzQixFQUNkLFdBQWlDO1FBSnpDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO0lBR25ELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sV0FB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QUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLENBQUMsQ0FBQztZQUNYLENBQUM7WUFDRCxDQUFDLEVBQUUsQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVPLHFCQUFxQixDQUFDLFVBQWtCLEVBQUUsT0FBWTtRQUM1RCxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDbkIsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO1lBQ0QsQ0FBQyxFQUFFLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUM7d0dBdFZVLGlCQUFpQjs0RkFBakIsaUJBQWlCLHFKQUpqQjtZQUNULGVBQWU7U0FDaEI7OzRGQUVVLGlCQUFpQjtrQkFQN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVCxlQUFlO3FCQUNoQjtpQkFDRjs7MEJBVUksSUFBSTt5Q0FSWSxTQUFTO3NCQUEzQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1Isa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEVsZW1lbnRSZWYsIEhvc3QsIFJlbmRlcmVyMiwgRGVzdHJveVJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMaXN0ZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9saXN0ZW5lci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lyaW9TZWxlY3RDb21wb25lbnQgfSBmcm9tICduZ3gtc2lyaW8tbGliJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IEV2YWx1YXRlT3B0aW9ucyB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2Ryb3Bkb3duXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIExpc3RlbmVyU2VydmljZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bkb3duRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoXCJyZWdpc3RlclwiKSBjb21wb25lbnQ6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCkgb25TZWxlY3Rpb25DaGFuZ2VkPzogKG9wdGlvbnM/OiBFdmFsdWF0ZU9wdGlvbnMpID0+IHZvaWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgbGlzdGVuZXJTZXJ2aWNlOiBMaXN0ZW5lclNlcnZpY2UsICAgIFxyXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmLFxyXG4gICAgQEhvc3QoKSBwcml2YXRlIHNpcmlvU2VsZWN0OiBTaXJpb1NlbGVjdENvbXBvbmVudFxyXG4gICkge1xyXG4gICAgXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZVZhbHVlKCk7XHJcbiAgICB0aGlzLmhhbmRsZVNlYXJjaGFibGUoKTtcclxuICAgIHRoaXMuaGFuZGxlT3B0aW9uc0NoYW5nZXMoKTtcclxuICAgIHRoaXMuaGFuZGxlT3B0aW9uU2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRWYWxpZGF0b3IoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVWYWxpZGF0b3IoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVmFsdWUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmYWxzeVZhbHVlcyA9IFtudWxsLCBmYWxzZSwgMCwgXCJcIl07XHJcblxyXG4gICAgaWYgKHRoaXMuc2lyaW9TZWxlY3RcclxuICAgICAgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnMpXHJcbiAgICAgICYmIGZhbHN5VmFsdWVzLmluY2x1ZGVzKHRoaXMuc2lyaW9TZWxlY3QudmFsdWUpKVxyXG4gICAge1xyXG4gICAgICBjb25zdCB2YWx1ZU9wdGlvbiA9IHRoaXMuc2lyaW9TZWxlY3Qub3B0aW9ucy5maW5kKFxyXG4gICAgICAgIG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMuc2lyaW9TZWxlY3QudmFsdWVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZU9wdGlvbikge1xyXG4gICAgICAgIHZhbHVlT3B0aW9uLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVNlYXJjaGFibGUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuZ2V0UGFuZWxFbGVtZW50UmVmKCk7XHJcbiAgICBjb25zdCBzZWFyY2hhYmxlID0gZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2VhcmNoYWJsZScpO1xyXG4gICAgaWYgKHNlYXJjaGFibGUpIHtcclxuICAgICAgY29uc3QgZHJvcERvd24gPSB0aGlzLmdldERyb3BEb3duRWxlbWVudCgpO1xyXG4gICAgICBjb25zdCBkcm9wTWVudSA9IHRoaXMuZ2V0RHJvcERvd25NZW51RWxlbWVudCgpO1xyXG4gICAgICBjb25zdCBpbnB1dCA9IHNlYXJjaGFibGUucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoZHJvcERvd24sIHNlYXJjaGFibGUsIGRyb3BNZW51KTtcclxuXHJcbiAgICAgIHRoaXMubGlzdGVuZXJTZXJ2aWNlLmxpc3RlbihpbnB1dCwgJ2ZvY3VzJywgKCkgPT4ge1xyXG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubGlzdGVuZXJTZXJ2aWNlLmxpc3RlbihpbnB1dCwgJ2JsdXInLCAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCAhPT0gZHJvcE1lbnUpXHJcbiAgICAgICAgICB0aGlzLnNpcmlvU2VsZWN0LnBhbmVsLmNsb3NlKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5saXN0ZW5lclNlcnZpY2UubGlzdGVuKGlucHV0LCAna2V5dXAnLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLm9uS2V5VXAoZXZlbnQsIGlucHV0KTsgICAgICAgIFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubGlzdGVuZXJTZXJ2aWNlLmxpc3RlbihpbnB1dCwgJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLm9uS2V5RG93bihldmVudCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zaXJpb1NlbGVjdC5wYW5lbC5wYW5lbE9wZW5lZFxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hY3RpdmF0ZShzZWFyY2hhYmxlKSk7XHJcblxyXG4gICAgICB0aGlzLnNpcmlvU2VsZWN0LnBhbmVsLnBhbmVsQ2xvc2VkXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRlYWN0aXZhdGUoc2VhcmNoYWJsZSkpO1xyXG5cclxuICAgICAgKHRoaXMuc2lyaW9TZWxlY3QucGFuZWwgYXMgYW55KS5zY3JvbGwgPSB0aGlzLnNjcm9sbC5iaW5kKHRoaXMpO1xyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlT3B0aW9uc0NoYW5nZXMoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zaXJpb1NlbGVjdC5wYW5lbC5vcHRpb25zLmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmFsdWUoKTtcclxuICAgICAgICAgICAgdGhpcy5jYW5WYWxpZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU9wdGlvblNlbGVjdGVkKCk6IHZvaWQge1xyXG5cclxuICAgIGlmICghdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnNpcmlvU2VsZWN0LnBhbmVsLm9wdGlvblNlbGVjdGVkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xyXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb246IHtcclxuICAgICAgICAgICAgdmFsdWU6IGUuY29tcG9uZW50LnZhbHVlLFxyXG4gICAgICAgICAgICBsYWJlbDogZS5jb21wb25lbnQudGV4dFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uczogRXZhbHVhdGVPcHRpb25zID0ge1xyXG4gICAgICAgICAgZXh0ZW5kQ29udGV4dDogKCkgPT4gKHtcclxuICAgICAgICAgICAgXCJldmVudFwiOiBldmVudFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBpbnZva2VBcmdzOiBbZXZlbnRdXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZChvcHRpb25zKSAgICAgICAgXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYW5lbEVsZW1lbnRSZWYoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuc2lyaW9TZWxlY3QucGFuZWwgYXMgYW55KS5lbGVtZW50UmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREcm9wRG93bkVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zaXJpby1kcm9wZG93bicpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREcm9wRG93bk1lbnVFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2lyaW8tZHJvcGRvd24tbWVudScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW5WYWxpZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHZhbGlkYXRvciA9IHRoaXMudmFsaWRhdGVPcHRpb25zLmJpbmQodGhpcyk7XHJcblxyXG4gIHByaXZhdGUgYWRkVmFsaWRhdG9yKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaXJpb1NlbGVjdC5jb250cm9sPy5hZGRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlVmFsaWRhdG9yKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaXJpb1NlbGVjdC5jb250cm9sPy5yZW1vdmVWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVPcHRpb25zKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5jYW5WYWxpZGF0ZSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgdmFsdWVPcHRpb24gPSB0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnMuZmluZChcclxuICAgICAgICBvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSB2YWx1ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIXZhbHVlT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IGBcIiR7dmFsdWV9XCIgbm9uIMOoIHVuIHZhbG9yZSB2YWxpZG9gIH07XHJcbiAgICAgIH1cclxuICAgIH0gICAgXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaFZhbGlkYXRvcnMoKSB7XHJcbiAgICB0aGlzLnNpcmlvU2VsZWN0LmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVhY3RpdmF0ZShlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFjdGl2YXRlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICBsZXQgY3VycmVudFZhbHVlID0gXCJcIjtcclxuXHJcbiAgICBpZiAodGhpcy5zaXJpb1NlbGVjdC5vcHRpb25zU2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICBjdXJyZW50VmFsdWUgPSB0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnNTZWxlY3RlZFswXS50ZXh0XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcclxuXHJcbiAgICBpZiAoIWlucHV0KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaW5wdXQudmFsdWUgPSBjdXJyZW50VmFsdWU7XHJcblxyXG4gICAgY29uc3QgZHJvcE1lbnUgPSB0aGlzLmdldFBhbmVsRWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgdGhpcy5zaXJpb1NlbGVjdC5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICB0aGlzLnNob3cob3B0aW9uLCB0cnVlKTtcclxuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBvcHRpb24udGV4dCkge1xyXG4gICAgICAgIGRyb3BNZW51LnNjcm9sbFRvcCA9IHRoaXMubmF0aXZlKG9wdGlvbikub2Zmc2V0VG9wO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsICdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpO1xyXG5cclxuICAgIHRoaXMuZG9TZXJhY2goaW5wdXQpOyAgXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGlucHV0LnZhbHVlLmxlbmd0aCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcclxuICAgICAgaW5wdXQuZm9jdXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbnB1dDogYW55KSB7XHJcbiAgICBjb25zdCB7IGNvZGUgfSA9IGV2ZW50O1xyXG5cclxuICAgIHN3aXRjaCAoY29kZSkge1xyXG4gICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgIGNhc2UgJ1NwYWNlJzpcclxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kb1NlcmFjaChpbnB1dCk7ICAgIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zaXJpb1NlbGVjdC5wYW5lbDtcclxuICAgIGlmICghcGFuZWwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFuZWxJc09wZW4gPSBwYW5lbC5wYW5lbElzT3BlbjtcclxuICAgIGNvbnN0IHsgY29kZSB9ID0gZXZlbnQ7XHJcbiAgICBpZiAocGFuZWxJc09wZW4pIHtcclxuICAgICAgc3dpdGNoIChjb2RlKSB7XHJcbiAgICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgIGNhc2UgJ1NwYWNlJzpcclxuICAgICAgICAgIGlmIChwYW5lbC5vcHRpb25Gb2N1c2VkKSB7XHJcbiAgICAgICAgICAgIHBhbmVsLm9wdGlvbkZvY3VzZWQ/Lm9uT3B0aW9uU2VsZWN0ZWQoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHBhbmVsLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnRXNjYXBlJzpcclxuICAgICAgICAgIHBhbmVsLmNsb3NlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghcGFuZWxJc09wZW4pIHtcclxuICAgICAgc3dpdGNoIChjb2RlKSB7XHJcbiAgICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgIGNhc2UgJ1NwYWNlJzpcclxuICAgICAgICAgIHBhbmVsLm9wZW4oKTtcclxuICAgICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdGl2ZShvcHRpb246IGFueSkge1xyXG4gICAgcmV0dXJuIG9wdGlvbi52aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNIaWRkZW4ob3B0aW9uOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLm5hdGl2ZShvcHRpb24pLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvdyhvcHRpb246IGFueSwgdmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMubmF0aXZlKG9wdGlvbikuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gJycgOiAnbm9uZSc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmFibGUodGV4dDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZG9TZXJhY2goaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb21wYXJhYmxlKGlucHV0LnZhbHVlKTtcclxuXHJcbiAgICBjb25zdCBleGFjdE1hdGNoID0gdGhpcy5zaXJpb1NlbGVjdC5vcHRpb25zLmZpbmQob3B0aW9uID0+XHJcbiAgICAgIHRoaXMuY29tcGFyYWJsZShvcHRpb24udGV4dCkgPT09IHZhbHVlXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmaXJzdE1hdGNoID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBjb21wYXJhYmxlVGV4dCA9IHRoaXMuY29tcGFyYWJsZShvcHRpb24udGV4dCk7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gZXhhY3RNYXRjaFxyXG4gICAgICAgID8gY29tcGFyYWJsZVRleHQgPT09IHZhbHVlXHJcbiAgICAgICAgOiBjb21wYXJhYmxlVGV4dC5pbmNsdWRlcyh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuc2hvdyhvcHRpb24sIG1hdGNoKTtcclxuICAgICAgaWYgKG1hdGNoICYmIGZpcnN0TWF0Y2gpIHtcclxuICAgICAgICBvcHRpb24uZm9jdXMoKTtcclxuICAgICAgICBmaXJzdE1hdGNoID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgb3B0aW9uLnJlbW92ZUZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY3JvbGwoZG93biA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2lyaW9TZWxlY3QucGFuZWw7XHJcbiAgICBjb25zdCBvcHRpb25Gb2N1c2VkSW5kZXggPSBwYW5lbC5vcHRpb25Gb2N1c2VkSW5kZXg7XHJcbiAgICBpZiAob3B0aW9uRm9jdXNlZEluZGV4ID09PSAtMSkge1xyXG4gICAgICBwYW5lbC5mb2N1c0ZpcnN0T3B0aW9uKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIChwYW5lbCBhcyBhbnkpLmJsdXJDdXJyZW50KCk7XHJcbiAgICBsZXQgbmV3SW5kZXggPSBkb3duXHJcbiAgICAgID8gdGhpcy5maW5kTmV4dFZpc2libGVPcHRpb24ob3B0aW9uRm9jdXNlZEluZGV4ICsgMSwgcGFuZWwub3B0aW9ucylcclxuICAgICAgOiB0aGlzLmZpbmRQcmV2aW91c1Zpc2libGVPcHRpb24ob3B0aW9uRm9jdXNlZEluZGV4IC0gMSwgcGFuZWwub3B0aW9ucylcclxuXHJcbiAgICBpZiAobmV3SW5kZXggPT09IC0xKSB7XHJcbiAgICAgIG5ld0luZGV4ID0gZG93blxyXG4gICAgICAgID8gdGhpcy5maW5kTmV4dFZpc2libGVPcHRpb24oMCwgcGFuZWwub3B0aW9ucylcclxuICAgICAgICA6IHRoaXMuZmluZFByZXZpb3VzVmlzaWJsZU9wdGlvbihwYW5lbC5vcHRpb25zLmxlbmd0aCAtIDEsIHBhbmVsLm9wdGlvbnMpOyAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZXdJbmRleCA8IDAgfHwgbmV3SW5kZXggPj0gcGFuZWwub3B0aW9ucy5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBuZXh0T3B0aW9uRm9jdXNlZCA9IHBhbmVsLm9wdGlvbnMuZ2V0KG5ld0luZGV4KTtcclxuICAgIG5leHRPcHRpb25Gb2N1c2VkPy5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kUHJldmlvdXNWaXNpYmxlT3B0aW9uKHN0YXJ0SW5kZXg6IG51bWJlciwgb3B0aW9uczogYW55KTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBsZXQgaSA9IHN0YXJ0SW5kZXg7XHJcbiAgICB3aGlsZSAoaSA+PSAwKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZ2V0KGkpO1xyXG4gICAgICBpZiAoIXRoaXMuaXNIaWRkZW4ob3B0aW9uKSkge1xyXG4gICAgICAgIHJldHVybiBpO1xyXG4gICAgICB9XHJcbiAgICAgIGktLTtcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZE5leHRWaXNpYmxlT3B0aW9uKHN0YXJ0SW5kZXg6IG51bWJlciwgb3B0aW9uczogYW55KTogYW55IHwgbnVsbCB7XHJcbiAgICBsZXQgaSA9IHN0YXJ0SW5kZXg7XHJcbiAgICB3aGlsZSAoaSA8IG9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZ2V0KGkpO1xyXG4gICAgICBpZiAoIXRoaXMuaXNIaWRkZW4ob3B0aW9uKSkge1xyXG4gICAgICAgIHJldHVybiBpO1xyXG4gICAgICB9XHJcbiAgICAgIGkrKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxuICB9ICBcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { finalize, isObservable, take } from 'rxjs';
|
|
4
|
+
import { downloadBlob, downloadFile } from '@wemake4u/interact';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../services/toast.service";
|
|
7
|
+
export class FileHandlerDirective {
|
|
8
|
+
toastService;
|
|
9
|
+
destroyRef;
|
|
10
|
+
constructor(toastService, destroyRef) {
|
|
11
|
+
this.toastService = toastService;
|
|
12
|
+
this.destroyRef = destroyRef;
|
|
13
|
+
}
|
|
14
|
+
downloadHandler;
|
|
15
|
+
getExtension(file) {
|
|
16
|
+
const name = file?.name?.trim();
|
|
17
|
+
if (!name) {
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
20
|
+
const index = name.lastIndexOf('.');
|
|
21
|
+
if (index < 0 || index === name.length - 1) {
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
return name.substring(index + 1).toUpperCase();
|
|
25
|
+
}
|
|
26
|
+
getIcon(file) {
|
|
27
|
+
const extension = this.getExtension(file).toLowerCase();
|
|
28
|
+
return FILE_ICONS[extension] ?? 'fa-file';
|
|
29
|
+
}
|
|
30
|
+
getSize(file) {
|
|
31
|
+
const size = file?.size;
|
|
32
|
+
if (typeof size !== 'number' ||
|
|
33
|
+
!Number.isFinite(size) ||
|
|
34
|
+
size < 0) {
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
38
|
+
let value = size;
|
|
39
|
+
let unit = 0;
|
|
40
|
+
while (value >= 1024 &&
|
|
41
|
+
unit < units.length - 1) {
|
|
42
|
+
value /= 1024;
|
|
43
|
+
unit++;
|
|
44
|
+
}
|
|
45
|
+
const decimals = unit === 0
|
|
46
|
+
? 0
|
|
47
|
+
: value < 10
|
|
48
|
+
? 1
|
|
49
|
+
: 0;
|
|
50
|
+
return `${value.toFixed(decimals)} ${units[unit]}`;
|
|
51
|
+
}
|
|
52
|
+
canDownload(file) {
|
|
53
|
+
return this.isLocal(file)
|
|
54
|
+
|| (this.isHandled(file) && !this.isDownloading(file));
|
|
55
|
+
}
|
|
56
|
+
isLocal(file) {
|
|
57
|
+
return file instanceof File;
|
|
58
|
+
}
|
|
59
|
+
downloadLocal(file) {
|
|
60
|
+
downloadBlob(file, file.name);
|
|
61
|
+
}
|
|
62
|
+
isHandled(file) {
|
|
63
|
+
return !this.isLocal(file)
|
|
64
|
+
&& typeof file === 'object'
|
|
65
|
+
&& file !== null
|
|
66
|
+
&& 'name' in file
|
|
67
|
+
&& 'type' in file
|
|
68
|
+
&& typeof file.name === 'string'
|
|
69
|
+
&& this.downloadHandler != null;
|
|
70
|
+
}
|
|
71
|
+
downloadHandled(file) {
|
|
72
|
+
if (!this.downloadHandler || !this.isHandled(file))
|
|
73
|
+
return;
|
|
74
|
+
const downloadResult = this.downloadHandler(file);
|
|
75
|
+
if (typeof downloadResult === 'string') {
|
|
76
|
+
this.downloadUrl(downloadResult, file.name);
|
|
77
|
+
}
|
|
78
|
+
if (isObservable(downloadResult)) {
|
|
79
|
+
this.downloadingHandled.add(file);
|
|
80
|
+
downloadResult
|
|
81
|
+
.pipe(take(1), finalize(() => this.downloadingHandled.delete(file)), takeUntilDestroyed(this.destroyRef))
|
|
82
|
+
.subscribe({
|
|
83
|
+
next: (result) => {
|
|
84
|
+
if (this.isBase64(result)) {
|
|
85
|
+
downloadFile(result, file.name, file.type);
|
|
86
|
+
}
|
|
87
|
+
else if (this.isUri(result)) {
|
|
88
|
+
this.downloadUrl(result, file.name);
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
error: error => {
|
|
92
|
+
this.logError(error);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
isDownloading(file) {
|
|
98
|
+
return this.downloadingHandled.has(file);
|
|
99
|
+
}
|
|
100
|
+
downloadingHandled = new WeakSet();
|
|
101
|
+
downloadUrl(url, fileName) {
|
|
102
|
+
const link = document.createElement('a');
|
|
103
|
+
link.href = url;
|
|
104
|
+
link.download = fileName;
|
|
105
|
+
link.target = '_blank';
|
|
106
|
+
link.click();
|
|
107
|
+
}
|
|
108
|
+
isBase64(value) {
|
|
109
|
+
if (!value) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
// Data URI
|
|
113
|
+
if (value.startsWith('data:')) {
|
|
114
|
+
return value.includes(';base64,');
|
|
115
|
+
}
|
|
116
|
+
// Lunghezza multipla di 4
|
|
117
|
+
if (value.length % 4 !== 0) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
// Caratteri validi Base64
|
|
121
|
+
if (!/^[A-Za-z0-9+/]*={0,2}$/.test(value)) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
atob(value);
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
isUri(value) {
|
|
133
|
+
try {
|
|
134
|
+
new URL(value, window.location.origin);
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
logError(error) {
|
|
142
|
+
if (!error)
|
|
143
|
+
return;
|
|
144
|
+
console.error(error);
|
|
145
|
+
if (error.message)
|
|
146
|
+
this.toastService.notifyError(error.message);
|
|
147
|
+
}
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileHandlerDirective, deps: [{ token: i1.ToastService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
149
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: FileHandlerDirective, isStandalone: true, selector: "[fileHandler]", inputs: { downloadHandler: "downloadHandler" }, exportAs: ["fileHandler"], ngImport: i0 });
|
|
150
|
+
}
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileHandlerDirective, decorators: [{
|
|
152
|
+
type: Directive,
|
|
153
|
+
args: [{
|
|
154
|
+
selector: '[fileHandler]',
|
|
155
|
+
exportAs: 'fileHandler',
|
|
156
|
+
standalone: true
|
|
157
|
+
}]
|
|
158
|
+
}], ctorParameters: () => [{ type: i1.ToastService }, { type: i0.DestroyRef }], propDecorators: { downloadHandler: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}] } });
|
|
161
|
+
const FILE_ICONS = {
|
|
162
|
+
zip: 'fa-file-zipper',
|
|
163
|
+
rar: 'fa-file-zipper',
|
|
164
|
+
'7z': 'fa-file-zipper',
|
|
165
|
+
tar: 'fa-file-zipper',
|
|
166
|
+
gz: 'fa-file-zipper',
|
|
167
|
+
doc: 'fa-file-word',
|
|
168
|
+
docx: 'fa-file-word',
|
|
169
|
+
ppt: 'fa-file-powerpoint',
|
|
170
|
+
pptx: 'fa-file-powerpoint',
|
|
171
|
+
txt: 'fa-file-lines',
|
|
172
|
+
log: 'fa-file-lines',
|
|
173
|
+
md: 'fa-file-lines',
|
|
174
|
+
pdf: 'fa-file-pdf',
|
|
175
|
+
jpg: 'fa-file-image',
|
|
176
|
+
jpeg: 'fa-file-image',
|
|
177
|
+
png: 'fa-file-image',
|
|
178
|
+
gif: 'fa-file-image',
|
|
179
|
+
bmp: 'fa-file-image',
|
|
180
|
+
svg: 'fa-file-image',
|
|
181
|
+
webp: 'fa-file-image',
|
|
182
|
+
xls: 'fa-file-excel',
|
|
183
|
+
xlsx: 'fa-file-excel',
|
|
184
|
+
csv: 'fa-file-csv',
|
|
185
|
+
mp3: 'fa-file-audio',
|
|
186
|
+
wav: 'fa-file-audio',
|
|
187
|
+
ogg: 'fa-file-audio',
|
|
188
|
+
flac: 'fa-file-audio',
|
|
189
|
+
aac: 'fa-file-audio',
|
|
190
|
+
m4a: 'fa-file-audio',
|
|
191
|
+
wma: 'fa-file-audio',
|
|
192
|
+
mp4: 'fa-file-video',
|
|
193
|
+
avi: 'fa-file-video',
|
|
194
|
+
mov: 'fa-file-video',
|
|
195
|
+
wmv: 'fa-file-video',
|
|
196
|
+
mkv: 'fa-file-video',
|
|
197
|
+
webm: 'fa-file-video',
|
|
198
|
+
mpeg: 'fa-file-video',
|
|
199
|
+
mpg: 'fa-file-video',
|
|
200
|
+
m4v: 'fa-file-video',
|
|
201
|
+
html: 'fa-file-code',
|
|
202
|
+
css: 'fa-file-code',
|
|
203
|
+
js: 'fa-file-code',
|
|
204
|
+
ts: 'fa-file-code',
|
|
205
|
+
json: 'fa-file-code',
|
|
206
|
+
xml: 'fa-file-code',
|
|
207
|
+
cs: 'fa-file-code',
|
|
208
|
+
java: 'fa-file-code',
|
|
209
|
+
py: 'fa-file-code',
|
|
210
|
+
sql: 'fa-file-code'
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9kaXJlY3RpdmVzL2ZpbGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFBOzs7QUFPL0QsTUFBTSxPQUFPLG9CQUFvQjtJQUduQjtJQUNBO0lBRlosWUFDWSxZQUEwQixFQUMxQixVQUFzQjtRQUR0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQzlCLENBQUM7SUFHTCxlQUFlLENBQTJDO0lBRTFELFlBQVksQ0FBQyxJQUFzQjtRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFcEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakQsQ0FBQztJ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LGVBQWU7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsSUFBSSxFQUFFLGVBQWU7SUFDckIsSUFBSSxFQUFFLGVBQWU7SUFDckIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFFcEIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsR0FBRyxFQUFFLGNBQWM7SUFDbkIsRUFBRSxFQUFFLGNBQWM7SUFDbEIsRUFBRSxFQUFFLGNBQWM7SUFDbEIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsR0FBRyxFQUFFLGNBQWM7SUFDbkIsRUFBRSxFQUFFLGNBQWM7SUFDbEIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsRUFBRSxFQUFFLGNBQWM7SUFDbEIsR0FBRyxFQUFFLGNBQWM7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBkb3dubG9hZEJsb2IsIGRvd25sb2FkRmlsZSB9IGZyb20gJ0B3ZW1ha2U0dS9pbnRlcmFjdCdcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2ZpbGVIYW5kbGVyXScsXHJcbiAgZXhwb3J0QXM6ICdmaWxlSGFuZGxlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZUhhbmRsZXJEaXJlY3RpdmUge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByb3RlY3RlZCBkZXN0cm95UmVmOiBEZXN0cm95UmVmXHJcbiAgKSB7IH1cclxuXHJcbiAgQElucHV0KClcclxuICBkb3dubG9hZEhhbmRsZXI/OiAoZmlsZTogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4gfCBzdHJpbmc7XHJcblxyXG4gIGdldEV4dGVuc2lvbihmaWxlPzogRmlsZUluZm8gfCBudWxsKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5hbWUgPSBmaWxlPy5uYW1lPy50cmltKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbmRleCA9IG5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID09PSBuYW1lLmxlbmd0aCAtIDEpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEpLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uKGZpbGU6IEZpbGUpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZXh0ZW5zaW9uID0gdGhpcy5nZXRFeHRlbnNpb24oZmlsZSkudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBGSUxFX0lDT05TW2V4dGVuc2lvbl0gPz8gJ2ZhLWZpbGUnO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2l6ZShmaWxlPzogRmlsZUluZm8gfCBudWxsKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNpemUgPSBmaWxlPy5zaXplO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdHlwZW9mIHNpemUgIT09ICdudW1iZXInIHx8XHJcbiAgICAgICFOdW1iZXIuaXNGaW5pdGUoc2l6ZSkgfHxcclxuICAgICAgc2l6ZSA8IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcclxuXHJcbiAgICBsZXQgdmFsdWUgPSBzaXplO1xyXG4gICAgbGV0IHVuaXQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChcclxuICAgICAgdmFsdWUgPj0gMTAyNCAmJlxyXG4gICAgICB1bml0IDwgdW5pdHMubGVuZ3RoIC0gMVxyXG4gICAgKSB7XHJcbiAgICAgIHZhbHVlIC89IDEwMjQ7XHJcbiAgICAgIHVuaXQrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZWNpbWFscyA9XHJcbiAgICAgIHVuaXQgPT09IDBcclxuICAgICAgICA/IDBcclxuICAgICAgICA6IHZhbHVlIDwgMTBcclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiAwO1xyXG5cclxuICAgIHJldHVybiBgJHt2YWx1ZS50b0ZpeGVkKGRlY2ltYWxzKX0gJHt1bml0c1t1bml0XX1gO1xyXG4gIH1cclxuXHJcbiAgY2FuRG93bmxvYWQoZmlsZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0xvY2FsKGZpbGUpXHJcbiAgICAgIHx8ICh0aGlzLmlzSGFuZGxlZChmaWxlKSAmJiAhdGhpcy5pc0Rvd25sb2FkaW5nKGZpbGUpKTtcclxuICB9XHJcblxyXG4gIGlzTG9jYWwoZmlsZTogYW55KTogZmlsZSBpcyBGaWxlIHtcclxuICAgIHJldHVybiBmaWxlIGluc3RhbmNlb2YgRmlsZTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkTG9jYWwoZmlsZTogRmlsZSk6IHZvaWQge1xyXG4gICAgZG93bmxvYWRCbG9iKGZpbGUsIGZpbGUubmFtZSk7ICAgIFxyXG4gIH1cclxuXHJcbiAgaXNIYW5kbGVkKGZpbGU6IGFueSk6IGZpbGUgaXMgeyBuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZyB9IHtcclxuICAgIHJldHVybiAhdGhpcy5pc0xvY2FsKGZpbGUpXHJcbiAgICAgICYmIHR5cGVvZiBmaWxlID09PSAnb2JqZWN0J1xyXG4gICAgICAmJiBmaWxlICE9PSBudWxsXHJcbiAgICAgICYmICduYW1lJyBpbiBmaWxlXHJcbiAgICAgICYmICd0eXBlJyBpbiBmaWxlICAgICAgXHJcbiAgICAgICYmIHR5cGVvZiBmaWxlLm5hbWUgPT09ICdzdHJpbmcnXHJcbiAgICAgICYmIHRoaXMuZG93bmxvYWRIYW5kbGVyICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZEhhbmRsZWQoZmlsZTogYW55KTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRvd25sb2FkSGFuZGxlciB8fCAhdGhpcy5pc0hhbmRsZWQoZmlsZSkpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBkb3dubG9hZFJlc3VsdCA9IHRoaXMuZG93bmxvYWRIYW5kbGVyKGZpbGUpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgZG93bmxvYWRSZXN1bHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuZG93bmxvYWRVcmwoZG93bmxvYWRSZXN1bHQsIGZpbGUubmFtZSk7ICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShkb3dubG9hZFJlc3VsdCkpIHtcclxuXHJcbiAgICAgIHRoaXMuZG93bmxvYWRpbmdIYW5kbGVkLmFkZChmaWxlKTtcclxuXHJcbiAgICAgIGRvd25sb2FkUmVzdWx0XHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5kb3dubG9hZGluZ0hhbmRsZWQuZGVsZXRlKGZpbGUpKSxcclxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQmFzZTY0KHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICBkb3dubG9hZEZpbGUocmVzdWx0LCBmaWxlLm5hbWUsIGZpbGUudHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc1VyaShyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZFVybChyZXN1bHQsIGZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ0Vycm9yKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzRG93bmxvYWRpbmcoZmlsZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kb3dubG9hZGluZ0hhbmRsZWQuaGFzKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkb3dubG9hZGluZ0hhbmRsZWQgPSBuZXcgV2Vha1NldDxvYmplY3Q+KCk7XHJcblxyXG4gIHByaXZhdGUgZG93bmxvYWRVcmwodXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmhyZWYgPSB1cmw7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0Jhc2U2NCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEYXRhIFVSSVxyXG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ2RhdGE6JykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKCc7YmFzZTY0LCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEx1bmdoZXp6YSBtdWx0aXBsYSBkaSA0XHJcbiAgICBpZiAodmFsdWUubGVuZ3RoICUgNCAhPT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FyYXR0ZXJpIHZhbGlkaSBCYXNlNjRcclxuICAgIGlmICghL15bQS1aYS16MC05Ky9dKj17MCwyfSQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhdG9iKHZhbHVlKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VyaSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBuZXcgVVJMKHZhbHVlLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxvZ0Vycm9yKGVycm9yOiBFcnJvcikge1xyXG4gICAgaWYgKCFlcnJvcikgcmV0dXJuO1xyXG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICBpZiAoZXJyb3IubWVzc2FnZSlcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uubm90aWZ5RXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxudHlwZSBGaWxlSW5mbyA9IFBpY2s8RmlsZSwgJ25hbWUnIHwgJ3NpemUnPjtcclxuXHJcbmNvbnN0IEZJTEVfSUNPTlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgemlwOiAnZmEtZmlsZS16aXBwZXInLFxyXG4gIHJhcjogJ2ZhLWZpbGUtemlwcGVyJyxcclxuICAnN3onOiAnZmEtZmlsZS16aXBwZXInLFxyXG4gIHRhcjogJ2ZhLWZpbGUtemlwcGVyJyxcclxuICBnejogJ2ZhLWZpbGUtemlwcGVyJyxcclxuXHJcbiAgZG9jOiAnZmEtZmlsZS13b3JkJyxcclxuICBkb2N4OiAnZmEtZmlsZS13b3JkJyxcclxuXHJcbiAgcHB0OiAnZmEtZmlsZS1wb3dlcnBvaW50JyxcclxuICBwcHR4OiAnZmEtZmlsZS1wb3dlcnBvaW50JyxcclxuXHJcbiAgdHh0OiAnZmEtZmlsZS1saW5lcycsXHJcbiAgbG9nOiAnZmEtZmlsZS1saW5lcycsXHJcbiAgbWQ6ICdmYS1maWxlLWxpbmVzJyxcclxuXHJcbiAgcGRmOiAnZmEtZmlsZS1wZGYnLFxyXG5cclxuICBqcGc6ICdmYS1maWxlLWltYWdlJyxcclxuICBqcGVnOiAnZmEtZmlsZS1pbWFnZScsXHJcbiAgcG5nOiAnZmEtZmlsZS1pbWFnZScsXHJcbiAgZ2lmOiAnZmEtZmlsZS1pbWFnZScsXHJcbiAgYm1wOiAnZmEtZmlsZS1pbWFnZScsXHJcbiAgc3ZnOiAnZmEtZmlsZS1pbWFnZScsXHJcbiAgd2VicDogJ2ZhLWZpbGUtaW1hZ2UnLFxyXG5cclxuICB4bHM6ICdmYS1maWxlLWV4Y2VsJyxcclxuICB4bHN4OiAnZmEtZmlsZS1leGNlbCcsXHJcblxyXG4gIGNzdjogJ2ZhLWZpbGUtY3N2JyxcclxuXHJcbiAgbXAzOiAnZmEtZmlsZS1hdWRpbycsXHJcbiAgd2F2OiAnZmEtZmlsZS1hdWRpbycsXHJcbiAgb2dnOiAnZmEtZmlsZS1hdWRpbycsXHJcbiAgZmxhYzogJ2ZhLWZpbGUtYXVkaW8nLFxyXG4gIGFhYzogJ2ZhLWZpbGUtYXVkaW8nLFxyXG4gIG00YTogJ2ZhLWZpbGUtYXVkaW8nLFxyXG4gIHdtYTogJ2ZhLWZpbGUtYXVkaW8nLFxyXG5cclxuICBtcDQ6ICdmYS1maWxlLXZpZGVvJyxcclxuICBhdmk6ICdmYS1maWxlLXZpZGVvJyxcclxuICBtb3Y6ICdmYS1maWxlLXZpZGVvJyxcclxuICB3bXY6ICdmYS1maWxlLXZpZGVvJyxcclxuICBta3Y6ICdmYS1maWxlLXZpZGVvJyxcclxuICB3ZWJtOiAnZmEtZmlsZS12aWRlbycsXHJcbiAgbXBlZzogJ2ZhLWZpbGUtdmlkZW8nLFxyXG4gIG1wZzogJ2ZhLWZpbGUtdmlkZW8nLFxyXG4gIG00djogJ2ZhLWZpbGUtdmlkZW8nLFxyXG5cclxuICBodG1sOiAnZmEtZmlsZS1jb2RlJyxcclxuICBjc3M6ICdmYS1maWxlLWNvZGUnLFxyXG4gIGpzOiAnZmEtZmlsZS1jb2RlJyxcclxuICB0czogJ2ZhLWZpbGUtY29kZScsXHJcbiAganNvbjogJ2ZhLWZpbGUtY29kZScsXHJcbiAgeG1sOiAnZmEtZmlsZS1jb2RlJyxcclxuICBjczogJ2ZhLWZpbGUtY29kZScsXHJcbiAgamF2YTogJ2ZhLWZpbGUtY29kZScsXHJcbiAgcHk6ICdmYS1maWxlLWNvZGUnLFxyXG4gIHNxbDogJ2ZhLWZpbGUtY29kZSdcclxufTtcclxuIl19
|