UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

234 lines (233 loc) 23.1 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 */ export class AbstractValidatable extends AbstractI18NApplicable { constructor() { super(); this.validators = []; this.startValidateEvent = new EventEmitter(); this.endValidateEvent = new EventEmitter(); } /** * @return {?} */ ngOnInit() { } /** * @param {?} value * @return {?} */ doValidate(value) { let /** @type {?} */ result = []; if (this.validators !== null && typeof this.validators !== 'undefined') { for (let /** @type {?} */ vdt of this.validators) { let /** @type {?} */ vResult = vdt.validate(value); result.push(vResult); } } return result; } /** * @param {?} value * @return {?} */ validate(value) { // emit start validate let /** @type {?} */ d = { value: value }; let /** @type {?} */ startEv = EventUtils.newCustomEvent(START_VALIDATE_EVENT, this, d, null); this.startValidateEvent.emit(startEv); // validate let /** @type {?} */ result = this.doValidate(value); this.onValidationEnd(value, result); // emit end validate let /** @type {?} */ dataEnd = { value: value, result: result, }; let /** @type {?} */ endEv = EventUtils.newCustomEvent(END_VALIDATE_EVENT, this, dataEnd, null); this.endValidateEvent.emit(endEv); return result; } /** * @param {?} validator * @return {?} */ addValidator(validator) { if (validator === null || typeof validator === 'undefined') { return; } // check contain if contain return false let /** @type {?} */ index = this.validators.indexOf(validator); if (index >= 0) { return false; } let /** @type {?} */ i18nValidator = /** @type {?} */ (validator); if (typeof this.i18nValue !== 'undefined' && typeof i18nValidator.applyI18N === 'function') { let /** @type {?} */ value = this.i18nValue; if (value === null) { i18nValidator.applyI18N(null); } else { if (value.validators !== null && typeof value.validators !== 'undefined') { let /** @type {?} */ bypass = false; if (typeof i18nValidator.isBypassKey === 'function') { bypass = i18nValidator.isBypassKey(); } if (bypass) { i18nValidator.applyI18N(value); } else { let /** @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') { let /** @type {?} */ options = this.options.validators; if (typeof i18nValidator.getName === 'function') { let /** @type {?} */ name = i18nValidator.getName(); if (name !== null && typeof name === 'string') { let /** @type {?} */ optionsByName = this.options.validators[name]; if (optionsByName !== null && optionsByName !== undefined) { options = optionsByName; } } } i18nValidator.setOptions(options); } } this.validators.push(validator); return true; } /** * @param {?} validator * @return {?} */ removeValidator(validator) { if (validator === null || typeof validator === 'undefined') { return false; } let /** @type {?} */ index = this.validators.indexOf(validator); if (index < 0) { return false; } this.validators.splice(index, 1); return true; } /** * @return {?} */ getValidators() { return this.validators; } /** * @return {?} */ getStartValidateEvent() { return this.startValidateEvent; } /** * @return {?} */ getEndValidateEvent() { return this.endValidateEvent; } /** * @param {?} event * @return {?} */ setStartValidateEvent(event) { this.startValidateEvent = event; } /** * @param {?} event * @return {?} */ setEndValidateEvent(event) { this.endValidateEvent = event; } /** * @return {?} */ resetValidationResult() { } /** * @param {?} value * @return {?} */ applyI18N(value) { if (typeof value === 'undefined') { return; } super.applyI18N(value); if (this.validators !== null && typeof this.validators !== 'undefined') { for (let /** @type {?} */ vt of this.validators) { let /** @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') { let /** @type {?} */ bypass = false; if (typeof validator.isBypassKey === 'function') { bypass = validator.isBypassKey(); } if (bypass) { validator.applyI18N(value); } else { let /** @type {?} */ i18nCVal = value.validators[validator.getI18NKey()]; if (typeof i18nCVal !== 'undefined') { validator.applyI18N(i18nCVal); } } } } } } } } } 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); 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RWYWxpZGF0YWJsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC92YWxpZGF0ZS9BYnN0cmFjdFZhbGlkYXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFVLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdyRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUc1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7OztBQUV2RixNQUFNLDBCQUF1QyxTQUFRLHNCQUFzQjtJQVF6RTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7S0FDNUM7Ozs7SUFFTSxRQUFROzs7Ozs7SUFNTCxVQUFVLENBQUMsS0FBUTtRQUMzQixxQkFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWhCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLEdBQUcsQ0FBQyxDQUFDLHFCQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDaEMscUJBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxJ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Q0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUM5QyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDbkIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDM0I7b0JBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ04sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQ3pFLHFCQUFJLE1BQU0sR0FBWSxLQUFLLENBQUM7NEJBQzVCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLFdBQVcsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dDQUNoRCxNQUFNLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDOzZCQUNsQzs0QkFFRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dDQUNYLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQzVCOzRCQUFDLElBQUksQ0FBQyxDQUFDO2dDQUNOLHFCQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dDQUV4RCxFQUFFLENBQUMsQ0FBQyxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO29DQUNwQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lDQUMvQjs2QkFDRjt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7O0NBRUo7O0lBaE1FLE1BQU0sQ0FBQyxlQUFlLENBQUM7c0NBQ00sWUFBWTs7O0lBQ3pDLE1BQU0sQ0FBQyxhQUFhLENBQUM7c0NBQ00sWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9uSW5pdCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi9tb2RlbC9WYWxpZGF0aW9uUmVzdWx0JztcbmltcG9ydCB7IEFic3RyYWN0STE4TkFwcGxpY2FibGUgfSBmcm9tICcuLi8uLi9zaGFyZS9BYnN0cmFjdEkxOE5BcHBsaWNhYmxlJztcbmltcG9ydCB7IElWYWxpZGF0YWJsZSB9IGZyb20gJy4vSVZhbGlkYXRhYmxlJztcbmltcG9ydCB7IElWYWxpZGF0b3IgfSBmcm9tICcuL0lWYWxpZGF0b3InO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlL3V0aWxzL0V2ZW50VXRpbHMnO1xuaW1wb3J0IHsgU1RBUlRfVkFMSURBVEVfRVZFTlQsIEVORF9WQUxJREFURV9FVkVOVCB9IGZyb20gJy4uLy4uL3NoYXJlL0N1c3RvbUV2ZW50VHlwZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZhbGlkYXRhYmxlPFQ+IGV4dGVuZHMgQWJzdHJhY3RJMThOQXBwbGljYWJsZSBpbXBsZW1lbnRzIE9uSW5pdCwgSVZhbGlkYXRhYmxlPFQ+e1xuXG4gIHByaXZhdGUgdmFsaWRhdG9yczogSVZhbGlkYXRvcjxUPltdO1xuICBAT3B0aW9uKCdzdGFydFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIHN0YXJ0VmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPcHRpb24oJ2VuZFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIGVuZFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy52YWxpZGF0b3JzID0gW107XG4gICAgdGhpcy5zdGFydFZhbGlkYXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5lbmRWYWxpZGF0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25WYWxpZGF0aW9uRW5kKGlucHV0VmFsdWU6IFQsIHJlc3VsdHM6IFZhbGlkYXRpb25SZXN1bHRbXSk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGRvVmFsaWRhdGUodmFsdWU6IFQpOiBWYWxpZGF0aW9uUmVzdWx0W10ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgIGlmICh0aGlzLnZhbGlkYXRvcnMgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMudmFsaWRhdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAobGV0IHZkdCBvZiB0aGlzLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgbGV0IHZSZXN1bHQgPSB2ZHQudmFsaWRhdGUodmFsdWUpO1xuICAgICAgICByZXN1bHQucHVzaCh2UmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKHZhbHVlOiBUKTogVmFsaWRhdGlvblJlc3VsdFtdIHtcbiAgICAvLyBlbWl0IHN0YXJ0IHZhbGlkYXRlXG4gICAgbGV0IGQ6IGFueSA9IHtcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH07XG4gICAgbGV0IHN0YXJ0RXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KFNUQVJUX1ZBTElEQVRFX0VWRU5ULCB0aGlzLCBkLCBudWxsKTtcblxuICAgIHRoaXMuc3RhcnRWYWxpZGF0ZUV2ZW50LmVtaXQoc3RhcnRFdik7XG5cbiAgICAvLyB2YWxpZGF0ZVxuICAgIGxldCByZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHRbXSA9IHRoaXMuZG9WYWxpZGF0ZSh2YWx1ZSk7XG5cbiAgICB0aGlzLm9uVmFsaWRhdGlvbkVuZCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgIC8vIGVtaXQgZW5kIHZhbGlkYXRlXG4gICAgbGV0IGRhdGFFbmQ6IGFueSA9IHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgIH07XG4gICAgbGV0IGVuZEV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChFTkRfVkFMSURBVEVfRVZFTlQsIHRoaXMsIGRhdGFFbmQsIG51bGwpO1xuXG4gICAgdGhpcy5lbmRWYWxpZGF0ZUV2ZW50LmVtaXQoZW5kRXYpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRWYWxpZGF0b3IodmFsaWRhdG9yOiBJVmFsaWRhdG9yPFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsaWRhdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGNvbnRhaW4gaWYgY29udGFpbiByZXR1cm4gZmFsc2VcbiAgICBsZXQgaW5kZXggPSB0aGlzLnZhbGlkYXRvcnMuaW5kZXhPZih2YWxpZGF0b3IpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGkxOG5WYWxpZGF0b3IgPSB2YWxpZGF0b3IgYXMgYW55O1xuICAgIGlmICh0eXBlb2YgdGhpcy5pMThuVmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpMThuVmFsaWRhdG9yLmFwcGx5STE4TiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5pMThuVmFsdWU7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgaTE4blZhbGlkYXRvci5hcHBseUkxOE4obnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUudmFsaWRhdG9ycyAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUudmFsaWRhdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBsZXQgYnlwYXNzOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpMThuVmFsaWRhdG9yLmlzQnlwYXNzS2V5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBieXBhc3MgPSBpMThuVmFsaWRhdG9yLmlzQnlwYXNzS2V5KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGJ5cGFzcykge1xuICAgICAgICAgICAgaTE4blZhbGlkYXRvci5hcHBseUkxOE4odmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaTE4bkNWYWwgPSB2YWx1ZS52YWxpZGF0b3JzW2kxOG5WYWxpZGF0b3IuZ2V0STE4TktleSgpXTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpMThuQ1ZhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgaTE4blZhbGlkYXRvci5hcHBseUkxOE4oaTE4bkNWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGkxOG5WYWxpZGF0b3Iuc2V0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy52YWxpZGF0b3JzICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMudmFsaWRhdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMudmFsaWRhdG9ycztcblxuICAgICAgICBpZiAodHlwZW9mIGkxOG5WYWxpZGF0b3IuZ2V0TmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGxldCBuYW1lID0gaTE4blZhbGlkYXRvci5nZXROYW1lKCk7XG5cbiAgICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCAmJiB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zQnlOYW1lID0gdGhpcy5vcHRpb25zLnZhbGlkYXRvcnNbbmFtZV07XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zQnlOYW1lICE9PSBudWxsICYmIG9wdGlvbnNCeU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc0J5TmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpMThuVmFsaWRhdG9yLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0b3JzLnB1c2godmFsaWRhdG9yKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVZhbGlkYXRvcih2YWxpZGF0b3I6IElWYWxpZGF0b3I8VD4pOiBib29sZWFuIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBudWxsIHx8IHR5cGVvZiB2YWxpZGF0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gdGhpcy52YWxpZGF0b3JzLmluZGV4T2YodmFsaWRhdG9yKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0b3JzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWxpZGF0b3JzKCk6IElWYWxpZGF0b3I8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9ycztcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGFydFZhbGlkYXRlRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0VmFsaWRhdGVFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFbmRWYWxpZGF0ZUV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5lbmRWYWxpZGF0ZUV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldFN0YXJ0VmFsaWRhdGVFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnN0YXJ0VmFsaWRhdGVFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldEVuZFZhbGlkYXRlRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5lbmRWYWxpZGF0ZUV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRWYWxpZGF0aW9uUmVzdWx0KCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgYXBwbHlJMThOKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5hcHBseUkxOE4odmFsdWUpO1xuXG4gICAgaWYgKHRoaXMudmFsaWRhdG9ycyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy52YWxpZGF0b3JzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZm9yIChsZXQgdnQgb2YgdGhpcy52YWxpZGF0b3JzKSB7XG4gICAgICAgIGxldCB2YWxpZGF0b3IgPSB2dCBhcyBhbnk7XG4gICAgICAgIC8vIGNoZWNrIGlmIGNoaWxkIGlzIGFwcGxpY2FibGVcbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3IuYXBwbHlJMThOID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YWxpZGF0b3IuYXBwbHlJMThOKG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFsdWUudmFsaWRhdG9ycyAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUudmFsaWRhdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgbGV0IGJ5cGFzczogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvci5pc0J5cGFzc0tleSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGJ5cGFzcyA9IHZhbGlkYXRvci5pc0J5cGFzc0tleSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGJ5cGFzcykge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvci5hcHBseUkxOE4odmFsdWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBpMThuQ1ZhbCA9IHZhbHVlLnZhbGlkYXRvcnNbdmFsaWRhdG9yLmdldEkxOE5LZXkoKV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGkxOG5DVmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmFwcGx5STE4TihpMThuQ1ZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=