@angularfy/autonumeric
Version:
Angular implementation of autoNumeric
291 lines • 20.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, ElementRef, EventEmitter, forwardRef, Input, Output, Renderer2, } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import AutoNumeric from 'autonumeric';
import { AutonumericDefaults } from './autonumeric-defaults.service';
/** @type {?} */
export var AUTONUMERIC_CONTROL_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return AutonumericDirective; })),
multi: true
};
var AutonumericDirective = /** @class */ (function () {
function AutonumericDirective(elm, defaults, renderer) {
this.elm = elm;
this.defaults = defaults;
this.renderer = renderer;
/* Defines the strategy to apply when options change.
* reset will drop any previous options
* update will change old values one by one but keep those that are not mentioned in the new options
*/
this.strategy = 'reset';
this.isDisabled = false;
this.formatted = new EventEmitter();
this.rawValueModified = new EventEmitter();
this.onChangeFn = (/**
* @return {?}
*/
function () {
});
this.onTouchedFn = (/**
* @return {?}
*/
function () {
});
}
/**
* @return {?}
*/
AutonumericDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/**
* @private
* @param {?} options
* @return {?}
*/
AutonumericDirective.prototype.normalize = /**
* @private
* @param {?} options
* @return {?}
*/
function (options) {
var _this = this;
/** @type {?} */
var normalized = {};
Object.keys(AutoNumeric.options).forEach((/**
* @param {?} key
* @return {?}
*/
function (key) {
if (typeof options[key] === 'undefined') {
normalized[key] = ((/** @type {?} */ (_this.defaults)))[key];
}
else {
normalized[key] = options[key];
}
}));
return normalized;
};
/**
* @return {?}
*/
AutonumericDirective.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
this.instance = new AutoNumeric(this.elm.nativeElement, this.getOptions());
this.setDisabledState(this.isDisabled);
this.unsubscribeFormat = this.renderer.listen(this.elm.nativeElement, 'autoNumeric:formatted', (/**
* @param {?} $event
* @return {?}
*/
function ($event) {
_this.formatted.emit($event);
}));
this.unsubscribeRawValueModified = this.renderer.listen(this.elm.nativeElement, 'autoNumeric:rawValueModified', (/**
* @param {?} $event
* @return {?}
*/
function ($event) {
_this.onChangeFn($event.detail.newRawValue);
_this.rawValueModified.emit($event);
}));
};
/**
* @private
* @return {?}
*/
AutonumericDirective.prototype.getOptions = /**
* @private
* @return {?}
*/
function () {
if (this.options === undefined && this.predefined === undefined) {
return this.defaults;
}
if (this.options !== undefined && this.predefined !== undefined) {
throw new Error('predefined attribute could not be combined with options. Please use either predefined or options');
}
if (this.options !== undefined) {
return this.normalize(this.options);
}
/** @type {?} */
var predefined = AutoNumeric.getPredefinedOptions()[this.predefined];
return this.normalize(predefined);
};
/**
* @param {?} changes
* @return {?}
*/
AutonumericDirective.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (!this.instance) {
return;
}
if (changes.options || changes.predefined) {
if (this.strategy === 'reset') {
this.instance.options.reset();
}
this.instance.update(this.getOptions());
}
};
/**
* @return {?}
*/
AutonumericDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.unsubscribeFormat();
this.unsubscribeRawValueModified();
try {
this.instance.remove(); // remove listeners
}
catch (e) {
}
};
/**
* @param {?} value
* @return {?}
*/
AutonumericDirective.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (this.instance) {
this.instance.set(value);
}
else {
// autonumeric hasn't been initialised yet, store the value for later use
this.initialValue = value;
}
};
/**
* @param {?} fn
* @return {?}
*/
AutonumericDirective.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onChangeFn = fn;
};
/**
* @param {?} fn
* @return {?}
*/
AutonumericDirective.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onTouchedFn = fn;
};
/**
* @param {?} isDisabled
* @return {?}
*/
AutonumericDirective.prototype.setDisabledState = /**
* @param {?} isDisabled
* @return {?}
*/
function (isDisabled) {
this.isDisabled = isDisabled;
if (this.instance) {
if (this.isDisabled) {
this.renderer.setProperty(this.instance.domElement, 'disabled', 'disabled');
}
else {
this.renderer.removeAttribute(this.instance.domElement, 'disabled');
}
}
};
AutonumericDirective.decorators = [
{ type: Directive, args: [{
selector: '[autonumeric]',
providers: [AUTONUMERIC_CONTROL_VALUE_ACCESSOR],
// tslint:disable-next-line:use-host-property-decorator
host: {
'(blur)': 'onTouchedFn()'
},
},] }
];
/** @nocollapse */
AutonumericDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: AutonumericDefaults },
{ type: Renderer2 }
]; };
AutonumericDirective.propDecorators = {
strategy: [{ type: Input }],
options: [{ type: Input }],
predefined: [{ type: Input }],
formatted: [{ type: Output }],
rawValueModified: [{ type: Output }]
};
return AutonumericDirective;
}());
export { AutonumericDirective };
if (false) {
/** @type {?} */
AutonumericDirective.prototype.strategy;
/** @type {?} */
AutonumericDirective.prototype.options;
/** @type {?} */
AutonumericDirective.prototype.predefined;
/** @type {?} */
AutonumericDirective.prototype.instance;
/**
* @type {?}
* @private
*/
AutonumericDirective.prototype.isDisabled;
/**
* @type {?}
* @private
*/
AutonumericDirective.prototype.initialValue;
/** @type {?} */
AutonumericDirective.prototype.unsubscribeFormat;
/** @type {?} */
AutonumericDirective.prototype.unsubscribeRawValueModified;
/** @type {?} */
AutonumericDirective.prototype.formatted;
/** @type {?} */
AutonumericDirective.prototype.rawValueModified;
/** @type {?} */
AutonumericDirective.prototype.onChangeFn;
/** @type {?} */
AutonumericDirective.prototype.onTouchedFn;
/**
* @type {?}
* @private
*/
AutonumericDirective.prototype.elm;
/**
* @type {?}
* @private
*/
AutonumericDirective.prototype.defaults;
/**
* @type {?}
* @private
*/
AutonumericDirective.prototype.renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b251bWVyaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFuZ3VsYXJmeS9hdXRvbnVtZXJpYy8iLCJzb3VyY2VzIjpbImxpYi9hdXRvbnVtZXJpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUlMLE1BQU0sRUFDTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFHbkUsTUFBTSxLQUFPLGtDQUFrQyxHQUFRO0lBQ3JELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLGNBQU0sT0FBQSxvQkFBb0IsRUFBcEIsQ0FBb0IsRUFBQztJQUNuRCxLQUFLLEVBQUUsSUFBSTtDQUNaO0FBRUQ7SUFvQ0UsOEJBQ1UsR0FBZSxFQUNmLFFBQTZCLEVBQzdCLFFBQW1CO1FBRm5CLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixhQUFRLEdBQVIsUUFBUSxDQUFxQjtRQUM3QixhQUFRLEdBQVIsUUFBUSxDQUFXOzs7OztRQXhCN0IsYUFBUSxHQUF1QixPQUFPLENBQUM7UUFPL0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUszQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUvQixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RDLGVBQVU7OztRQUF5QjtRQUNuQyxDQUFDLEVBQUM7UUFFRixnQkFBVzs7O1FBQUc7UUFDZCxDQUFDLEVBQUM7SUFPRixDQUFDOzs7O0lBRUQsdUNBQVE7OztJQUFSO0lBQ0EsQ0FBQzs7Ozs7O0lBRU8sd0NB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Z0JBdElGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsU0FBUyxFQUFFLENBQUMsa0NBQWtDLENBQUM7O29CQUUvQyxJQUFJLEVBQUU7d0JBQ0osUUFBUSxFQUFFLGVBQWU7cUJBQzFCO2lCQUNGOzs7O2dCQTdCQyxVQUFVO2dCQWFKLG1CQUFtQjtnQkFMekIsU0FBUzs7OzJCQTRCUixLQUFLOzBCQUdMLEtBQUs7NkJBRUwsS0FBSzs0QkFPTCxNQUFNO21DQUVOLE1BQU07O0lBMkdULDJCQUFDO0NBQUEsQUF2SUQsSUF1SUM7U0EvSFksb0JBQW9COzs7SUFNL0Isd0NBQ3VDOztJQUV2Qyx1Q0FDNEI7O0lBQzVCLDBDQUNtQjs7SUFDbkIsd0NBQWM7Ozs7O0lBQ2QsMENBQTJCOzs7OztJQUMzQiw0Q0FBMEI7O0lBQzFCLGlEQUE4Qjs7SUFDOUIsMkRBQXdDOztJQUN4Qyx5Q0FDK0I7O0lBQy9CLGdEQUNzQzs7SUFDdEMsMENBQ0U7O0lBRUYsMkNBQ0U7Ozs7O0lBR0EsbUNBQXVCOzs7OztJQUN2Qix3Q0FBcUM7Ozs7O0lBQ3JDLHdDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCBBdXRvTnVtZXJpYyBmcm9tICdhdXRvbnVtZXJpYyc7XHJcbmltcG9ydCB7QXV0b251bWVyaWNEZWZhdWx0c30gZnJvbSAnLi9hdXRvbnVtZXJpYy1kZWZhdWx0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtBdXRvbnVtZXJpY09wdGlvbnN9IGZyb20gJy4vYXV0b251bWVyaWMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEFVVE9OVU1FUklDX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcclxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBdXRvbnVtZXJpY0RpcmVjdGl2ZSksXHJcbiAgbXVsdGk6IHRydWVcclxufTtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2F1dG9udW1lcmljXScsXHJcbiAgcHJvdmlkZXJzOiBbQVVUT05VTUVSSUNfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUl0sXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnVzZS1ob3N0LXByb3BlcnR5LWRlY29yYXRvclxyXG4gIGhvc3Q6IHtcclxuICAgICcoYmx1ciknOiAnb25Ub3VjaGVkRm4oKSdcclxuICB9LFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0b251bWVyaWNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIC8qIERlZmluZXMgdGhlIHN0cmF0ZWd5IHRvIGFwcGx5IHdoZW4gb3B0aW9ucyBjaGFuZ2UuXHJcbiAgICogcmVzZXQgd2lsbCBkcm9wIGFueSBwcmV2aW91cyBvcHRpb25zXHJcbiAgICogdXBkYXRlIHdpbGwgY2hhbmdlIG9sZCB2YWx1ZXMgb25lIGJ5IG9uZSBidXQga2VlcCB0aG9zZSB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBuZXcgb3B0aW9uc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc3RyYXRlZ3k6ICdyZXNldCcgfCAndXBkYXRlJyA9ICdyZXNldCc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgb3B0aW9uczogQXV0b251bWVyaWNPcHRpb25zO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHJlZGVmaW5lZDogc3RyaW5nO1xyXG4gIGluc3RhbmNlOiBhbnk7XHJcbiAgcHJpdmF0ZSBpc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpbml0aWFsVmFsdWU6IGFueTtcclxuICB1bnN1YnNjcmliZUZvcm1hdDogKCkgPT4gdm9pZDtcclxuICB1bnN1YnNjcmliZVJhd1ZhbHVlTW9kaWZpZWQ6ICgpID0+IHZvaWQ7XHJcbiAgQE91dHB1dCgpXHJcbiAgZm9ybWF0dGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHJhd1ZhbHVlTW9kaWZpZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgb25DaGFuZ2VGbjogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7XHJcbiAgfTtcclxuXHJcbiAgb25Ub3VjaGVkRm4gPSAoKSA9PiB7XHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsbTogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgZGVmYXVsdHM6IEF1dG9udW1lcmljRGVmYXVsdHMsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbm9ybWFsaXplKG9wdGlvbnM6IGFueSkge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHt9O1xyXG4gICAgT2JqZWN0LmtleXMoQXV0b051bWVyaWMub3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBub3JtYWxpemVkW2tleV0gPSAodGhpcy5kZWZhdWx0cyBhcyBhbnkpW2tleV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbm9ybWFsaXplZFtrZXldID0gb3B0aW9uc1trZXldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub3JtYWxpemVkO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBBdXRvTnVtZXJpYyhcclxuICAgICAgdGhpcy5lbG0ubmF0aXZlRWxlbWVudCxcclxuICAgICAgdGhpcy5nZXRPcHRpb25zKClcclxuICAgICk7XHJcbiAgICB0aGlzLnNldERpc2FibGVkU3RhdGUodGhpcy5pc0Rpc2FibGVkKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVGb3JtYXQgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsbS5uYXRpdmVFbGVtZW50LCAnYXV0b051bWVyaWM6Zm9ybWF0dGVkJywgKCRldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1hdHRlZC5lbWl0KCRldmVudCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVSYXdWYWx1ZU1vZGlmaWVkID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbG0ubmF0aXZlRWxlbWVudCwgJ2F1dG9OdW1lcmljOnJhd1ZhbHVlTW9kaWZpZWQnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2VGbigkZXZlbnQuZGV0YWlsLm5ld1Jhd1ZhbHVlKTtcclxuICAgICAgdGhpcy5yYXdWYWx1ZU1vZGlmaWVkLmVtaXQoJGV2ZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPcHRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucyA9PT0gdW5kZWZpbmVkICYmIHRoaXMucHJlZGVmaW5lZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRzO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHRoaXMucHJlZGVmaW5lZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJlZGVmaW5lZCBhdHRyaWJ1dGUgY291bGQgbm90IGJlIGNvbWJpbmVkIHdpdGggb3B0aW9ucy4gUGxlYXNlIHVzZSBlaXRoZXIgcHJlZGVmaW5lZCBvciBvcHRpb25zJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKHRoaXMub3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVkZWZpbmVkID0gQXV0b051bWVyaWMuZ2V0UHJlZGVmaW5lZE9wdGlvbnMoKVt0aGlzLnByZWRlZmluZWRdO1xyXG4gICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKHByZWRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMgfHwgY2hhbmdlcy5wcmVkZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0cmF0ZWd5ID09PSAncmVzZXQnKSB7XHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5vcHRpb25zLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnN0YW5jZS51cGRhdGUodGhpcy5nZXRPcHRpb25zKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlRm9ybWF0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlUmF3VmFsdWVNb2RpZmllZCgpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5pbnN0YW5jZS5yZW1vdmUoKTsgLy8gcmVtb3ZlIGxpc3RlbmVyc1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLmluc3RhbmNlLnNldCh2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBhdXRvbnVtZXJpYyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCB5ZXQsIHN0b3JlIHRoZSB2YWx1ZSBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgIHRoaXMuaW5pdGlhbFZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkRm4gPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuaW5zdGFuY2UuZG9tRWxlbWVudCwgJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5pbnN0YW5jZS5kb21FbGVtZW50LCAnZGlzYWJsZWQnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=