ngx-dynamic-entity 1.0.0 → 1.2.0
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/README.md +129 -139
- package/esm2022/lib/field-types/array-field.component.mjs +112 -104
- package/esm2022/lib/field-types/boolean-field.component.mjs +62 -61
- package/esm2022/lib/field-types/checkbox-field.component.mjs +48 -47
- package/esm2022/lib/field-types/currency-field.component.mjs +54 -53
- package/esm2022/lib/field-types/date-field.component.mjs +46 -45
- package/esm2022/lib/field-types/dropdown-field.component.mjs +89 -87
- package/esm2022/lib/field-types/email-field.component.mjs +64 -63
- package/esm2022/lib/field-types/entity-ref-field.component.mjs +85 -71
- package/esm2022/lib/field-types/field-component.contract.mjs +2 -0
- package/esm2022/lib/field-types/file-field.component.mjs +88 -87
- package/esm2022/lib/field-types/group-field.component.mjs +50 -50
- package/esm2022/lib/field-types/image-field.component.mjs +92 -91
- package/esm2022/lib/field-types/month-year-field.component.mjs +80 -79
- package/esm2022/lib/field-types/multi-select-field.component.mjs +66 -65
- package/esm2022/lib/field-types/number-field.component.mjs +71 -75
- package/esm2022/lib/field-types/password-field.component.mjs +68 -67
- package/esm2022/lib/field-types/radio-field.component.mjs +66 -65
- package/esm2022/lib/field-types/text-field.component.mjs +81 -74
- package/esm2022/lib/field-types/textarea-field.component.mjs +48 -47
- package/esm2022/lib/form/dynamic-field/dynamic-field.component.mjs +53 -6
- package/esm2022/lib/form/dynamic-form.component.mjs +309 -20
- package/esm2022/lib/form/dynamic-record-form.component.mjs +36 -11
- package/esm2022/lib/providers/provide-field-types.mjs +1 -1
- package/esm2022/lib/providers/provide-ngx-dynamic-entity.mjs +8 -2
- package/esm2022/lib/services/cascade-data.service.mjs +2 -2
- package/esm2022/lib/services/entity-ref-cache.mjs +1 -1
- package/esm2022/lib/services/entity-ref-registry.service.mjs +2 -2
- package/esm2022/lib/services/entity-ref-selection.service.mjs +1 -1
- package/esm2022/lib/services/entity-reference.service.mjs +1 -1
- package/esm2022/lib/services/field-registry.service.mjs +1 -1
- package/esm2022/lib/services/file-upload.service.mjs +1 -1
- package/esm2022/lib/services/lookup-registry.service.mjs +2 -2
- package/esm2022/lib/services/rbac.service.mjs +1 -1
- package/esm2022/lib/services/validation-messages.service.mjs +56 -0
- package/esm2022/lib/services/validator-registry.service.mjs +35 -2
- package/esm2022/lib/tokens/injection-tokens.mjs +35 -6
- package/esm2022/public-api.mjs +23 -2
- package/fesm2022/ngx-dynamic-entity.mjs +1754 -1236
- package/fesm2022/ngx-dynamic-entity.mjs.map +1 -1
- package/lib/field-types/array-field.component.d.ts +7 -1
- package/lib/field-types/dropdown-field.component.d.ts +2 -1
- package/lib/field-types/entity-ref-field.component.d.ts +12 -2
- package/lib/field-types/field-component.contract.d.ts +49 -0
- package/lib/field-types/group-field.component.d.ts +1 -1
- package/lib/field-types/multi-select-field.component.d.ts +1 -1
- package/lib/field-types/number-field.component.d.ts +1 -0
- package/lib/field-types/radio-field.component.d.ts +1 -1
- package/lib/field-types/text-field.component.d.ts +10 -2
- package/lib/form/dynamic-field/dynamic-field.component.d.ts +39 -4
- package/lib/form/dynamic-form.component.d.ts +155 -8
- package/lib/form/dynamic-record-form.component.d.ts +13 -2
- package/lib/providers/provide-ngx-dynamic-entity.d.ts +25 -3
- package/lib/services/cascade-data.service.d.ts +1 -1
- package/lib/services/entity-ref-registry.service.d.ts +1 -1
- package/lib/services/lookup-registry.service.d.ts +1 -1
- package/lib/services/validation-messages.service.d.ts +43 -0
- package/lib/services/validator-registry.service.d.ts +13 -1
- package/lib/tokens/injection-tokens.d.ts +42 -7
- package/package.json +17 -18
- package/public-api.d.ts +12 -0
- package/styles.css +579 -0
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { Component, Input, ViewChild, ViewContainerRef, inject, isDevMode, } from '@angular/core';
|
|
1
|
+
import { Component, Injector, Input, ViewChild, ViewContainerRef, inject, isDevMode, } from '@angular/core';
|
|
2
2
|
import { findTab } from '@dynamic-entity/core';
|
|
3
3
|
import { FieldRegistryService } from '../../services/field-registry.service';
|
|
4
4
|
import { RbacService } from '../../services/rbac.service';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
/**
|
|
7
7
|
* DynamicFieldComponent — mounts the correct field component for a given NestedFieldConfig.
|
|
8
|
-
* Uses ViewContainerRef.createComponent() and passes inputs via setInput()
|
|
8
|
+
* Uses ViewContainerRef.createComponent() and passes inputs via setInput(); see
|
|
9
|
+
* DynamicFieldComponentContract for the five inputs every field component receives.
|
|
9
10
|
* Never add field-type-specific logic here — this component must remain generic.
|
|
10
11
|
*
|
|
11
12
|
* The 5 inputs (field, control, language, readonly, masked) are passed to every mounted
|
|
@@ -22,6 +23,12 @@ export class DynamicFieldComponent {
|
|
|
22
23
|
fieldHost;
|
|
23
24
|
fieldRegistry = inject(FieldRegistryService);
|
|
24
25
|
rbacService = inject(RbacService);
|
|
26
|
+
/**
|
|
27
|
+
* Passed into `createComponent` so a hosted field sees this host's injector — including
|
|
28
|
+
* `DynamicFormComponent`'s scoped `EntityRefSelectionService`. Without it, a standalone
|
|
29
|
+
* field resolves the root bus and `autoPatch` never runs.
|
|
30
|
+
*/
|
|
31
|
+
injector = inject(Injector);
|
|
25
32
|
componentRef = null;
|
|
26
33
|
ngOnChanges(_changes) {
|
|
27
34
|
this.mountField();
|
|
@@ -43,9 +50,12 @@ export class DynamicFieldComponent {
|
|
|
43
50
|
return;
|
|
44
51
|
}
|
|
45
52
|
this.fieldHost.clear();
|
|
46
|
-
this.componentRef = this.fieldHost.createComponent(ComponentClass
|
|
53
|
+
this.componentRef = this.fieldHost.createComponent(ComponentClass, {
|
|
54
|
+
injector: this.injector,
|
|
55
|
+
});
|
|
47
56
|
this.setInputs(this.componentRef, masked);
|
|
48
|
-
this.
|
|
57
|
+
this.watchControl();
|
|
58
|
+
this.componentRef.changeDetectorRef.detectChanges();
|
|
49
59
|
}
|
|
50
60
|
/**
|
|
51
61
|
* Field types are opt-in (see `provideFieldTypes` / `provideBuiltInFieldTypes`), so an
|
|
@@ -61,7 +71,44 @@ export class DynamicFieldComponent {
|
|
|
61
71
|
}
|
|
62
72
|
static warnedTypes = new Set();
|
|
63
73
|
/**
|
|
64
|
-
*
|
|
74
|
+
* Re-check the hosted field component.
|
|
75
|
+
*
|
|
76
|
+
* The field components are OnPush, so they re-render on an input change, an event from
|
|
77
|
+
* their own template, or a signal they read. `form.markAllAsTouched()` is none of those —
|
|
78
|
+
* it flips `touched` from outside, and every field's error message depends on it. Without
|
|
79
|
+
* this, a blocked submit would mark the form touched and no error would appear.
|
|
80
|
+
*/
|
|
81
|
+
refresh() {
|
|
82
|
+
this.componentRef?.changeDetectorRef.detectChanges();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Re-check the hosted component whenever its control changes from outside.
|
|
86
|
+
*
|
|
87
|
+
* The field components are OnPush, so they re-render on an input change or an event from
|
|
88
|
+
* their own template. A control mutated externally is neither — and that is not an edge
|
|
89
|
+
* case: patchForm, reset, autoPatch and patchOnTrue all do exactly that. Without this, a
|
|
90
|
+
* field patched from a record would keep rendering its previous value.
|
|
91
|
+
*
|
|
92
|
+
* `detectChanges()` rather than `markForCheck()`: a selection that arrives from a native
|
|
93
|
+
* `change` event (or Playwright) may not be followed by another Angular tick, so a dirty
|
|
94
|
+
* flag would never be flushed. Running CD on the hosted component now is the copy showing up.
|
|
95
|
+
*
|
|
96
|
+
* Done here rather than in each of the eighteen field components: the host owns the
|
|
97
|
+
* component reference, so one subscription covers every type including custom ones.
|
|
98
|
+
*/
|
|
99
|
+
watchControl() {
|
|
100
|
+
this.controlSub?.unsubscribe();
|
|
101
|
+
if (!this.control)
|
|
102
|
+
return;
|
|
103
|
+
this.controlSub = this.control.valueChanges.subscribe(() => this.refresh());
|
|
104
|
+
}
|
|
105
|
+
controlSub;
|
|
106
|
+
ngOnDestroy() {
|
|
107
|
+
this.controlSub?.unsubscribe();
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Pass all 5 contract inputs via ComponentRef.setInput() — uniform for all types.
|
|
111
|
+
* The public shape is DynamicFieldComponentContract.
|
|
65
112
|
* Must use setInput(), not property assignment: the field components declare inputs with
|
|
66
113
|
* definite assignment and no initializer, and the lib compiles with
|
|
67
114
|
* useDefineForClassFields:false, so `'field' in instance` is false until first set.
|
|
@@ -101,4 +148,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
101
148
|
type: ViewChild,
|
|
102
149
|
args: ['fieldHost', { read: ViewContainerRef, static: true }]
|
|
103
150
|
}] } });
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Zvcm0vZHluYW1pYy1maWVsZC9keW5hbWljLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFHTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFFMUQ7Ozs7Ozs7R0FPRztBQU1ILE1BQU0sT0FBTyxxQkFBcUI7SUFDdkIsS0FBSyxDQUFxQjtJQUMxQixPQUFPLENBQW1CO0lBQzFCLE1BQU0sQ0FBb0I7SUFDMUIsWUFBWSxDQUFVO0lBQ3RCLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDeEIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixTQUFTLEdBQWEsRUFBRSxDQUFDO0lBR2pCLFNBQVMsQ0FBb0I7SUFFN0IsYUFBYSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFM0MsWUFBWSxHQUFpQyxJQUFJLENBQUM7SUFFMUQsV0FBVyxDQUFDLFFBQXVCO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUV6QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJ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SztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFHVyxTQUFTO3NCQUR6QixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG4gIGluamVjdCxcclxuICBpc0Rldk1vZGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHR5cGUgeyBOZXN0ZWRGaWVsZENvbmZpZywgRW50aXR5Rm9ybUNvbmZpZywgTmVzdGVkVGFiQ29uZmlnIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xyXG5pbXBvcnQgeyBmaW5kVGFiIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xyXG5pbXBvcnQgeyBGaWVsZFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpZWxkLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSYmFjU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JiYWMuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogRHluYW1pY0ZpZWxkQ29tcG9uZW50IOKAlCBtb3VudHMgdGhlIGNvcnJlY3QgZmllbGQgY29tcG9uZW50IGZvciBhIGdpdmVuIE5lc3RlZEZpZWxkQ29uZmlnLlxyXG4gKiBVc2VzIFZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KCkgYW5kIHBhc3NlcyBpbnB1dHMgdmlhIHNldElucHV0KCkgKEFEUi0wMDgpLlxyXG4gKiBOZXZlciBhZGQgZmllbGQtdHlwZS1zcGVjaWZpYyBsb2dpYyBoZXJlIOKAlCB0aGlzIGNvbXBvbmVudCBtdXN0IHJlbWFpbiBnZW5lcmljLlxyXG4gKlxyXG4gKiBUaGUgNSBpbnB1dHMgKGZpZWxkLCBjb250cm9sLCBsYW5ndWFnZSwgcmVhZG9ubHksIG1hc2tlZCkgYXJlIHBhc3NlZCB0byBldmVyeSBtb3VudGVkXHJcbiAqIGNvbXBvbmVudCB1bmlmb3JtbHkg4oCUIG5vIHNwZWNpYWwtY2FzaW5nIHBlciB0eXBlLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtZHluYW1pYy1maWVsZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICB0ZW1wbGF0ZTogYDxuZy1jb250YWluZXIgI2ZpZWxkSG9zdD48L25nLWNvbnRhaW5lcj5gLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0ZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBmaWVsZCE6IE5lc3RlZEZpZWxkQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgQElucHV0KCkgY29uZmlnITogRW50aXR5Rm9ybUNvbmZpZztcclxuICBASW5wdXQoKSBjdXJyZW50VGFiSWQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGFuZ3VhZ2U6IHN0cmluZyA9ICdlbic7XHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB1c2VyUm9sZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ZpZWxkSG9zdCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmaWVsZEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGZpZWxkUmVnaXN0cnkgPSBpbmplY3QoRmllbGRSZWdpc3RyeVNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmJhY1NlcnZpY2UgPSBpbmplY3QoUmJhY1NlcnZpY2UpO1xyXG5cclxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPHVua25vd24+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLm1vdW50RmllbGQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbW91bnRGaWVsZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZCB8fCAhdGhpcy5jb250cm9sKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgQ29tcG9uZW50Q2xhc3MgPSB0aGlzLmZpZWxkUmVnaXN0cnkucmVzb2x2ZSh0aGlzLmZpZWxkLnR5cGUpO1xyXG4gICAgaWYgKCFDb21wb25lbnRDbGFzcykge1xyXG4gICAgICB0aGlzLndhcm5VbnJlc29sdmVkKHRoaXMuZmllbGQudHlwZSk7XHJcbiAgICAgIHJldHVybjsgLy8gVW5rbm93biBmaWVsZCB0eXBlIOKAlCByZW5kZXIgbm90aGluZ1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERldGVybWluZSBtYXNraW5nIGZvciB0aGlzIHNwZWNpZmljIGZpZWxkXHJcbiAgICBjb25zdCB0YWI6IE5lc3RlZFRhYkNvbmZpZyB8IG51bGwgPSB0aGlzLmN1cnJlbnRUYWJJZCA/IGZpbmRUYWIodGhpcy5jb25maWc/LnRhYnMsIHRoaXMuY3VycmVudFRhYklkKSA6IG51bGw7XHJcbiAgICBjb25zdCBtYXNrZWQgPSB0aGlzLnJiYWNTZXJ2aWNlLnNob3VsZE1hc2tGaWVsZCh0aGlzLmZpZWxkLCB0YWIgPz8gdW5kZWZpbmVkLCB0aGlzLmNvbmZpZywgdGhpcy51c2VyUm9sZXMpO1xyXG5cclxuICAgIC8vIFJlLXVzZSBleGlzdGluZyBjb21wb25lbnQgaWYgc2FtZSB0eXBlLCBvdGhlcndpc2UgcmVjcmVhdGVcclxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAmJiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBpbnN0YW5jZW9mIENvbXBvbmVudENsYXNzKSB7XHJcbiAgICAgIHRoaXMuc2V0SW5wdXRzKHRoaXMuY29tcG9uZW50UmVmLCBtYXNrZWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWVsZEhvc3QuY2xlYXIoKTtcclxuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5maWVsZEhvc3QuY3JlYXRlQ29tcG9uZW50KENvbXBvbmVudENsYXNzKTtcclxuICAgIHRoaXMuc2V0SW5wdXRzKHRoaXMuY29tcG9uZW50UmVmLCBtYXNrZWQpO1xyXG4gICAgdGhpcy5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaWVsZCB0eXBlcyBhcmUgb3B0LWluIChzZWUgYHByb3ZpZGVGaWVsZFR5cGVzYCAvIGBwcm92aWRlQnVpbHRJbkZpZWxkVHlwZXNgKSwgc28gYW5cclxuICAgKiB1bnJlZ2lzdGVyZWQgdHlwZSByZW5kZXJzIG5vdGhpbmcuIFNheSBzbyBvbmNlIHBlciB0eXBlIGluIGRldiBidWlsZHMgcmF0aGVyIHRoYW5cclxuICAgKiBsZWF2aW5nIGEgc2lsZW50bHkgYmxhbmsgc2xvdC5cclxuICAgKi9cclxuICBwcml2YXRlIHdhcm5VbnJlc29sdmVkKHR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCFpc0Rldk1vZGUoKSB8fCBEeW5hbWljRmllbGRDb21wb25lbnQud2FybmVkVHlwZXMuaGFzKHR5cGUpKSByZXR1cm47XHJcbiAgICBEeW5hbWljRmllbGRDb21wb25lbnQud2FybmVkVHlwZXMuYWRkKHR5cGUpO1xyXG4gICAgY29uc29sZS53YXJuKFxyXG4gICAgICBgW25neC1keW5hbWljLWVudGl0eV0gTm8gY29tcG9uZW50IHJlZ2lzdGVyZWQgZm9yIGZpZWxkIHR5cGUgXCIke3R5cGV9XCIg4oCUIHRoZSBmaWVsZCB3YXMgbm90IHJlbmRlcmVkLiBgICtcclxuICAgICAgICBgUmVnaXN0ZXIgaXQgd2l0aCBwcm92aWRlRmllbGRUeXBlcyh7ICcke3R5cGV9JzogTXlDb21wb25lbnQgfSkgb3IgcHJvdmlkZUJ1aWx0SW5GaWVsZFR5cGVzKCkuYCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSB3YXJuZWRUeXBlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICAvKipcclxuICAgKiBQYXNzIGFsbCA1IGNvbnRyYWN0IGlucHV0cyB2aWEgQ29tcG9uZW50UmVmLnNldElucHV0KCkg4oCUIHVuaWZvcm0gZm9yIGFsbCB0eXBlcyAoQURSLTAwOCkuXHJcbiAgICogTXVzdCB1c2Ugc2V0SW5wdXQoKSwgbm90IHByb3BlcnR5IGFzc2lnbm1lbnQ6IHRoZSBmaWVsZCBjb21wb25lbnRzIGRlY2xhcmUgaW5wdXRzIHdpdGhcclxuICAgKiBkZWZpbml0ZSBhc3NpZ25tZW50IGFuZCBubyBpbml0aWFsaXplciwgYW5kIHRoZSBsaWIgY29tcGlsZXMgd2l0aFxyXG4gICAqIHVzZURlZmluZUZvckNsYXNzRmllbGRzOmZhbHNlLCBzbyBgJ2ZpZWxkJyBpbiBpbnN0YW5jZWAgaXMgZmFsc2UgdW50aWwgZmlyc3Qgc2V0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0SW5wdXRzKHJlZjogQ29tcG9uZW50UmVmPHVua25vd24+LCBtYXNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHJlZi5zZXRJbnB1dCgnZmllbGQnLCB0aGlzLmZpZWxkKTtcclxuICAgIHJlZi5zZXRJbnB1dCgnY29udHJvbCcsIHRoaXMuY29udHJvbCk7XHJcbiAgICByZWYuc2V0SW5wdXQoJ2xhbmd1YWdlJywgdGhpcy5sYW5ndWFnZSk7XHJcbiAgICByZWYuc2V0SW5wdXQoJ3JlYWRvbmx5JywgdGhpcy5yZWFkb25seSB8fCAhIXRoaXMuZmllbGQucmVhZG9ubHkpO1xyXG4gICAgcmVmLnNldElucHV0KCdtYXNrZWQnLCBtYXNrZWQpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Zvcm0vZHluYW1pYy1maWVsZC9keW5hbWljLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFFBQVEsRUFDUixLQUFLLEVBR0wsU0FBUyxFQUNULGdCQUFnQixFQUNoQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBRTFEOzs7Ozs7OztHQVFHO0FBTUgsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixLQUFLLENBQXFCO0lBQzFCLE9BQU8sQ0FBbUI7SUFDMUIsTUFBTSxDQUFvQjtJQUMxQixZQUFZLENBQVU7SUFDdEIsUUFBUSxHQUFXLElBQUksQ0FBQztJQUN4QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFNBQVMsR0FBYSxFQUFFLENBQUM7SUFHakIsU0FBUyxDQUFvQjtJQUU3QixhQUFhLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDN0MsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRDs7OztPQUlHO0lBQ2MsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVyQyxZQUFZLEdBQWlDLElBQUksQ0FBQztJQUUxRCxXQUFXLENBQUMsUUFBdUI7UUFDakMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9B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LENBQUM7UUFDbEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7d0dBNUhVLHFCQUFxQjs0RkFBckIscUJBQXFCLG9VQVNBLGdCQUFnQixnRUFYdEMsMENBQTBDOzs0RkFFekMscUJBQXFCO2tCQUxqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsMENBQTBDO2lCQUNyRDs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdXLFNBQVM7c0JBRHpCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsIE9uRGVzdHJveSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIHsgTmVzdGVkRmllbGRDb25maWcsIEVudGl0eUZvcm1Db25maWcsIE5lc3RlZFRhYkNvbmZpZyB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IGZpbmRUYWIgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpZWxkLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmJhY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yYmFjLnNlcnZpY2UnO1xuXG4vKipcbiAqIER5bmFtaWNGaWVsZENvbXBvbmVudCDigJQgbW91bnRzIHRoZSBjb3JyZWN0IGZpZWxkIGNvbXBvbmVudCBmb3IgYSBnaXZlbiBOZXN0ZWRGaWVsZENvbmZpZy5cbiAqIFVzZXMgVmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoKSBhbmQgcGFzc2VzIGlucHV0cyB2aWEgc2V0SW5wdXQoKTsgc2VlXG4gKiBEeW5hbWljRmllbGRDb21wb25lbnRDb250cmFjdCBmb3IgdGhlIGZpdmUgaW5wdXRzIGV2ZXJ5IGZpZWxkIGNvbXBvbmVudCByZWNlaXZlcy5cbiAqIE5ldmVyIGFkZCBmaWVsZC10eXBlLXNwZWNpZmljIGxvZ2ljIGhlcmUg4oCUIHRoaXMgY29tcG9uZW50IG11c3QgcmVtYWluIGdlbmVyaWMuXG4gKlxuICogVGhlIDUgaW5wdXRzIChmaWVsZCwgY29udHJvbCwgbGFuZ3VhZ2UsIHJlYWRvbmx5LCBtYXNrZWQpIGFyZSBwYXNzZWQgdG8gZXZlcnkgbW91bnRlZFxuICogY29tcG9uZW50IHVuaWZvcm1seSDigJQgbm8gc3BlY2lhbC1jYXNpbmcgcGVyIHR5cGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1keW5hbWljLWZpZWxkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGA8bmctY29udGFpbmVyICNmaWVsZEhvc3Q+PC9uZy1jb250YWluZXI+YCxcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0ZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBmaWVsZCE6IE5lc3RlZEZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBjb250cm9sITogQWJzdHJhY3RDb250cm9sO1xuICBASW5wdXQoKSBjb25maWchOiBFbnRpdHlGb3JtQ29uZmlnO1xuICBASW5wdXQoKSBjdXJyZW50VGFiSWQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhbmd1YWdlOiBzdHJpbmcgPSAnZW4nO1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB1c2VyUm9sZXM6IHN0cmluZ1tdID0gW107XG5cbiAgQFZpZXdDaGlsZCgnZmllbGRIb3N0JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSByZWFkb25seSBmaWVsZEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZmllbGRSZWdpc3RyeSA9IGluamVjdChGaWVsZFJlZ2lzdHJ5U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmJhY1NlcnZpY2UgPSBpbmplY3QoUmJhY1NlcnZpY2UpO1xuICAvKipcbiAgICogUGFzc2VkIGludG8gYGNyZWF0ZUNvbXBvbmVudGAgc28gYSBob3N0ZWQgZmllbGQgc2VlcyB0aGlzIGhvc3QncyBpbmplY3RvciDigJQgaW5jbHVkaW5nXG4gICAqIGBEeW5hbWljRm9ybUNvbXBvbmVudGAncyBzY29wZWQgYEVudGl0eVJlZlNlbGVjdGlvblNlcnZpY2VgLiBXaXRob3V0IGl0LCBhIHN0YW5kYWxvbmVcbiAgICogZmllbGQgcmVzb2x2ZXMgdGhlIHJvb3QgYnVzIGFuZCBgYXV0b1BhdGNoYCBuZXZlciBydW5zLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjx1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5tb3VudEZpZWxkKCk7XG4gIH1cblxuICBwcml2YXRlIG1vdW50RmllbGQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkIHx8ICF0aGlzLmNvbnRyb2wpIHJldHVybjtcblxuICAgIGNvbnN0IENvbXBvbmVudENsYXNzID0gdGhpcy5maWVsZFJlZ2lzdHJ5LnJlc29sdmUodGhpcy5maWVsZC50eXBlKTtcbiAgICBpZiAoIUNvbXBvbmVudENsYXNzKSB7XG4gICAgICB0aGlzLndhcm5VbnJlc29sdmVkKHRoaXMuZmllbGQudHlwZSk7XG4gICAgICByZXR1cm47IC8vIFVua25vd24gZmllbGQgdHlwZSDigJQgcmVuZGVyIG5vdGhpbmdcbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmUgbWFza2luZyBmb3IgdGhpcyBzcGVjaWZpYyBmaWVsZFxuICAgIGNvbnN0IHRhYjogTmVzdGVkVGFiQ29uZmlnIHwgbnVsbCA9IHRoaXMuY3VycmVudFRhYklkID8gZmluZFRhYih0aGlzLmNvbmZpZz8udGFicywgdGhpcy5jdXJyZW50VGFiSWQpIDogbnVsbDtcbiAgICBjb25zdCBtYXNrZWQgPSB0aGlzLnJiYWNTZXJ2aWNlLnNob3VsZE1hc2tGaWVsZCh0aGlzLmZpZWxkLCB0YWIgPz8gdW5kZWZpbmVkLCB0aGlzLmNvbmZpZywgdGhpcy51c2VyUm9sZXMpO1xuXG4gICAgLy8gUmUtdXNlIGV4aXN0aW5nIGNvbXBvbmVudCBpZiBzYW1lIHR5cGUsIG90aGVyd2lzZSByZWNyZWF0ZVxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAmJiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBpbnN0YW5jZW9mIENvbXBvbmVudENsYXNzKSB7XG4gICAgICB0aGlzLnNldElucHV0cyh0aGlzLmNvbXBvbmVudFJlZiwgbWFza2VkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpZWxkSG9zdC5jbGVhcigpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5maWVsZEhvc3QuY3JlYXRlQ29tcG9uZW50KENvbXBvbmVudENsYXNzLCB7XG4gICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcbiAgICB0aGlzLnNldElucHV0cyh0aGlzLmNvbXBvbmVudFJlZiwgbWFza2VkKTtcbiAgICB0aGlzLndhdGNoQ29udHJvbCgpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWVsZCB0eXBlcyBhcmUgb3B0LWluIChzZWUgYHByb3ZpZGVGaWVsZFR5cGVzYCAvIGBwcm92aWRlQnVpbHRJbkZpZWxkVHlwZXNgKSwgc28gYW5cbiAgICogdW5yZWdpc3RlcmVkIHR5cGUgcmVuZGVycyBub3RoaW5nLiBTYXkgc28gb25jZSBwZXIgdHlwZSBpbiBkZXYgYnVpbGRzIHJhdGhlciB0aGFuXG4gICAqIGxlYXZpbmcgYSBzaWxlbnRseSBibGFuayBzbG90LlxuICAgKi9cbiAgcHJpdmF0ZSB3YXJuVW5yZXNvbHZlZCh0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWlzRGV2TW9kZSgpIHx8IER5bmFtaWNGaWVsZENvbXBvbmVudC53YXJuZWRUeXBlcy5oYXModHlwZSkpIHJldHVybjtcbiAgICBEeW5hbWljRmllbGRDb21wb25lbnQud2FybmVkVHlwZXMuYWRkKHR5cGUpO1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBbbmd4LWR5bmFtaWMtZW50aXR5XSBObyBjb21wb25lbnQgcmVnaXN0ZXJlZCBmb3IgZmllbGQgdHlwZSBcIiR7dHlwZX1cIiDigJQgdGhlIGZpZWxkIHdhcyBub3QgcmVuZGVyZWQuIGAgK1xuICAgICAgICBgUmVnaXN0ZXIgaXQgd2l0aCBwcm92aWRlRmllbGRUeXBlcyh7ICcke3R5cGV9JzogTXlDb21wb25lbnQgfSkgb3IgcHJvdmlkZUJ1aWx0SW5GaWVsZFR5cGVzKCkuYCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgd2FybmVkVHlwZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKipcbiAgICogUmUtY2hlY2sgdGhlIGhvc3RlZCBmaWVsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoZSBmaWVsZCBjb21wb25lbnRzIGFyZSBPblB1c2gsIHNvIHRoZXkgcmUtcmVuZGVyIG9uIGFuIGlucHV0IGNoYW5nZSwgYW4gZXZlbnQgZnJvbVxuICAgKiB0aGVpciBvd24gdGVtcGxhdGUsIG9yIGEgc2lnbmFsIHRoZXkgcmVhZC4gYGZvcm0ubWFya0FsbEFzVG91Y2hlZCgpYCBpcyBub25lIG9mIHRob3NlIOKAlFxuICAgKiBpdCBmbGlwcyBgdG91Y2hlZGAgZnJvbSBvdXRzaWRlLCBhbmQgZXZlcnkgZmllbGQncyBlcnJvciBtZXNzYWdlIGRlcGVuZHMgb24gaXQuIFdpdGhvdXRcbiAgICogdGhpcywgYSBibG9ja2VkIHN1Ym1pdCB3b3VsZCBtYXJrIHRoZSBmb3JtIHRvdWNoZWQgYW5kIG5vIGVycm9yIHdvdWxkIGFwcGVhci5cbiAgICovXG4gIHJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRSZWY/LmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1jaGVjayB0aGUgaG9zdGVkIGNvbXBvbmVudCB3aGVuZXZlciBpdHMgY29udHJvbCBjaGFuZ2VzIGZyb20gb3V0c2lkZS5cbiAgICpcbiAgICogVGhlIGZpZWxkIGNvbXBvbmVudHMgYXJlIE9uUHVzaCwgc28gdGhleSByZS1yZW5kZXIgb24gYW4gaW5wdXQgY2hhbmdlIG9yIGFuIGV2ZW50IGZyb21cbiAgICogdGhlaXIgb3duIHRlbXBsYXRlLiBBIGNvbnRyb2wgbXV0YXRlZCBleHRlcm5hbGx5IGlzIG5laXRoZXIg4oCUIGFuZCB0aGF0IGlzIG5vdCBhbiBlZGdlXG4gICAqIGNhc2U6IHBhdGNoRm9ybSwgcmVzZXQsIGF1dG9QYXRjaCBhbmQgcGF0Y2hPblRydWUgYWxsIGRvIGV4YWN0bHkgdGhhdC4gV2l0aG91dCB0aGlzLCBhXG4gICAqIGZpZWxkIHBhdGNoZWQgZnJvbSBhIHJlY29yZCB3b3VsZCBrZWVwIHJlbmRlcmluZyBpdHMgcHJldmlvdXMgdmFsdWUuXG4gICAqXG4gICAqIGBkZXRlY3RDaGFuZ2VzKClgIHJhdGhlciB0aGFuIGBtYXJrRm9yQ2hlY2soKWA6IGEgc2VsZWN0aW9uIHRoYXQgYXJyaXZlcyBmcm9tIGEgbmF0aXZlXG4gICAqIGBjaGFuZ2VgIGV2ZW50IChvciBQbGF5d3JpZ2h0KSBtYXkgbm90IGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgQW5ndWxhciB0aWNrLCBzbyBhIGRpcnR5XG4gICAqIGZsYWcgd291bGQgbmV2ZXIgYmUgZmx1c2hlZC4gUnVubmluZyBDRCBvbiB0aGUgaG9zdGVkIGNvbXBvbmVudCBub3cgaXMgdGhlIGNvcHkgc2hvd2luZyB1cC5cbiAgICpcbiAgICogRG9uZSBoZXJlIHJhdGhlciB0aGFuIGluIGVhY2ggb2YgdGhlIGVpZ2h0ZWVuIGZpZWxkIGNvbXBvbmVudHM6IHRoZSBob3N0IG93bnMgdGhlXG4gICAqIGNvbXBvbmVudCByZWZlcmVuY2UsIHNvIG9uZSBzdWJzY3JpcHRpb24gY292ZXJzIGV2ZXJ5IHR5cGUgaW5jbHVkaW5nIGN1c3RvbSBvbmVzLlxuICAgKi9cbiAgcHJpdmF0ZSB3YXRjaENvbnRyb2woKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICghdGhpcy5jb250cm9sKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbnRyb2xTdWIgPSB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2goKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnRyb2xTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhc3MgYWxsIDUgY29udHJhY3QgaW5wdXRzIHZpYSBDb21wb25lbnRSZWYuc2V0SW5wdXQoKSDigJQgdW5pZm9ybSBmb3IgYWxsIHR5cGVzLlxuICAgKiBUaGUgcHVibGljIHNoYXBlIGlzIER5bmFtaWNGaWVsZENvbXBvbmVudENvbnRyYWN0LlxuICAgKiBNdXN0IHVzZSBzZXRJbnB1dCgpLCBub3QgcHJvcGVydHkgYXNzaWdubWVudDogdGhlIGZpZWxkIGNvbXBvbmVudHMgZGVjbGFyZSBpbnB1dHMgd2l0aFxuICAgKiBkZWZpbml0ZSBhc3NpZ25tZW50IGFuZCBubyBpbml0aWFsaXplciwgYW5kIHRoZSBsaWIgY29tcGlsZXMgd2l0aFxuICAgKiB1c2VEZWZpbmVGb3JDbGFzc0ZpZWxkczpmYWxzZSwgc28gYCdmaWVsZCcgaW4gaW5zdGFuY2VgIGlzIGZhbHNlIHVudGlsIGZpcnN0IHNldC5cbiAgICovXG4gIHByaXZhdGUgc2V0SW5wdXRzKHJlZjogQ29tcG9uZW50UmVmPHVua25vd24+LCBtYXNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICByZWYuc2V0SW5wdXQoJ2ZpZWxkJywgdGhpcy5maWVsZCk7XG4gICAgcmVmLnNldElucHV0KCdjb250cm9sJywgdGhpcy5jb250cm9sKTtcbiAgICByZWYuc2V0SW5wdXQoJ2xhbmd1YWdlJywgdGhpcy5sYW5ndWFnZSk7XG4gICAgcmVmLnNldElucHV0KCdyZWFkb25seScsIHRoaXMucmVhZG9ubHkgfHwgISF0aGlzLmZpZWxkLnJlYWRvbmx5KTtcbiAgICByZWYuc2V0SW5wdXQoJ21hc2tlZCcsIG1hc2tlZCk7XG4gIH1cbn1cbiJdfQ==
|