UNPKG

ng-devui

Version:

DevUI components based on Angular

195 lines 22 kB
import { ContentChildren, Directive, EventEmitter, HostBinding, Input, Optional, Output, QueryList, Self } from '@angular/core'; import { ControlContainer } from '@angular/forms'; import { filter, startWith, take } from 'rxjs/operators'; import { DFormControlRuleDirective, DFormGroupRuleDirective } from './validator-directive/form-control-rules.directive'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "./validator-directive/form-control-rules.directive"; export var FormLayout; (function (FormLayout) { FormLayout["Horizontal"] = "horizontal"; FormLayout["Vertical"] = "vertical"; FormLayout["Columns"] = "columns"; })(FormLayout || (FormLayout = {})); export class FormDirective { get layoutHorizontal() { return this.layout === FormLayout.Horizontal; } get layoutVertical() { return this.layout === FormLayout.Vertical; } get layoutColumns() { return this.layout === FormLayout.Columns; } get labelSizeLg() { return this.labelSize === 'lg'; } get labelSizeSm() { return this.labelSize === 'sm'; } get labelAlignStart() { return this.labelAlign === 'start'; } get labelAlignCenter() { return this.labelAlign === 'center'; } get labelAlignEnd() { return this.labelAlign === 'end'; } updateOnSubmit($event, data) { this._operateAllControl(this._cd.control, (cd) => { cd.markAsDirty(); cd.updateValueAndValidity(); }); /* emit event should after validate */ this._cd.control.statusChanges .pipe(startWith(this._cd.control.status), filter((status) => { return status !== 'PENDING'; }), take(1)) .subscribe(() => { if (this._cd) { this._cd.onSubmit($event); // TODO: 需触发原生form表单的submit方法 if (this._dValidateRuleDir) { this.dSubmit.emit({ valid: this._dValidateRuleDir.isReady, directive: this._dValidateRuleDir, data: data, errors: this._getAllErrors(this._cd.control) }); } else { this.dSubmit.emit({ valid: this._cd.valid, directive: this._cd, data: data, errors: this._getAllErrors(this._cd.control) }); } } if (this.childrenCtrDirs) { for (const validateDir of this.childrenCtrDirs) { if (validateDir.invalid && validateDir.showType === 'popover') { validateDir.showPopMessage(); // TODO: 表单类组件需要实现focus方法,若无focus,将无法正常blur break; } } } }); } updateOnReset() { if (this._cd) { this._cd.onReset(); // TODO: 需触发原生form表单的reset方法 } this._operateAllControl(this._cd.control, (cd) => { cd.markAsPristine(); cd.updateValueAndValidity(); }); } _operateAllControl(control, operatorFn) { if (control) { operatorFn(control); const controls = control.controls; if (controls) { for (const key of Object.keys(controls)) { this._operateAllControl(controls[key], operatorFn); } } } } _getAllErrors(control) { const res = {}; if (control) { res.errors = control.errors; const controls = control.controls; if (controls) { for (const key of Object.keys(controls)) { res[key] = this._getAllErrors(controls[key]); } } } return res; } constructor(cd, dValidateRuleDir) { this.layout = FormLayout.Horizontal; this.labelSize = ''; this.labelAlign = 'start'; this.dHasFeedback = false; this.dSubmit = new EventEmitter(); this._cd = cd; this._dValidateRuleDir = dValidateRuleDir; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDirective, deps: [{ token: i1.ControlContainer, optional: true, self: true }, { token: i2.DFormGroupRuleDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: FormDirective, selector: "[dForm]", inputs: { layout: "layout", labelSize: "labelSize", labelAlign: "labelAlign", dFeedbackType: "dFeedbackType", dHasFeedback: "dHasFeedback" }, outputs: { dSubmit: "dSubmit" }, host: { properties: { "class.devui-form-horizontal": "this.layoutHorizontal", "class.devui-form-vertical": "this.layoutVertical", "class.devui-form-columns": "this.layoutColumns", "class.devui-form-lg": "this.labelSizeLg", "class.devui-form-sm": "this.labelSizeSm", "class.devui-form-label-align-start": "this.labelAlignStart", "class.devui-form-label-align-center": "this.labelAlignCenter", "class.devui-form-label-align-end": "this.labelAlignEnd" } }, queries: [{ propertyName: "childrenCtrDirs", predicate: DFormControlRuleDirective, descendants: true }], exportAs: ["dForm"], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDirective, decorators: [{ type: Directive, args: [{ selector: '[dForm]', exportAs: 'dForm', }] }], ctorParameters: () => [{ type: i1.ControlContainer, decorators: [{ type: Optional }, { type: Self }] }, { type: i2.DFormGroupRuleDirective, decorators: [{ type: Optional }, { type: Self }] }], propDecorators: { layout: [{ type: Input }], labelSize: [{ type: Input }], labelAlign: [{ type: Input }], dFeedbackType: [{ type: Input }], dHasFeedback: [{ type: Input }], dSubmit: [{ type: Output }], childrenCtrDirs: [{ type: ContentChildren, args: [DFormControlRuleDirective, { descendants: true }] }], layoutHorizontal: [{ type: HostBinding, args: ['class.devui-form-horizontal'] }], layoutVertical: [{ type: HostBinding, args: ['class.devui-form-vertical'] }], layoutColumns: [{ type: HostBinding, args: ['class.devui-form-columns'] }], labelSizeLg: [{ type: HostBinding, args: ['class.devui-form-lg'] }], labelSizeSm: [{ type: HostBinding, args: ['class.devui-form-sm'] }], labelAlignStart: [{ type: HostBinding, args: ['class.devui-form-label-align-start'] }], labelAlignCenter: [{ type: HostBinding, args: ['class.devui-form-label-align-center'] }], labelAlignEnd: [{ type: HostBinding, args: ['class.devui-form-label-align-end'] }] } }); export class ActiveFormControlDirective { constructor() { this.flag = true; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActiveFormControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ActiveFormControlDirective, selector: "[dActiveFormControl]", host: { properties: { "class.devui-active-form": "this.flag" } }, exportAs: ["dActiveFormControl"], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActiveFormControlDirective, decorators: [{ type: Directive, args: [{ selector: '[dActiveFormControl]', exportAs: 'dActiveFormControl', }] }], propDecorators: { flag: [{ type: HostBinding, args: ['class.devui-active-form'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZ1aS9mb3JtL2Zvcm0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQTZDLGdCQUFnQixFQUE0QixNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7O0FBRXhILE1BQU0sQ0FBTixJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDcEIsdUNBQXlCLENBQUE7SUFDekIsbUNBQXFCLENBQUE7SUFDckIsaUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUpXLFVBQVUsS0FBVixVQUFVLFFBSXJCO0FBTUQsTUFBTSxPQUFPLGFBQWE7SUFrQnhCLElBQ0ksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUNJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQ0ksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUNJLFdBQVc7UUFDYixPQUFPLElB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ckQ7K0dBRlksMEJBQTBCO21HQUExQiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBSnRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsUUFBUSxFQUFFLG9CQUFvQjtpQkFDL0I7OEJBRXlDLElBQUk7c0JBQTNDLFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0LCBRdWVyeUxpc3QsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQWJzdHJhY3RDb250cm9sRGlyZWN0aXZlLCBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0sIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHN0YXJ0V2l0aCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERGb3JtQ29udHJvbFJ1bGVEaXJlY3RpdmUsIERGb3JtR3JvdXBSdWxlRGlyZWN0aXZlIH0gZnJvbSAnLi92YWxpZGF0b3ItZGlyZWN0aXZlL2Zvcm0tY29udHJvbC1ydWxlcy5kaXJlY3RpdmUnO1xuXG5leHBvcnQgZW51bSBGb3JtTGF5b3V0IHtcbiAgSG9yaXpvbnRhbCA9ICdob3Jpem9udGFsJyxcbiAgVmVydGljYWwgPSAndmVydGljYWwnLFxuICBDb2x1bW5zID0gJ2NvbHVtbnMnLFxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZEZvcm1dJyxcbiAgZXhwb3J0QXM6ICdkRm9ybScsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1EaXJlY3RpdmUge1xuICBASW5wdXQoKSBsYXlvdXQgPSBGb3JtTGF5b3V0Lkhvcml6b250YWw7XG4gIEBJbnB1dCgpIGxhYmVsU2l6ZTogJ3NtJyB8ICcnIHwgJ2xnJyA9ICcnO1xuICBASW5wdXQoKSBsYWJlbEFsaWduOiAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJyA9ICdzdGFydCc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBkSGFzRmVlZGJhY2sgdG8gcmVwbGFjZSwgTm8gbG9uZ2VyIHN1cHBvcnQgZm9yIGxhYmVsXG4gICAqL1xuICBASW5wdXQoKSBkRmVlZGJhY2tUeXBlOiAnbGFiZWwnIHwgJ2NvbnRyb2wnO1xuXG4gIEBJbnB1dCgpIGRIYXNGZWVkYmFjayA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBkU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBfY2Q6IEFic3RyYWN0Q29udHJvbERpcmVjdGl2ZTtcbiAgcHVibGljIHJlYWRvbmx5IF9kVmFsaWRhdGVSdWxlRGlyOiBERm9ybUdyb3VwUnVsZURpcmVjdGl2ZTtcbiAgQENvbnRlbnRDaGlsZHJlbihERm9ybUNvbnRyb2xSdWxlRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNoaWxkcmVuQ3RyRGlyczogUXVlcnlMaXN0PERGb3JtQ29udHJvbFJ1bGVEaXJlY3RpdmU+O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGV2dWktZm9ybS1ob3Jpem9udGFsJylcbiAgZ2V0IGxheW91dEhvcml6b250YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMubGF5b3V0ID09PSBGb3JtTGF5b3V0Lkhvcml6b250YWw7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRldnVpLWZvcm0tdmVydGljYWwnKVxuICBnZXQgbGF5b3V0VmVydGljYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMubGF5b3V0ID09PSBGb3JtTGF5b3V0LlZlcnRpY2FsO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1mb3JtLWNvbHVtbnMnKVxuICBnZXQgbGF5b3V0Q29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXQgPT09IEZvcm1MYXlvdXQuQ29sdW1ucztcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGV2dWktZm9ybS1sZycpXG4gIGdldCBsYWJlbFNpemVMZygpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbFNpemUgPT09ICdsZyc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRldnVpLWZvcm0tc20nKVxuICBnZXQgbGFiZWxTaXplU20oKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxTaXplID09PSAnc20nO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1mb3JtLWxhYmVsLWFsaWduLXN0YXJ0JylcbiAgZ2V0IGxhYmVsQWxpZ25TdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbEFsaWduID09PSAnc3RhcnQnO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1mb3JtLWxhYmVsLWFsaWduLWNlbnRlcicpXG4gIGdldCBsYWJlbEFsaWduQ2VudGVyKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVsQWxpZ24gPT09ICdjZW50ZXInO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1mb3JtLWxhYmVsLWFsaWduLWVuZCcpXG4gIGdldCBsYWJlbEFsaWduRW5kKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVsQWxpZ24gPT09ICdlbmQnO1xuICB9XG5cbiAgdXBkYXRlT25TdWJtaXQoJGV2ZW50PywgZGF0YT86IGFueSkge1xuICAgIHRoaXMuX29wZXJhdGVBbGxDb250cm9sKHRoaXMuX2NkLmNvbnRyb2wsIChjZDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICBjZC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgY2QudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0pO1xuXG4gICAgLyogZW1pdCBldmVudCBzaG91bGQgYWZ0ZXIgdmFsaWRhdGUgKi9cbiAgICB0aGlzLl9jZC5jb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGhpcy5fY2QuY29udHJvbC5zdGF0dXMpLFxuICAgICAgICBmaWx0ZXIoKHN0YXR1cykgPT4ge1xuICAgICAgICAgIHJldHVybiBzdGF0dXMgIT09ICdQRU5ESU5HJztcbiAgICAgICAgfSksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2QpIHtcbiAgICAgICAgICAodGhpcy5fY2QgYXMgTmdGb3JtKS5vblN1Ym1pdCgkZXZlbnQpOyAvLyBUT0RPOiDpnIDop6blj5Hljp/nlJ9mb3Jt6KGo5Y2V55qEc3VibWl05pa55rOVXG4gICAgICAgICAgaWYgKHRoaXMuX2RWYWxpZGF0ZVJ1bGVEaXIpIHtcbiAgICAgICAgICAgIHRoaXMuZFN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgICAgdmFsaWQ6IHRoaXMuX2RWYWxpZGF0ZVJ1bGVEaXIuaXNSZWFkeSxcbiAgICAgICAgICAgICAgZGlyZWN0aXZlOiB0aGlzLl9kVmFsaWRhdGVSdWxlRGlyLFxuICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICBlcnJvcnM6IHRoaXMuX2dldEFsbEVycm9ycyh0aGlzLl9jZC5jb250cm9sKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZFN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgICAgdmFsaWQ6IHRoaXMuX2NkLnZhbGlkLFxuICAgICAgICAgICAgICBkaXJlY3RpdmU6IHRoaXMuX2NkLFxuICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICBlcnJvcnM6IHRoaXMuX2dldEFsbEVycm9ycyh0aGlzLl9jZC5jb250cm9sKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5DdHJEaXJzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0ZURpciBvZiB0aGlzLmNoaWxkcmVuQ3RyRGlycykge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlRGlyLmludmFsaWQgJiYgdmFsaWRhdGVEaXIuc2hvd1R5cGUgPT09ICdwb3BvdmVyJykge1xuICAgICAgICAgICAgICB2YWxpZGF0ZURpci5zaG93UG9wTWVzc2FnZSgpOyAvLyBUT0RPOiDooajljZXnsbvnu4Tku7bpnIDopoHlrp7njrBmb2N1c+aWueazle+8jOiLpeaXoGZvY3Vz77yM5bCG5peg5rOV5q2j5bi4Ymx1clxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlT25SZXNldCgpIHtcbiAgICBpZiAodGhpcy5fY2QpIHtcbiAgICAgICh0aGlzLl9jZCBhcyBOZ0Zvcm0pLm9uUmVzZXQoKTsgLy8gVE9ETzog6ZyA6Kem5Y+R5Y6f55SfZm9ybeihqOWNleeahHJlc2V05pa55rOVXG4gICAgfVxuICAgIHRoaXMuX29wZXJhdGVBbGxDb250cm9sKHRoaXMuX2NkLmNvbnRyb2wsIChjZDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICBjZC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgY2QudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfb3BlcmF0ZUFsbENvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBvcGVyYXRvckZuOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB2b2lkKSB7XG4gICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgIG9wZXJhdG9yRm4oY29udHJvbCk7XG4gICAgICBjb25zdCBjb250cm9scyA9IChjb250cm9sIGFzIGFueSkuY29udHJvbHM7XG4gICAgICBpZiAoY29udHJvbHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29udHJvbHMpKSB7XG4gICAgICAgICAgdGhpcy5fb3BlcmF0ZUFsbENvbnRyb2woY29udHJvbHNba2V5XSwgb3BlcmF0b3JGbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRBbGxFcnJvcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgY29uc3QgcmVzOiB7W2tleTogc3RyaW5nXTogVmFsaWRhdGlvbkVycm9yc30gPSB7fTtcbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgcmVzLmVycm9ycyA9IGNvbnRyb2wuZXJyb3JzO1xuICAgICAgY29uc3QgY29udHJvbHMgPSAoY29udHJvbCBhcyBhbnkpLmNvbnRyb2xzO1xuICAgICAgaWYgKGNvbnRyb2xzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbnRyb2xzKSkge1xuICAgICAgICAgIHJlc1trZXldID0gdGhpcy5fZ2V0QWxsRXJyb3JzKGNvbnRyb2xzW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBTZWxmKCkgY2Q6IENvbnRyb2xDb250YWluZXIsIEBPcHRpb25hbCgpIEBTZWxmKCkgZFZhbGlkYXRlUnVsZURpcjogREZvcm1Hcm91cFJ1bGVEaXJlY3RpdmUpIHtcbiAgICB0aGlzLl9jZCA9IGNkO1xuICAgIHRoaXMuX2RWYWxpZGF0ZVJ1bGVEaXIgPSBkVmFsaWRhdGVSdWxlRGlyO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkQWN0aXZlRm9ybUNvbnRyb2xdJyxcbiAgZXhwb3J0QXM6ICdkQWN0aXZlRm9ybUNvbnRyb2wnLFxufSlcbmV4cG9ydCBjbGFzcyBBY3RpdmVGb3JtQ29udHJvbERpcmVjdGl2ZSB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGV2dWktYWN0aXZlLWZvcm0nKSBmbGFnID0gdHJ1ZTtcbn1cbiJdfQ==