UNPKG

@sedeh/into-pipes

Version:

Have you ever wanted to transform data in different parts of your application into interactive objects without writing a single line of code?

117 lines 16.1 kB
import { Component, Output, EventEmitter, ViewChild } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class SelectComponent { constructor(renderer) { this.renderer = renderer; this.multiselect = false; this.editMode = false; this.locked = false; this.disabled = false; this.active = true; this.validate = (item, newValue) => true; this.onIntoComponentChange = new EventEmitter(); } getOptions(options) { const list = []; for (let i = 0; i < options.length; i++) { list.push(options[i].label); } return list; } change(event) { event.stopPropagation(); event.preventDefault(); const options = this.multiselect ? this.getOptions(event.target.selectedOptions) : event.target.value; if (!this.disabled && this.validate(this.data, options)) { this.source = options; this.original = this.source; this.editMode = false; this.onIntoComponentChange.emit({ id: this.id, name: this.name, value: options, type: 'change', item: this.data }); } else { this.source = this.original; this.editMode = false; event.target.value = this.source; } } handleEdit(event) { const code = event.which; event.stopPropagation(); event.preventDefault(); if (!this.disabled && ((code === 13) || (code === 9))) { event.target.click(); } } clickName(event) { event.stopPropagation(); event.preventDefault(); if (!this.disabled) { this.editMode = true; } } static settingsPatterns() { return ['select:false:false', 'select:false:true', 'select:true:false', 'select:true:true']; //multi, locked by default } transform(source, data, args) { this.original = source; this.source = source; this.data = data; this.options = this.service.getDataFor(this.name, this.id, data); this.multiselect = (args?.length && args[0].length) ? (args[0] === 'true') : false; this.locked = (args?.length > 1 && args[1].length) ? args[1] === 'true' : false; } } SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SelectComponent, selector: "select-component", outputs: { onIntoComponentChange: "onIntoComponentChange" }, viewQueries: [{ propertyName: "selectEditor", first: true, predicate: ["selectEditor"], descendants: true }], ngImport: i0, template: ` <select *ngIf="locked || editMode" tabindex="{{active ? 0 : -1}}" [multiple]="multiselect ? true:null" [disabled]="disabled" (change)="change($event)"> <option *ngFor="let x of options" [attr.selected]="source.indexOf(x) < 0 ? null : 'selected'" [value]="x" [textContent]="x"></option> </select> <span *ngIf="!locked && !editMode" class="locked {{disabled ? 'disabled' : ''}}" tabindex="{{active ? 0 : -1}}" (keyup)='handleEdit($event)' (click)="clickName($event)">{{source}}</span> `, isInline: true, styles: [".locked{display:inline-block;cursor:pointer;min-width:30px;width:100%;-webkit-user-select:none;user-select:none;border:1px solid transparent}:host{width:100%;display:table;float:left;min-height:var(--sedeh-min-height, 25px)}:host .locked:hover{border:var(--sedeh-solid-border, 1px solid #fabdab)}:host .locked.disabled:hover{border-color:transparent;cursor:default}@media print{:host select{border:0}:host select::-ms-expand{display:none}:host select{appearance:none;text-indent:.01px;text-indent:1px;text-overflow:\"\"}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectComponent, decorators: [{ type: Component, args: [{ selector: 'select-component', template: ` <select *ngIf="locked || editMode" tabindex="{{active ? 0 : -1}}" [multiple]="multiselect ? true:null" [disabled]="disabled" (change)="change($event)"> <option *ngFor="let x of options" [attr.selected]="source.indexOf(x) < 0 ? null : 'selected'" [value]="x" [textContent]="x"></option> </select> <span *ngIf="!locked && !editMode" class="locked {{disabled ? 'disabled' : ''}}" tabindex="{{active ? 0 : -1}}" (keyup)='handleEdit($event)' (click)="clickName($event)">{{source}}</span> `, styles: [".locked{display:inline-block;cursor:pointer;min-width:30px;width:100%;-webkit-user-select:none;user-select:none;border:1px solid transparent}:host{width:100%;display:table;float:left;min-height:var(--sedeh-min-height, 25px)}:host .locked:hover{border:var(--sedeh-solid-border, 1px solid #fabdab)}:host .locked.disabled:hover{border-color:transparent;cursor:default}@media print{:host select{border:0}:host select::-ms-expand{display:none}:host select{appearance:none;text-indent:.01px;text-indent:1px;text-overflow:\"\"}}\n"] }] }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { selectEditor: [{ type: ViewChild, args: ["selectEditor"] }], onIntoComponentChange: [{ type: Output, args: ["onIntoComponentChange"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludG8tcGlwZXMvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDOzs7QUF5RHRGLE1BQU0sT0FBTyxlQUFlO0lBc0IxQixZQUFvQixRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBZHZDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVmLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLGFBQVEsR0FBRyxDQUFDLElBQVMsRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztRQU05QywwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRzNDLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBWTtRQUM3QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxNQUFNLENBQUMsS0FBVTtRQUNmLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUV0RyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzlCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ2hCLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNuQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVU7UUFDbEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsZ0JBQWdCO1FBQ3JCLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsMEJBQTBCO0lBQ3pILENBQUM7SUFDRCxTQUFTLENBQUMsTUFBVyxFQUFFLElBQVMsRUFBRSxJQUFXO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUUsTUFBTSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNuRixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDbEYsQ0FBQzs7NkdBcEZVLGVBQWU7aUdBQWYsZUFBZSxtT0FwRGQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUJUOzRGQW1DUSxlQUFlO2tCQXREM0IsU0FBUzsrQkFDSSxrQkFBa0IsWUFDbEI7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUJUO2dHQW9ESCxZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYztnQkFJekIscUJBQXFCO3NCQURwQixNQUFNO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBpcGVDb21wb25lbnRJbnRlcmZhY2UsIFBpcGVTZXJ2aWNlQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vY29tbW9uL3BpcGUuY29tcG9uZW50LmludGVyZmFjZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc2VsZWN0LWNvbXBvbmVudCcsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNlbGVjdCBcclxuICAgICAgKm5nSWY9XCJsb2NrZWQgfHwgZWRpdE1vZGVcIlxyXG4gICAgICB0YWJpbmRleD1cInt7YWN0aXZlID8gMCA6IC0xfX1cIiBcclxuICAgICAgW211bHRpcGxlXT1cIm11bHRpc2VsZWN0ID8gdHJ1ZTpudWxsXCIgXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB4IG9mIG9wdGlvbnNcIiBcclxuICAgICAgICAgIFthdHRyLnNlbGVjdGVkXT1cInNvdXJjZS5pbmRleE9mKHgpIDwgMCA/IG51bGwgOiAnc2VsZWN0ZWQnXCIgIFxyXG4gICAgICAgICAgW3ZhbHVlXT1cInhcIiBcclxuICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJ4XCI+PC9vcHRpb24+XHJcbiAgICA8L3NlbGVjdD5cclxuICAgIDxzcGFuICpuZ0lmPVwiIWxvY2tlZCAmJiAhZWRpdE1vZGVcIlxyXG4gICAgICBjbGFzcz1cImxvY2tlZCB7e2Rpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnfX1cIiBcclxuICAgICAgdGFiaW5kZXg9XCJ7e2FjdGl2ZSA/IDAgOiAtMX19XCJcclxuICAgICAgKGtleXVwKT0naGFuZGxlRWRpdCgkZXZlbnQpJ1xyXG4gICAgICAoY2xpY2spPVwiY2xpY2tOYW1lKCRldmVudClcIj57e3NvdXJjZX19PC9zcGFuPlxyXG4gICAgYCxcclxuICAgIHN0eWxlczogW1xyXG4gICAgICBgXHJcbiAgICAgIC5sb2NrZWQge1xyXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgbWluLXdpZHRoOiAzMHB4O1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7ICAgICAgIFxyXG4gICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIDpob3N0IHt3aWR0aDogMTAwJTtkaXNwbGF5OnRhYmxlO2Zsb2F0OmxlZnQ7bWluLWhlaWdodDogdmFyKC0tc2VkZWgtbWluLWhlaWdodCwgMjVweCl9XHJcbiAgICAgIDpob3N0IC5sb2NrZWQ6aG92ZXJ7Ym9yZGVyOiB2YXIoLS1zZWRlaC1zb2xpZC1ib3JkZXIsIDFweCBzb2xpZCAjZmFiZGFiKTt9XHJcbiAgICAgIDpob3N0IC5sb2NrZWQuZGlzYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtjdXJzb3I6IGRlZmF1bHQ7fVxyXG4gICAgICBAbWVkaWEgcHJpbnQge1xyXG4gICAgICAgIDpob3N0IHNlbGVjdCB7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgOmhvc3Qgc2VsZWN0OjotbXMtZXhwYW5kIHtkaXNwbGF5OiBub25lO31cclxuICAgICAgICA6aG9zdCBzZWxlY3Qge1xyXG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xyXG4gICAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xyXG4gICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcclxuICAgICAgICAgIHRleHQtaW5kZW50OiAwLjAxcHg7XHJcbiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBcIlwiO1xyXG4gICAgICAgICAgdGV4dC1pbmRlbnQ6IDFweDtcclxuICAgICAgICAgIHRleHQtb3ZlcmZsb3c6ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBgXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBQaXBlQ29tcG9uZW50SW50ZXJmYWNlIHtcclxuXHJcbiAgZGF0YTogYW55O1xyXG4gIHNvdXJjZSE6IHN0cmluZztcclxuICBvcHRpb25zITogc3RyaW5nO1xyXG4gIG9yaWdpbmFsITogc3RyaW5nO1xyXG4gIGlkITogc3RyaW5nO1xyXG4gIG5hbWUhOiBzdHJpbmc7XHJcbiAgbXVsdGlzZWxlY3QgPSBmYWxzZTtcclxuICBlZGl0TW9kZSA9IGZhbHNlO1xyXG4gIGxvY2tlZCA9IGZhbHNlO1xyXG4gIHNlcnZpY2UhOiBQaXBlU2VydmljZUNvbXBvbmVudEludGVyZmFjZTtcclxuICBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIGFjdGl2ZSA9IHRydWU7XHJcbiAgdmFsaWRhdGUgPSAoaXRlbTogYW55LCBuZXdWYWx1ZTogYW55KSA9PiB0cnVlO1xyXG5cclxuICBAVmlld0NoaWxkKFwic2VsZWN0RWRpdG9yXCIpXHJcbiAgc2VsZWN0RWRpdG9yOiBhbnk7XHJcbiAgXHJcbiAgQE91dHB1dChcIm9uSW50b0NvbXBvbmVudENoYW5nZVwiKVxyXG4gIG9uSW50b0NvbXBvbmVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE9wdGlvbnMob3B0aW9uczogYW55KSB7XHJcbiAgICBjb25zdCBsaXN0ID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGlzdC5wdXNoKG9wdGlvbnNbaV0ubGFiZWwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpc3Q7XHJcbiAgfVxyXG4gIGNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5tdWx0aXNlbGVjdCA/IHRoaXMuZ2V0T3B0aW9ucyhldmVudC50YXJnZXQuc2VsZWN0ZWRPcHRpb25zKSA6IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy52YWxpZGF0ZSh0aGlzLmRhdGEsIG9wdGlvbnMpKSB7XHJcbiAgICAgIHRoaXMuc291cmNlID0gb3B0aW9ucztcclxuICAgICAgdGhpcy5vcmlnaW5hbCA9IHRoaXMuc291cmNlO1xyXG4gICAgICB0aGlzLmVkaXRNb2RlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMub25JbnRvQ29tcG9uZW50Q2hhbmdlLmVtaXQoe1xyXG4gICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICB2YWx1ZTogb3B0aW9ucyxcclxuICAgICAgICB0eXBlOiAnY2hhbmdlJyxcclxuICAgICAgICBpdGVtOiB0aGlzLmRhdGFcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNvdXJjZSA9IHRoaXMub3JpZ2luYWw7XHJcbiAgICAgIHRoaXMuZWRpdE1vZGUgPSBmYWxzZTtcclxuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdGhpcy5zb3VyY2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFZGl0KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGNvZGUgPSBldmVudC53aGljaDtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICBpZighdGhpcy5kaXNhYmxlZCAmJiAoKGNvZGUgPT09IDEzKSB8fCAoY29kZSA9PT0gOSkpKSB7XHJcbiAgICAgIGV2ZW50LnRhcmdldC5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpY2tOYW1lKGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5lZGl0TW9kZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0dGluZ3NQYXR0ZXJucygpIHtcclxuICAgIHJldHVybiBbJ3NlbGVjdDpmYWxzZTpmYWxzZScsICdzZWxlY3Q6ZmFsc2U6dHJ1ZScsICdzZWxlY3Q6dHJ1ZTpmYWxzZScsICdzZWxlY3Q6dHJ1ZTp0cnVlJ107IC8vbXVsdGksIGxvY2tlZCBieSBkZWZhdWx0XHJcbiAgfVxyXG4gIHRyYW5zZm9ybShzb3VyY2U6IGFueSwgZGF0YTogYW55LCBhcmdzOiBhbnlbXSkge1xyXG4gICAgdGhpcy5vcmlnaW5hbCA9IHNvdXJjZTtcclxuICAgIHRoaXMuc291cmNlPSBzb3VyY2U7XHJcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5zZXJ2aWNlLmdldERhdGFGb3IodGhpcy5uYW1lLCB0aGlzLmlkLCBkYXRhKTtcclxuICAgIHRoaXMubXVsdGlzZWxlY3QgPSAoYXJncz8ubGVuZ3RoICYmIGFyZ3NbMF0ubGVuZ3RoKSA/IChhcmdzWzBdID09PSAndHJ1ZScpIDogZmFsc2U7XHJcbiAgICB0aGlzLmxvY2tlZCA9IChhcmdzPy5sZW5ndGggPiAxICYmIGFyZ3NbMV0ubGVuZ3RoKSA/IGFyZ3NbMV0gPT09ICd0cnVlJyA6IGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuIl19