UNPKG

@taiga-ui/kit

Version:
195 lines • 22.4 kB
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=