ng-devui
Version:
DevUI components based on Angular
195 lines • 22 kB
JavaScript
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==