@lenne.tech/ng-base 13.10.1 → 13.10.4
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/base-components/components/tags/tags.component.d.ts +2 -2
- package/esm2020/base-components/components/tags/tags.component.mjs +12 -9
- package/esm2020/shared/services/graphql.service.mjs +2 -2
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +12 -8
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs +1 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs +11 -8
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs +1 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -44,6 +44,12 @@ export class TagsComponent {
|
|
|
44
44
|
if (!this.custom && !this.options.find((e) => e === tag)) {
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
|
+
if (this.control.value?.length === 0) {
|
|
48
|
+
this.control.setValue([tag]);
|
|
49
|
+
this.inputValue = '';
|
|
50
|
+
this.control.setErrors(null);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
47
53
|
if (tag.length > 0 && this.control.value && !this.control.value.some((item) => item === tag)) {
|
|
48
54
|
this.control.value.push(tag);
|
|
49
55
|
this.inputValue = '';
|
|
@@ -70,35 +76,32 @@ export class TagsComponent {
|
|
|
70
76
|
/**
|
|
71
77
|
* Filter options for drop down
|
|
72
78
|
*/
|
|
73
|
-
|
|
79
|
+
filterOptions() {
|
|
74
80
|
return this.options
|
|
75
81
|
? this.options.filter((e) => e?.includes(this.inputValue) && !this.control.value.includes(e))
|
|
76
82
|
: [];
|
|
77
83
|
}
|
|
78
84
|
/**
|
|
79
|
-
* Show
|
|
85
|
+
* Show dropdown focus
|
|
80
86
|
*
|
|
81
87
|
* @param event
|
|
82
88
|
*/
|
|
83
89
|
onFocus(event) {
|
|
84
|
-
if (!this.options) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
90
|
if (event) {
|
|
88
91
|
this.selectedElement = event.target;
|
|
89
92
|
}
|
|
90
93
|
else {
|
|
91
94
|
setTimeout(() => {
|
|
92
95
|
this.selectedElement = null;
|
|
93
|
-
},
|
|
96
|
+
}, 250);
|
|
94
97
|
}
|
|
95
98
|
}
|
|
96
99
|
}
|
|
97
100
|
TagsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: TagsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
98
|
-
TagsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: TagsComponent, selector: "base-tags", inputs: { id: "id", name: "name", label: "label", placeholder: "placeholder", autocomplete: "autocomplete", tabIndex: "tabIndex", control: "control", options: "options", custom: "custom", removeByKey: "removeByKey", required: "required" }, ngImport: i0, template: "<div class=\"form-group
|
|
101
|
+
TagsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: TagsComponent, selector: "base-tags", inputs: { id: "id", name: "name", label: "label", placeholder: "placeholder", autocomplete: "autocomplete", tabIndex: "tabIndex", control: "control", options: "options", custom: "custom", removeByKey: "removeByKey", required: "required" }, ngImport: i0, template: "<div class=\"form-group position-relative\" *ngIf=\"control\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n\n <div class=\"tag-wrapper\" *ngIf=\"control?.value\">\n <div class=\"tag\" *ngFor=\"let tag of control?.value\">\n {{ tag }}\n <span (click)=\"removeTag(tag)\"><i class=\"bi bi-x-circle\"></i></span>\n </div>\n </div>\n <input\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n [(ngModel)]=\"inputValue\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n type=\"text\"\n class=\"form-control\"\n (keyup)=\"enterKey($event)\"\n />\n\n <div class=\"tag-options\" *ngIf=\"options && selectedElement\">\n <div class=\"tag-option-item\" *ngFor=\"let option of filterOptions()\" (click)=\"addTag(option)\">{{ option }}</div>\n </div>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n", styles: [".tag-options{position:absolute;display:block;top:100%;left:0;right:0;border-top:0;background-color:#fff;box-shadow:0 2px 5px #00000029,0 2px 10px #0000001f;transition:all .5s}.tag-options .tag-option-item{padding:10px;cursor:pointer}.tag-options .tag-option-item:hover{color:var(--bs-primary)}.tag-wrapper{display:flex;flex-direction:row;justify-content:flex-start;column-gap:10px;row-gap:10px;flex-wrap:wrap;margin-bottom:10px;position:relative}.tag-wrapper .tag{background-color:var(--bs-light);color:var(--bs-dark);padding:10px 15px;font-style:normal;font-weight:300;font-size:14px;line-height:140%}.tag-wrapper .tag span{margin-left:20px;cursor:pointer}.tag-wrapper .tag span .bi{color:var(--bs-black)}.tag-wrapper .tag span .bi:before{vertical-align:-.175em}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
99
102
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: TagsComponent, decorators: [{
|
|
100
103
|
type: Component,
|
|
101
|
-
args: [{ selector: 'base-tags', template: "<div class=\"form-group
|
|
104
|
+
args: [{ selector: 'base-tags', template: "<div class=\"form-group position-relative\" *ngIf=\"control\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n\n <div class=\"tag-wrapper\" *ngIf=\"control?.value\">\n <div class=\"tag\" *ngFor=\"let tag of control?.value\">\n {{ tag }}\n <span (click)=\"removeTag(tag)\"><i class=\"bi bi-x-circle\"></i></span>\n </div>\n </div>\n <input\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n [(ngModel)]=\"inputValue\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n type=\"text\"\n class=\"form-control\"\n (keyup)=\"enterKey($event)\"\n />\n\n <div class=\"tag-options\" *ngIf=\"options && selectedElement\">\n <div class=\"tag-option-item\" *ngFor=\"let option of filterOptions()\" (click)=\"addTag(option)\">{{ option }}</div>\n </div>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n", styles: [".tag-options{position:absolute;display:block;top:100%;left:0;right:0;border-top:0;background-color:#fff;box-shadow:0 2px 5px #00000029,0 2px 10px #0000001f;transition:all .5s}.tag-options .tag-option-item{padding:10px;cursor:pointer}.tag-options .tag-option-item:hover{color:var(--bs-primary)}.tag-wrapper{display:flex;flex-direction:row;justify-content:flex-start;column-gap:10px;row-gap:10px;flex-wrap:wrap;margin-bottom:10px;position:relative}.tag-wrapper .tag{background-color:var(--bs-light);color:var(--bs-dark);padding:10px 15px;font-style:normal;font-weight:300;font-size:14px;line-height:140%}.tag-wrapper .tag span{margin-left:20px;cursor:pointer}.tag-wrapper .tag span .bi{color:var(--bs-black)}.tag-wrapper .tag span .bi:before{vertical-align:-.175em}\n"] }]
|
|
102
105
|
}], propDecorators: { id: [{
|
|
103
106
|
type: Input
|
|
104
107
|
}], name: [{
|
|
@@ -122,4 +125,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
|
|
|
122
125
|
}], required: [{
|
|
123
126
|
type: Input
|
|
124
127
|
}] } });
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL3RhZ3MvdGFncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL3RhZ3MvdGFncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVFqRCxNQUFNLE9BQU8sYUFBYTtJQUwxQjtRQVFXLFVBQUssR0FBWSxFQUFFLENBQUM7UUFDcEIsZ0JBQVcsR0FBWSxFQUFFLENBQUM7UUFJMUIsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQUN4QixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQixlQUFVLEdBQUcsRUFBRSxDQUFDO0tBNkZqQjtJQTFGQzs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLEtBQW9CO1FBQzNCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdEUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLE9BQU87U0FDUjthQUFNO1lBQ0wsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDOUI7U0FDRjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gs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U0FDckM7YUFBTTtZQUNMLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDOUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDOzswR0F4R1UsYUFBYTs4RkFBYixhQUFhLGlTQ1IxQiwwdUNBZ0NBOzJGRHhCYSxhQUFhO2tCQUx6QixTQUFTOytCQUNFLFdBQVc7OEJBS1osRUFBRTtzQkFBVixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFzZS10YWdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWdzLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhZ3NDb21wb25lbnQge1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZT86IHN0cmluZztcbiAgQElucHV0KCkgdGFiSW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGNvbnRyb2w6IEZvcm1Db250cm9sIHwgQWJzdHJhY3RDb250cm9sO1xuICBASW5wdXQoKSBvcHRpb25zPzogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgY3VzdG9tID0gdHJ1ZTtcbiAgQElucHV0KCkgcmVtb3ZlQnlLZXkgPSB0cnVlO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBpbnB1dFZhbHVlID0gJyc7XG4gIHNlbGVjdGVkRWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBlbnRlciBrZXlzXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgZW50ZXJLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZW1vdmVCeUtleSAmJiBldmVudC5jb2RlID09PSAnQmFja3NwYWNlJyAmJiAhdGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICB0aGlzLnJlbW92ZVRhZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0NvbW1hJyB8fCBldmVudC5jb2RlID09PSAnU3BhY2UnIHx8IGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgdGhpcy5hZGRUYWcodGhpcy5pbnB1dFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5ldyB0YWdcbiAgICpcbiAgICogQHBhcmFtIHRhZ1xuICAgKi9cbiAgYWRkVGFnKHRhZzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShbXSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICh0YWcuZW5kc1dpdGgoJywnKSB8fCB0YWcuZW5kc1dpdGgoJyAnKSkge1xuICAgICAgdGFnID0gdGFnLnNsaWNlKDAsIC0xKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY3VzdG9tICYmICF0aGlzLm9wdGlvbnMuZmluZCgoZSkgPT4gZSA9PT0gdGFnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRyb2wudmFsdWU/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKFt0YWddKTtcbiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnO1xuICAgICAgdGhpcy5jb250cm9sLnNldEVycm9ycyhudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGFnLmxlbmd0aCA+IDAgJiYgdGhpcy5jb250cm9sLnZhbHVlICYmICF0aGlzLmNvbnRyb2wudmFsdWUuc29tZSgoaXRlbTogc3RyaW5nKSA9PiBpdGVtID09PSB0YWcpKSB7XG4gICAgICB0aGlzLmNvbnRyb2wudmFsdWUucHVzaCh0YWcpO1xuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgICB0aGlzLmNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGFnXG4gICAqXG4gICAqIEBwYXJhbSB0YWdcbiAgICovXG4gIHJlbW92ZVRhZyh0YWc/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IG51bGw7XG4gICAgaWYgKHRhZykge1xuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMuY29udHJvbC52YWx1ZS5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gdGFnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udHJvbC52YWx1ZS5zcGxpY2UoLTEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRyb2wudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNvbnRyb2wuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBvcHRpb25zIGZvciBkcm9wIGRvd25cbiAgICovXG4gIGZpbHRlck9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgICAgPyB0aGlzLm9wdGlvbnMuZmlsdGVyKChlKSA9PiBlPy5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUpICYmICF0aGlzLmNvbnRyb2wudmFsdWUuaW5jbHVkZXMoZSkpXG4gICAgICA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgZHJvcGRvd24gZm9jdXNcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBvbkZvY3VzKGV2ZW50Pykge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IG51bGw7XG4gICAgICB9LCAyNTApO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcG9zaXRpb24tcmVsYXRpdmVcIiAqbmdJZj1cImNvbnRyb2xcIj5cbiAgPGxhYmVsIFtmb3JdPVwiaWRcIiBjbGFzcz1cImZvcm0tbGFiZWxcIiBbbmdDbGFzc109XCJ7IHJlcXVpcmVkOiByZXF1aXJlZCB9XCIgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cblxuICA8ZGl2IGNsYXNzPVwidGFnLXdyYXBwZXJcIiAqbmdJZj1cImNvbnRyb2w/LnZhbHVlXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhZ1wiICpuZ0Zvcj1cImxldCB0YWcgb2YgY29udHJvbD8udmFsdWVcIj5cbiAgICAgIHt7IHRhZyB9fVxuICAgICAgPHNwYW4gKGNsaWNrKT1cInJlbW92ZVRhZyh0YWcpXCI+PGkgY2xhc3M9XCJiaSBiaS14LWNpcmNsZVwiPjwvaT48L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8aW5wdXRcbiAgICBbaWRdPVwiaWRcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IGNvbnRyb2w/LmludmFsaWQgJiYgY29udHJvbD8udG91Y2hlZCB9XCJcbiAgICBbKG5nTW9kZWwpXT1cImlucHV0VmFsdWVcIlxuICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlID8/IG51bGxcIlxuICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleCA/PyBudWxsXCJcbiAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJvbkZvY3VzKClcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgKGtleXVwKT1cImVudGVyS2V5KCRldmVudClcIlxuICAvPlxuXG4gIDxkaXYgY2xhc3M9XCJ0YWctb3B0aW9uc1wiICpuZ0lmPVwib3B0aW9ucyAmJiBzZWxlY3RlZEVsZW1lbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGFnLW9wdGlvbi1pdGVtXCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJPcHRpb25zKClcIiAoY2xpY2spPVwiYWRkVGFnKG9wdGlvbilcIj57eyBvcHRpb24gfX08L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2sgbS0yXCIgKm5nSWY9XCJjb250cm9sPy5pbnZhbGlkICYmIChjb250cm9sPy5kaXJ0eSB8fCBjb250cm9sPy50b3VjaGVkKVwiPlxuICAgIDxkaXYgKm5nSWY9XCJjb250cm9sPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPkRpZXNlcyBGZWxkIGlzdCBlaW4gUGZsaWNodGZlbGQuPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -293,7 +293,7 @@ export class GraphQLService {
|
|
|
293
293
|
}
|
|
294
294
|
// String
|
|
295
295
|
else {
|
|
296
|
-
additionalResult += `"${value.replace(/"/g, '\\"').replace(/\n
|
|
296
|
+
additionalResult += `"${value.replace(/"/g, '\\"').replace(/\n/g, '\\n')}"`;
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
299
|
// Value is a simple boolean or a number
|
|
@@ -438,4 +438,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
|
|
|
438
438
|
providedIn: 'root',
|
|
439
439
|
}]
|
|
440
440
|
}], ctorParameters: function () { return [{ type: i1.Apollo }, { type: i2.GraphQLMetaService }]; } });
|
|
441
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvc2VydmljZXMvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFHNUQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sY0FBYztJQUN6Qjs7T0FFRztJQUNILFlBQXNCLE1BQWMsRUFBWSxrQkFBc0M7UUFBaEUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFZLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7SUFBRyxDQUFDO0lBRTFGOztPQUVHO0lBQ0ksT0FBTyxDQUFDLE9BQWUsRUFBRSxVQUEyQixFQUFFO1FBQzNELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDeEM7UUFFRCxhQUFhO1FBQ2IsTUFBTSxNQUFNLEdBQUc7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLE1BQU0sRUFBRSxJQUFJO1lBQ1osR0FBRyxFQUFFLEtBQUs7WUFDVixLQUFLLEVBQUUsSUFBSTtZQUNYLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxLQUFLO1lBQzlCLEdBQUcsT0FBTztTQUNYLENBQUM7UUFFRix3Q0FBd0M7UUFDeEMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxT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QU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dDQUN2RyxNQUFNLEVBQUUsV0FBVyxHQUFHLEdBQUc7Z0NBQ3pCLE1BQU07Z0NBQ04sWUFBWTtnQ0FDWixHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0NBQ1osVUFBVTs2QkFDWCxDQUFDLENBQUMsWUFBWTs0QkFDZixJQUFJOzRCQUNKLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzs0QkFDOUIsR0FBRyxDQUFDO2lCQUNQO2FBQ0Y7U0FDRjtRQUVELGdCQUFnQjtRQUNoQixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNwRCxDQUFDOzsyR0F0Z0JVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcG9sbG8sIGdxbCB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElHcmFwaFFMT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3JhcGhxbC1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmFwaFFMUmVxdWVzdFR5cGUgfSBmcm9tICcuLi9lbnVtcy9ncmFwaHFsLXJlcXVlc3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdyYXBoUUxNZXRhU2VydmljZSB9IGZyb20gJy4vZ3JhcGhxbC1tZXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JhcGhRTEVudW0gfSBmcm9tICcuLi9jbGFzc2VzL2dyYXBocWwtZW51bS5jbGFzcyc7XG5pbXBvcnQgeyBHcmFwaFFMVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZ3JhcGhxbC10eXBlLmNsYXNzJztcbmltcG9ydCB7IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2dyYXBocWwtdHlwZS1jb2xsZWN0aW9uLmludGVyZmFjZSc7XG5cbi8qKlxuICogR3JhcGhRTCBzZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmFwaFFMU2VydmljZSB7XG4gIC8qKlxuICAgKiBJbmNsdWRlIHNlcnZpY2VzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXBvbGxvOiBBcG9sbG8sIHByb3RlY3RlZCBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSkge31cblxuICAvKipcbiAgICogR3JhcGhRTCByZXF1ZXN0XG4gICAqL1xuICBwdWJsaWMgZ3JhcGhRbChncmFwaHFsOiBzdHJpbmcsIG9wdGlvbnM6IElHcmFwaFFMT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyBDaGVjayBhcmd1bWVudHNcbiAgICBpZiAoIWdyYXBocWwpIHtcbiAgICAgIHRocm93RXJyb3IoJ01pc3NpbmcgZ3JhcGhxbCBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIC8vIEdldCBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBhcmd1bWVudHM6IG51bGwsXG4gICAgICBmaWVsZHM6IG51bGwsXG4gICAgICBsb2c6IGZhbHNlLFxuICAgICAgbW9kZWw6IG51bGwsXG4gICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuUVVFUlksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDb252ZXJ0IGNsYXNzIHRvIE9iamVjdCBmb3IgYXJndW1lbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcuYXJndW1lbnRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maWcuYXJndW1lbnRzID0gbmV3IGNvbmZpZy5hcmd1bWVudHMoKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IGNsYXNzIHRvIE9iamVjdCBmb3IgZmllbGRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcuZmllbGRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maWcuZmllbGRzID0gbmV3IGNvbmZpZy5maWVsZHMoKTtcbiAgICB9XG5cbiAgICAvLyBMb2dcbiAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgY29uc29sZS5sb2coeyBjb25maWcgfSk7XG4gICAgfVxuXG4gICAgLy8gU2VuZCByZXF1ZXN0XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAvLyBHZXQgbWV0YVxuICAgICAgdGhpcy5ncmFwaFFMTWV0YVNlcnZpY2UuZ2V0TWV0YSh7IGxvZzogY29uZmlnLmxvZyB9KS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWVsZHNcbiAgICAgICAgbGV0IGZpZWxkcztcbiAgICAgICAgbGV0IGFsbG93ZWRGaWVsZHM7XG5cbiAgICAgICAgLy8gTG9nIG1ldGFcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IG1ldGEgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLmZpZWxkcykge1xuICAgICAgICAgIGFsbG93ZWRGaWVsZHMgPSBtZXRhLmdldEZpZWxkcyhncmFwaHFsLCB7IHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuXG4gICAgICAgICAgLy8gTG9nIG1ldGFcbiAgICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBhbGxvd2VkRmllbGRzIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpZWxkc0RhdGEgPSB0aGlzLnByZXBhcmVGaWVsZHMoY29uZmlnLmZpZWxkcywge1xuICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZEZpZWxkcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIExvZyBmaWVsZHMgZGF0YVxuICAgICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgICBmaWVsZHNEYXRhLnVzZWRGaWVsZHMuc29ydCgpO1xuICAgICAgICAgICAgZmllbGRzRGF0YS5zY2hlbWFGaWVsZHMuc29ydCgpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWVsZHNEYXRhLnNjaGVtYUZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiAhZmllbGRzRGF0YS51c2VkRmllbGRzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgICBjb25zdCB1bnVzZWQgPSB0aGlzLmdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoYWxsb3dlZEZpZWxkcykuZmlsdGVyKFxuICAgICAgICAgICAgICAoZmllbGQpID0+ICFmaWVsZHNEYXRhLnVzZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBmaWVsZHNEYXRhLCBmaWx0ZXJlZCwgdW51c2VkIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkcyA9IGZpZWxkc0RhdGEuZmllbGRzU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkcyAmJiAhZmllbGRzLnN0YXJ0c1dpdGgoJ3snKSkge1xuICAgICAgICAgIGZpZWxkcyA9ICd7JyArIGZpZWxkcyArICdcXG59JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvZyBmaWVsZHNcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IGZpZWxkcyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCBhbGxvd2VkIGFyZ3NcbiAgICAgICAgY29uc3QgYWxsb3dlZEFyZ3MgPSBtZXRhLmdldEFyZ3MoZ3JhcGhxbCwgeyB0eXBlOiBjb25maWcudHlwZSB9KTtcblxuICAgICAgICAvLyBMb2cgYWxsb3dlZCBhcmdzXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBhbGxvd2VkQXJncyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3NEYXRhID0gdGhpcy5wcmVwYXJlQXJndW1lbnRzKGNvbmZpZy5hcmd1bWVudHMsIHtcbiAgICAgICAgICBhbGxvd2VkOiBhbGxvd2VkQXJncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTG9nIGFyZ3MgZGF0YVxuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGFyZ3NEYXRhLnVzZWRBcmdzLnNvcnQoKTtcbiAgICAgICAgICBhcmdzRGF0YS5zY2hlbWFBcmdzLnNvcnQoKTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGFyZ3NEYXRhLnNjaGVtYUFyZ3MuZmlsdGVyKChmaWVsZCkgPT4gIWFyZ3NEYXRhLnVzZWRBcmdzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgY29uc3QgdW51c2VkID0gdGhpcy5ncmFwaFFMVHlwZUNvbGxlY3Rpb25Ub1N0cmluZ0FycmF5KGFsbG93ZWRBcmdzKVxuICAgICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmllbGQpID0+ICFhcmdzRGF0YS51c2VkQXJncy5pbmNsdWRlcyhmaWVsZCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgYXJnc0RhdGEsIGZpbHRlcmVkLCB1bnVzZWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gYXJnc0RhdGE/LmFyZ3NTdHJpbmcgfHwgJyc7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBncmFwaFFMOiBncmFwaHFsLCBhcmdzLCBmaWVsZHMsIHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJlcGFyZSByZXF1ZXN0XG4gICAgICAgIGNvbnN0IGRvY3VtZW50Tm9kZSA9IGZpZWxkc1xuICAgICAgICAgID8gZ3FsKGNvbmZpZy50eXBlICsgJ3tcXG4nICsgZ3JhcGhxbCArIGFyZ3MgKyBmaWVsZHMgKyAnXFxufScpXG4gICAgICAgICAgOiBncWwoY29uZmlnLnR5cGUgKyAne1xcbicgKyBncmFwaHFsICsgYXJncyArICdcXG59Jyk7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBkb2N1bWVudE5vZGUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0OiBhbnkgPSB7fTtcbiAgICAgICAgcmVxdWVzdFtjb25maWcudHlwZV0gPSBkb2N1bWVudE5vZGU7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZ1bmM7XG4gICAgICAgIGlmIChjb25maWcudHlwZSA9PT0gR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OKSB7XG4gICAgICAgICAgZnVuYyA9ICdtdXRhdGUnO1xuICAgICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy50eXBlID09PSBHcmFwaFFMUmVxdWVzdFR5cGUuU1VCU0NSSVBUSU9OKSB7XG4gICAgICAgICAgZnVuYyA9ICdzdWJzY3JpYmUnO1xuICAgICAgICAgIHJlcXVlc3QucXVlcnkgPSBkb2N1bWVudE5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnVuYyA9IGNvbmZpZy50eXBlO1xuICAgICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMuYXBvbGxvIGFzIGFueSlbZnVuY10ocmVxdWVzdCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdD8uZGF0YT8uW2dyYXBocWxdICE9PSB1bmRlZmluZWQgPyByZXN1bHQuZGF0YVtncmFwaHFsXSA6IHJlc3VsdDtcblxuICAgICAgICAgICAgLy8gRGlyZWN0IGRhdGFcbiAgICAgICAgICAgIGlmICghY29uZmlnLm1vZGVsKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFwIGRhdGEgYXMgYXJyYXlcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KFxuICAgICAgICAgICAgICAgIGRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLm1vZGVsLm1hcChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNYXAgZGF0YVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjb25maWcubW9kZWwubWFwKGRhdGEpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpZy50eXBlICE9PSBHcmFwaFFMUmVxdWVzdFR5cGUuU1VCU0NSSVBUSU9OKSB7XG4gICAgICAgICAgICAgIC8vIERvbmVcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZHMgLyBhcmdzIGZyb20gSUdyYXBoUUxUeXBlQ29sbGVjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoXG4gICAgY29sbGVjdGlvbjogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbixcbiAgICBjdXJyZW50ID0gJycsXG4gICAgcmVzdWx0ID0gW10sXG4gICAgY2FjaGVOb2RlID0gW11cbiAgKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uIGluc3RhbmNlb2YgR3JhcGhRTFR5cGUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY3VycmVudD8uaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAgIGNhY2hlTm9kZS5wdXNoKGN1cnJlbnQuc3BsaXQoJy4nKVsxXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCkge1xuICAgICAgICAgIGNhY2hlTm9kZS5wdXNoKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgPT09IGtleSB8fCBjYWNoZU5vZGUuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3JhcGhRTFR5cGVDb2xsZWN0aW9uVG9TdHJpbmdBcnJheShcbiAgICAgICAgICAgIGNvbGxlY3Rpb25ba2V5XSBhcyBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uLFxuICAgICAgICAgICAgY3VycmVudCA/IGN1cnJlbnQgKyAnLicgKyBrZXkgOiBrZXksXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBjYWNoZU5vZGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBhcmd1bWVudHMgZm9yIEdyYXBoUUwgcmVxdWVzdFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXBhcmVBcmd1bWVudHMoXG4gICAgYXJnczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGFsbG93ZWQ/OiBhbnk7XG4gICAgICBsZXZlbD86IG51bWJlcjtcbiAgICAgIHBhcmVudD86IHN0cmluZztcbiAgICAgIHNjaGVtYUFyZ3M/OiBzdHJpbmdbXTtcbiAgICAgIHVzZWRBcmdzPzogc3RyaW5nW107XG4gICAgfSA9IHt9XG4gICk6IHsgYXJnc1N0cmluZzogc3RyaW5nOyBzY2hlbWFBcmdzOiBzdHJpbmdbXTsgdXNlZEFyZ3M6IHN0cmluZ1tdIH0ge1xuICAgIC8vIEluaXQgY29uZmlnIHZhcmlhYmxlc1xuICAgIGNvbnN0IHsgYWxsb3dlZCwgbGV2ZWwsIHBhcmVudCwgc2NoZW1hQXJncywgdXNlZEFyZ3MgfSA9IHtcbiAgICAgIGFsbG93ZWQ6IG51bGwsXG4gICAgICBsZXZlbDogMSxcbiAgICAgIHBhcmVudDogJycsXG4gICAgICBzY2hlbWFBcmdzOiBbXSxcbiAgICAgIHVzZWRBcmdzOiBbXSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGFyZ3NcbiAgICBpZiAoYXJncyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3MgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICcnLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgIH1cblxuICAgIC8vIEluaXQgYXJnc1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgLy8gUHJvY2VzcyBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICBjb25zdCBhbGxvd2VkS2V5cyA9IGFsbG93ZWQgPyBPYmplY3Qua2V5cyhhbGxvd2VkKSA6IG51bGw7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJncykge1xuICAgICAgICBsZXQga2V5ID0gbnVsbDtcbiAgICAgICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgICAgICBpZiAoYWxsb3dlZC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5ID0gYWxsb3dlZEtleXM/LnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIHZhbHVlXG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgIHRoaXMucHJlcGFyZUFyZ3VtZW50cyhpdGVtLCB7XG4gICAgICAgICAgICBhbGxvd2VkOiBrZXkgPyBhbGxvd2VkW2tleV0gOiBudWxsLFxuICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50ICsga2V5ICsgJy4nLFxuICAgICAgICAgICAgc2NoZW1hQXJncyxcbiAgICAgICAgICAgIHVzZWRBcmdzLFxuICAgICAgICAgIH0pLmFyZ3NTdHJpbmdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5jYXBzdWxhdGlvbiBvZiB0aGUgYXJyYXkgcmVzdWx0XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAvLyBDb21wbGV0ZSByZXN1bHQsIGVuY2Fwc3VsYXRlZCB2aWEgcm91bmQgYnJhY2tldHNcbiAgICAgICAgaWYgKGxldmVsID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJygnICsgcmVzdWx0LmpvaW4oJywgJykgKyAnKScsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWVwZXIgcmVzdWx0IHBhcnQsIGVuY2Fwc3VsYXRlZCB2aWEgc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICdbJyArIHJlc3VsdC5qb2luKCcsICcpICsgJ10nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBvYmplY3RcbiAgICBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIENoZWNrIG9iamVjdCBpcyBlbXB0eVxuICAgICAgaWYgKGFyZ3MgJiYgT2JqZWN0LmtleXMoYXJncykubGVuZ3RoID09PSAwICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihhcmdzKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAne30nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgfVxuICAgICAgLy8gUHJvY2VzcyBhbGwgb2JqZWN0IGVudHJpZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MpKSB7XG4gICAgICAgIC8vIEluaXQgZGF0YSBmb3IgY3VycmVudCBlbnRyeVxuICAgICAgICBjb25zdCBjdXJyZW50S2V5ID0gcGFyZW50ICsga2V5O1xuICAgICAgICBzY2hlbWFBcmdzLnB1c2goY3VycmVudEtleSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIGFsbG93ZWQga2V5IGhhbmRsaW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBjdXJyZW50IGtleSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZCBrZXlzLFxuICAgICAgICAvLyB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSBza2lwcGVkXG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkW2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNraXAgdmFsdWUgaWYgbm90IGV4aXN0c1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGN1cnJlbnQga2V5IHRvIG1ldGFkYXRhXG4gICAgICAgIHVzZWRBcmdzLnB1c2goY3VycmVudEtleSk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyBHcmFwaFFMRW51bVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBHcmFwaFFMRW51bSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSArICc6JyArIHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAgICc6IFsnICtcbiAgICAgICAgICAgICAgdmFsdWUubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQXJndW1lbnRzKGl0ZW0sIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZFtrZXldLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRLZXkgKyAnLicsXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYUFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIHVzZWRBcmdzLFxuICAgICAgICAgICAgICAgICAgfSkuYXJnc1N0cmluZ1xuICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgJ10nXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXBhcmUgYWRkaXRpb25hbCByZXN1bHQgc3RyaW5nXG4gICAgICAgIGxldCBhZGRpdGlvbmFsUmVzdWx0ID0ga2V5ICsgJzogJztcblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIGRhdGUgb2JqZWN0XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gYFwiXCJcIiR7KHZhbHVlIGFzIERhdGUpLnRvU3RyaW5nKCl9XCJcIlwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbHVlIGlzIGEgc3RyaW5nXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyBFbnVtIChkb2Vzbid0IG5lZWQgcXVvdGF0aW9uIG1hcmtzKVxuICAgICAgICAgIGlmIChhbGxvd2VkW2tleV0uaXNFbnVtKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFN0cmluZ1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSBgXCIke3ZhbHVlLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vLCAnXFxcXG4nKX1cImA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsdWUgaXMgYSBzaW1wbGUgYm9vbGVhbiBvciBhIG51bWJlclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyc1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IHRoaXMucHJlcGFyZUFyZ3VtZW50cyh2YWx1ZSwge1xuICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZFtrZXldLFxuICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgICAgIHBhcmVudDogY3VycmVudEtleSArICcuJyxcbiAgICAgICAgICAgIHNjaGVtYUFyZ3MsXG4gICAgICAgICAgICB1c2VkQXJncyxcbiAgICAgICAgICB9KS5hcmdzU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHVzaCBkZWVwZXIgcGFydCBpbnRvIHJlc3VsdCBhcnJheVxuICAgICAgICByZXN1bHQucHVzaChhZGRpdGlvbmFsUmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5jYXBzdWxhdGlvbiBvZiB0aGUgb2JqZWN0IHJlc3VsdFxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ29tcGxldGUgcmVzdWx0LCBlbmNhcHN1bGF0ZWQgdmlhIHJvdW5kIGJyYWNrZXRzXG4gICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICcoJyArIHJlc3VsdC5qb2luKCcsICcpICsgJyknLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVlcGVyIHJlc3VsdCBwYXJ0LCBlbmNhcHN1bGF0ZWQgdmlhIGN1cmx5IGJyYWNrZXRzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICd7JyArIHJlc3VsdC5qb2luKCcsICcpICsgJ30nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhbmQgcHJvY2VzcyBvdGhlciAvIHVua25vd24gdmFsdWVzIGFzIEpTT05cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6IEpTT04uc3RyaW5naWZ5KGFyZ3MpLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGZpZWxkcyBmb3IgR3JhcGhRTCByZXF1ZXN0XG4gICAqL1xuICBwcm90ZWN0ZWQgcHJlcGFyZUZpZWxkcyhcbiAgICBmaWVsZHM6IGFueSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBhbGxvd2VkPzogYW55O1xuICAgICAgc2NoZW1hRmllbGRzPzogc3RyaW5nW107XG4gICAgICB1c2VkRmllbGRzPzogc3RyaW5nW107XG4gICAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgICBzcGFjZXM/OiBudW1iZXI7XG4gICAgICB0YWI/OiBudW1iZXI7XG4gICAgfSA9IHt9XG4gICk6IHsgc2NoZW1hRmllbGRzOiBzdHJpbmdbXTsgZmllbGRzU3RyaW5nOiBzdHJpbmc7IHVzZWRGaWVsZHM6IHN0cmluZ1tdIH0ge1xuICAgIC8vIENvbmZpZ1xuICAgIGNvbnN0IHsgYWxsb3dlZCwgcGFyZW50LCBzY2hlbWFGaWVsZHMsIHNwYWNlcywgdGFiLCB1c2VkRmllbGRzIH0gPSB7XG4gICAgICBhbGxvd2VkOiBudWxsLFxuICAgICAgcGFyZW50OiAnJyxcbiAgICAgIHNjaGVtYUZpZWxkczogW10sXG4gICAgICBzcGFjZXM6IDIsXG4gICAgICB0YWI6IDEsXG4gICAgICB1c2VkRmllbGRzOiBbXSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIEluaXQgZmllbGRzIHN0cmluZ1xuICAgIGxldCBmaWVsZHNTdHJpbmcgPSAnJztcblxuICAgIC8vIENoZWNrIGZpZWxkc1xuICAgIGlmICghZmllbGRzKSB7XG4gICAgICByZXR1cm4geyBmaWVsZHNTdHJpbmcsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBmaWVsZHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGFsbG93ZWQgJiZcbiAgICAgICAgKCh0eXBlb2YgYWxsb3dlZCA9PT0gJ3N0cmluZycgJiYgYWxsb3dlZCAhPT0gZmllbGRzKSB8fCAodHlwZW9mIGFsbG93ZWQgPT09ICdvYmplY3QnICYmICFhbGxvd2VkW2ZpZWxkc10pKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7IGZpZWxkc1N0cmluZywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBmaWVsZHNTdHJpbmc6ICdcXG4nICsgJyAnLnJlcGVhdChzcGFjZXMpLnJlcGVhdCh0YWIpICsgZmllbGRzLCBzY2hlbWFGaWVsZHMsIHVzZWRGaWVsZHMgfTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGFycmF5XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWVsZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmllbGRzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmaWVsZHNTdHJpbmcgPVxuICAgICAgICAgICAgZmllbGRzU3RyaW5nICtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUZpZWxkcyhpdGVtLCB7XG4gICAgICAgICAgICAgIGFsbG93ZWQsXG4gICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgc3BhY2VzLFxuICAgICAgICAgICAgICBzY2hlbWFGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYjogdGFiICsgMSxcbiAgICAgICAgICAgICAgdXNlZEZpZWxkcyxcbiAgICAgICAgICAgIH0pLmZpZWxkc1N0cmluZztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhcmVudCArIGl0ZW07XG4gICAgICAgIHNjaGVtYUZpZWxkcy5wdXNoKGN1cnJlbnRQYXRoKTtcbiAgICAgICAgaWYgKGFsbG93ZWQgJiYgIWFsbG93ZWQ/LltpdGVtXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHVzZWRGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGZpZWxkc1N0cmluZyA9XG4gICAgICAgICAgZmllbGRzU3RyaW5nICtcbiAgICAgICAgICB0aGlzLnByZXBhcmVGaWVsZHMoaXRlbSwge1xuICAgICAgICAgICAgYWxsb3dlZDpcbiAgICAgICAgICAgICAgdHlwZW9mIGFsbG93ZWQ/LltpdGVtXSA9PT0gJ29iamVjdCcgJiYgIShhbGxvd2VkPy5baXRlbV0gaW5zdGFuY2VvZiBHcmFwaFFMVHlwZSkgPyBhbGxvd2VkPy5baXRlbV0gOiBpdGVtLFxuICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50UGF0aCArICcuJyxcbiAgICAgICAgICAgIHNwYWNlcyxcbiAgICAgICAgICAgIHNjaGVtYUZpZWxkcyxcbiAgICAgICAgICAgIHRhYjogdGFiICsgMSxcbiAgICAgICAgICAgIHVzZWRGaWVsZHMsXG4gICAgICAgICAgfSkuZmllbGRzU3RyaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgb2JqZWN0XG4gICAgZWxzZSBpZiAodHlwZW9mIGZpZWxkcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcGFyZW50ICsga2V5O1xuICAgICAgICBzY2hlbWFGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkW2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB1c2VkRmllbGRzLnB1c2goY3VycmVudFBhdGgpO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKHZhbCkubGVuZ3RoKSB7XG4gICAgICAgICAgZmllbGRzU3RyaW5nID0gZmllbGRzU3RyaW5nICsgJ1xcbicgKyAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgKyBrZXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRzU3RyaW5nID1cbiAgICAgICAgICAgIGZpZWxkc1N0cmluZyArXG4gICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgK1xuICAgICAgICAgICAga2V5ICtcbiAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAneycgK1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRmllbGRzKHZhbCwge1xuICAgICAgICAgICAgICBhbGxvd2VkOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBhbGxvd2VkPy5ba2V5XSA9PT0gJ29iamVjdCcgJiYgIShhbGxvd2VkPy5ba2V5XSBpbnN0YW5jZW9mIEdyYXBoUUxUeXBlKSA/IGFsbG93ZWQ/LltrZXldIDoga2V5LFxuICAgICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRQYXRoICsgJy4nLFxuICAgICAgICAgICAgICBzcGFjZXMsXG4gICAgICAgICAgICAgIHNjaGVtYUZpZWxkcyxcbiAgICAgICAgICAgICAgdGFiOiB0YWIgKyAxLFxuICAgICAgICAgICAgICB1c2VkRmllbGRzLFxuICAgICAgICAgICAgfSkuZmllbGRzU3RyaW5nICtcbiAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArXG4gICAgICAgICAgICAnfSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gcmVzdWx0XG4gICAgcmV0dXJuIHsgZmllbGRzU3RyaW5nLCBzY2hlbWFGaWVsZHMsIHVzZWRGaWVsZHMgfTtcbiAgfVxufVxuIl19
|
|
441
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvc2VydmljZXMvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFHNUQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sY0FBYztJQUN6Qjs7T0FFRztJQUNILFlBQXNCLE1BQWMsRUFBWSxrQkFBc0M7UUFBaEUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFZLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7SUFBRyxDQUFDO0lBRTFGOztPQUVHO0lBQ0ksT0FBTyxDQUFDLE9BQWUsRUFBRSxVQUEyQixFQUFFO1FBQzNELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDeEM7UUFFRCxhQUFhO1FBQ2IsTUFBTSxNQUFNLEdBQUc7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLE1BQU0sRUFBRSxJQUFJO1lBQ1osR0FBRyxFQUFFLEtBQUs7WUFDVixLQUFLLEVBQUUsSUFBSTtZQUNYLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxLQUFLO1lBQzlCLEdBQUcsT0FBTztTQUNYLENBQUM7UUFFRix3Q0FBd0M7UUFDeEMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxT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QU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dDQUN2RyxNQUFNLEVBQUUsV0FBVyxHQUFHLEdBQUc7Z0NBQ3pCLE1BQU07Z0NBQ04sWUFBWTtnQ0FDWixHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0NBQ1osVUFBVTs2QkFDWCxDQUFDLENBQUMsWUFBWTs0QkFDZixJQUFJOzRCQUNKLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzs0QkFDOUIsR0FBRyxDQUFDO2lCQUNQO2FBQ0Y7U0FDRjtRQUVELGdCQUFnQjtRQUNoQixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNwRCxDQUFDOzsyR0F0Z0JVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcG9sbG8sIGdxbCB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElHcmFwaFFMT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3JhcGhxbC1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmFwaFFMUmVxdWVzdFR5cGUgfSBmcm9tICcuLi9lbnVtcy9ncmFwaHFsLXJlcXVlc3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdyYXBoUUxNZXRhU2VydmljZSB9IGZyb20gJy4vZ3JhcGhxbC1tZXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JhcGhRTEVudW0gfSBmcm9tICcuLi9jbGFzc2VzL2dyYXBocWwtZW51bS5jbGFzcyc7XG5pbXBvcnQgeyBHcmFwaFFMVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZ3JhcGhxbC10eXBlLmNsYXNzJztcbmltcG9ydCB7IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2dyYXBocWwtdHlwZS1jb2xsZWN0aW9uLmludGVyZmFjZSc7XG5cbi8qKlxuICogR3JhcGhRTCBzZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmFwaFFMU2VydmljZSB7XG4gIC8qKlxuICAgKiBJbmNsdWRlIHNlcnZpY2VzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXBvbGxvOiBBcG9sbG8sIHByb3RlY3RlZCBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSkge31cblxuICAvKipcbiAgICogR3JhcGhRTCByZXF1ZXN0XG4gICAqL1xuICBwdWJsaWMgZ3JhcGhRbChncmFwaHFsOiBzdHJpbmcsIG9wdGlvbnM6IElHcmFwaFFMT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyBDaGVjayBhcmd1bWVudHNcbiAgICBpZiAoIWdyYXBocWwpIHtcbiAgICAgIHRocm93RXJyb3IoJ01pc3NpbmcgZ3JhcGhxbCBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIC8vIEdldCBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBhcmd1bWVudHM6IG51bGwsXG4gICAgICBmaWVsZHM6IG51bGwsXG4gICAgICBsb2c6IGZhbHNlLFxuICAgICAgbW9kZWw6IG51bGwsXG4gICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuUVVFUlksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDb252ZXJ0IGNsYXNzIHRvIE9iamVjdCBmb3IgYXJndW1lbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcuYXJndW1lbnRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maWcuYXJndW1lbnRzID0gbmV3IGNvbmZpZy5hcmd1bWVudHMoKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IGNsYXNzIHRvIE9iamVjdCBmb3IgZmllbGRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcuZmllbGRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maWcuZmllbGRzID0gbmV3IGNvbmZpZy5maWVsZHMoKTtcbiAgICB9XG5cbiAgICAvLyBMb2dcbiAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgY29uc29sZS5sb2coeyBjb25maWcgfSk7XG4gICAgfVxuXG4gICAgLy8gU2VuZCByZXF1ZXN0XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAvLyBHZXQgbWV0YVxuICAgICAgdGhpcy5ncmFwaFFMTWV0YVNlcnZpY2UuZ2V0TWV0YSh7IGxvZzogY29uZmlnLmxvZyB9KS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWVsZHNcbiAgICAgICAgbGV0IGZpZWxkcztcbiAgICAgICAgbGV0IGFsbG93ZWRGaWVsZHM7XG5cbiAgICAgICAgLy8gTG9nIG1ldGFcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IG1ldGEgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLmZpZWxkcykge1xuICAgICAgICAgIGFsbG93ZWRGaWVsZHMgPSBtZXRhLmdldEZpZWxkcyhncmFwaHFsLCB7IHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuXG4gICAgICAgICAgLy8gTG9nIG1ldGFcbiAgICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBhbGxvd2VkRmllbGRzIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpZWxkc0RhdGEgPSB0aGlzLnByZXBhcmVGaWVsZHMoY29uZmlnLmZpZWxkcywge1xuICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZEZpZWxkcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIExvZyBmaWVsZHMgZGF0YVxuICAgICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgICBmaWVsZHNEYXRhLnVzZWRGaWVsZHMuc29ydCgpO1xuICAgICAgICAgICAgZmllbGRzRGF0YS5zY2hlbWFGaWVsZHMuc29ydCgpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWVsZHNEYXRhLnNjaGVtYUZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiAhZmllbGRzRGF0YS51c2VkRmllbGRzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgICBjb25zdCB1bnVzZWQgPSB0aGlzLmdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoYWxsb3dlZEZpZWxkcykuZmlsdGVyKFxuICAgICAgICAgICAgICAoZmllbGQpID0+ICFmaWVsZHNEYXRhLnVzZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBmaWVsZHNEYXRhLCBmaWx0ZXJlZCwgdW51c2VkIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkcyA9IGZpZWxkc0RhdGEuZmllbGRzU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkcyAmJiAhZmllbGRzLnN0YXJ0c1dpdGgoJ3snKSkge1xuICAgICAgICAgIGZpZWxkcyA9ICd7JyArIGZpZWxkcyArICdcXG59JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvZyBmaWVsZHNcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IGZpZWxkcyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCBhbGxvd2VkIGFyZ3NcbiAgICAgICAgY29uc3QgYWxsb3dlZEFyZ3MgPSBtZXRhLmdldEFyZ3MoZ3JhcGhxbCwgeyB0eXBlOiBjb25maWcudHlwZSB9KTtcblxuICAgICAgICAvLyBMb2cgYWxsb3dlZCBhcmdzXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBhbGxvd2VkQXJncyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3NEYXRhID0gdGhpcy5wcmVwYXJlQXJndW1lbnRzKGNvbmZpZy5hcmd1bWVudHMsIHtcbiAgICAgICAgICBhbGxvd2VkOiBhbGxvd2VkQXJncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTG9nIGFyZ3MgZGF0YVxuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGFyZ3NEYXRhLnVzZWRBcmdzLnNvcnQoKTtcbiAgICAgICAgICBhcmdzRGF0YS5zY2hlbWFBcmdzLnNvcnQoKTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGFyZ3NEYXRhLnNjaGVtYUFyZ3MuZmlsdGVyKChmaWVsZCkgPT4gIWFyZ3NEYXRhLnVzZWRBcmdzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgY29uc3QgdW51c2VkID0gdGhpcy5ncmFwaFFMVHlwZUNvbGxlY3Rpb25Ub1N0cmluZ0FycmF5KGFsbG93ZWRBcmdzKVxuICAgICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmllbGQpID0+ICFhcmdzRGF0YS51c2VkQXJncy5pbmNsdWRlcyhmaWVsZCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgYXJnc0RhdGEsIGZpbHRlcmVkLCB1bnVzZWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gYXJnc0RhdGE/LmFyZ3NTdHJpbmcgfHwgJyc7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBncmFwaFFMOiBncmFwaHFsLCBhcmdzLCBmaWVsZHMsIHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJlcGFyZSByZXF1ZXN0XG4gICAgICAgIGNvbnN0IGRvY3VtZW50Tm9kZSA9IGZpZWxkc1xuICAgICAgICAgID8gZ3FsKGNvbmZpZy50eXBlICsgJ3tcXG4nICsgZ3JhcGhxbCArIGFyZ3MgKyBmaWVsZHMgKyAnXFxufScpXG4gICAgICAgICAgOiBncWwoY29uZmlnLnR5cGUgKyAne1xcbicgKyBncmFwaHFsICsgYXJncyArICdcXG59Jyk7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBkb2N1bWVudE5vZGUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0OiBhbnkgPSB7fTtcbiAgICAgICAgcmVxdWVzdFtjb25maWcudHlwZV0gPSBkb2N1bWVudE5vZGU7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZ1bmM7XG4gICAgICAgIGlmIChjb25maWcudHlwZSA9PT0gR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OKSB7XG4gICAgICAgICAgZnVuYyA9ICdtdXRhdGUnO1xuICAgICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy50eXBlID09PSBHcmFwaFFMUmVxdWVzdFR5cGUuU1VCU0NSSVBUSU9OKSB7XG4gICAgICAgICAgZnVuYyA9ICdzdWJzY3JpYmUnO1xuICAgICAgICAgIHJlcXVlc3QucXVlcnkgPSBkb2N1bWVudE5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnVuYyA9IGNvbmZpZy50eXBlO1xuICAgICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMuYXBvbGxvIGFzIGFueSlbZnVuY10ocmVxdWVzdCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdD8uZGF0YT8uW2dyYXBocWxdICE9PSB1bmRlZmluZWQgPyByZXN1bHQuZGF0YVtncmFwaHFsXSA6IHJlc3VsdDtcblxuICAgICAgICAgICAgLy8gRGlyZWN0IGRhdGFcbiAgICAgICAgICAgIGlmICghY29uZmlnLm1vZGVsKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFwIGRhdGEgYXMgYXJyYXlcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KFxuICAgICAgICAgICAgICAgIGRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLm1vZGVsLm1hcChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNYXAgZGF0YVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjb25maWcubW9kZWwubWFwKGRhdGEpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpZy50eXBlICE9PSBHcmFwaFFMUmVxdWVzdFR5cGUuU1VCU0NSSVBUSU9OKSB7XG4gICAgICAgICAgICAgIC8vIERvbmVcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZHMgLyBhcmdzIGZyb20gSUdyYXBoUUxUeXBlQ29sbGVjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoXG4gICAgY29sbGVjdGlvbjogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbixcbiAgICBjdXJyZW50ID0gJycsXG4gICAgcmVzdWx0ID0gW10sXG4gICAgY2FjaGVOb2RlID0gW11cbiAgKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uIGluc3RhbmNlb2YgR3JhcGhRTFR5cGUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY3VycmVudD8uaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAgIGNhY2hlTm9kZS5wdXNoKGN1cnJlbnQuc3BsaXQoJy4nKVsxXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCkge1xuICAgICAgICAgIGNhY2hlTm9kZS5wdXNoKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgPT09IGtleSB8fCBjYWNoZU5vZGUuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3JhcGhRTFR5cGVDb2xsZWN0aW9uVG9TdHJpbmdBcnJheShcbiAgICAgICAgICAgIGNvbGxlY3Rpb25ba2V5XSBhcyBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uLFxuICAgICAgICAgICAgY3VycmVudCA/IGN1cnJlbnQgKyAnLicgKyBrZXkgOiBrZXksXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBjYWNoZU5vZGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBhcmd1bWVudHMgZm9yIEdyYXBoUUwgcmVxdWVzdFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXBhcmVBcmd1bWVudHMoXG4gICAgYXJnczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGFsbG93ZWQ/OiBhbnk7XG4gICAgICBsZXZlbD86IG51bWJlcjtcbiAgICAgIHBhcmVudD86IHN0cmluZztcbiAgICAgIHNjaGVtYUFyZ3M/OiBzdHJpbmdbXTtcbiAgICAgIHVzZWRBcmdzPzogc3RyaW5nW107XG4gICAgfSA9IHt9XG4gICk6IHsgYXJnc1N0cmluZzogc3RyaW5nOyBzY2hlbWFBcmdzOiBzdHJpbmdbXTsgdXNlZEFyZ3M6IHN0cmluZ1tdIH0ge1xuICAgIC8vIEluaXQgY29uZmlnIHZhcmlhYmxlc1xuICAgIGNvbnN0IHsgYWxsb3dlZCwgbGV2ZWwsIHBhcmVudCwgc2NoZW1hQXJncywgdXNlZEFyZ3MgfSA9IHtcbiAgICAgIGFsbG93ZWQ6IG51bGwsXG4gICAgICBsZXZlbDogMSxcbiAgICAgIHBhcmVudDogJycsXG4gICAgICBzY2hlbWFBcmdzOiBbXSxcbiAgICAgIHVzZWRBcmdzOiBbXSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGFyZ3NcbiAgICBpZiAoYXJncyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3MgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICcnLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgIH1cblxuICAgIC8vIEluaXQgYXJnc1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgLy8gUHJvY2VzcyBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICBjb25zdCBhbGxvd2VkS2V5cyA9IGFsbG93ZWQgPyBPYmplY3Qua2V5cyhhbGxvd2VkKSA6IG51bGw7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJncykge1xuICAgICAgICBsZXQga2V5ID0gbnVsbDtcbiAgICAgICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgICAgICBpZiAoYWxsb3dlZC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5ID0gYWxsb3dlZEtleXM/LnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIHZhbHVlXG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgIHRoaXMucHJlcGFyZUFyZ3VtZW50cyhpdGVtLCB7XG4gICAgICAgICAgICBhbGxvd2VkOiBrZXkgPyBhbGxvd2VkW2tleV0gOiBudWxsLFxuICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50ICsga2V5ICsgJy4nLFxuICAgICAgICAgICAgc2NoZW1hQXJncyxcbiAgICAgICAgICAgIHVzZWRBcmdzLFxuICAgICAgICAgIH0pLmFyZ3NTdHJpbmdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5jYXBzdWxhdGlvbiBvZiB0aGUgYXJyYXkgcmVzdWx0XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAvLyBDb21wbGV0ZSByZXN1bHQsIGVuY2Fwc3VsYXRlZCB2aWEgcm91bmQgYnJhY2tldHNcbiAgICAgICAgaWYgKGxldmVsID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJygnICsgcmVzdWx0LmpvaW4oJywgJykgKyAnKScsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWVwZXIgcmVzdWx0IHBhcnQsIGVuY2Fwc3VsYXRlZCB2aWEgc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICdbJyArIHJlc3VsdC5qb2luKCcsICcpICsgJ10nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBvYmplY3RcbiAgICBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIENoZWNrIG9iamVjdCBpcyBlbXB0eVxuICAgICAgaWYgKGFyZ3MgJiYgT2JqZWN0LmtleXMoYXJncykubGVuZ3RoID09PSAwICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihhcmdzKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAne30nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgfVxuICAgICAgLy8gUHJvY2VzcyBhbGwgb2JqZWN0IGVudHJpZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MpKSB7XG4gICAgICAgIC8vIEluaXQgZGF0YSBmb3IgY3VycmVudCBlbnRyeVxuICAgICAgICBjb25zdCBjdXJyZW50S2V5ID0gcGFyZW50ICsga2V5O1xuICAgICAgICBzY2hlbWFBcmdzLnB1c2goY3VycmVudEtleSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIGFsbG93ZWQga2V5IGhhbmRsaW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBjdXJyZW50IGtleSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZCBrZXlzLFxuICAgICAgICAvLyB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSBza2lwcGVkXG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkW2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNraXAgdmFsdWUgaWYgbm90IGV4aXN0c1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGN1cnJlbnQga2V5IHRvIG1ldGFkYXRhXG4gICAgICAgIHVzZWRBcmdzLnB1c2goY3VycmVudEtleSk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyBHcmFwaFFMRW51bVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBHcmFwaFFMRW51bSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSArICc6JyArIHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAgICc6IFsnICtcbiAgICAgICAgICAgICAgdmFsdWUubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQXJndW1lbnRzKGl0ZW0sIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZFtrZXldLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRLZXkgKyAnLicsXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYUFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIHVzZWRBcmdzLFxuICAgICAgICAgICAgICAgICAgfSkuYXJnc1N0cmluZ1xuICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgJ10nXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXBhcmUgYWRkaXRpb25hbCByZXN1bHQgc3RyaW5nXG4gICAgICAgIGxldCBhZGRpdGlvbmFsUmVzdWx0ID0ga2V5ICsgJzogJztcblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIGRhdGUgb2JqZWN0XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gYFwiXCJcIiR7KHZhbHVlIGFzIERhdGUpLnRvU3RyaW5nKCl9XCJcIlwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbHVlIGlzIGEgc3RyaW5nXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyBFbnVtIChkb2Vzbid0IG5lZWQgcXVvdGF0aW9uIG1hcmtzKVxuICAgICAgICAgIGlmIChhbGxvd2VkW2tleV0uaXNFbnVtKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFN0cmluZ1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSBgXCIke3ZhbHVlLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJyl9XCJgO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbHVlIGlzIGEgc2ltcGxlIGJvb2xlYW4gb3IgYSBudW1iZXJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcnNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSB0aGlzLnByZXBhcmVBcmd1bWVudHModmFsdWUsIHtcbiAgICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWRba2V5XSxcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRLZXkgKyAnLicsXG4gICAgICAgICAgICBzY2hlbWFBcmdzLFxuICAgICAgICAgICAgdXNlZEFyZ3MsXG4gICAgICAgICAgfSkuYXJnc1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFB1c2ggZGVlcGVyIHBhcnQgaW50byByZXN1bHQgYXJyYXlcbiAgICAgICAgcmVzdWx0LnB1c2goYWRkaXRpb25hbFJlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuY2Fwc3VsYXRpb24gb2YgdGhlIG9iamVjdCByZXN1bHRcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgIC8vIENvbXBsZXRlIHJlc3VsdCwgZW5jYXBzdWxhdGVkIHZpYSByb3VuZCBicmFja2V0c1xuICAgICAgICBpZiAobGV2ZWwgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAnKCcgKyByZXN1bHQuam9pbignLCAnKSArICcpJywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZXBlciByZXN1bHQgcGFydCwgZW5jYXBzdWxhdGVkIHZpYSBjdXJseSBicmFja2V0c1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAneycgKyByZXN1bHQuam9pbignLCAnKSArICd9Jywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYW5kIHByb2Nlc3Mgb3RoZXIgLyB1bmtub3duIHZhbHVlcyBhcyBKU09OXG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiBKU09OLnN0cmluZ2lmeShhcmdzKSwgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBmaWVsZHMgZm9yIEdyYXBoUUwgcmVxdWVzdFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXBhcmVGaWVsZHMoXG4gICAgZmllbGRzOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgYWxsb3dlZD86IGFueTtcbiAgICAgIHNjaGVtYUZpZWxkcz86IHN0cmluZ1tdO1xuICAgICAgdXNlZEZpZWxkcz86IHN0cmluZ1tdO1xuICAgICAgcGFyZW50Pzogc3RyaW5nO1xuICAgICAgc3BhY2VzPzogbnVtYmVyO1xuICAgICAgdGFiPzogbnVtYmVyO1xuICAgIH0gPSB7fVxuICApOiB7IHNjaGVtYUZpZWxkczogc3RyaW5nW107IGZpZWxkc1N0cmluZzogc3RyaW5nOyB1c2VkRmllbGRzOiBzdHJpbmdbXSB9IHtcbiAgICAvLyBDb25maWdcbiAgICBjb25zdCB7IGFsbG93ZWQsIHBhcmVudCwgc2NoZW1hRmllbGRzLCBzcGFjZXMsIHRhYiwgdXNlZEZpZWxkcyB9ID0ge1xuICAgICAgYWxsb3dlZDogbnVsbCxcbiAgICAgIHBhcmVudDogJycsXG4gICAgICBzY2hlbWFGaWVsZHM6IFtdLFxuICAgICAgc3BhY2VzOiAyLFxuICAgICAgdGFiOiAxLFxuICAgICAgdXNlZEZpZWxkczogW10sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBJbml0IGZpZWxkcyBzdHJpbmdcbiAgICBsZXQgZmllbGRzU3RyaW5nID0gJyc7XG5cbiAgICAvLyBDaGVjayBmaWVsZHNcbiAgICBpZiAoIWZpZWxkcykge1xuICAgICAgcmV0dXJuIHsgZmllbGRzU3RyaW5nLCBzY2hlbWFGaWVsZHMsIHVzZWRGaWVsZHMgfTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgZmllbGRzID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKFxuICAgICAgICBhbGxvd2VkICYmXG4gICAgICAgICgodHlwZW9mIGFsbG93ZWQgPT09ICdzdHJpbmcnICYmIGFsbG93ZWQgIT09IGZpZWxkcykgfHwgKHR5cGVvZiBhbGxvd2VkID09PSAnb2JqZWN0JyAmJiAhYWxsb3dlZFtmaWVsZHNdKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4geyBmaWVsZHNTdHJpbmcsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZmllbGRzU3RyaW5nOiAnXFxuJyArICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArIGZpZWxkcywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBhcnJheVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRzKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpZWxkcykge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZmllbGRzU3RyaW5nID1cbiAgICAgICAgICAgIGZpZWxkc1N0cmluZyArXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVGaWVsZHMoaXRlbSwge1xuICAgICAgICAgICAgICBhbGxvd2VkLFxuICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgIHNwYWNlcyxcbiAgICAgICAgICAgICAgc2NoZW1hRmllbGRzLFxuICAgICAgICAgICAgICB0YWI6IHRhYiArIDEsXG4gICAgICAgICAgICAgIHVzZWRGaWVsZHMsXG4gICAgICAgICAgICB9KS5maWVsZHNTdHJpbmc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSBwYXJlbnQgKyBpdGVtO1xuICAgICAgICBzY2hlbWFGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkPy5baXRlbV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB1c2VkRmllbGRzLnB1c2goY3VycmVudFBhdGgpO1xuICAgICAgICBmaWVsZHNTdHJpbmcgPVxuICAgICAgICAgIGZpZWxkc1N0cmluZyArXG4gICAgICAgICAgdGhpcy5wcmVwYXJlRmllbGRzKGl0ZW0sIHtcbiAgICAgICAgICAgIGFsbG93ZWQ6XG4gICAgICAgICAgICAgIHR5cGVvZiBhbGxvd2VkPy5baXRlbV0gPT09ICdvYmplY3QnICYmICEoYWxsb3dlZD8uW2l0ZW1dIGluc3RhbmNlb2YgR3JhcGhRTFR5cGUpID8gYWxsb3dlZD8uW2l0ZW1dIDogaXRlbSxcbiAgICAgICAgICAgIHBhcmVudDogY3VycmVudFBhdGggKyAnLicsXG4gICAgICAgICAgICBzcGFjZXMsXG4gICAgICAgICAgICBzY2hlbWFGaWVsZHMsXG4gICAgICAgICAgICB0YWI6IHRhYiArIDEsXG4gICAgICAgICAgICB1c2VkRmllbGRzLFxuICAgICAgICAgIH0pLmZpZWxkc1N0cmluZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIG9iamVjdFxuICAgIGVsc2UgaWYgKHR5cGVvZiBmaWVsZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhcmVudCArIGtleTtcbiAgICAgICAgc2NoZW1hRmllbGRzLnB1c2goY3VycmVudFBhdGgpO1xuICAgICAgICBpZiAoYWxsb3dlZCAmJiAhYWxsb3dlZFtrZXldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdXNlZEZpZWxkcy5wdXNoKGN1cnJlbnRQYXRoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCkge1xuICAgICAgICAgIGZpZWxkc1N0cmluZyA9IGZpZWxkc1N0cmluZyArICdcXG4nICsgJyAnLnJlcGVhdChzcGFjZXMpLnJlcGVhdCh0YWIpICsga2V5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkc1N0cmluZyA9XG4gICAgICAgICAgICBmaWVsZHNTdHJpbmcgK1xuICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgJyAnLnJlcGVhdChzcGFjZXMpLnJlcGVhdCh0YWIpICtcbiAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgJ3snICtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUZpZWxkcyh2YWwsIHtcbiAgICAgICAgICAgICAgYWxsb3dlZDpcbiAgICAgICAgICAgICAgICB0eXBlb2YgYWxsb3dlZD8uW2tleV0gPT09ICdvYmplY3QnICYmICEoYWxsb3dlZD8uW2tleV0gaW5zdGFuY2VvZiBHcmFwaFFMVHlwZSkgPyBhbGxvd2VkPy5ba2V5XSA6IGtleSxcbiAgICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50UGF0aCArICcuJyxcbiAgICAgICAgICAgICAgc3BhY2VzLFxuICAgICAgICAgICAgICBzY2hlbWFGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYjogdGFiICsgMSxcbiAgICAgICAgICAgICAgdXNlZEZpZWxkcyxcbiAgICAgICAgICAgIH0pLmZpZWxkc1N0cmluZyArXG4gICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgK1xuICAgICAgICAgICAgJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHJlc3VsdFxuICAgIHJldHVybiB7IGZpZWxkc1N0cmluZywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -225,6 +225,7 @@ class TagsComponent {
|
|
|
225
225
|
* @param tag
|
|
226
226
|
*/
|
|
227
227
|
addTag(tag) {
|
|
228
|
+
var _a;
|
|
228
229
|
if (!this.control.value) {
|
|
229
230
|
this.control.setValue([]);
|
|
230
231
|
}
|
|
@@ -235,6 +236,12 @@ class TagsComponent {
|
|
|
235
236
|
if (!this.custom && !this.options.find((e) => e === tag)) {
|
|
236
237
|
return;
|
|
237
238
|
}
|
|
239
|
+
if (((_a = this.control.value) === null || _a === void 0 ? void 0 : _a.length) === 0) {
|
|
240
|
+
this.control.setValue([tag]);
|
|
241
|
+
this.inputValue = '';
|
|
242
|
+
this.control.setErrors(null);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
238
245
|
if (tag.length > 0 && this.control.value && !this.control.value.some((item) => item === tag)) {
|
|
239
246
|
this.control.value.push(tag);
|
|
240
247
|
this.inputValue = '';
|
|
@@ -261,35 +268,32 @@ class TagsComponent {
|
|
|
261
268
|
/**
|
|
262
269
|
* Filter options for drop down
|
|
263
270
|
*/
|
|
264
|
-
|
|
271
|
+
filterOptions() {
|
|
265
272
|
return this.options
|
|
266
273
|
? this.options.filter((e) => (e === null || e === void 0 ? void 0 : e.includes(this.inputValue)) && !this.control.value.includes(e))
|
|
267
274
|
: [];
|
|
268
275
|
}
|
|
269
276
|
/**
|
|
270
|
-
* Show
|
|
277
|
+
* Show dropdown focus
|
|
271
278
|
*
|
|
272
279
|
* @param event
|
|
273
280
|
*/
|
|
274
281
|
onFocus(event) {
|
|
275
|
-
if (!this.options) {
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
282
|
if (event) {
|
|
279
283
|
this.selectedElement = event.target;
|
|
280
284
|
}
|
|
281
285
|
else {
|
|
282
286
|
setTimeout(() => {
|
|
283
287
|
this.selectedElement = null;
|
|
284
|
-
},
|
|
288
|
+
}, 250);
|
|
285
289
|
}
|
|
286
290
|
}
|
|
287
291
|
}
|
|
288
292
|
TagsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: TagsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
289
|
-
TagsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: TagsComponent, selector: "base-tags", inputs: { id: "id", name: "name", label: "label", placeholder: "placeholder", autocomplete: "autocomplete", tabIndex: "tabIndex", control: "control", options: "options", custom: "custom", removeByKey: "removeByKey", required: "required" }, ngImport: i0, template: "<div class=\"form-group
|
|
293
|
+
TagsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: TagsComponent, selector: "base-tags", inputs: { id: "id", name: "name", label: "label", placeholder: "placeholder", autocomplete: "autocomplete", tabIndex: "tabIndex", control: "control", options: "options", custom: "custom", removeByKey: "removeByKey", required: "required" }, ngImport: i0, template: "<div class=\"form-group position-relative\" *ngIf=\"control\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n\n <div class=\"tag-wrapper\" *ngIf=\"control?.value\">\n <div class=\"tag\" *ngFor=\"let tag of control?.value\">\n {{ tag }}\n <span (click)=\"removeTag(tag)\"><i class=\"bi bi-x-circle\"></i></span>\n </div>\n </div>\n <input\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n [(ngModel)]=\"inputValue\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n type=\"text\"\n class=\"form-control\"\n (keyup)=\"enterKey($event)\"\n />\n\n <div class=\"tag-options\" *ngIf=\"options && selectedElement\">\n <div class=\"tag-option-item\" *ngFor=\"let option of filterOptions()\" (click)=\"addTag(option)\">{{ option }}</div>\n </div>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n", styles: [".tag-options{position:absolute;display:block;top:100%;left:0;right:0;border-top:0;background-color:#fff;box-shadow:0 2px 5px #00000029,0 2px 10px #0000001f;transition:all .5s}.tag-options .tag-option-item{padding:10px;cursor:pointer}.tag-options .tag-option-item:hover{color:var(--bs-primary)}.tag-wrapper{display:flex;flex-direction:row;justify-content:flex-start;column-gap:10px;row-gap:10px;flex-wrap:wrap;margin-bottom:10px;position:relative}.tag-wrapper .tag{background-color:var(--bs-light);color:var(--bs-dark);padding:10px 15px;font-style:normal;font-weight:300;font-size:14px;line-height:140%}.tag-wrapper .tag span{margin-left:20px;cursor:pointer}.tag-wrapper .tag span .bi{color:var(--bs-black)}.tag-wrapper .tag span .bi:before{vertical-align:-.175em}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
290
294
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: TagsComponent, decorators: [{
|
|
291
295
|
type: Component,
|
|
292
|
-
args: [{ selector: 'base-tags', template: "<div class=\"form-group
|
|
296
|
+
args: [{ selector: 'base-tags', template: "<div class=\"form-group position-relative\" *ngIf=\"control\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n\n <div class=\"tag-wrapper\" *ngIf=\"control?.value\">\n <div class=\"tag\" *ngFor=\"let tag of control?.value\">\n {{ tag }}\n <span (click)=\"removeTag(tag)\"><i class=\"bi bi-x-circle\"></i></span>\n </div>\n </div>\n <input\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n [(ngModel)]=\"inputValue\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n type=\"text\"\n class=\"form-control\"\n (keyup)=\"enterKey($event)\"\n />\n\n <div class=\"tag-options\" *ngIf=\"options && selectedElement\">\n <div class=\"tag-option-item\" *ngFor=\"let option of filterOptions()\" (click)=\"addTag(option)\">{{ option }}</div>\n </div>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n", styles: [".tag-options{position:absolute;display:block;top:100%;left:0;right:0;border-top:0;background-color:#fff;box-shadow:0 2px 5px #00000029,0 2px 10px #0000001f;transition:all .5s}.tag-options .tag-option-item{padding:10px;cursor:pointer}.tag-options .tag-option-item:hover{color:var(--bs-primary)}.tag-wrapper{display:flex;flex-direction:row;justify-content:flex-start;column-gap:10px;row-gap:10px;flex-wrap:wrap;margin-bottom:10px;position:relative}.tag-wrapper .tag{background-color:var(--bs-light);color:var(--bs-dark);padding:10px 15px;font-style:normal;font-weight:300;font-size:14px;line-height:140%}.tag-wrapper .tag span{margin-left:20px;cursor:pointer}.tag-wrapper .tag span .bi{color:var(--bs-black)}.tag-wrapper .tag span .bi:before{vertical-align:-.175em}\n"] }]
|
|
293
297
|
}], propDecorators: { id: [{
|
|
294
298
|
type: Input
|
|
295
299
|
}], name: [{
|