UNPKG

moh-common-lib

Version:

A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).

181 lines (180 loc) 17.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { forwardRef, Component, Input, Output, EventEmitter } from '@angular/core'; import { Person } from '../../models/person.model'; import { Base } from '../../models/base'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; /** * @record */ export function FullNameErrorMsg() { } if (false) { /** @type {?|undefined} */ FullNameErrorMsg.prototype.required; /** @type {?|undefined} */ FullNameErrorMsg.prototype.pattern; } /** * FullNameComponent includes a first, middle, and last name field. If you only * need an individual field, \@see NameComponent. * * **Note** This component is in dev, there are issues around "required" * TODO - Properly handle "required" * * \@example * <common-full-name [(person)]='person'></common-full-name> * * @export */ export class FullNameComponent extends Base { constructor() { super(); this.personChange = new EventEmitter(); this.firstNamelabel = 'First Name'; this.middleNamelabel = 'Middle Name'; this.lastNamelabel = 'Last Name'; this.disabled = false; this.NameRegEx = '^[a-zA-Z][a-zA-Z\\-.\' ]*$'; // default messages this.requiredMsgSeg = 'is required'; this.pattern = 'Must begin with a letter followed by a letters, hyphen, period, apostrophe, or blank character'; this._onChange = (/** * @param {?} _ * @return {?} */ (_) => { }); this._onTouched = (/** * @return {?} */ () => { }); } /** * @return {?} */ ngOnInit() { if (this.person) { this.firstName = this.person.firstName ? this.person.firstName : ''; this.lastName = this.person.lastName ? this.person.lastName : ''; this.middleName = this.person.middleName ? this.person.middleName : ''; } this.errMsg = { required: this.requiredMsgSeg, pattern: this.pattern }; } /*ngAfterViewInit(): void { // https://github.com/angular/angular/issues/24818 this.form.valueChanges.pipe(debounceTime(0)).subscribe((values) => { this.onChange.emit(values); this._onChange(values); this._onTouched(); } ); }*/ // setFirstName(value: any) { // this.person.firstName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } // setMiddleName(value: any) { // this.person.middleName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } // setLastName(value: any) { // this.person.lastName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this._onChange = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this._onTouched = fn; } /** * @param {?} value * @return {?} */ writeValue(value) { this.person = value; } } FullNameComponent.decorators = [ { type: Component, args: [{ selector: 'common-full-name', template: "<div class=\"form-group col-sm-6 p-sm-0\">\r\n <common-name label=\"First Name\"\r\n [disabled]=\"disabled\"\r\n [(value)]=\"person.firstName\"\r\n objectID=\"first_name\"></common-name>\r\n <!-- (blurEvent)=\"onBlur($event)\" -->\r\n</div>\r\n\r\n<div class=\"form-group col-sm-6 p-sm-0\">\r\n <common-name label=\"Middle Name\"\r\n [disabled]=\"disabled\"\r\n [(value)]=\"person.middleName\"\r\n objectID=\"middle_name\"></common-name>\r\n</div>\r\n\r\n<div class=\"form-group col-sm-6 p-sm-0\">\r\n <common-name label=\"Last Name\"\r\n required\r\n [disabled]=\"disabled\"\r\n [(value)]=\"person.lastName\"\r\n objectID=\"last_name\"></common-name>\r\n</div>\r\n\r\n\r\n<!-- \r\n<div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"form-group\"\r\n [ngClass]=\"{'has-error': showError && (firstNameRef.touched && (firstName === undefined || firstName === null))}\">\r\n <label class=\"control-label\" for=\"firstName_{{objectId}}\"\r\n >{{firstNamelabel}}</label>\r\n <input type=\"text\"\r\n [ngModel]=\"firstName\"\r\n name=\"firstName\"\r\n (ngModelChange)=\"setFirstName($event)\"\r\n required\r\n maxlength=\"30\"\r\n [pattern]=\"NameRegEx\"\r\n id=\"firstName_{{objectId}}\" #firstNameRef=\"ngModel\"\r\n class=\"form-control\">\r\n <div *ngIf='showError && (firstNameRef.touched && (firstName === undefined || firstName === null))' role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"text-danger\" *ngIf=\"firstNameRef.errors?.required\"\r\n >{{firstNamelabel}} {{errMsg.required}}</div>\r\n <div class=\"text-danger\" *ngIf=\"firstNameRef.errors?.pattern\"\r\n >{{errMsg.pattern}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"form-group\"\r\n [ngClass]=\"{'has-error': showError && (middleNameRef.touched &&(middleName === undefined || middleName === null))}\">\r\n <label class=\"control-label if-applicable\" for=\"middleName_{{objectId}}\">{{middleNamelabel}}</label>\r\n <input type=\"text\"\r\n name=\"middleName\"\r\n [ngModel]=\"middleName\"\r\n (ngModelChange)=\"setMiddleName($event)\"\r\n id='middleName_{{objectId}}' #middleNameRef=\"ngModel\"\r\n maxlength=\"30\"\r\n [pattern]=\"NameRegEx\"\r\n class=\"form-control\">\r\n <div *ngIf='middleNameRef.touched || showError' role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"text-danger\" *ngIf=\"middleNameRef.errors?.required\"\r\n >{{middleNamelabel}} {{errMsg.required}}</div>\r\n <div class=\"text-danger\" *ngIf=\"middleNameRef.errors?.pattern\"\r\n >{{errMsg.pattern}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"form-group\"\r\n [ngClass]=\"{'has-error': showError && (lastNameRef.touched && (lastName === undefined || lastName === null))}\">\r\n <label class=\"control-label\" for=\"lastName_{{objectId}}\" >{{lastNamelabel}}</label>\r\n <input type=\"text\"\r\n name=\"lastName\"\r\n [ngModel]=\"lastName\"\r\n (ngModelChange)=\"setLastName($event)\"\r\n id=\"lastName_{{objectId}}\" #lastNameRef=\"ngModel\"\r\n required\r\n maxlength=\"30\"\r\n [pattern]=\"NameRegEx\"\r\n class=\"form-control\">\r\n <div *ngIf='showError && (lastNameRef.touched && (lastName === undefined || lastName === null))' role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"text-danger\" *ngIf=\"lastNameRef.errors?.required\"\r\n >{{lastNamelabel}} {{errMsg.required}}</div>\r\n <div class=\"text-danger\" *ngIf=\"lastNameRef.errors?.pattern\"\r\n >{{errMsg.pattern}}</div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div> -->\r\n", providers: [ { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef((/** * @return {?} */ () => FullNameComponent)) } ], styles: [".form-group{margin-bottom:1.5rem}"] }] } ]; /** @nocollapse */ FullNameComponent.ctorParameters = () => []; FullNameComponent.propDecorators = { person: [{ type: Input }], personChange: [{ type: Output }], showError: [{ type: Input }], firstNamelabel: [{ type: Input }], middleNamelabel: [{ type: Input }], lastNamelabel: [{ type: Input }], disabled: [{ type: Input }] }; if (false) { /** @type {?} */ FullNameComponent.prototype.person; /** @type {?} */ FullNameComponent.prototype.personChange; /** @type {?} */ FullNameComponent.prototype.showError; /** @type {?} */ FullNameComponent.prototype.firstNamelabel; /** @type {?} */ FullNameComponent.prototype.middleNamelabel; /** @type {?} */ FullNameComponent.prototype.lastNamelabel; /** @type {?} */ FullNameComponent.prototype.disabled; /** @type {?} */ FullNameComponent.prototype.firstName; /** @type {?} */ FullNameComponent.prototype.middleName; /** @type {?} */ FullNameComponent.prototype.lastName; /** @type {?} */ FullNameComponent.prototype.NameRegEx; /** @type {?} */ FullNameComponent.prototype.errMsg; /** * @type {?} * @private */ FullNameComponent.prototype.requiredMsgSeg; /** * @type {?} * @private */ FullNameComponent.prototype.pattern; /** @type {?} */ FullNameComponent.prototype._onChange; /** @type {?} */ FullNameComponent.prototype._onTouched; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1uYW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21vaC1jb21tb24tbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZnVsbC1uYW1lL2Z1bGwtbmFtZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekMsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBR3pFLHNDQUdDOzs7SUFGQyxvQ0FBa0I7O0lBQ2xCLG1DQUFpQjs7Ozs7Ozs7Ozs7Ozs7QUF3Qm5CLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxJQUFJO0lBeUJ6QztRQUNFLEtBQUssRUFBRSxDQUFDO1FBdkJBLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUUzQyxtQkFBYyxHQUFXLFlBQVksQ0FBQztRQUN0QyxvQkFBZSxHQUFXLGFBQWEsQ0FBQztRQUN4QyxrQkFBYSxHQUFXLFdBQVcsQ0FBQztRQUNwQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBTzVCLGNBQVMsR0FBVyw0QkFBNEIsQ0FBQzs7UUFJaEQsbUJBQWMsR0FBVyxhQUFhLENBQUM7UUFDdkMsWUFBTyxHQUFXLGdHQUFnRyxDQUFDO1FBRXBILGNBQVM7Ozs7UUFBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxFQUFDO1FBQzNCLGVBQVU7OztRQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBQztJQUk3QixDQUFDOzs7O0lBRUQsUUFBUTtRQUVOLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBTTtZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQztJQUNKLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXNDRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7Ozs7O0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDOzs7OztJQUVELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7OztZQWxHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsZy9JQUF5QztnQkFFekMsU0FBUyxFQUFFO29CQUNULEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVU7Ozt3QkFBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDO2lCQUM5Rjs7YUFDRjs7Ozs7cUJBSUUsS0FBSzsyQkFDTCxNQUFNO3dCQUNOLEtBQUs7NkJBQ0wsS0FBSzs4QkFDTCxLQUFLOzRCQUNMLEtBQUs7dUJBQ0wsS0FBSzs7OztJQU5OLG1DQUF3Qjs7SUFDeEIseUNBQW9EOztJQUNwRCxzQ0FBNEI7O0lBQzVCLDJDQUErQzs7SUFDL0MsNENBQWlEOztJQUNqRCwwQ0FBNkM7O0lBQzdDLHFDQUFtQzs7SUFHbkMsc0NBQW1COztJQUNuQix1Q0FBbUI7O0lBQ25CLHFDQUFrQjs7SUFFbEIsc0NBQXdEOztJQUV4RCxtQ0FBaUM7Ozs7O0lBRWpDLDJDQUErQzs7Ozs7SUFDL0Msb0NBQTJIOztJQUUzSCxzQ0FBa0M7O0lBQ2xDLHVDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcndhcmRSZWYsIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGVyc29uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BlcnNvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEJhc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvYmFzZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZ1bGxOYW1lRXJyb3JNc2cge1xyXG4gIHJlcXVpcmVkPzogc3RyaW5nO1xyXG4gIHBhdHRlcm4/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGdWxsTmFtZUNvbXBvbmVudCBpbmNsdWRlcyBhIGZpcnN0LCBtaWRkbGUsIGFuZCBsYXN0IG5hbWUgZmllbGQuICBJZiB5b3Ugb25seVxyXG4gKiBuZWVkIGFuIGluZGl2aWR1YWwgZmllbGQsIEBzZWUgTmFtZUNvbXBvbmVudC5cclxuICpcclxuICogKipOb3RlKiogVGhpcyBjb21wb25lbnQgaXMgaW4gZGV2LCB0aGVyZSBhcmUgaXNzdWVzIGFyb3VuZCBcInJlcXVpcmVkXCJcclxuICogVE9ETyAtIFByb3Blcmx5IGhhbmRsZSBcInJlcXVpcmVkXCJcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgICAgICAgPGNvbW1vbi1mdWxsLW5hbWUgWyhwZXJzb24pXT0ncGVyc29uJz48L2NvbW1vbi1mdWxsLW5hbWU+XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29tbW9uLWZ1bGwtbmFtZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Z1bGwtbmFtZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZnVsbC1uYW1lLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCBtdWx0aTogdHJ1ZSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRnVsbE5hbWVDb21wb25lbnQgKX1cclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRnVsbE5hbWVDb21wb25lbnQgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIHBlcnNvbjogUGVyc29uO1xyXG4gIEBPdXRwdXQoKSBwZXJzb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBlcnNvbj4oKTtcclxuICBASW5wdXQoKSBzaG93RXJyb3I6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZmlyc3ROYW1lbGFiZWw6IHN0cmluZyA9ICdGaXJzdCBOYW1lJztcclxuICBASW5wdXQoKSBtaWRkbGVOYW1lbGFiZWw6IHN0cmluZyA9ICdNaWRkbGUgTmFtZSc7XHJcbiAgQElucHV0KCkgbGFzdE5hbWVsYWJlbDogc3RyaW5nID0gJ0xhc3QgTmFtZSc7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIGZpcnN0TmFtZTogc3RyaW5nIDtcclxuICBtaWRkbGVOYW1lOiBzdHJpbmc7XHJcbiAgbGFzdE5hbWU6IHN0cmluZyA7XHJcblxyXG4gIHB1YmxpYyBOYW1lUmVnRXg6IHN0cmluZyA9ICdeW2EtekEtWl1bYS16QS1aXFxcXC0uXFwnIF0qJCc7XHJcblxyXG4gIHB1YmxpYyBlcnJNc2c6IEZ1bGxOYW1lRXJyb3JNc2cgO1xyXG4gIC8vIGRlZmF1bHQgbWVzc2FnZXNcclxuICBwcml2YXRlIHJlcXVpcmVkTXNnU2VnOiBzdHJpbmcgPSAnaXMgcmVxdWlyZWQnO1xyXG4gIHByaXZhdGUgcGF0dGVybjogc3RyaW5nID0gJ011c3QgYmVnaW4gd2l0aCBhIGxldHRlciBmb2xsb3dlZCBieSBhIGxldHRlcnMsIGh5cGhlbiwgcGVyaW9kLCBhcG9zdHJvcGhlLCBvciBibGFuayBjaGFyYWN0ZXInO1xyXG5cclxuICBwdWJsaWMgX29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XHJcbiAgcHVibGljIF9vblRvdWNoZWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMucGVyc29uKSB7XHJcbiAgICAgIHRoaXMuZmlyc3ROYW1lID0gdGhpcy5wZXJzb24uZmlyc3ROYW1lID8gdGhpcy5wZXJzb24uZmlyc3ROYW1lIDogJyc7XHJcbiAgICAgIHRoaXMubGFzdE5hbWUgPSB0aGlzLnBlcnNvbi5sYXN0TmFtZSA/IHRoaXMucGVyc29uLmxhc3ROYW1lIDogJyc7XHJcbiAgICAgIHRoaXMubWlkZGxlTmFtZSA9IHRoaXMucGVyc29uLm1pZGRsZU5hbWUgPyB0aGlzLnBlcnNvbi5taWRkbGVOYW1lIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lcnJNc2cgPSAgICB7XHJcbiAgICAgIHJlcXVpcmVkOiB0aGlzLnJlcXVpcmVkTXNnU2VnLFxyXG4gICAgICBwYXR0ZXJuOiB0aGlzLnBhdHRlcm5cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKm5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMjQ4MThcclxuICAgICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgwKSkuc3Vic2NyaWJlKCh2YWx1ZXMpID0+IHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodmFsdWVzKTtcclxuICAgICAgICB0aGlzLl9vbkNoYW5nZSh2YWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICB9Ki9cclxuXHJcbiAgLy8gc2V0Rmlyc3ROYW1lKHZhbHVlOiBhbnkpIHtcclxuICAvLyAgIHRoaXMucGVyc29uLmZpcnN0TmFtZSA9IHZhbHVlO1xyXG4gIC8vICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMucGVyc29uKTtcclxuICAvLyAgIHRoaXMuX29uQ2hhbmdlKHRoaXMucGVyc29uKTtcclxuICAvLyAgIHRoaXMuX29uVG91Y2hlZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0TWlkZGxlTmFtZSh2YWx1ZTogYW55KSB7XHJcblxyXG4gIC8vICAgdGhpcy5wZXJzb24ubWlkZGxlTmFtZSA9IHZhbHVlO1xyXG4gIC8vICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMucGVyc29uKTtcclxuICAvLyAgIHRoaXMuX29uQ2hhbmdlKHRoaXMucGVyc29uKTtcclxuICAvLyAgIHRoaXMuX29uVG91Y2hlZCgpO1xyXG5cclxuICAvLyB9XHJcblxyXG4gIC8vIHNldExhc3ROYW1lKHZhbHVlOiBhbnkpIHtcclxuXHJcbiAgLy8gICB0aGlzLnBlcnNvbi5sYXN0TmFtZSA9IHZhbHVlO1xyXG4gIC8vICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMucGVyc29uKTtcclxuICAvLyAgIHRoaXMuX29uQ2hhbmdlKHRoaXMucGVyc29uKTtcclxuICAvLyAgIHRoaXMuX29uVG91Y2hlZCgpO1xyXG5cclxuICAvLyB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnBlcnNvbiA9IHZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==