ngx-mask-2
Version:
awesome ngx mask
232 lines (231 loc) • 20 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { ElementRef, Inject, Injectable, Renderer2 } from '@angular/core';
import { config } from './config';
import { DOCUMENT } from '@angular/common';
import { MaskApplierService } from './mask-applier.service';
var MaskService = /** @class */ (function (_super) {
tslib_1.__extends(MaskService, _super);
function MaskService(
// tslint:disable-next-line
document, _config, _elementRef, _renderer) {
var _this = _super.call(this, _config) || this;
_this.document = document;
_this._config = _config;
_this._elementRef = _elementRef;
_this._renderer = _renderer;
_this.maskExpression = '';
_this.isNumberValue = false;
_this.showMaskTyped = false;
_this.maskIsShown = '';
_this.onChange = function (_) { };
_this.onTouch = function () { };
_this._formElement = _this._elementRef.nativeElement;
return _this;
}
/**
* @param {?} inputValue
* @param {?} maskExpression
* @param {?=} position
* @param {?=} cb
* @return {?}
*/
MaskService.prototype.applyMask = /**
* @param {?} inputValue
* @param {?} maskExpression
* @param {?=} position
* @param {?=} cb
* @return {?}
*/
function (inputValue, maskExpression, position, cb) {
if (position === void 0) { position = 0; }
if (cb === void 0) { cb = function () { }; }
this.maskIsShown = this.showMaskTyped
? this.maskExpression.replace(/[0-9]/g, '_')
: '';
if (!inputValue && this.showMaskTyped) {
return this.prefix + this.maskIsShown;
}
/** @type {?} */
var result = _super.prototype.applyMask.call(this, inputValue, maskExpression, position, cb);
/** @type {?} */
var finalResult = Array.isArray(this.dropSpecialCharacters)
? (this._removeMask(this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result))), this.dropSpecialCharacters))
: (this.dropSpecialCharacters === true
? (this.isNumberValue
? Number(this._removeMask(this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result))), this.maskSpecialCharacters))
: this._removeMask(this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result))), this.maskSpecialCharacters))
: (this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result)))));
if (this.prefix === finalResult || this.prefix.replace(' ', '') === finalResult
|| this._removeMask(this.prefix, this.maskSpecialCharacters) === finalResult) {
finalResult = '';
}
this.onChange(finalResult);
/** @type {?} */
var ifMaskIsShown = '';
if (!this.showMaskTyped) {
return result;
}
/** @type {?} */
var resLen = result.length;
/** @type {?} */
var prefNmask = this.prefix + this.maskIsShown;
ifMaskIsShown = prefNmask.slice(resLen);
return result + ifMaskIsShown;
};
/**
* @param {?=} position
* @param {?=} cb
* @return {?}
*/
MaskService.prototype.applyValueChanges = /**
* @param {?=} position
* @param {?=} cb
* @return {?}
*/
function (position, cb) {
if (position === void 0) { position = 0; }
if (cb === void 0) { cb = function () { }; }
/** @type {?} */
var maskedInput = this.applyMask(this._formElement.value, this.maskExpression, position, cb);
this._formElement.value = maskedInput;
if (this._formElement === this.document.activeElement) {
return;
}
this.clearIfNotMatchFn();
};
/**
* @return {?}
*/
MaskService.prototype.showMaskInInput = /**
* @return {?}
*/
function () {
if (this.showMaskTyped) {
this.maskIsShown = this.maskExpression.replace(/[0-9]/g, '_');
}
};
/**
* @return {?}
*/
MaskService.prototype.clearIfNotMatchFn = /**
* @return {?}
*/
function () {
if (this.clearIfNotMatch === true &&
this.maskExpression.length !== this._formElement.value.length) {
this.formElementProperty = ['value', ''];
this.applyMask(this._formElement.value, this.maskExpression);
}
};
Object.defineProperty(MaskService.prototype, "formElementProperty", {
set: /**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), name = _b[0], value = _b[1];
this._renderer.setProperty(this._formElement, name, value);
},
enumerable: true,
configurable: true
});
/**
* @param {?} value
* @param {?} specialCharactersForRemove
* @return {?}
*/
MaskService.prototype._removeMask = /**
* @param {?} value
* @param {?} specialCharactersForRemove
* @return {?}
*/
function (value, specialCharactersForRemove) {
return value
? value.replace(this._regExpForRemove(specialCharactersForRemove), '')
: value;
};
/**
* @param {?} value
* @return {?}
*/
MaskService.prototype._removePrefix = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (!this.prefix) {
return value;
}
return value
? value.replace(this.prefix, '')
: value;
};
/**
* @param {?} value
* @return {?}
*/
MaskService.prototype._removeSufix = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (!this.sufix) {
return value;
}
return value
? value.replace(this.sufix, '')
: value;
};
/**
* @param {?} specialCharactersForRemove
* @return {?}
*/
MaskService.prototype._regExpForRemove = /**
* @param {?} specialCharactersForRemove
* @return {?}
*/
function (specialCharactersForRemove) {
return new RegExp(specialCharactersForRemove.map(function (item) { return "\\" + item; }).join('|'), 'gi');
};
MaskService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
MaskService.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: undefined, decorators: [{ type: Inject, args: [config,] }] },
{ type: ElementRef },
{ type: Renderer2 }
]; };
return MaskService;
}(MaskApplierService));
export { MaskService };
if (false) {
/** @type {?} */
MaskService.prototype.maskExpression;
/** @type {?} */
MaskService.prototype.isNumberValue;
/** @type {?} */
MaskService.prototype.showMaskTyped;
/** @type {?} */
MaskService.prototype.maskIsShown;
/** @type {?} */
MaskService.prototype._formElement;
/** @type {?} */
MaskService.prototype.onChange;
/** @type {?} */
MaskService.prototype.onTouch;
/** @type {?} */
MaskService.prototype.document;
/** @type {?} */
MaskService.prototype._config;
/** @type {?} */
MaskService.prototype._elementRef;
/** @type {?} */
MaskService.prototype._renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hc2stMi8iLCJzb3VyY2VzIjpbImFwcC9uZ3gtbWFzay9tYXNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQVcsTUFBTSxVQUFVLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztJQUczQix1Q0FBa0I7OztJQVdyQixRQUFhLEVBQ2IsT0FBZ0IsRUFDbEMsYUFDQTtvQkFFUixrQkFBTSxPQUFPLENBQUM7UUFMWSxjQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ2IsYUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNsQyxpQkFBVyxHQUFYLFdBQVc7UUFDWCxlQUFTLEdBQVQsU0FBUzsrQkFiYSxFQUFFOzhCQUNGLEtBQUs7OEJBQ0wsS0FBSzs0QkFDUixFQUFFO3lCQUdiLFVBQUMsQ0FBTSxLQUFPO3dCQUNmLGVBQVE7UUFTdkIsS0FBSSxDQUFDLFlBQVksR0FBRyxLQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7OztJQUc5QywrQkFBUzs7Ozs7OztjQUNkLFVBQWtCLEVBQ2xCLGNBQXNCLEVBQ3RCLFFBQW9CLEVBQ3BCLEVBQXVCO1FBRHZCLHlCQUFBLEVBQUEsWUFBb0I7UUFDcEIsbUJBQUEsRUFBQSxvQkFBdUI7UUFFdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYTtZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQztZQUM1QyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1QsSUFBSSxD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bUNBQWE7Ozs7Y0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLEtBQUs7WUFDVixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNoQyxDQUFDLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFHSixrQ0FBWTs7OztjQUFDLEtBQWE7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxLQUFLO1lBQ1YsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7Ozs7O0lBR0osc0NBQWdCOzs7O2NBQUMsMEJBQW9DO1FBQzNELE9BQU8sSUFBSSxNQUFNLENBQ2YsMEJBQTBCLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBWSxJQUFLLE9BQUEsT0FBSyxJQUFNLEVBQVgsQ0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUN2RSxJQUFJLENBQ0wsQ0FBQzs7O2dCQTVJTCxVQUFVOzs7O2dEQVlOLE1BQU0sU0FBQyxRQUFRO2dEQUNmLE1BQU0sU0FBQyxNQUFNO2dCQWxCVCxVQUFVO2dCQUFzQixTQUFTOztzQkFBbEQ7RUFNaUMsa0JBQWtCO1NBQXRDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3QsIEluamVjdGFibGUsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb25maWcsIElDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWFza0FwcGxpZXJTZXJ2aWNlIH0gZnJvbSAnLi9tYXNrLWFwcGxpZXIuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBNYXNrU2VydmljZSBleHRlbmRzIE1hc2tBcHBsaWVyU2VydmljZSB7XHJcbiAgcHVibGljIG1hc2tFeHByZXNzaW9uOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgaXNOdW1iZXJWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93TWFza1R5cGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIG1hc2tJc1Nob3duOiBzdHJpbmcgPSAnJztcclxuICBwcml2YXRlIF9mb3JtRWxlbWVudDogSFRNTElucHV0RWxlbWVudDtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcclxuICBwdWJsaWMgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuICBwdWJsaWMgb25Ub3VjaCA9ICgpID0+IHt9O1xyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxyXG4gICAgQEluamVjdChjb25maWcpIHByb3RlY3RlZCBfY29uZmlnOiBJQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjJcclxuICApIHtcclxuICAgIHN1cGVyKF9jb25maWcpO1xyXG4gICAgdGhpcy5fZm9ybUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXBwbHlNYXNrKFxyXG4gICAgaW5wdXRWYWx1ZTogc3RyaW5nLFxyXG4gICAgbWFza0V4cHJlc3Npb246IHN0cmluZyxcclxuICAgIHBvc2l0aW9uOiBudW1iZXIgPSAwLFxyXG4gICAgY2I6IEZ1bmN0aW9uID0gKCkgPT4ge31cclxuICApOiBzdHJpbmcgIHtcclxuICAgIHRoaXMubWFza0lzU2hvd24gPSB0aGlzLnNob3dNYXNrVHlwZWRcclxuICAgICAgICA/IHRoaXMubWFza0V4cHJlc3Npb24ucmVwbGFjZSgvWzAtOV0vZywgJ18nKVxyXG4gICAgICAgIDogJyc7XHJcbiAgICBpZiAoIWlucHV0VmFsdWUgJiYgdGhpcy5zaG93TWFza1R5cGVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByZWZpeCArIHRoaXMubWFza0lzU2hvd247XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZyAgPSBzdXBlci5hcHBseU1hc2soXHJcbiAgICAgIGlucHV0VmFsdWUsXHJcbiAgICAgIG1hc2tFeHByZXNzaW9uLFxyXG4gICAgICBwb3NpdGlvbixcclxuICAgICAgY2JcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGZpbmFsUmVzdWx0OiBzdHJpbmcgfCBudW1iZXIgPSBBcnJheS5pc0FycmF5KHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzKVxyXG4gICAgICAgID8gKHRoaXMuX3JlbW92ZU1hc2sodGhpcy5fcmVtb3ZlU3VmaXgoXHJcbiAgICAgICAgKHRoaXMuYXBwZW5kUHJlZml4VG9Nb2RlbCA/IHJlc3VsdCA6IHRoaXMuX3JlbW92ZVByZWZpeChyZXN1bHQpKVxyXG4gICAgICAgICksIHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzKSlcclxuICAgICAgICA6ICh0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycyA9PT0gdHJ1ZVxyXG4gICAgICAgICA/IChcclxuICAgICAgICAgdGhpcy5pc051bWJlclZhbHVlXHJcbiAgICAgICAgICAgICA/IE51bWJlcih0aGlzLl9yZW1vdmVNYXNrKHRoaXMuX3JlbW92ZVN1Zml4KFxyXG4gICAgICAgICAgICAgKHRoaXMuYXBwZW5kUHJlZml4VG9Nb2RlbCA/IHJlc3VsdCA6IHRoaXMuX3JlbW92ZVByZWZpeChyZXN1bHQpKSksIHRoaXMubWFza1NwZWNpYWxDaGFyYWN0ZXJzKSlcclxuICAgICAgICAgICAgIDogdGhpcy5fcmVtb3ZlTWFzayh0aGlzLl9yZW1vdmVTdWZpeChcclxuICAgICAgICAgICAgICh0aGlzLmFwcGVuZFByZWZpeFRvTW9kZWwgPyByZXN1bHQgOiB0aGlzLl9yZW1vdmVQcmVmaXgocmVzdWx0KSkpLCB0aGlzLm1hc2tTcGVjaWFsQ2hhcmFjdGVycylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICA6ICh0aGlzLl9yZW1vdmVTdWZpeCgodGhpcy5hcHBlbmRQcmVmaXhUb01vZGVsID8gcmVzdWx0IDogdGhpcy5fcmVtb3ZlUHJlZml4KHJlc3VsdCkpKSkpO1xyXG5cclxuICAgIGlmICh0aGlzLnByZWZpeCA9PT0gZmluYWxSZXN1bHQgfHwgdGhpcy5wcmVmaXgucmVwbGFjZSgnICcsICcnKSA9PT0gZmluYWxSZXN1bHRcclxuICAgICAgICB8fCB0aGlzLl9yZW1vdmVNYXNrKHRoaXMucHJlZml4LCB0aGlzLm1hc2tTcGVjaWFsQ2hhcmFjdGVycykgPT09IGZpbmFsUmVzdWx0KSB7XHJcbiAgICAgICAgZmluYWxSZXN1bHQgPSAnJztcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2UoZmluYWxSZXN1bHQpO1xyXG5cclxuICAgIGxldCBpZk1hc2tJc1Nob3duOiBzdHJpbmcgPSAnJztcclxuICAgIGlmICghdGhpcy5zaG93TWFza1R5cGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc0xlbjogbnVtYmVyID0gcmVzdWx0Lmxlbmd0aDtcclxuICAgIGNvbnN0IHByZWZObWFzazogc3RyaW5nID0gdGhpcy5wcmVmaXggKyB0aGlzLm1hc2tJc1Nob3duO1xyXG4gICAgaWZNYXNrSXNTaG93biA9IHByZWZObWFzay5zbGljZShyZXNMZW4pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQgKyBpZk1hc2tJc1Nob3duO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGx5VmFsdWVDaGFuZ2VzKFxyXG4gICAgcG9zaXRpb246IG51bWJlciA9IDAsXHJcbiAgICBjYjogRnVuY3Rpb24gPSAoKSA9PiB7fVxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgbWFza2VkSW5wdXQ6IHN0cmluZyB8IG51bWJlciA9IHRoaXMuYXBwbHlNYXNrKFxyXG4gICAgICB0aGlzLl9mb3JtRWxlbWVudC52YWx1ZSxcclxuICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvbixcclxuICAgICAgcG9zaXRpb24sXHJcbiAgICAgIGNiXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuX2Zvcm1FbGVtZW50LnZhbHVlID0gbWFza2VkSW5wdXQ7XHJcbiAgICBpZiAodGhpcy5fZm9ybUVsZW1lbnQgPT09IHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsZWFySWZOb3RNYXRjaEZuKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd01hc2tJbklucHV0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2hvd01hc2tUeXBlZCkge1xyXG4gICAgICB0aGlzLm1hc2tJc1Nob3duID0gdGhpcy5tYXNrRXhwcmVzc2lvbi5yZXBsYWNlKC9bMC05XS9nLCAnXycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFySWZOb3RNYXRjaEZuKCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNsZWFySWZOb3RNYXRjaCA9PT0gdHJ1ZSAmJlxyXG4gICAgICB0aGlzLm1hc2tFeHByZXNzaW9uLmxlbmd0aCAhPT0gdGhpcy5fZm9ybUVsZW1lbnQudmFsdWUubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5mb3JtRWxlbWVudFByb3BlcnR5ID0gWyd2YWx1ZScsICcnXTtcclxuICAgICAgdGhpcy5hcHBseU1hc2sodGhpcy5fZm9ybUVsZW1lbnQudmFsdWUsIHRoaXMubWFza0V4cHJlc3Npb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBmb3JtRWxlbWVudFByb3BlcnR5KFtuYW1lLCB2YWx1ZV06IFtzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW5dKSB7XHJcbiAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9mb3JtRWxlbWVudCwgbmFtZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIF9yZW1vdmVNYXNrKFxyXG4gICAgdmFsdWU6IHN0cmluZyxcclxuICAgIHNwZWNpYWxDaGFyYWN0ZXJzRm9yUmVtb3ZlOiBzdHJpbmdbXVxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdmFsdWVcclxuICAgICAgPyB2YWx1ZS5yZXBsYWNlKHRoaXMuX3JlZ0V4cEZvclJlbW92ZShzcGVjaWFsQ2hhcmFjdGVyc0ZvclJlbW92ZSksICcnKVxyXG4gICAgICA6IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIF9yZW1vdmVQcmVmaXgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMucHJlZml4KSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICA/IHZhbHVlLnJlcGxhY2UodGhpcy5wcmVmaXgsICcnKVxyXG4gICAgICA6IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlU3VmaXgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuc3VmaXgpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgID8gdmFsdWUucmVwbGFjZSh0aGlzLnN1Zml4LCAnJylcclxuICAgICAgOiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlZ0V4cEZvclJlbW92ZShzcGVjaWFsQ2hhcmFjdGVyc0ZvclJlbW92ZTogc3RyaW5nW10pOiBSZWdFeHAge1xyXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXHJcbiAgICAgIHNwZWNpYWxDaGFyYWN0ZXJzRm9yUmVtb3ZlLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBgXFxcXCR7aXRlbX1gKS5qb2luKCd8JyksXHJcbiAgICAgICdnaSdcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==