UNPKG

@taiga-ui/kit

Version:
160 lines • 20.2 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 let TuiFieldErrorComponent = class TuiFieldErrorComponent { constructor(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; } } set order(value) { this.errorsOrder = value; this.updateErrorText(); } ngOnInit() { const 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(() => { this.updateErrorText(); }); } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } get computedError() { return this.invalid && this.touched && this.firstError ? this.firstError : null; } get invalid() { const control = this.control; return control && control.invalid !== null ? control.invalid : false; } get touched() { const control = this.control; return control && control.touched !== null ? control.touched : false; } get control() { 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; } registerOnChange() { this.markForCheck(); } registerOnTouched() { this.markForCheck(); } setDisabledState() { this.markForCheck(); } writeValue() { this.markForCheck(); } get firstErrorIdByOrder() { const firstErrorId = this.errorsOrder && this.errorsOrder.find(errorId => !!this.controlErrors[errorId]); return firstErrorId || null; } get firstErrorId() { const errorIds = Object.keys(this.controlErrors); return errorIds[0]; } get controlErrors() { const control = this.control; return (control && control.errors) || {}; } updateErrorText() { this.firstError = this.getErrorText(); } getErrorText() { const firstErrorId = this.firstErrorIdByOrder || this.firstErrorId; const 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; } markForCheck() { this.changeDetectorRef.markForCheck(); } }; TuiFieldErrorComponent.ctorParameters = () => [ { 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); export { TuiFieldErrorComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXJyb3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRhaWdhLXVpL2tpdC9jb21wb25lbnRzL2ZpZWxkLWVycm9yLyIsInNvdXJjZXMiOlsiZmllbGQtZXJyb3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxFQUNSLElBQUksR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLFNBQVMsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTNELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLGlCQUFpQjtBQUNqQixXQUFXO0FBVVgsSUFBYSxzQkFBc0IsR0FBbkMsTUFBYSxzQkFBc0I7SUFZL0IsWUFJWSxTQUEyQixFQUkzQixhQUFtQyxFQUluQyxhQUFtQyxFQUluQyxTQUFvQyxFQUNULGlCQUFvQyxFQUV0RCxnQkFBcUQ7UUFmOUQsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFJM0Isa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBSW5DLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQUluQyxjQUFTLEdBQVQsU0FBUyxDQUEyQjtRQUNULHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFdEQs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QUMsQ0FBQTtJQUVyQixXQUFBLFFBQVEsRUFBRSxDQUFBO0lBQ1YsV0FBQSxJQUFJLEVBQUUsQ0FBQTtJQUNOLFdBQUEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRXJCLFdBQUEsUUFBUSxFQUFFLENBQUE7SUFDVixXQUFBLElBQUksRUFBRSxDQUFBO0lBQ04sV0FBQSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUUxQixXQUFBLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQ3pCLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7R0E5QnpCLHNCQUFzQixDQXNLbEM7U0F0S1ksc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2VsZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0Q29udHJvbCxcbiAgICBGb3JtQXJyYXlOYW1lLFxuICAgIEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICBGb3JtR3JvdXBOYW1lLFxuICAgIE5nQ29udHJvbCxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHt0dWlBc3NlcnQsIHR1aVJlcXVpcmVkU2V0dGVyLCBUdWlWYWxpZGF0aW9uRXJyb3J9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHt0dWlGYWRlSW4sIHR1aUhlaWdodENvbGxhcHNlfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQge1RVSV9WQUxJREFUSU9OX0VSUk9SU30gZnJvbSAnQHRhaWdhLXVpL2tpdC90b2tlbnMnO1xuaW1wb3J0IHtQb2x5bW9ycGhldXNDb250ZW50fSBmcm9tICdAdGlua29mZi9uZy1wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8vIFRPRE86IFJlZmFjdG9yXG4vLyBAZHluYW1pY1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0dWktZmllbGQtZXJyb3InLFxuICAgIC8vIEBiYWQgVE9ETzogZmluZCBhIHdheSB0byBnZXQgJ3RvdWNoZWQnIHN0YXRlIGNoYW5nZVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEwODg3XG4gICAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpZWxkLWVycm9yLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpZWxkLWVycm9yLnN0eWxlLmxlc3MnXSxcbiAgICBhbmltYXRpb25zOiBbdHVpSGVpZ2h0Q29sbGFwc2UsIHR1aUZhZGVJbl0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUZpZWxkRXJyb3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KClcbiAgICBAdHVpUmVxdWlyZWRTZXR0ZXIoKVxuICAgIHNldCBvcmRlcih2YWx1ZTogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5lcnJvcnNPcmRlciA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUVycm9yVGV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlyc3RFcnJvcjogVHVpVmFsaWRhdGlvbkVycm9yIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBlcnJvcnNPcmRlcjogcmVhZG9ubHkgc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBAU2VsZigpXG4gICAgICAgIEBJbmplY3QoTmdDb250cm9sKVxuICAgICAgICBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sIHwgbnVsbCxcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQFNlbGYoKVxuICAgICAgICBASW5qZWN0KEZvcm1BcnJheU5hbWUpXG4gICAgICAgIHByaXZhdGUgZm9ybUFycmF5TmFtZTogRm9ybUFycmF5TmFtZSB8IG51bGwsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBTZWxmKClcbiAgICAgICAgQEluamVjdChGb3JtR3JvdXBOYW1lKVxuICAgICAgICBwcml2YXRlIGZvcm1Hcm91cE5hbWU6IEZvcm1Hcm91cE5hbWUgfCBudWxsLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBAU2VsZigpXG4gICAgICAgIEBJbmplY3QoRm9ybUdyb3VwRGlyZWN0aXZlKVxuICAgICAgICBwcml2YXRlIGZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlIHwgbnVsbCxcbiAgICAgICAgQEluamVjdChDaGFuZ2VEZXRlY3RvclJlZikgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoVFVJX1ZBTElEQVRJT05fRVJST1JTKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHZhbGlkYXRpb25FcnJvcnM6IFJlY29yZDxzdHJpbmcsIFBvbHltb3JwaGV1c0NvbnRlbnQ+LFxuICAgICkge1xuICAgICAgICB0dWlBc3NlcnQuYXNzZXJ0KFxuICAgICAgICAgICAgISF0aGlzLm5nQ29udHJvbCxcbiAgICAgICAgICAgIGBOZ0NvbnRyb2wgbm90IGluamVjdGVkIGluICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSFgICtcbiAgICAgICAgICAgICAgICAnIFVzZSBbKG5nTW9kZWwpXSBvciBbZm9ybUNvbnRyb2xdIG9yIGZvcm1Db250cm9sTmFtZSBmb3IgY29ycmVjdCB3b3JrLicsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb250cm9sO1xuXG4gICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgaXNzdWUgd2l0aCBhc3luYyB2YWxpZGF0b3JzIHdpbGwgYmUgcmVzb2x2ZWQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzMjAwXG4gICAgICAgIGlmIChjb250cm9sLmFzeW5jVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlRXJyb3JUZXh0KCk7XG5cbiAgICAgICAgY29udHJvbC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFcnJvclRleHQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXB1dGVkRXJyb3IoKTogVHVpVmFsaWRhdGlvbkVycm9yIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmludmFsaWQgJiYgdGhpcy50b3VjaGVkICYmIHRoaXMuZmlyc3RFcnJvciA/IHRoaXMuZmlyc3RFcnJvciA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2w7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICE9PSBudWxsID8gY29udHJvbC5pbnZhbGlkIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2w7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC50b3VjaGVkICE9PSBudWxsID8gY29udHJvbC50b3VjaGVkIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdDb250cm9sLmNvbnRyb2w7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb3JtQXJyYXlOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXlOYW1lLmNvbnRyb2w7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXBOYW1lLmNvbnRyb2w7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5jb250cm9sO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZCgpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlKCkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUoKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZmlyc3RFcnJvcklkQnlPcmRlcigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZmlyc3RFcnJvcklkID1cbiAgICAgICAgICAgIHRoaXMuZXJyb3JzT3JkZXIgJiZcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzT3JkZXIuZmluZChlcnJvcklkID0+ICEhdGhpcy5jb250cm9sRXJyb3JzW2Vycm9ySWRdKTtcblxuICAgICAgICByZXR1cm4gZmlyc3RFcnJvcklkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZmlyc3RFcnJvcklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBlcnJvcklkcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udHJvbEVycm9ycyk7XG5cbiAgICAgICAgcmV0dXJuIGVycm9ySWRzWzBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGNvbnRyb2xFcnJvcnMoKToge1trZXk6IHN0cmluZ106IGFueX0ge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb250cm9sO1xuXG4gICAgICAgIHJldHVybiAoY29udHJvbCAmJiBjb250cm9sLmVycm9ycykgfHwge307XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVFcnJvclRleHQoKSB7XG4gICAgICAgIHRoaXMuZmlyc3RFcnJvciA9IHRoaXMuZ2V0RXJyb3JUZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFcnJvclRleHQoKTogVHVpVmFsaWRhdGlvbkVycm9yIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZpcnN0RXJyb3JJZCA9IHRoaXMuZmlyc3RFcnJvcklkQnlPcmRlciB8fCB0aGlzLmZpcnN0RXJyb3JJZDtcbiAgICAgICAgY29uc3QgZmlyc3RFcnJvciA9IGZpcnN0RXJyb3JJZCAmJiB0aGlzLmNvbnRyb2xFcnJvcnNbZmlyc3RFcnJvcklkXTtcblxuICAgICAgICAvLyBAYmFkIFRPRE86IFJlbW92ZSBmaXJzdEVycm9yLm1lc3NhZ2UgY2hlY2sgYWZ0ZXIgZXZlcnlib2R5IG1pZ3JhdGVzIHRvIFR1aVZhbGlkYXRpb25FcnJvclxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaXJzdEVycm9yICYmXG4gICAgICAgICAgICAoZmlyc3RFcnJvciBpbnN0YW5jZW9mIFR1aVZhbGlkYXRpb25FcnJvciB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBmaXJzdEVycm9yLm1lc3NhZ2UgPT09ICdzdHJpbmcnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmaXJzdEVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0RXJyb3JJZFxuICAgICAgICAgICAgPyBuZXcgVHVpVmFsaWRhdGlvbkVycm9yKHRoaXMudmFsaWRhdGlvbkVycm9yc1tmaXJzdEVycm9ySWRdLCBmaXJzdEVycm9yKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFya0ZvckNoZWNrKCkge1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cbiJdfQ==