@taiga-ui/kit
Version:
Taiga UI Angular main components kit
103 lines • 14.3 kB
JavaScript
import { __decorate } from "tslib";
import { inject, Pipe } from '@angular/core';
import { ControlContainer, NgControl } from '@angular/forms';
import { TuiValidationError } from '@taiga-ui/cdk/classes';
import { tuiIsString, tuiPure } from '@taiga-ui/cdk/utils/miscellaneous';
import { TUI_VALIDATION_ERRORS } from '@taiga-ui/kit/tokens';
import { map, Observable, of } from 'rxjs';
import * as i0 from "@angular/core";
const EMPTY_RECORD = {};
function unwrapObservable(content, context) {
return content.pipe(map((error) => new TuiValidationError(error || '', context)));
}
function defaultError(content, context) {
return of(new TuiValidationError(content || '', context));
}
class TuiFieldErrorPipe {
constructor() {
this.order = [];
this.parent = inject(NgControl, { skipSelf: true, optional: true });
this.self = inject(NgControl, { self: true, optional: true });
this.container = inject(ControlContainer, { optional: true });
this.validationErrors = inject(TUI_VALIDATION_ERRORS);
if (this.self && !this.self.valueAccessor) {
this.self.valueAccessor = this;
}
}
transform(order) {
this.order = order;
return this.computedError;
}
registerOnChange() { }
registerOnTouched() { }
setDisabledState() { }
writeValue() { }
get computedError() {
return (this.invalid && this.touched && this.error) || of(null);
}
get error() {
const { errorId } = this;
if (!errorId) {
return null;
}
const firstError = this.controlErrors[errorId];
const errorContent = this.validationErrors[errorId];
return this.getError(firstError, errorContent);
}
get invalid() {
return !!this.control?.invalid;
}
get touched() {
return !!this.control?.touched;
}
get control() {
return this.self?.control || this.parent?.control || this.container?.control;
}
get errorId() {
return this.getErrorId(this.order, this.controlErrors);
}
get controlErrors() {
return this.control?.errors || EMPTY_RECORD;
}
getError(context, content) {
if (context instanceof TuiValidationError) {
return of(context);
}
if (content === undefined && tuiIsString(context)) {
return of(new TuiValidationError(context));
}
if (content instanceof Observable) {
return unwrapObservable(content, context);
}
if (content instanceof Function) {
const message = content(context);
return message instanceof Observable
? unwrapObservable(message, context)
: defaultError(message, context);
}
return defaultError(content, context);
}
getErrorId(order, controlErrors) {
const id = order?.find((errorId) => controlErrors[errorId]);
const [fallback] = Object.keys(controlErrors);
return id || fallback || '';
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiFieldErrorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: TuiFieldErrorPipe, isStandalone: true, name: "tuiFieldError", pure: false }); }
}
__decorate([
tuiPure
], TuiFieldErrorPipe.prototype, "getError", null);
__decorate([
tuiPure
], TuiFieldErrorPipe.prototype, "getErrorId", null);
export { TuiFieldErrorPipe };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiFieldErrorPipe, decorators: [{
type: Pipe,
args: [{
standalone: true,
name: 'tuiFieldError',
pure: false,
}]
}], ctorParameters: function () { return []; }, propDecorators: { getError: [], getErrorId: [] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXJyb3ItcGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9waXBlcy9maWVsZC1lcnJvci9maWVsZC1lcnJvci1waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7O0FBRXpDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUV4QixTQUFTLGdCQUFnQixDQUNyQixPQUF3QyxFQUN4QyxPQUFZO0lBRVosT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQ2pCLE9BQTRCLEVBQzVCLE9BQVk7SUFFWixPQUFPLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFLYSxpQkFBaUI7SUFPMUI7UUFOUSxVQUFLLEdBQXNCLEVBQUUsQ0FBQztRQUNyQixXQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDN0QsU0FBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3ZELGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN2RCxxQkFBZ0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUc5RCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQXdCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRU0sZ0JBQWdCLEtBQVUsQ0FBQztJQUUzQixpQkFBaUIsS0FBVSxDQUFDO0lBRTVCLGdCQUFnQixLQUFVLENBQUM7SUFFM0IsVUFBVSxLQUFVLENBQUM7SUFFNUIsSUFBYyxhQUFhO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsSUFBWSxLQUFLO1FBQ2IsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztRQUV2QixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQVksT0FBTztRQUNmLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFZLE9BQU87UUFDZixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBWSxPQUFPO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQztJQUNqRixDQUFDO0lBRUQsSUFBWSxPQUFPO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFZLGFBQWE7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxZQUFZLENBQUM7SUFDaEQsQ0FBQztJQUdPLFFBQVEsQ0FDWixPQUFZLEVBQ1osT0FBK0Q7UUFFL0QsSUFBSSxPQUFPLFlBQVksa0JBQWtCLEVBQUU7WUFDdkMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEI7UUFFRCxJQUFJLE9BQU8sS0FBSyxTQUFTLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9DLE9BQU8sRUFBRSxDQUFDLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksT0FBTyxZQUFZLFVBQVUsRUFBRTtZQUMvQixPQUFPLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM3QztRQUVELElBQUksT0FBTyxZQUFZLFFBQVEsRUFBRTtZQUM3QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUVOLENBQUM7WUFFMUIsT0FBTyxPQUFPLFlBQVksVUFBVTtnQkFDaEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsT0FBTyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFHTyxVQUFVLENBQ2QsS0FBd0IsRUFDeEIsYUFBc0M7UUFFdEMsTUFBTSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUMsT0FBTyxFQUFFLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDOytHQXZHUSxpQkFBaUI7NkdBQWpCLGlCQUFpQjs7QUFpRWxCO0lBRFAsT0FBTztpREE0QlA7QUFHTztJQURQLE9BQU87bURBU1A7U0F2R1EsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBTDdCLElBQUk7bUJBQUM7b0JBQ0YsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRSxlQUFlO29CQUNyQixJQUFJLEVBQUUsS0FBSztpQkFDZDswRUFrRVcsUUFBUSxNQThCUixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1BpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpbmplY3QsIFBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge0Fic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q29udHJvbENvbnRhaW5lciwgTmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1R1aVZhbGlkYXRpb25FcnJvcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jbGFzc2VzJztcbmltcG9ydCB7dHVpSXNTdHJpbmcsIHR1aVB1cmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge1RVSV9WQUxJREFUSU9OX0VSUk9SU30gZnJvbSAnQHRhaWdhLXVpL2tpdC90b2tlbnMnO1xuaW1wb3J0IHR5cGUge1BvbHltb3JwaGV1c0NvbnRlbnR9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHttYXAsIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcblxuY29uc3QgRU1QVFlfUkVDT1JEID0ge307XG5cbmZ1bmN0aW9uIHVud3JhcE9ic2VydmFibGUoXG4gICAgY29udGVudDogT2JzZXJ2YWJsZTxQb2x5bW9ycGhldXNDb250ZW50PixcbiAgICBjb250ZXh0OiBhbnksXG4pOiBPYnNlcnZhYmxlPFR1aVZhbGlkYXRpb25FcnJvcj4ge1xuICAgIHJldHVybiBjb250ZW50LnBpcGUobWFwKChlcnJvcikgPT4gbmV3IFR1aVZhbGlkYXRpb25FcnJvcihlcnJvciB8fCAnJywgY29udGV4dCkpKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEVycm9yKFxuICAgIGNvbnRlbnQ6IFBvbHltb3JwaGV1c0NvbnRlbnQsXG4gICAgY29udGV4dDogYW55LFxuKTogT2JzZXJ2YWJsZTxUdWlWYWxpZGF0aW9uRXJyb3I+IHtcbiAgICByZXR1cm4gb2YobmV3IFR1aVZhbGlkYXRpb25FcnJvcihjb250ZW50IHx8ICcnLCBjb250ZXh0KSk7XG59XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICd0dWlGaWVsZEVycm9yJyxcbiAgICBwdXJlOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpRmllbGRFcnJvclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSBvcmRlcjogcmVhZG9ubHkgc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudCA9IGluamVjdChOZ0NvbnRyb2wsIHtza2lwU2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlbGYgPSBpbmplY3QoTmdDb250cm9sLCB7c2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lciA9IGluamVjdChDb250cm9sQ29udGFpbmVyLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZhbGlkYXRpb25FcnJvcnMgPSBpbmplY3QoVFVJX1ZBTElEQVRJT05fRVJST1JTKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxmICYmICF0aGlzLnNlbGYudmFsdWVBY2Nlc3Nvcikge1xuICAgICAgICAgICAgdGhpcy5zZWxmLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShvcmRlcjogcmVhZG9ubHkgc3RyaW5nW10pOiBPYnNlcnZhYmxlPFR1aVZhbGlkYXRpb25FcnJvciB8IG51bGw+IHtcbiAgICAgICAgdGhpcy5vcmRlciA9IG9yZGVyO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbXB1dGVkRXJyb3I7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoKTogdm9pZCB7fVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKCk6IHZvaWQge31cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKCk6IHZvaWQge31cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKCk6IHZvaWQge31cblxuICAgIHByb3RlY3RlZCBnZXQgY29tcHV0ZWRFcnJvcigpOiBPYnNlcnZhYmxlPFR1aVZhbGlkYXRpb25FcnJvciB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmludmFsaWQgJiYgdGhpcy50b3VjaGVkICYmIHRoaXMuZXJyb3IpIHx8IG9mKG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGVycm9yKCk6IE9ic2VydmFibGU8VHVpVmFsaWRhdGlvbkVycm9yPiB8IG51bGwge1xuICAgICAgICBjb25zdCB7ZXJyb3JJZH0gPSB0aGlzO1xuXG4gICAgICAgIGlmICghZXJyb3JJZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdEVycm9yID0gdGhpcy5jb250cm9sRXJyb3JzW2Vycm9ySWRdO1xuICAgICAgICBjb25zdCBlcnJvckNvbnRlbnQgPSB0aGlzLnZhbGlkYXRpb25FcnJvcnNbZXJyb3JJZF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RXJyb3IoZmlyc3RFcnJvciwgZXJyb3JDb250ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmNvbnRyb2w/LmludmFsaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jb250cm9sPy50b3VjaGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGY/LmNvbnRyb2wgfHwgdGhpcy5wYXJlbnQ/LmNvbnRyb2wgfHwgdGhpcy5jb250YWluZXI/LmNvbnRyb2w7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZXJyb3JJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFcnJvcklkKHRoaXMub3JkZXIsIHRoaXMuY29udHJvbEVycm9ycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgY29udHJvbEVycm9ycygpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2w/LmVycm9ycyB8fCBFTVBUWV9SRUNPUkQ7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGdldEVycm9yKFxuICAgICAgICBjb250ZXh0OiBhbnksXG4gICAgICAgIGNvbnRlbnQ/OiBPYnNlcnZhYmxlPFBvbHltb3JwaGV1c0NvbnRlbnQ+IHwgUG9seW1vcnBoZXVzQ29udGVudCxcbiAgICApOiBPYnNlcnZhYmxlPFR1aVZhbGlkYXRpb25FcnJvcj4ge1xuICAgICAgICBpZiAoY29udGV4dCBpbnN0YW5jZW9mIFR1aVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG9mKGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCAmJiB0dWlJc1N0cmluZyhjb250ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG5ldyBUdWlWYWxpZGF0aW9uRXJyb3IoY29udGV4dCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW53cmFwT2JzZXJ2YWJsZShjb250ZW50LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBjb250ZW50KGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgfCBPYnNlcnZhYmxlPFBvbHltb3JwaGV1c0NvbnRlbnQ+XG4gICAgICAgICAgICAgICAgfCBQb2x5bW9ycGhldXNDb250ZW50O1xuXG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZSBpbnN0YW5jZW9mIE9ic2VydmFibGVcbiAgICAgICAgICAgICAgICA/IHVud3JhcE9ic2VydmFibGUobWVzc2FnZSwgY29udGV4dClcbiAgICAgICAgICAgICAgICA6IGRlZmF1bHRFcnJvcihtZXNzYWdlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZhdWx0RXJyb3IoY29udGVudCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGdldEVycm9ySWQoXG4gICAgICAgIG9yZGVyOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICAgICAgY29udHJvbEVycm9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaWQgPSBvcmRlcj8uZmluZCgoZXJyb3JJZCkgPT4gY29udHJvbEVycm9yc1tlcnJvcklkXSk7XG4gICAgICAgIGNvbnN0IFtmYWxsYmFja10gPSBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKTtcblxuICAgICAgICByZXR1cm4gaWQgfHwgZmFsbGJhY2sgfHwgJyc7XG4gICAgfVxufVxuIl19