@taiga-ui/kit
Version:
Taiga UI Angular main components kit
195 lines • 22.4 kB
JavaScript
import { __decorate, __param } from "tslib";
import { ChangeDetectorRef, Component, Inject, Input, OnDestroy, OnInit, Optional, Self, } from '@angular/core';
import { AbstractControl, FormArrayName, FormGroupDirective, FormGroupName, NgControl, } from '@angular/forms';
import { tuiAssert, tuiRequiredSetter, TuiValidationError } from '@taiga-ui/cdk';
import { tuiFadeIn, tuiHeightCollapse } from '@taiga-ui/core';
import { TUI_VALIDATION_ERRORS } from '@taiga-ui/kit/tokens';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
// TODO: Refactor
// @dynamic
var TuiFieldErrorComponent = /** @class */ (function () {
function TuiFieldErrorComponent(ngControl, formArrayName, formGroupName, formGroup, changeDetectorRef, validationErrors) {
this.ngControl = ngControl;
this.formArrayName = formArrayName;
this.formGroupName = formGroupName;
this.formGroup = formGroup;
this.changeDetectorRef = changeDetectorRef;
this.validationErrors = validationErrors;
this.firstError = null;
this.errorsOrder = [];
this.destroy$ = new Subject();
tuiAssert.assert(!!this.ngControl, "NgControl not injected in " + this.constructor.name + "!" +
' Use [(ngModel)] or [formControl] or formControlName for correct work.');
if (this.ngControl) {
this.ngControl.valueAccessor = this;
}
}
Object.defineProperty(TuiFieldErrorComponent.prototype, "order", {
set: function (value) {
this.errorsOrder = value;
this.updateErrorText();
},
enumerable: true,
configurable: true
});
TuiFieldErrorComponent.prototype.ngOnInit = function () {
var _this = this;
var control = this.control;
if (!control) {
return;
}
// Temporary workaround until issue with async validators will be resolved.
// https://github.com/angular/angular/issues/13200
if (control.asyncValidator) {
control.updateValueAndValidity();
}
this.updateErrorText();
control.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(function () {
_this.updateErrorText();
});
};
TuiFieldErrorComponent.prototype.ngOnDestroy = function () {
this.destroy$.next();
this.destroy$.complete();
};
Object.defineProperty(TuiFieldErrorComponent.prototype, "computedError", {
get: function () {
return this.invalid && this.touched && this.firstError ? this.firstError : null;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiFieldErrorComponent.prototype, "invalid", {
get: function () {
var control = this.control;
return control && control.invalid !== null ? control.invalid : false;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiFieldErrorComponent.prototype, "touched", {
get: function () {
var control = this.control;
return control && control.touched !== null ? control.touched : false;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiFieldErrorComponent.prototype, "control", {
get: function () {
if (this.ngControl) {
return this.ngControl.control;
}
if (this.formArrayName) {
return this.formArrayName.control;
}
if (this.formGroupName) {
return this.formGroupName.control;
}
if (this.formGroup) {
return this.formGroup.control;
}
return null;
},
enumerable: true,
configurable: true
});
TuiFieldErrorComponent.prototype.registerOnChange = function () {
this.markForCheck();
};
TuiFieldErrorComponent.prototype.registerOnTouched = function () {
this.markForCheck();
};
TuiFieldErrorComponent.prototype.setDisabledState = function () {
this.markForCheck();
};
TuiFieldErrorComponent.prototype.writeValue = function () {
this.markForCheck();
};
Object.defineProperty(TuiFieldErrorComponent.prototype, "firstErrorIdByOrder", {
get: function () {
var _this = this;
var firstErrorId = this.errorsOrder &&
this.errorsOrder.find(function (errorId) { return !!_this.controlErrors[errorId]; });
return firstErrorId || null;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiFieldErrorComponent.prototype, "firstErrorId", {
get: function () {
var errorIds = Object.keys(this.controlErrors);
return errorIds[0];
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiFieldErrorComponent.prototype, "controlErrors", {
get: function () {
var control = this.control;
return (control && control.errors) || {};
},
enumerable: true,
configurable: true
});
TuiFieldErrorComponent.prototype.updateErrorText = function () {
this.firstError = this.getErrorText();
};
TuiFieldErrorComponent.prototype.getErrorText = function () {
var firstErrorId = this.firstErrorIdByOrder || this.firstErrorId;
var firstError = firstErrorId && this.controlErrors[firstErrorId];
// @bad TODO: Remove firstError.message check after everybody migrates to TuiValidationError
if (firstError &&
(firstError instanceof TuiValidationError ||
typeof firstError.message === 'string')) {
return firstError;
}
return firstErrorId
? new TuiValidationError(this.validationErrors[firstErrorId], firstError)
: null;
};
TuiFieldErrorComponent.prototype.markForCheck = function () {
this.changeDetectorRef.markForCheck();
};
TuiFieldErrorComponent.ctorParameters = function () { return [
{ type: NgControl, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NgControl,] }] },
{ type: FormArrayName, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [FormArrayName,] }] },
{ type: FormGroupName, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [FormGroupName,] }] },
{ type: FormGroupDirective, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [FormGroupDirective,] }] },
{ type: ChangeDetectorRef, decorators: [{ type: Inject, args: [ChangeDetectorRef,] }] },
{ type: undefined, decorators: [{ type: Inject, args: [TUI_VALIDATION_ERRORS,] }] }
]; };
__decorate([
Input(),
tuiRequiredSetter()
], TuiFieldErrorComponent.prototype, "order", null);
TuiFieldErrorComponent = __decorate([
Component({
selector: 'tui-field-error',
// @bad TODO: find a way to get 'touched' state change
// https://github.com/angular/angular/issues/10887
// changeDetection: ChangeDetectionStrategy.OnPush,
template: "<tui-error [error]=\"computedError\"></tui-error>\n",
animations: [tuiHeightCollapse, tuiFadeIn],
styles: [":host{display:block}"]
}),
__param(0, Optional()),
__param(0, Self()),
__param(0, Inject(NgControl)),
__param(1, Optional()),
__param(1, Self()),
__param(1, Inject(FormArrayName)),
__param(2, Optional()),
__param(2, Self()),
__param(2, Inject(FormGroupName)),
__param(3, Optional()),
__param(3, Self()),
__param(3, Inject(FormGroupDirective)),
__param(4, Inject(ChangeDetectorRef)),
__param(5, Inject(TUI_VALIDATION_ERRORS))
], TuiFieldErrorComponent);
return TuiFieldErrorComponent;
}());
export { TuiFieldErrorComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXJyb3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRhaWdhLXVpL2tpdC9jb21wb25lbnRzL2ZpZWxkLWVycm9yLyIsInNvdXJjZXMiOlsiZmllbGQtZXJyb3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxFQUNSLElBQUksR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLFNBQVMsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTNELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLGlCQUFpQjtBQUNqQixXQUFXO0FBVVg7SUFZSSxnQ0FJWSxTQUEyQixFQUkzQixhQUFtQyxFQUluQyxhQUFtQyxFQUluQyxTQUFvQyxFQUNULGlCQUFvQyxFQUV0RCxnQkFBcUQ7UUFmOUQsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFJM0Isa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBSW5DLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQUluQyxjQUFTLEdBQVQsU0FBUyxDQUEyQjtRQUNULHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFdEQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQztRQXZC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QWNPLFdBQUEsUUFBUSxFQUFFLENBQUE7UUFDVixXQUFBLElBQUksRUFBRSxDQUFBO1FBQ04sV0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFakIsV0FBQSxRQUFRLEVBQUUsQ0FBQTtRQUNWLFdBQUEsSUFBSSxFQUFFLENBQUE7UUFDTixXQUFBLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUVyQixXQUFBLFFBQVEsRUFBRSxDQUFBO1FBQ1YsV0FBQSxJQUFJLEVBQUUsQ0FBQTtRQUNOLFdBQUEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRXJCLFdBQUEsUUFBUSxFQUFFLENBQUE7UUFDVixXQUFBLElBQUksRUFBRSxDQUFBO1FBQ04sV0FBQSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUUxQixXQUFBLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQ3pCLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7T0E5QnpCLHNCQUFzQixDQXNLbEM7SUFBRCw2QkFBQztDQUFBLEFBdEtELElBc0tDO1NBdEtZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFNlbGYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgRm9ybUFycmF5TmFtZSxcbiAgICBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgRm9ybUdyb3VwTmFtZSxcbiAgICBOZ0NvbnRyb2wsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7dHVpQXNzZXJ0LCB0dWlSZXF1aXJlZFNldHRlciwgVHVpVmFsaWRhdGlvbkVycm9yfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7dHVpRmFkZUluLCB0dWlIZWlnaHRDb2xsYXBzZX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHtUVUlfVkFMSURBVElPTl9FUlJPUlN9IGZyb20gJ0B0YWlnYS11aS9raXQvdG9rZW5zJztcbmltcG9ydCB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vLyBUT0RPOiBSZWZhY3RvclxuLy8gQGR5bmFtaWNcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLWZpZWxkLWVycm9yJyxcbiAgICAvLyBAYmFkIFRPRE86IGZpbmQgYSB3YXkgdG8gZ2V0ICd0b3VjaGVkJyBzdGF0ZSBjaGFuZ2VcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDg4N1xuICAgIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWVsZC1lcnJvci50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWVsZC1lcnJvci5zdHlsZS5sZXNzJ10sXG4gICAgYW5pbWF0aW9uczogW3R1aUhlaWdodENvbGxhcHNlLCB0dWlGYWRlSW5dLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlGaWVsZEVycm9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpXG4gICAgQHR1aVJlcXVpcmVkU2V0dGVyKClcbiAgICBzZXQgb3JkZXIodmFsdWU6IHJlYWRvbmx5IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuZXJyb3JzT3JkZXIgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVFcnJvclRleHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpcnN0RXJyb3I6IFR1aVZhbGlkYXRpb25FcnJvciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgZXJyb3JzT3JkZXI6IHJlYWRvbmx5IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQFNlbGYoKVxuICAgICAgICBASW5qZWN0KE5nQ29udHJvbClcbiAgICAgICAgcHJpdmF0ZSBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGwsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBTZWxmKClcbiAgICAgICAgQEluamVjdChGb3JtQXJyYXlOYW1lKVxuICAgICAgICBwcml2YXRlIGZvcm1BcnJheU5hbWU6IEZvcm1BcnJheU5hbWUgfCBudWxsLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBAU2VsZigpXG4gICAgICAgIEBJbmplY3QoRm9ybUdyb3VwTmFtZSlcbiAgICAgICAgcHJpdmF0ZSBmb3JtR3JvdXBOYW1lOiBGb3JtR3JvdXBOYW1lIHwgbnVsbCxcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQFNlbGYoKVxuICAgICAgICBASW5qZWN0KEZvcm1Hcm91cERpcmVjdGl2ZSlcbiAgICAgICAgcHJpdmF0ZSBmb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSB8IG51bGwsXG4gICAgICAgIEBJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KFRVSV9WQUxJREFUSU9OX0VSUk9SUylcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB2YWxpZGF0aW9uRXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBQb2x5bW9ycGhldXNDb250ZW50PixcbiAgICApIHtcbiAgICAgICAgdHVpQXNzZXJ0LmFzc2VydChcbiAgICAgICAgICAgICEhdGhpcy5uZ0NvbnRyb2wsXG4gICAgICAgICAgICBgTmdDb250cm9sIG5vdCBpbmplY3RlZCBpbiAke3RoaXMuY29uc3RydWN0b3IubmFtZX0hYCArXG4gICAgICAgICAgICAgICAgJyBVc2UgWyhuZ01vZGVsKV0gb3IgW2Zvcm1Db250cm9sXSBvciBmb3JtQ29udHJvbE5hbWUgZm9yIGNvcnJlY3Qgd29yay4nLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbDtcblxuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRlbXBvcmFyeSB3b3JrYXJvdW5kIHVudGlsIGlzc3VlIHdpdGggYXN5bmMgdmFsaWRhdG9ycyB3aWxsIGJlIHJlc29sdmVkLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzIwMFxuICAgICAgICBpZiAoY29udHJvbC5hc3luY1ZhbGlkYXRvcikge1xuICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUVycm9yVGV4dCgpO1xuXG4gICAgICAgIGNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRXJyb3JUZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIGdldCBjb21wdXRlZEVycm9yKCk6IFR1aVZhbGlkYXRpb25FcnJvciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkICYmIHRoaXMudG91Y2hlZCAmJiB0aGlzLmZpcnN0RXJyb3IgPyB0aGlzLmZpcnN0RXJyb3IgOiBudWxsO1xuICAgIH1cblxuICAgIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb250cm9sO1xuXG4gICAgICAgIHJldHVybiBjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAhPT0gbnVsbCA/IGNvbnRyb2wuaW52YWxpZCA6IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb250cm9sO1xuXG4gICAgICAgIHJldHVybiBjb250cm9sICYmIGNvbnRyb2wudG91Y2hlZCAhPT0gbnVsbCA/IGNvbnRyb2wudG91Y2hlZCA6IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBjb250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5nQ29udHJvbC5jb250cm9sO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybUFycmF5TmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUFycmF5TmFtZS5jb250cm9sO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwTmFtZS5jb250cm9sO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKCkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGZpcnN0RXJyb3JJZEJ5T3JkZXIoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZpcnN0RXJyb3JJZCA9XG4gICAgICAgICAgICB0aGlzLmVycm9yc09yZGVyICYmXG4gICAgICAgICAgICB0aGlzLmVycm9yc09yZGVyLmZpbmQoZXJyb3JJZCA9PiAhIXRoaXMuY29udHJvbEVycm9yc1tlcnJvcklkXSk7XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0RXJyb3JJZCB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGZpcnN0RXJyb3JJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZXJyb3JJZHMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xFcnJvcnMpO1xuXG4gICAgICAgIHJldHVybiBlcnJvcklkc1swXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBjb250cm9sRXJyb3JzKCk6IHtba2V5OiBzdHJpbmddOiBhbnl9IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbDtcblxuICAgICAgICByZXR1cm4gKGNvbnRyb2wgJiYgY29udHJvbC5lcnJvcnMpIHx8IHt9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRXJyb3JUZXh0KCkge1xuICAgICAgICB0aGlzLmZpcnN0RXJyb3IgPSB0aGlzLmdldEVycm9yVGV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXJyb3JUZXh0KCk6IFR1aVZhbGlkYXRpb25FcnJvciB8IG51bGwge1xuICAgICAgICBjb25zdCBmaXJzdEVycm9ySWQgPSB0aGlzLmZpcnN0RXJyb3JJZEJ5T3JkZXIgfHwgdGhpcy5maXJzdEVycm9ySWQ7XG4gICAgICAgIGNvbnN0IGZpcnN0RXJyb3IgPSBmaXJzdEVycm9ySWQgJiYgdGhpcy5jb250cm9sRXJyb3JzW2ZpcnN0RXJyb3JJZF07XG5cbiAgICAgICAgLy8gQGJhZCBUT0RPOiBSZW1vdmUgZmlyc3RFcnJvci5tZXNzYWdlIGNoZWNrIGFmdGVyIGV2ZXJ5Ym9keSBtaWdyYXRlcyB0byBUdWlWYWxpZGF0aW9uRXJyb3JcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmlyc3RFcnJvciAmJlxuICAgICAgICAgICAgKGZpcnN0RXJyb3IgaW5zdGFuY2VvZiBUdWlWYWxpZGF0aW9uRXJyb3IgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgZmlyc3RFcnJvci5tZXNzYWdlID09PSAnc3RyaW5nJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlyc3RFcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaXJzdEVycm9ySWRcbiAgICAgICAgICAgID8gbmV3IFR1aVZhbGlkYXRpb25FcnJvcih0aGlzLnZhbGlkYXRpb25FcnJvcnNbZmlyc3RFcnJvcklkXSwgZmlyc3RFcnJvcilcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG4iXX0=