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
JavaScript
/**
* @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==