UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

182 lines (181 loc) 16.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { AbstractI18NApplicable } from '../../share/AbstractI18NApplicable'; import { ValidationStatus } from './ValidationStatus'; /** * @abstract * @template T */ export class AbstractValidator extends AbstractI18NApplicable { /** * @param {?} el * @param {?} target * @param {?} name * @param {?=} options * @param {?=} phloxAppService */ constructor(el, target, name, options, phloxAppService) { super(); this.elementRef = el; this.target = target; this.name = name; this.options = options; this.i18NStatusMap = {}; // ! NOTE TODO PENDING TO CONFIRM THIS LOGIC AGAIN // if (phloxAppService !== null && typeof phloxAppService !== 'undefined') { // phloxAppService.getAppInfo().then((result) => { // let phloxAppInfo = result; // let defMessage = phloxAppInfo.i18n.INVALID_DATA; // // if (this.options === null || typeof this.options === 'undefined') { // let newOptions = { // message: defMessage // }; // this.setOptions(newOptions); // } else { // if (this.options.message === null || typeof this.options.message === 'undefined') { // this.options.message = defMessage; // } // this.setOptions(this.options); // } // }); // } } /** * @return {?} */ ngOnInit() { // auto adding into validator let /** @type {?} */ component = this.getTargetComponent(); if (component !== null) { if (typeof component.addValidator === 'function') { component.addValidator(this); } } } /** * @return {?} */ ngOnDestroy() { // auto remove from validator let /** @type {?} */ component = this.getTargetComponent(); if (component !== null) { if (typeof component.addValidator === 'function') { component.removeValidator(this); } } } /** * @return {?} */ getTargetComponent() { let /** @type {?} */ component = null; try { if (this.target !== null && typeof this.target !== 'undefined') { component = (/** @type {?} */ (this.target))._data.componentView.component; } } catch (/** @type {?} */ error) { } return component; } /** * @return {?} */ getMessage() { let /** @type {?} */ msg = ""; if (this.options !== null && typeof this.options !== 'undefined') { if (this.options.message !== null && typeof this.options.message !== 'undefined') { msg = this.options.message; } } return msg; } /** * @return {?} */ getName() { return this.name; } /** * @return {?} */ getOptions() { return this.options; } /** * @param {?} value * @return {?} */ applyI18N(value) { super.applyI18N(value); if (typeof value === 'undefined') { return; } // value as I18Nobject this.i18NStatusMap = {}; for (let /** @type {?} */ status in ValidationStatus) { let /** @type {?} */ isValueProperty = parseInt(status, 10) >= 0; if (isValueProperty) { let /** @type {?} */ statusName = ValidationStatus[status]; this.i18NStatusMap[statusName] = value[statusName]; } } } /** * @param {?} value * @return {?} */ validate(value) { let /** @type {?} */ result = this.doValidate(value); let /** @type {?} */ ignoreI18N = false; if (this.options !== null && typeof this.options !== 'undefined') { ignoreI18N = this.options.ignoreI18N; if (ignoreI18N === null || typeof ignoreI18N !== 'boolean') { ignoreI18N = false; } } // Resolve ii8n and add to validate result // if option ignore i18n so just leave it if (result !== null && typeof result !== 'undefined' && !ignoreI18N) { let /** @type {?} */ statusName = ValidationStatus[result.getStatus()]; let /** @type {?} */ msg = this.i18NStatusMap[statusName]; if (msg !== null && typeof msg !== 'undefined') { result.setMessage(msg); } } // Force set result.source to target component. result.setSource(this.getTargetComponent()); return result; } /** * @return {?} */ getI18NKey() { // To return validator's name instead of its class name. if (this.name !== null && typeof this.name === 'string') { return this.name; } // Else, return as super. return super.getI18NKey(); } } function AbstractValidator_tsickle_Closure_declarations() { /** @type {?} */ AbstractValidator.prototype.name; /** @type {?} */ AbstractValidator.prototype.elementRef; /** @type {?} */ AbstractValidator.prototype.target; /** @type {?} */ AbstractValidator.prototype.i18NStatusMap; /** * @abstract * @param {?} value * @return {?} */ AbstractValidator.prototype.doValidate = function (value) { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvdmFsaWRhdGUvQWJzdHJhY3RWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUl0RCxNQUFNLHdCQUFxQyxTQUFRLHNCQUFzQjs7Ozs7Ozs7SUFPdkUsWUFBWSxFQUFjLEVBQUUsTUFBd0IsRUFBRSxJQUFZLEVBQUUsT0FBYSxFQUFFLGVBQXFDO1FBQ3RILEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBc0J6Qjs7OztJQUVNLFFBQVE7O1FBRWIscUJBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7Ozs7O0lBR0ksV0FBVzs7UUFFaEIscUJBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pDO1NBQ0Y7Ozs7O0lBR0ksa0JBQWtCO1FBQ3ZCLHFCQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDO1lBQ0gsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELFNBQVMsR0FBRyxtQkFBTSxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7YUFDOUQ7U0FDRjtRQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFBLEtBQUssRUFBRSxDQUFDO1NBQ2hCO1FBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQzs7Ozs7SUFHWixVQUFVO1FBQ2YscUJBQUksR0FBRyxHQUFXLEVBQUUsQ0FBQztRQUNyQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7YUFDNUI7U0FDRjtRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUM7Ozs7O0lBR04sT0FBTztRQUNaLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBOzs7OztJQUdYLFVBQVU7UUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQzs7Ozs7O0lBR2YsU0FBUyxDQUFDLEtBQVU7UUFDekIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QixFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQztTQUNSOztRQUdELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxDQUFDLHFCQUFJLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDcEMscUJBQUksZUFBZSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWhELEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLHFCQUFJLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDcEQ7U0FDRjs7Ozs7O0lBR0ksUUFBUSxDQUFDLEtBQVE7UUFDdEIscUJBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEMscUJBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqRSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDckMsRUFBRSxDQUFDLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQ3BCO1NBQ0Y7OztRQUlELEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNwRSxxQkFBSSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDdEQscUJBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFekMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3hCO1NBQ0Y7O1FBR0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Ozs7O0lBSVQsVUFBVTs7UUFFZixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN4RCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNsQjs7UUFHRCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDOztDQUk3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9uSW5pdCwgRWxlbWVudFJlZiwgVmlld0NvbnRhaW5lclJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi9tb2RlbC9WYWxpZGF0aW9uUmVzdWx0JztcbmltcG9ydCB7IEFic3RyYWN0STE4TkFwcGxpY2FibGUgfSBmcm9tICcuLi8uLi9zaGFyZS9BYnN0cmFjdEkxOE5BcHBsaWNhYmxlJztcbmltcG9ydCB7IElWYWxpZGF0YWJsZSB9IGZyb20gJy4vSVZhbGlkYXRhYmxlJztcbmltcG9ydCB7IElWYWxpZGF0b3IgfSBmcm9tICcuL0lWYWxpZGF0b3InO1xuaW1wb3J0IHsgVmFsaWRhdGlvblN0YXR1cyB9IGZyb20gJy4vVmFsaWRhdGlvblN0YXR1cyc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm8gfSBmcm9tICcuLi8uLi9jb21wb25lbnQvbW9kZWwvUGhsb3hBcHBJbmZvJztcbmltcG9ydCB7IFBobG94QXBwSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL1BobG94QXBwSW5mb1NlcnZpY2Uuc2VydmljZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZhbGlkYXRvcjxUPiBleHRlbmRzIEFic3RyYWN0STE4TkFwcGxpY2FibGUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgSVZhbGlkYXRvcjxUPiB7XG5cbiAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZztcbiAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIHByb3RlY3RlZCB0YXJnZXQ6IFZpZXdDb250YWluZXJSZWY7XG4gIHByb3RlY3RlZCBpMThOU3RhdHVzTWFwOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoZWw6IEVsZW1lbnRSZWYsIHRhcmdldDogVmlld0NvbnRhaW5lclJlZiwgbmFtZTogc3RyaW5nLCBvcHRpb25zPzogYW55LCBwaGxveEFwcFNlcnZpY2U/OiBQaGxveEFwcEluZm9TZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsO1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmkxOE5TdGF0dXNNYXAgPSB7fTtcblxuICAgIC8vICEgTk9URSBUT0RPIFBFTkRJTkcgVE8gQ09ORklSTSBUSElTIExPR0lDIEFHQUlOXG5cbiAgICAvLyBpZiAocGhsb3hBcHBTZXJ2aWNlICE9PSBudWxsICYmIHR5cGVvZiBwaGxveEFwcFNlcnZpY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gICAgIHBobG94QXBwU2VydmljZS5nZXRBcHBJbmZvKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgLy8gICAgICAgICBsZXQgcGhsb3hBcHBJbmZvID0gcmVzdWx0O1xuICAgIC8vICAgICAgICAgbGV0IGRlZk1lc3NhZ2UgPSBwaGxveEFwcEluZm8uaTE4bi5JTlZBTElEX0RBVEE7XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMub3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyAgICAgICAgICAgICBsZXQgbmV3T3B0aW9ucyA9IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmTWVzc2FnZVxuICAgIC8vICAgICAgICAgICAgIH07XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLm1lc3NhZ2UgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMub3B0aW9ucy5tZXNzYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubWVzc2FnZSA9IGRlZk1lc3NhZ2U7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gYXV0byBhZGRpbmcgaW50byB2YWxpZGF0b3JcbiAgICBsZXQgY29tcG9uZW50ID0gdGhpcy5nZXRUYXJnZXRDb21wb25lbnQoKTtcbiAgICBpZiAoY29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5hZGRWYWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29tcG9uZW50LmFkZFZhbGlkYXRvcih0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gYXV0byByZW1vdmUgZnJvbSB2YWxpZGF0b3JcbiAgICBsZXQgY29tcG9uZW50ID0gdGhpcy5nZXRUYXJnZXRDb21wb25lbnQoKTtcbiAgICBpZiAoY29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5hZGRWYWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29tcG9uZW50LnJlbW92ZVZhbGlkYXRvcih0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VGFyZ2V0Q29tcG9uZW50KCk6IGFueSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnRhcmdldCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy50YXJnZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbXBvbmVudCA9ICg8YW55PnRoaXMudGFyZ2V0KS5fZGF0YS5jb21wb25lbnRWaWV3LmNvbXBvbmVudDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGxldCBtc2c6IHN0cmluZyA9IFwiXCI7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tZXNzYWdlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbXNnID0gdGhpcy5vcHRpb25zLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtc2c7XG4gIH1cblxuICBwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWVcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcHRpb25zKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUkxOE4odmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLmFwcGx5STE4Tih2YWx1ZSk7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHZhbHVlIGFzIEkxOE5vYmplY3RcbiAgICB0aGlzLmkxOE5TdGF0dXNNYXAgPSB7fTtcbiAgICBmb3IgKGxldCBzdGF0dXMgaW4gVmFsaWRhdGlvblN0YXR1cykge1xuICAgICAgbGV0IGlzVmFsdWVQcm9wZXJ0eSA9IHBhcnNlSW50KHN0YXR1cywgMTApID49IDA7XG5cbiAgICAgIGlmIChpc1ZhbHVlUHJvcGVydHkpIHtcbiAgICAgICAgbGV0IHN0YXR1c05hbWUgPSBWYWxpZGF0aW9uU3RhdHVzW3N0YXR1c107XG4gICAgICAgIHRoaXMuaTE4TlN0YXR1c01hcFtzdGF0dXNOYW1lXSA9IHZhbHVlW3N0YXR1c05hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZSh2YWx1ZTogVCk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGxldCByZXN1bHQgPSB0aGlzLmRvVmFsaWRhdGUodmFsdWUpO1xuXG4gICAgbGV0IGlnbm9yZUkxOE4gPSBmYWxzZTtcbiAgICBpZiAodGhpcy5vcHRpb25zICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZ25vcmVJMThOID0gdGhpcy5vcHRpb25zLmlnbm9yZUkxOE47XG4gICAgICBpZiAoaWdub3JlSTE4TiA9PT0gbnVsbCB8fCB0eXBlb2YgaWdub3JlSTE4TiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlnbm9yZUkxOE4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIGlpOG4gYW5kIGFkZCB0byB2YWxpZGF0ZSByZXN1bHRcbiAgICAvLyBpZiBvcHRpb24gaWdub3JlIGkxOG4gc28ganVzdCBsZWF2ZSBpdFxuICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgdHlwZW9mIHJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlnbm9yZUkxOE4pIHtcbiAgICAgIGxldCBzdGF0dXNOYW1lID0gVmFsaWRhdGlvblN0YXR1c1tyZXN1bHQuZ2V0U3RhdHVzKCldO1xuICAgICAgbGV0IG1zZyA9IHRoaXMuaTE4TlN0YXR1c01hcFtzdGF0dXNOYW1lXTtcblxuICAgICAgaWYgKG1zZyAhPT0gbnVsbCAmJiB0eXBlb2YgbXNnICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXN1bHQuc2V0TWVzc2FnZShtc2cpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvcmNlIHNldCByZXN1bHQuc291cmNlIHRvIHRhcmdldCBjb21wb25lbnQuXG4gICAgcmVzdWx0LnNldFNvdXJjZSh0aGlzLmdldFRhcmdldENvbXBvbmVudCgpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBPdmVycmlkZVxuICBwdWJsaWMgZ2V0STE4TktleSgpOiBzdHJpbmcge1xuICAgIC8vIFRvIHJldHVybiB2YWxpZGF0b3IncyBuYW1lIGluc3RlYWQgb2YgaXRzIGNsYXNzIG5hbWUuXG4gICAgaWYgKHRoaXMubmFtZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5uYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCByZXR1cm4gYXMgc3VwZXIuXG4gICAgcmV0dXJuIHN1cGVyLmdldEkxOE5LZXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBkb1ZhbGlkYXRlKHZhbHVlOiBUKTogVmFsaWRhdGlvblJlc3VsdDtcbn1cbiJdfQ==