UNPKG

ngx-mask-2

Version:
232 lines (231 loc) 20 kB
/** * @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==