ngx-form-control
Version:
Form controls for angular 6
275 lines (274 loc) • 21.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { NG_VALIDATORS, NG_VALUE_ACCESSOR, NgModel } from '@angular/forms';
import { BaseControlComponent } from '../../utils/base-control.component';
var FormInputComponent = /** @class */ (function (_super) {
tslib_1.__extends(FormInputComponent, _super);
function FormInputComponent() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = 'text';
_this.pattern = '';
_this.readonly = false;
_this.autocomplete = true;
_this.trimResult = true;
_this.minLengthErrorMessage = 'Value is too short.';
_this.patternErrorMessage = 'Value is not valid.';
_this.matchErrorMessage = 'Value does not match.';
_this.focus = new EventEmitter();
_this.blur = new EventEmitter();
return _this;
}
Object.defineProperty(FormInputComponent.prototype, "match", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._match = value || '';
this.triggerChange();
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormInputComponent.prototype, "value", {
get: /**
* @return {?}
*/
function () {
if (!this._innerValue) {
return '';
}
if ('string' !== typeof this._innerValue) {
return this._innerValue;
}
return this.trimResult ? this._innerValue.trim() : this._innerValue;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value !== this._innerValue) {
this._innerValue = value;
this.triggerChange();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormInputComponent.prototype, "hasMatchError", {
get: /**
* @return {?}
*/
function () {
return !!this._match && this._match !== this.value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormInputComponent.prototype, "hasPatternError", {
get: /**
* @return {?}
*/
function () {
return this.customInput.errors && this.customInput.errors['pattern'];
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormInputComponent.prototype, "hasMinLengthError", {
get: /**
* @return {?}
*/
function () {
return this.customInput.errors && this.customInput.errors['minlength'];
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormInputComponent.prototype, "invalid", {
get: /**
* @return {?}
*/
function () {
if (this.hasCustomError) {
return true;
}
if (!this.customInput.touched) {
return false;
}
return this.customInput.invalid || this.hasMatchError || this.hasRequiredError;
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormInputComponent.prototype, "valid", {
get: /**
* @return {?}
*/
function () {
if (this.hasCustomError) {
return false;
}
if (!this.customInput.touched) {
return false;
}
return !this.customInput.invalid && !this.hasMatchError && !this.hasRequiredError;
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormInputComponent.prototype, "errorMessages", {
get: /**
* @return {?}
*/
function () {
if (this.hasRequiredError) {
return [this.requiredErrorMessage];
}
if (this.hasMatchError) {
return [this.matchErrorMessage];
}
if (this.hasPatternError) {
return [this.patternErrorMessage];
}
if (this.hasMinLengthError) {
return [this.minLengthErrorMessage];
}
if (this.hasCustomError) {
return this.innerCustomErrorMessages;
}
},
enumerable: true,
configurable: true
});
/**
* @param {?} value
* @return {?}
*/
FormInputComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
this._innerValue = value;
};
/**
* @return {?}
*/
FormInputComponent.prototype.validate = /**
* @return {?}
*/
function () {
/** @type {?} */
var result = this.customInput.errors || {};
if (this.hasRequiredError) {
result['required'] = true;
}
else {
delete result['required'];
}
if (this.hasMatchError) {
result['match'] = true;
}
return result;
};
// noinspection JSUnusedGlobalSymbols
/**
* @return {?}
*/
FormInputComponent.prototype.reset = /**
* @return {?}
*/
function () {
this.customInput.reset();
};
/**
* @param {?} event
* @return {?}
*/
FormInputComponent.prototype.onFocus = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.focus.emit(event);
};
/**
* @param {?} event
* @return {?}
*/
FormInputComponent.prototype.onBlur = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.blur.emit(event);
};
FormInputComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-form-input',
template: "<label *ngIf=\"label\" [for]=\"id\">{{label}}</label>\n\n<!--suppress HtmlFormInputWithoutLabel -->\n<input class=\"form-control\"\n [ngClass]=\"{'is-invalid': invalid, 'is-valid': valid}\"\n [type]=\"type\"\n [id]=\"id\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [minlength]=\"minlength\"\n [maxlength]=\"maxlength\"\n [placeholder]=\"placeholder\"\n [title]=\"title\"\n [pattern]=\"pattern\"\n [(ngModel)]=\"value\"\n (input)=\"triggerChange()\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n #customInput=\"ngModel\">\n\n<div class=\"valid-feedback\" *ngIf=\"valid && validMessage\">{{validMessage}}</div>\n\n<div class=\"invalid-feedback\" *ngIf=\"invalid\">\n <span *ngFor=\"let message of errorMessages; let last = last;\">\n {{message}}<br *ngIf=\"!last\">\n </span>\n</div>\n",
styles: [""],
providers: [
{ provide: NG_VALUE_ACCESSOR, useExisting: FormInputComponent, multi: true },
{ provide: NG_VALIDATORS, useExisting: FormInputComponent, multi: true }
]
},] },
];
FormInputComponent.propDecorators = {
type: [{ type: Input }],
pattern: [{ type: Input }],
readonly: [{ type: Input }],
autocomplete: [{ type: Input }],
minlength: [{ type: Input }],
maxlength: [{ type: Input }],
trimResult: [{ type: Input }],
minLengthErrorMessage: [{ type: Input }],
patternErrorMessage: [{ type: Input }],
matchErrorMessage: [{ type: Input }],
customInput: [{ type: ViewChild, args: ['customInput',] }],
match: [{ type: Input }],
focus: [{ type: Output }],
blur: [{ type: Output }]
};
return FormInputComponent;
}(BaseControlComponent));
export { FormInputComponent };
if (false) {
/** @type {?} */
FormInputComponent.prototype.type;
/** @type {?} */
FormInputComponent.prototype.pattern;
/** @type {?} */
FormInputComponent.prototype.readonly;
/** @type {?} */
FormInputComponent.prototype.autocomplete;
/** @type {?} */
FormInputComponent.prototype.minlength;
/** @type {?} */
FormInputComponent.prototype.maxlength;
/** @type {?} */
FormInputComponent.prototype.trimResult;
/** @type {?} */
FormInputComponent.prototype.minLengthErrorMessage;
/** @type {?} */
FormInputComponent.prototype.patternErrorMessage;
/** @type {?} */
FormInputComponent.prototype.matchErrorMessage;
/** @type {?} */
FormInputComponent.prototype.customInput;
/** @type {?} */
FormInputComponent.prototype.focus;
/** @type {?} */
FormInputComponent.prototype.blur;
/** @type {?} */
FormInputComponent.prototype._innerValue;
/** @type {?} */
FormInputComponent.prototype._match;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZm9ybS1jb250cm9sLyIsInNvdXJjZXMiOlsibGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7SUF3Q2hDLDhDQUFvQjs7O3FCQUUxQyxNQUFNO3dCQUNILEVBQUU7eUJBQ0QsS0FBSzs2QkFDRCxJQUFJOzJCQUdOLElBQUk7c0NBQ08scUJBQXFCO29DQUN2QixxQkFBcUI7a0NBQ3ZCLHVCQUF1QjtzQkFRbEMsSUFBSSxZQUFZLEVBQU87cUJBQ3hCLElBQUksWUFBWSxFQUFPOzs7SUFOeEMsc0JBQWEscUNBQUs7Ozs7O1FBQWxCLFVBQW1CLEtBQWE7WUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0Qjs7O09BQUE7SUFRRCxzQkFBSSxxQ0FBSzs7OztRQUFUO1lBQ0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsTUFBTSxDQUFDLEVBQUUsQ0FBQzthQUNYO1lBRUQsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ3pCO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMs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Qzt3QkFDMUUsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO3FCQUN2RTtpQkFDRjs7O3VCQUdFLEtBQUs7MEJBQ0wsS0FBSzsyQkFDTCxLQUFLOytCQUNMLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxLQUFLOzZCQUNMLEtBQUs7d0NBQ0wsS0FBSztzQ0FDTCxLQUFLO29DQUNMLEtBQUs7OEJBQ0wsU0FBUyxTQUFDLGFBQWE7d0JBRXZCLEtBQUs7d0JBS0wsTUFBTTt1QkFDTixNQUFNOzs2QkE5RFQ7RUEwQ3dDLG9CQUFvQjtTQUEvQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ01vZGVsLCBWYWxpZGF0aW9uRXJyb3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7QmFzZUNvbnRyb2xDb21wb25lbnR9IGZyb20gJy4uLy4uL3V0aWxzL2Jhc2UtY29udHJvbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtZm9ybS1pbnB1dCcsXHJcbiAgdGVtcGxhdGU6IGA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JdPVwiaWRcIj57e2xhYmVsfX08L2xhYmVsPlxyXG5cclxuPCEtLXN1cHByZXNzIEh0bWxGb3JtSW5wdXRXaXRob3V0TGFiZWwgLS0+XHJcbjxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOiBpbnZhbGlkLCAnaXMtdmFsaWQnOiB2YWxpZH1cIlxyXG4gICAgICAgW3R5cGVdPVwidHlwZVwiXHJcbiAgICAgICBbaWRdPVwiaWRcIlxyXG4gICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgW21pbmxlbmd0aF09XCJtaW5sZW5ndGhcIlxyXG4gICAgICAgW21heGxlbmd0aF09XCJtYXhsZW5ndGhcIlxyXG4gICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgICAgICBbcGF0dGVybl09XCJwYXR0ZXJuXCJcclxuICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICAgKGlucHV0KT1cInRyaWdnZXJDaGFuZ2UoKVwiXHJcbiAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZSA/ICdvbicgOiAnb2ZmJ1wiXHJcbiAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcclxuICAgICAgICNjdXN0b21JbnB1dD1cIm5nTW9kZWxcIj5cclxuXHJcbjxkaXYgY2xhc3M9XCJ2YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwidmFsaWQgJiYgdmFsaWRNZXNzYWdlXCI+e3t2YWxpZE1lc3NhZ2V9fTwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImludmFsaWRcIj5cclxuICA8c3BhbiAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XHJcbiAgICB7e21lc3NhZ2V9fTxiciAqbmdJZj1cIiFsYXN0XCI+XHJcbiAgPC9zcGFuPlxyXG48L2Rpdj5cclxuYCxcclxuICBzdHlsZXM6IFtgYF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBGb3JtSW5wdXRDb21wb25lbnQsIG11bHRpOiB0cnVlfSxcclxuICAgIHtwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogRm9ybUlucHV0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZX1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29udHJvbENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIHR5cGUgPSAndGV4dCc7XHJcbiAgQElucHV0KCkgcGF0dGVybiA9ICcnO1xyXG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBtaW5sZW5ndGg6IG51bWJlcjtcclxuICBASW5wdXQoKSBtYXhsZW5ndGg6IG51bWJlcjtcclxuICBASW5wdXQoKSB0cmltUmVzdWx0ID0gdHJ1ZTtcclxuICBASW5wdXQoKSBtaW5MZW5ndGhFcnJvck1lc3NhZ2UgPSAnVmFsdWUgaXMgdG9vIHNob3J0Lic7XHJcbiAgQElucHV0KCkgcGF0dGVybkVycm9yTWVzc2FnZSA9ICdWYWx1ZSBpcyBub3QgdmFsaWQuJztcclxuICBASW5wdXQoKSBtYXRjaEVycm9yTWVzc2FnZSA9ICdWYWx1ZSBkb2VzIG5vdCBtYXRjaC4nO1xyXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbUlucHV0JykgY3VzdG9tSW5wdXQ6IE5nTW9kZWw7XHJcblxyXG4gIEBJbnB1dCgpIHNldCBtYXRjaCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9tYXRjaCA9IHZhbHVlIHx8ICcnO1xyXG4gICAgdGhpcy50cmlnZ2VyQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwcml2YXRlIF9pbm5lclZhbHVlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfbWF0Y2g7XHJcblxyXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl9pbm5lclZhbHVlKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiB0aGlzLl9pbm5lclZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9pbm5lclZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnRyaW1SZXN1bHQgPyB0aGlzLl9pbm5lclZhbHVlLnRyaW0oKSA6IHRoaXMuX2lubmVyVmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9pbm5lclZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX2lubmVyVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgdGhpcy50cmlnZ2VyQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzTWF0Y2hFcnJvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuX21hdGNoICYmIHRoaXMuX21hdGNoICE9PSB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc1BhdHRlcm5FcnJvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmN1c3RvbUlucHV0LmVycm9ycyAmJiB0aGlzLmN1c3RvbUlucHV0LmVycm9yc1sncGF0dGVybiddO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc01pbkxlbmd0aEVycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tSW5wdXQuZXJyb3JzICYmIHRoaXMuY3VzdG9tSW5wdXQuZXJyb3JzWydtaW5sZW5ndGgnXTtcclxuICB9XHJcblxyXG4gIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmN1c3RvbUlucHV0LnRvdWNoZWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmN1c3RvbUlucHV0LmludmFsaWQgfHwgdGhpcy5oYXNNYXRjaEVycm9yIHx8IHRoaXMuaGFzUmVxdWlyZWRFcnJvcjtcclxuICB9XHJcblxyXG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmhhc0N1c3RvbUVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY3VzdG9tSW5wdXQudG91Y2hlZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICF0aGlzLmN1c3RvbUlucHV0LmludmFsaWQgJiYgIXRoaXMuaGFzTWF0Y2hFcnJvciAmJiAhdGhpcy5oYXNSZXF1aXJlZEVycm9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVycm9yTWVzc2FnZXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICBpZiAodGhpcy5oYXNSZXF1aXJlZEVycm9yKSB7XHJcbiAgICAgIHJldHVybiBbdGhpcy5yZXF1aXJlZEVycm9yTWVzc2FnZV07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzTWF0Y2hFcnJvcikge1xyXG4gICAgICByZXR1cm4gW3RoaXMubWF0Y2hFcnJvck1lc3NhZ2VdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc1BhdHRlcm5FcnJvcikge1xyXG4gICAgICByZXR1cm4gW3RoaXMucGF0dGVybkVycm9yTWVzc2FnZV07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzTWluTGVuZ3RoRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIFt0aGlzLm1pbkxlbmd0aEVycm9yTWVzc2FnZV07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5uZXJDdXN0b21FcnJvck1lc3NhZ2VzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbm5lclZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZSgpOiBWYWxpZGF0aW9uRXJyb3JzIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3VzdG9tSW5wdXQuZXJyb3JzIHx8IHt9O1xyXG5cclxuICAgIGlmICh0aGlzLmhhc1JlcXVpcmVkRXJyb3IpIHtcclxuICAgICAgcmVzdWx0WydyZXF1aXJlZCddID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSByZXN1bHRbJ3JlcXVpcmVkJ107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzTWF0Y2hFcnJvcikge1xyXG4gICAgICByZXN1bHRbJ21hdGNoJ10gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLyBub2luc3BlY3Rpb24gSlNVbnVzZWRHbG9iYWxTeW1ib2xzXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLmN1c3RvbUlucHV0LnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKGV2ZW50KSB7XHJcbiAgICB0aGlzLmZvY3VzLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGV2ZW50KSB7XHJcbiAgICB0aGlzLmJsdXIuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=