UNPKG

ngx-form-control

Version:
275 lines (274 loc) 21.3 kB
/** * @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=