com.phloxui
Version:
PhloxUI Ng2+ Framework
303 lines (302 loc) • 25.5 kB
JavaScript
/**
* @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=