UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

303 lines (302 loc) 25.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { EventEmitter } from '@angular/core'; import { AbstractI18NApplicable } from '../../share/AbstractI18NApplicable'; import { Option } from '../../decorator/Option.decorator'; import { EventUtils } from '../../share/utils/EventUtils'; import { START_VALIDATE_EVENT, END_VALIDATE_EVENT } from '../../share/CustomEventType'; /** * @abstract * @template T */ var AbstractValidatable = /** @class */ (function (_super) { tslib_1.__extends(AbstractValidatable, _super); function AbstractValidatable() { var _this = _super.call(this) || this; _this.validators = []; _this.startValidateEvent = new EventEmitter(); _this.endValidateEvent = new EventEmitter(); return _this; } /** * @return {?} */ AbstractValidatable.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @param {?} value * @return {?} */ AbstractValidatable.prototype.doValidate = /** * @param {?} value * @return {?} */ function (value) { var /** @type {?} */ result = []; if (this.validators !== null && typeof this.validators !== 'undefined') { try { for (var _a = tslib_1.__values(this.validators), _b = _a.next(); !_b.done; _b = _a.next()) { var vdt = _b.value; var /** @type {?} */ vResult = vdt.validate(value); result.push(vResult); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_1) throw e_1.error; } } } return result; var e_1, _c; }; /** * @param {?} value * @return {?} */ AbstractValidatable.prototype.validate = /** * @param {?} value * @return {?} */ function (value) { // emit start validate var /** @type {?} */ d = { value: value }; var /** @type {?} */ startEv = EventUtils.newCustomEvent(START_VALIDATE_EVENT, this, d, null); this.startValidateEvent.emit(startEv); // validate var /** @type {?} */ result = this.doValidate(value); this.onValidationEnd(value, result); // emit end validate var /** @type {?} */ dataEnd = { value: value, result: result, }; var /** @type {?} */ endEv = EventUtils.newCustomEvent(END_VALIDATE_EVENT, this, dataEnd, null); this.endValidateEvent.emit(endEv); return result; }; /** * @param {?} validator * @return {?} */ AbstractValidatable.prototype.addValidator = /** * @param {?} validator * @return {?} */ function (validator) { if (validator === null || typeof validator === 'undefined') { return; } // check contain if contain return false var /** @type {?} */ index = this.validators.indexOf(validator); if (index >= 0) { return false; } var /** @type {?} */ i18nValidator = /** @type {?} */ (validator); if (typeof this.i18nValue !== 'undefined' && typeof i18nValidator.applyI18N === 'function') { var /** @type {?} */ value = this.i18nValue; if (value === null) { i18nValidator.applyI18N(null); } else { if (value.validators !== null && typeof value.validators !== 'undefined') { var /** @type {?} */ bypass = false; if (typeof i18nValidator.isBypassKey === 'function') { bypass = i18nValidator.isBypassKey(); } if (bypass) { i18nValidator.applyI18N(value); } else { var /** @type {?} */ i18nCVal = value.validators[i18nValidator.getI18NKey()]; if (typeof i18nCVal !== 'undefined') { i18nValidator.applyI18N(i18nCVal); } } } } } if (this.options !== null && typeof this.options !== 'undefined' && typeof i18nValidator.setOptions === 'function') { if (this.options.validators !== null && typeof this.options.validators !== 'undefined') { var /** @type {?} */ options = this.options.validators; if (typeof i18nValidator.getName === 'function') { var /** @type {?} */ name_1 = i18nValidator.getName(); if (name_1 !== null && typeof name_1 === 'string') { var /** @type {?} */ optionsByName = this.options.validators[name_1]; if (optionsByName !== null && optionsByName !== undefined) { options = optionsByName; } } } i18nValidator.setOptions(options); } } this.validators.push(validator); return true; }; /** * @param {?} validator * @return {?} */ AbstractValidatable.prototype.removeValidator = /** * @param {?} validator * @return {?} */ function (validator) { if (validator === null || typeof validator === 'undefined') { return false; } var /** @type {?} */ index = this.validators.indexOf(validator); if (index < 0) { return false; } this.validators.splice(index, 1); return true; }; /** * @return {?} */ AbstractValidatable.prototype.getValidators = /** * @return {?} */ function () { return this.validators; }; /** * @return {?} */ AbstractValidatable.prototype.getStartValidateEvent = /** * @return {?} */ function () { return this.startValidateEvent; }; /** * @return {?} */ AbstractValidatable.prototype.getEndValidateEvent = /** * @return {?} */ function () { return this.endValidateEvent; }; /** * @param {?} event * @return {?} */ AbstractValidatable.prototype.setStartValidateEvent = /** * @param {?} event * @return {?} */ function (event) { this.startValidateEvent = event; }; /** * @param {?} event * @return {?} */ AbstractValidatable.prototype.setEndValidateEvent = /** * @param {?} event * @return {?} */ function (event) { this.endValidateEvent = event; }; /** * @return {?} */ AbstractValidatable.prototype.resetValidationResult = /** * @return {?} */ function () { }; /** * @param {?} value * @return {?} */ AbstractValidatable.prototype.applyI18N = /** * @param {?} value * @return {?} */ function (value) { if (typeof value === 'undefined') { return; } _super.prototype.applyI18N.call(this, value); if (this.validators !== null && typeof this.validators !== 'undefined') { try { for (var _a = tslib_1.__values(this.validators), _b = _a.next(); !_b.done; _b = _a.next()) { var vt = _b.value; var /** @type {?} */ validator = /** @type {?} */ (vt); // check if child is applicable if (typeof validator.applyI18N === 'function') { if (value === null) { validator.applyI18N(null); } else { if (value.validators !== null && typeof value.validators !== 'undefined') { var /** @type {?} */ bypass = false; if (typeof validator.isBypassKey === 'function') { bypass = validator.isBypassKey(); } if (bypass) { validator.applyI18N(value); } else { var /** @type {?} */ i18nCVal = value.validators[validator.getI18NKey()]; if (typeof i18nCVal !== 'undefined') { validator.applyI18N(i18nCVal); } } } } } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_2) throw e_2.error; } } } var e_2, _c; }; tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractValidatable.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractValidatable.prototype, "endValidateEvent", void 0); return AbstractValidatable; }(AbstractI18NApplicable)); export { AbstractValidatable }; function AbstractValidatable_tsickle_Closure_declarations() { /** @type {?} */ AbstractValidatable.prototype.validators; /** @type {?} */ AbstractValidatable.prototype.startValidateEvent; /** @type {?} */ AbstractValidatable.prototype.endValidateEvent; /** * @abstract * @param {?} inputValue * @param {?} results * @return {?} */ AbstractValidatable.prototype.onValidationEnd = function (inputValue, results) { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RWYWxpZGF0YWJsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC92YWxpZGF0ZS9BYnN0cmFjdFZhbGlkYXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFVLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdyRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUc1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7SUFFbEMsK0NBQXNCO0lBUXpFO1FBQUEsWUFDRSxpQkFBTyxTQUlSO1FBSEMsS0FBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsS0FBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0MsS0FBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7O0tBQzVDOzs7O0lBRU0sc0NBQVE7Ozs7Ozs7OztJQU1MLHdDQUFVOzs7O0lBQXBCLFVBQXFCLEtBQVE7UUFDM0IscUJBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQzs7Z0JBQ3ZFLEdBQUcsQ0FBQyxDQUFZLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsVUFBVSxDQUFBLGdCQUFBO29CQUExQixJQUFJLEdBQUcsV0FBQTtvQkFDVixxQkFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FB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OzBDQUNNLFlBQVk7OzhCQWhCMUM7RUFVcUQsc0JBQXNCO1NBQXJELG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9uSW5pdCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi9tb2RlbC9WYWxpZGF0aW9uUmVzdWx0JztcbmltcG9ydCB7IEFic3RyYWN0STE4TkFwcGxpY2FibGUgfSBmcm9tICcuLi8uLi9zaGFyZS9BYnN0cmFjdEkxOE5BcHBsaWNhYmxlJztcbmltcG9ydCB7IElWYWxpZGF0YWJsZSB9IGZyb20gJy4vSVZhbGlkYXRhYmxlJztcbmltcG9ydCB7IElWYWxpZGF0b3IgfSBmcm9tICcuL0lWYWxpZGF0b3InO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlL3V0aWxzL0V2ZW50VXRpbHMnO1xuaW1wb3J0IHsgU1RBUlRfVkFMSURBVEVfRVZFTlQsIEVORF9WQUxJREFURV9FVkVOVCB9IGZyb20gJy4uLy4uL3NoYXJlL0N1c3RvbUV2ZW50VHlwZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZhbGlkYXRhYmxlPFQ+IGV4dGVuZHMgQWJzdHJhY3RJMThOQXBwbGljYWJsZSBpbXBsZW1lbnRzIE9uSW5pdCwgSVZhbGlkYXRhYmxlPFQ+e1xuXG4gIHByaXZhdGUgdmFsaWRhdG9yczogSVZhbGlkYXRvcjxUPltdO1xuICBAT3B0aW9uKCdzdGFydFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIHN0YXJ0VmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPcHRpb24oJ2VuZFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIGVuZFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy52YWxpZGF0b3JzID0gW107XG4gICAgdGhpcy5zdGFydFZhbGlkYXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5lbmRWYWxpZGF0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25WYWxpZGF0aW9uRW5kKGlucHV0VmFsdWU6IFQsIHJlc3VsdHM6IFZhbGlkYXRpb25SZXN1bHRbXSk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGRvVmFsaWRhdGUodmFsdWU6IFQpOiBWYWxpZGF0aW9uUmVzdWx0W10ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgIGlmICh0aGlzLnZhbGlkYXRvcnMgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMudmFsaWRhdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAobGV0IHZkdCBvZiB0aGlzLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgbGV0IHZSZXN1bHQgPSB2ZHQudmFsaWRhdGUodmFsdWUpO1xuICAgICAgICByZXN1bHQucHVzaCh2UmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBUKTogVmFsaWRhdGlvblJlc3VsdFtdIHtcbiAgICAvLyBlbWl0IHN0YXJ0IHZhbGlkYXRlXG4gICAgbGV0IGQ6IGFueSA9IHtcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH07XG4gICAgbGV0IHN0YXJ0RXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KFNUQVJUX1ZBTElEQVRFX0VWRU5ULCB0aGlzLCBkLCBudWxsKTtcblxuICAgIHRoaXMuc3RhcnRWYWxpZGF0ZUV2ZW50LmVtaXQoc3RhcnRFdik7XG5cbiAgICAvLyB2YWxpZGF0ZVxuICAgIGxldCByZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHRbXSA9IHRoaXMuZG9WYWxpZGF0ZSh2YWx1ZSk7XG5cbiAgICB0aGlzLm9uVmFsaWRhdGlvbkVuZCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgIC8vIGVtaXQgZW5kIHZhbGlkYXRlXG4gICAgbGV0IGRhdGFFbmQ6IGFueSA9IHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgIH07XG4gICAgbGV0IGVuZEV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChFTkRfVkFMSURBVEVfRVZFTlQsIHRoaXMsIGRhdGFFbmQsIG51bGwpO1xuXG4gICAgdGhpcy5lbmRWYWxpZGF0ZUV2ZW50LmVtaXQoZW5kRXYpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRWYWxpZGF0b3IodmFsaWRhdG9yOiBJVmFsaWRhdG9yPFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsaWRhdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGNvbnRhaW4gaWYgY29udGFpbiByZXR1cm4gZmFsc2VcbiAgICBsZXQgaW5kZXggPSB0aGlzLnZhbGlkYXRvcnMuaW5kZXhPZih2YWxpZGF0b3IpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGkxOG5WYWxpZGF0b3IgPSB2YWxpZGF0b3IgYXMgYW55O1xuICAgIGlmICh0eXBlb2YgdGhpcy5pMThuVmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpMThuVmFsaWRhdG9yLmFwcGx5STE4TiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5pMThuVmFsdWU7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgaTE4blZhbGlkYXRvci5hcHBseUkxOE4obnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUudmFsaWRhdG9ycyAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUudmFsaWRhdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBsZXQgYnlwYXNzOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpMThuVmFsaWRhdG9yLmlzQnlwYXNzS2V5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBieXBhc3MgPSBpMThuVmFsaWRhdG9yLmlzQnlwYXNzS2V5KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGJ5cGFzcykge1xuICAgICAgICAgICAgaTE4blZhbGlkYXRvci5hcHBseUkxOE4odmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaTE4bkNWYWwgPSB2YWx1ZS52YWxpZGF0b3JzW2kxOG5WYWxpZGF0b3IuZ2V0STE4TktleSgpXTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpMThuQ1ZhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgaTE4blZhbGlkYXRvci5hcHBseUkxOE4oaTE4bkNWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGkxOG5WYWxpZGF0b3Iuc2V0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy52YWxpZGF0b3JzICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMudmFsaWRhdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMudmFsaWRhdG9ycztcblxuICAgICAgICBpZiAodHlwZW9mIGkxOG5WYWxpZGF0b3IuZ2V0TmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGxldCBuYW1lID0gaTE4blZhbGlkYXRvci5nZXROYW1lKCk7XG5cbiAgICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCAmJiB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zQnlOYW1lID0gdGhpcy5vcHRpb25zLnZhbGlkYXRvcnNbbmFtZV07XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zQnlOYW1lICE9PSBudWxsICYmIG9wdGlvbnNCeU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc0J5TmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpMThuVmFsaWRhdG9yLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0b3JzLnB1c2godmFsaWRhdG9yKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVZhbGlkYXRvcih2YWxpZGF0b3I6IElWYWxpZGF0b3I8VD4pOiBib29sZWFuIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBudWxsIHx8IHR5cGVvZiB2YWxpZGF0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gdGhpcy52YWxpZGF0b3JzLmluZGV4T2YodmFsaWRhdG9yKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0b3JzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWxpZGF0b3JzKCk6IElWYWxpZGF0b3I8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9ycztcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGFydFZhbGlkYXRlRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0VmFsaWRhdGVFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFbmRWYWxpZGF0ZUV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5lbmRWYWxpZGF0ZUV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldFN0YXJ0VmFsaWRhdGVFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnN0YXJ0VmFsaWRhdGVFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldEVuZFZhbGlkYXRlRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5lbmRWYWxpZGF0ZUV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRWYWxpZGF0aW9uUmVzdWx0KCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgYXBwbHlJMThOKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5hcHBseUkxOE4odmFsdWUpO1xuXG4gICAgaWYgKHRoaXMudmFsaWRhdG9ycyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy52YWxpZGF0b3JzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZm9yIChsZXQgdnQgb2YgdGhpcy52YWxpZGF0b3JzKSB7XG4gICAgICAgIGxldCB2YWxpZGF0b3IgPSB2dCBhcyBhbnk7XG4gICAgICAgIC8vIGNoZWNrIGlmIGNoaWxkIGlzIGFwcGxpY2FibGVcbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3IuYXBwbHlJMThOID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YWxpZGF0b3IuYXBwbHlJMThOKG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFsdWUudmFsaWRhdG9ycyAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUudmFsaWRhdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgbGV0IGJ5cGFzczogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvci5pc0J5cGFzc0tleSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGJ5cGFzcyA9IHZhbGlkYXRvci5pc0J5cGFzc0tleSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGJ5cGFzcykge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvci5hcHBseUkxOE4odmFsdWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBpMThuQ1ZhbCA9IHZhbHVlLnZhbGlkYXRvcnNbdmFsaWRhdG9yLmdldEkxOE5LZXkoKV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGkxOG5DVmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmFwcGx5STE4TihpMThuQ1ZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=