ngx-mask 16.0.1 → 16.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -358,6 +358,9 @@ class NgxMaskService extends NgxMaskApplierService {
358
358
  return Number.isNaN(num) ? value : num;
359
359
  }
360
360
  _removeMask(value, specialCharactersForRemove) {
361
+ if (this.maskExpression.startsWith('percent') && value.includes('.')) {
362
+ return value;
363
+ }
361
364
  return value ? value.replace(this._regExpForRemove(specialCharactersForRemove), '') : value;
362
365
  }
363
366
  _removePrefix(value) {
@@ -426,4 +429,4 @@ export { NgxMaskService };
426
429
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskService, decorators: [{
427
430
  type: Injectable
428
431
  }] });
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXNrLWxpYi9zcmMvbGliL25neC1tYXNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBVyxNQUFNLG1CQUFtQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUVuRSxNQUNhLGNBQWUsU0FBUSxxQkFBcUI7SUFEekQ7O1FBRVcsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFakIsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFFL0IsV0FBTSxHQUFrQixJQUFJLENBQUM7UUFFcEM7OztXQUdHO1FBQ0ksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFckIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRW5DLG9HQUFvRztRQUM3RixhQUFRLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUVoQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFCLFlBQU8sR0FBRyxNQUFNLENBQVUsZUFBZSxDQUFDLENBQUM7UUFFN0MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFckQsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztLQXlldEU7SUF2ZUcsc0NB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RTtZQUN0QyxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsQyxDQUFDOzhHQXBnQlEsY0FBYztrSEFBZCxjQUFjOztTQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIGluamVjdCwgSW5qZWN0YWJsZSwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IE5HWF9NQVNLX0NPTkZJRywgSUNvbmZpZyB9IGZyb20gJy4vbmd4LW1hc2suY29uZmlnJztcbmltcG9ydCB7IE5neE1hc2tBcHBsaWVyU2VydmljZSB9IGZyb20gJy4vbmd4LW1hc2stYXBwbGllci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5neE1hc2tTZXJ2aWNlIGV4dGVuZHMgTmd4TWFza0FwcGxpZXJTZXJ2aWNlIHtcbiAgICBwdWJsaWMgaXNOdW1iZXJWYWx1ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIG1hc2tJc1Nob3duID0gJyc7XG5cbiAgICBwdWJsaWMgc2VsU3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIHNlbEVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgaW4gd3JpdGVWYWx1ZSBmdW5jdGlvbiwgaW4gdGhpcyBjYXNlIHdoZW4gYXBwbHlpbmcgdGhlIG1hc2sgd2UgZG9uJ3Qgd2FudCB0byB0cmlnZ2VyIG9uQ2hhbmdlIGZ1bmN0aW9uLFxuICAgICAqIHNpbmNlIHdyaXRlVmFsdWUgc2hvdWxkIGJlIGEgb25lIHdheSBvbmx5IHByb2Nlc3Mgb2Ygd3JpdGluZyB0aGUgRE9NIHZhbHVlIGJhc2VkIG9uIHRoZSBBbmd1bGFyIG1vZGVsIHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0aW5nVmFsdWUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBtYXNrQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIHRyaWdnZXJPbk1hc2tDaGFuZ2UgPSBmYWxzZTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwdWJsaWMgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9jb25maWcgPSBpbmplY3Q8SUNvbmZpZz4oTkdYX01BU0tfQ09ORklHKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgcHVibGljIG92ZXJyaWRlIGFwcGx5TWFzayhcbiAgICAgICAgaW5wdXRWYWx1ZTogc3RyaW5nLFxuICAgICAgICBtYXNrRXhwcmVzc2lvbjogc3RyaW5nLFxuICAgICAgICBwb3NpdGlvbiA9IDAsXG4gICAgICAgIGp1c3RQYXN0ZWQgPSBmYWxzZSxcbiAgICAgICAgYmFja3NwYWNlZCA9IGZhbHNlLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNiOiAoLi4uYXJnczogYW55W10pID0+IGFueSA9ICgpID0+IHt9XG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFtYXNrRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0VmFsdWUgIT09IHRoaXMuYWN0dWFsVmFsdWUgPyB0aGlzLmFjdHVhbFZhbHVlIDogaW5wdXRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hc2tJc1Nob3duID0gdGhpcy5zaG93TWFza1R5cGVkID8gdGhpcy5zaG93TWFza0luSW5wdXQoKSA6ICcnO1xuICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbiA9PT0gJ0lQJyAmJiB0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0lzU2hvd24gPSB0aGlzLnNob3dNYXNrSW5JbnB1dChpbnB1dFZhbHVlIHx8ICcjJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWFza0V4cHJlc3Npb24gPT09ICdDUEZfQ05QSicgJiYgdGhpcy5zaG93TWFza1R5cGVkKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tJc1Nob3duID0gdGhpcy5zaG93TWFza0luSW5wdXQoaW5wdXRWYWx1ZSB8fCAnIycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSAmJiB0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2xSZXN1bHQodGhpcy5wcmVmaXgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlZml4ICsgdGhpcy5tYXNrSXNTaG93bjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnZXRTeW1ib2w6IHN0cmluZyA9XG4gICAgICAgICAgICAhIWlucHV0VmFsdWUgJiYgdHlwZW9mIHRoaXMuc2VsU3RhcnQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgPyBpbnB1dFZhbHVlW3RoaXMuc2VsU3RhcnRdID8/ICcnXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgbGV0IG5ld0lucHV0VmFsdWUgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuSW5wdXQgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy53cml0aW5nVmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBhY3R1YWxSZXN1bHQ6IHN0cmluZ1tdID0gdGhpcy5hY3R1YWxWYWx1ZS5zcGxpdCgnJyk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZSAgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGlucHV0VmFsdWUgIT09ICcnICYmIGFjdHVhbFJlc3VsdC5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IHR5cGVvZiB0aGlzLnNlbFN0YXJ0ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdGhpcy5zZWxFbmQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXRWYWx1ZS5sZW5ndGggPiBhY3R1YWxSZXN1bHQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGFjdHVhbFJlc3VsdC5zcGxpY2UodGhpcy5zZWxTdGFydCwgMCwgZ2V0U3ltYm9sKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dFZhbHVlLmxlbmd0aCA8IGFjdHVhbFJlc3VsdC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0dWFsUmVzdWx0Lmxlbmd0aCAtIGlucHV0VmFsdWUubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3R1YWxSZXN1bHQuc3BsaWNlKHRoaXMuc2VsU3RhcnQgLSAxLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWN0dWFsUmVzdWx0LnNwbGljZSh0aGlzLnNlbFN0YXJ0LCB0aGlzLnNlbEVuZCAtIHRoaXMuc2VsU3RhcnQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgOiAoYWN0dWFsUmVzdWx0ID0gW10pO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd01hc2tUeXBlZCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSB0aGlzLnJlbW92ZU1hc2soaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2xpbnQtZW5hYmxlICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAgICAgICBuZXdJbnB1dFZhbHVlID1cbiAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbFZhbHVlLmxlbmd0aCAmJiBhY3R1YWxSZXN1bHQubGVuZ3RoIDw9IGlucHV0VmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5zaGlmdFR5cGVkU3ltYm9scyhhY3R1YWxSZXN1bHQuam9pbignJykpXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMucmVtb3ZlTWFzayhpbnB1dFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld0lucHV0VmFsdWUgPSBCb29sZWFuKG5ld0lucHV0VmFsdWUpICYmIG5ld0lucHV0VmFsdWUubGVuZ3RoID8gbmV3SW5wdXRWYWx1ZSA6IGlucHV0VmFsdWU7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgPSBzdXBlci5hcHBseU1hc2soXG4gICAgICAgICAgICBuZXdJbnB1dFZhbHVlLFxuICAgICAgICAgICAgbWFza0V4cHJlc3Npb24sXG4gICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgIGp1c3RQYXN0ZWQsXG4gICAgICAgICAgICBiYWNrc3BhY2VkLFxuICAgICAgICAgICAgY2JcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hY3R1YWxWYWx1ZSA9IHRoaXMuZ2V0QWN0dWFsVmFsdWUocmVzdWx0KTtcbiAgICAgICAgLy8gaGFuZGxlIHNvbWUgc2VwYXJhdG9yIGltcGxpY2F0aW9uczpcbiAgICAgICAgLy8gYS4pIGFkanVzdCBkZWNpbWFsTWFya2VyIGRlZmF1bHQgKC4gLT4gLCkgaWYgdGhvdXNhbmRTZXBhcmF0b3IgaXMgYSBkb3RcbiAgICAgICAgaWYgKHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPT09ICcuJyAmJiB0aGlzLmRlY2ltYWxNYXJrZXIgPT09ICcuJykge1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsTWFya2VyID0gJywnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYikgcmVtb3ZlIGRlY2ltYWwgbWFya2VyIGZyb20gbGlzdCBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gbWFza1xuICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbi5zdGFydHNXaXRoKCdzZXBhcmF0b3InKSAmJiB0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycyA9IHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChpdGVtOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgICAgICF0aGlzLl9jb21wYXJlT3JJbmNsdWRlcyhpdGVtLCB0aGlzLmRlY2ltYWxNYXJrZXIsIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IpIC8vaXRlbSAhPT0gdGhpcy5kZWNpbWFsTWFya2VyLCAvLyAhXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xSZXN1bHQocmVzdWx0KTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGRlbklucHV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5oaWRlSW5wdXQocmVzdWx0LCB0aGlzLm1hc2tFeHByZXNzaW9uKVxuICAgICAgICAgICAgICAgICAgICA6IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzTGVuOiBudW1iZXIgPSByZXN1bHQubGVuZ3RoO1xuICAgICAgICBjb25zdCBwcmVmTm1hc2s6IHN0cmluZyA9IHRoaXMucHJlZml4ICsgdGhpcy5tYXNrSXNTaG93bjtcblxuICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbi5pbmNsdWRlcygnSCcpKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudFNraXBlZFN5bWJvbCA9IHRoaXMuX251bWJlclNraXBlZFN5bWJvbHMocmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBwcmVmTm1hc2suc2xpY2UocmVzTGVuICsgY291bnRTa2lwZWRTeW1ib2wpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFza0V4cHJlc3Npb24gPT09ICdJUCcgfHwgdGhpcy5tYXNrRXhwcmVzc2lvbiA9PT0gJ0NQRl9DTlBKJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIHByZWZObWFzaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0ICsgcHJlZk5tYXNrLnNsaWNlKHJlc0xlbik7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdlcmUgc2hpZnRlZFxuICAgIHByaXZhdGUgX251bWJlclNraXBlZFN5bWJvbHModmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLyhefFxcRCkoXFxkXFxEKS9nO1xuICAgICAgICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHZhbHVlKTtcbiAgICAgICAgbGV0IGNvdW50U2tpcGVkU3ltYm9sID0gMDtcbiAgICAgICAgd2hpbGUgKG1hdGNoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvdW50U2tpcGVkU3ltYm9sICs9IDE7XG4gICAgICAgICAgICBtYXRjaCA9IHJlZ2V4LmV4ZWModmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudFNraXBlZFN5bWJvbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHlWYWx1ZUNoYW5nZXMoXG4gICAgICAgIHBvc2l0aW9uOiBudW1iZXIsXG4gICAgICAgIGp1c3RQYXN0ZWQ6IGJvb2xlYW4sXG4gICAgICAgIGJhY2tzcGFjZWQ6IGJvb2xlYW4sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY2I6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID0gKCkgPT4ge31cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWZvcm1FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUgPSB0aGlzLmFwcGx5TWFzayhcbiAgICAgICAgICAgIGZvcm1FbGVtZW50LnZhbHVlLFxuICAgICAgICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAganVzdFBhc3RlZCxcbiAgICAgICAgICAgIGJhY2tzcGFjZWQsXG4gICAgICAgICAgICBjYlxuICAgICAgICApO1xuICAgICAgICBpZiAoZm9ybUVsZW1lbnQgPT09IHRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJJZk5vdE1hdGNoRm4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZUlucHV0KGlucHV0VmFsdWU6IHN0cmluZywgbWFza0V4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpbnB1dFZhbHVlXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAubWFwKChjdXJyOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybnMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJuc1ttYXNrRXhwcmVzc2lvbltpbmRleF0gPz8gJyddICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybnNbbWFza0V4cHJlc3Npb25baW5kZXhdID8/ICcnXT8uc3ltYm9sXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhdHRlcm5zW21hc2tFeHByZXNzaW9uW2luZGV4XSA/PyAnJ10/LnN5bWJvbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgbm90IG5lY2Vzc2FyeSwgaXQgY2hlY2tzIHJlc3VsdCBhZ2FpbnN0IG1hc2tFeHByZXNzaW9uXG4gICAgcHVibGljIGdldEFjdHVhbFZhbHVlKHJlczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY29tcGFyZTogc3RyaW5nW10gPSByZXMuc3BsaXQoJycpLmZpbHRlcigoc3ltYm9sOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWFza0NoYXIgPSB0aGlzLm1hc2tFeHByZXNzaW9uW2ldID8/ICcnO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1N5bWJvbE1hc2soc3ltYm9sLCBtYXNrQ2hhcikgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhtYXNrQ2hhcikgJiYgc3ltYm9sID09PSBtYXNrQ2hhcilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29tcGFyZS5qb2luKCcnKSA9PT0gcmVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcGFyZS5qb2luKCcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaGlmdFR5cGVkU3ltYm9scyhpbnB1dFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgc3ltYm9sVG9SZXBsYWNlID0gJyc7XG4gICAgICAgIGNvbnN0IG5ld0lucHV0VmFsdWU6IChzdHJpbmcgfCB1bmRlZmluZWQpW10gPVxuICAgICAgICAgICAgKGlucHV0VmFsdWUgJiZcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLnNwbGl0KCcnKS5tYXAoKGN1cnJTeW1ib2w6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKGlucHV0VmFsdWVbaW5kZXggKyAxXSA/PyAnJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVbaW5kZXggKyAxXSAhPT0gdGhpcy5tYXNrRXhwcmVzc2lvbltpbmRleCArIDFdXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVG9SZXBsYWNlID0gY3VyclN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dFZhbHVlW2luZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbFRvUmVwbGFjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VTeW1ib2w6IHN0cmluZyA9IHN5bWJvbFRvUmVwbGFjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRvUmVwbGFjZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VTeW1ib2w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJTeW1ib2w7XG4gICAgICAgICAgICAgICAgfSkpIHx8XG4gICAgICAgICAgICBbXTtcbiAgICAgICAgcmV0dXJuIG5ld0lucHV0VmFsdWUuam9pbignJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBudW1iZXIgdmFsdWUgdG8gc3RyaW5nXG4gICAgICogMy4xNDE1IC0+ICczLjE0MTUnXG4gICAgICogMWUtNyAtPiAnMC4wMDAwMDAxJ1xuICAgICAqL1xuICAgIHB1YmxpYyBudW1iZXJUb1N0cmluZyh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSkudG9Mb2NhbGVTdHJpbmcoJ2Z1bGx3aWRlJywge1xuICAgICAgICAgICAgdXNlR3JvdXBpbmc6IGZhbHNlLFxuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyMCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dNYXNrSW5JbnB1dChpbnB1dFZhbD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnNob3dNYXNrVHlwZWQgJiYgISF0aGlzLnNob3duTWFza0V4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hc2tFeHByZXNzaW9uLmxlbmd0aCAhPT0gdGhpcy5zaG93bk1hc2tFeHByZXNzaW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWFzayBleHByZXNzaW9uIG11c3QgbWF0Y2ggbWFzayBwbGFjZWhvbGRlciBsZW5ndGgnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd25NYXNrRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dFZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hc2tFeHByZXNzaW9uID09PSAnSVAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGVja0ZvcklwKGlucHV0VmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFza0V4cHJlc3Npb24gPT09ICdDUEZfQ05QSicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrRm9yQ3BmQ25waihpbnB1dFZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFza0V4cHJlc3Npb24ucmVwbGFjZSgvXFx3L2csIHRoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJJZk5vdE1hdGNoRm4oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1FbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKCFmb3JtRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJZk5vdE1hdGNoICYmXG4gICAgICAgICAgICB0aGlzLnByZWZpeC5sZW5ndGggKyB0aGlzLm1hc2tFeHByZXNzaW9uLmxlbmd0aCArIHRoaXMuc3VmZml4Lmxlbmd0aCAhPT1cbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC52YWx1ZS5yZXBsYWNlKC9fL2csICcnKS5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50UHJvcGVydHkgPSBbJ3ZhbHVlJywgJyddO1xuICAgICAgICAgICAgdGhpcy5hcHBseU1hc2soZm9ybUVsZW1lbnQudmFsdWUsIHRoaXMubWFza0V4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBmb3JtRWxlbWVudFByb3BlcnR5KFtuYW1lLCB2YWx1ZV06IFtzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW5dKSB7XG4gICAgICAgIGlmICghdGhpcy5fcmVuZGVyZXIgfHwgIXRoaXMuX2VsZW1lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcj8uc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCwgbmFtZSwgdmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrU3BlY2lhbENoYXJBbW91bnQobWFzazogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2hhcnM6IHN0cmluZ1tdID0gbWFza1xuICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB0aGlzLl9maW5kU3BlY2lhbENoYXIoaXRlbSkpO1xuICAgICAgICByZXR1cm4gY2hhcnMubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVNYXNrKGlucHV0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVNYXNrKFxuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU3VmZml4KHRoaXMuX3JlbW92ZVByZWZpeChpbnB1dFZhbHVlKSksXG4gICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmNvbmNhdCgnXycpLmNvbmNhdCh0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrRm9ySXAoaW5wdXRWYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChpbnB1dFZhbCA9PT0gJyMnKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0uJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfS4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9LiR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFycjogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dFZhbFtpXSA/PyAnJztcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaCgnXFxcXGQnKSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA8PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0uJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfS4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDMgJiYgYXJyLmxlbmd0aCA8PSA2KSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0uJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiA2ICYmIGFyci5sZW5ndGggPD0gOSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiA5ICYmIGFyci5sZW5ndGggPD0gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tGb3JDcGZDbnBqKGlucHV0VmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjcGYgPVxuICAgICAgICAgICAgYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWAgK1xuICAgICAgICAgICAgYC4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gICtcbiAgICAgICAgICAgIGAuJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcbiAgICAgICAgY29uc3QgY25waiA9XG4gICAgICAgICAgICBgJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gICtcbiAgICAgICAgICAgIGAuJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLiR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWAgK1xuICAgICAgICAgICAgYC8ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcblxuICAgICAgICBpZiAoaW5wdXRWYWwgPT09ICcjJykge1xuICAgICAgICAgICAgcmV0dXJuIGNwZjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcnI6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRWYWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRWYWxbaV0gPz8gJyc7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUubWF0Y2goJ1xcXFxkJykpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPD0gMykge1xuICAgICAgICAgICAgcmV0dXJuIGNwZi5zbGljZShhcnIubGVuZ3RoLCBjcGYubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDMgJiYgYXJyLmxlbmd0aCA8PSA2KSB7XG4gICAgICAgICAgICByZXR1cm4gY3BmLnNsaWNlKGFyci5sZW5ndGggKyAxLCBjcGYubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDYgJiYgYXJyLmxlbmd0aCA8PSA5KSB7XG4gICAgICAgICAgICByZXR1cm4gY3BmLnNsaWNlKGFyci5sZW5ndGggKyAyLCBjcGYubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDkgJiYgYXJyLmxlbmd0aCA8IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gY3BmLnNsaWNlKGFyci5sZW5ndGggKyAzLCBjcGYubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMTIpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dFZhbC5sZW5ndGggPT09IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNucGouc2xpY2UoMTYsIGNucGoubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjbnBqLnNsaWNlKDE1LCBjbnBqLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiAxMiAmJiBhcnIubGVuZ3RoIDw9IDE0KSB7XG4gICAgICAgICAgICByZXR1cm4gY25wai5zbGljZShhcnIubGVuZ3RoICsgNCwgY25wai5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmVseSBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgYWN0aXZlIGVsZW1lbnQgYnkgbmF2aWdhdGluZyB0aGUgU2hhZG93IERPTSB1bnRpbCB0aGUgQWN0aXZlIEVsZW1lbnQgaXMgZm91bmQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZlRWxlbWVudChkb2N1bWVudDogRG9jdW1lbnRPclNoYWRvd1Jvb3QgPSB0aGlzLmRvY3VtZW50KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBzaGFkb3dSb290RWwgPSBkb2N1bWVudD8uYWN0aXZlRWxlbWVudD8uc2hhZG93Um9vdDtcbiAgICAgICAgaWYgKCFzaGFkb3dSb290RWw/LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoc2hhZG93Um9vdEVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BvZ2F0ZXMgdGhlIGlucHV0IHZhbHVlIGJhY2sgdG8gdGhlIEFuZ3VsYXIgbW9kZWwgYnkgdHJpZ2dlcmluZyB0aGUgb25DaGFuZ2UgZnVuY3Rpb24uIEl0IHdvbid0IGRvIHRoaXMgaWYgd3JpdGluZ1ZhbHVlXG4gICAgICogaXMgdHJ1ZS4gSWYgdGhhdCBpcyB0cnVlIGl0IG1lYW5zIHdlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHdyaXRlVmFsdWUgZnVuY3Rpb24sIHdoaWNoIGlzIHN1cHBvc2VkIHRvIG9ubHkgdXBkYXRlIHRoZSBhY3R1YWxcbiAgICAgKiBET00gZWxlbWVudCBiYXNlZCBvbiB0aGUgQW5ndWxhciBtb2RlbCB2YWx1ZS4gSXQgc2hvdWxkIGJlIGEgb25lIHdheSBwcm9jZXNzLCBpLmUuIHdyaXRlVmFsdWUgc2hvdWxkIG5vdCBiZSBtb2RpZnlpbmcgdGhlIEFuZ3VsYXJcbiAgICAgKiBtb2RlbCB2YWx1ZSB0b28uIFRoZXJlZm9yZSwgd2UgZG9uJ3QgdHJpZ2dlciBvbkNoYW5nZSBpbiB0aGlzIHNjZW5hcmlvLlxuICAgICAqIEBwYXJhbSBpbnB1dFZhbHVlIHRoZSBjdXJyZW50IGZvcm0gaW5wdXQgdmFsdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIGZvcm1Db250cm9sUmVzdWx0KGlucHV0VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy53cml0aW5nVmFsdWUgfHwgKCF0aGlzLnRyaWdnZXJPbk1hc2tDaGFuZ2UgJiYgdGhpcy5tYXNrQ2hhbmdlZCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycykpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5fdG9OdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU3ltYm9scyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZU1hc2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU3VmZml4KHRoaXMuX3JlbW92ZVByZWZpeChpbnB1dFZhbHVlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnMpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5fdG9OdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU3ltYm9scyh0aGlzLl9yZW1vdmVTdWZmaXgodGhpcy5fcmVtb3ZlUHJlZml4KGlucHV0VmFsdWUpKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl90b051bWJlcihpbnB1dFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF90b051bWJlcih2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNOdW1iZXJWYWx1ZSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG51bSkgPyB2YWx1ZSA6IG51bTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVNYXNrKHZhbHVlOiBzdHJpbmcsIHNwZWNpYWxDaGFyYWN0ZXJzRm9yUmVtb3ZlOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLnJlcGxhY2UodGhpcy5fcmVnRXhwRm9yUmVtb3ZlKHNwZWNpYWxDaGFyYWN0ZXJzRm9yUmVtb3ZlKSwgJycpIDogdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVtb3ZlUHJlZml4KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMucHJlZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUucmVwbGFjZSh0aGlzLnByZWZpeCwgJycpIDogdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVtb3ZlU3VmZml4KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuc3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUucmVwbGFjZSh0aGlzLnN1ZmZpeCwgJycpIDogdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmV0cmlldmVTZXBhcmF0b3JWYWx1ZShyZXN1bHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHNwZWNpYWxDaGFyYWN0ZXJzID0gQXJyYXkuaXNBcnJheSh0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycylcbiAgICAgICAgICAgID8gdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5maWx0ZXIoKHYpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKHYpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlTWFzayhyZXN1bHQsIHNwZWNpYWxDaGFyYWN0ZXJzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWdFeHBGb3JSZW1vdmUoc3BlY2lhbENoYXJhY3RlcnNGb3JSZW1vdmU6IHN0cmluZ1tdKTogUmVnRXhwIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXG4gICAgICAgICAgICBzcGVjaWFsQ2hhcmFjdGVyc0ZvclJlbW92ZS5tYXAoKGl0ZW06IHN0cmluZykgPT4gYFxcXFwke2l0ZW19YCkuam9pbignfCcpLFxuICAgICAgICAgICAgJ2dpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlcGxhY2VEZWNpbWFsTWFya2VyVG9Eb3QodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG1hcmtlcnMgPSBBcnJheS5pc0FycmF5KHRoaXMuZGVjaW1hbE1hcmtlcilcbiAgICAgICAgICAgID8gdGhpcy5kZWNpbWFsTWFya2VyXG4gICAgICAgICAgICA6IFt0aGlzLmRlY2ltYWxNYXJrZXJdO1xuXG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHRoaXMuX3JlZ0V4cEZvclJlbW92ZShtYXJrZXJzKSwgJy4nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja1N5bWJvbHMocmVzdWx0OiBzdHJpbmcpOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXBhcmF0b3JQcmVjaXNpb246IG51bWJlciB8IG51bGwgPSB0aGlzLl9yZXRyaWV2ZVNlcGFyYXRvclByZWNpc2lvbihcbiAgICAgICAgICAgIHRoaXMubWFza0V4cHJlc3Npb25cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yVmFsdWU6IHN0cmluZyA9IHRoaXMuX3JlcGxhY2VEZWNpbWFsTWFya2VyVG9Eb3QoXG4gICAgICAgICAgICB0aGlzLl9yZXRyaWV2ZVNlcGFyYXRvclZhbHVlKHJlc3VsdClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNOdW1iZXJWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlcGFyYXRvclZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JQcmVjaXNpb24pIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRoaXMuZGVjaW1hbE1hcmtlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrUHJlY2lzaW9uKHRoaXMubWFza0V4cHJlc3Npb24sIHNlcGFyYXRvclZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzZXBhcmF0b3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE8gc2hvdWxkIHRoaW5rIGFib3V0IGhlbHBlcnMgb3Igc2VwYXJ0aW5nIGRlY2ltYWwgcHJlY2lzaW9uIHRvIG93biBwcm9wZXJ0eVxuICAgIHByaXZhdGUgX3JldHJpZXZlU2VwYXJhdG9yUHJlY2lzaW9uKG1hc2tFeHByZXRpb246IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBjb25zdCBtYXRjaGVyOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCA9IG1hc2tFeHByZXRpb24ubWF0Y2goXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGBec2VwYXJhdG9yXFxcXC4oW15kXSopYClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoZXIgPyBOdW1iZXIobWF0Y2hlclsxXSkgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrUHJlY2lzaW9uKHNlcGFyYXRvckV4cHJlc3Npb246IHN0cmluZywgc2VwYXJhdG9yVmFsdWU6IHN0cmluZyk6IG51bWJlciB8IHN0cmluZyB7XG4gICAgICAgIGlmIChzZXBhcmF0b3JFeHByZXNzaW9uLmluZGV4T2YoJzInKSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VwYXJhdG9yVmFsdWUpLnRvRml4ZWQoMik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcihzZXBhcmF0b3JWYWx1ZSk7XG4gICAgfVxufVxuIl19
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXNrLWxpYi9zcmMvbGliL25neC1tYXNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBVyxNQUFNLG1CQUFtQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUVuRSxNQUNhLGNBQWUsU0FBUSxxQkFBcUI7SUFEekQ7O1FBRVcsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFakIsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFFL0IsV0FBTSxHQUFrQixJQUFJLENBQUM7UUFFcEM7OztXQUdHO1FBQ0ksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFckIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRW5DLG9HQUFvRztRQUM3RixhQUFRLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUVoQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFCLFlBQU8sR0FBRyxNQUFNLENBQVUsZUFBZSxDQUFDLENBQUM7UUFFN0MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFckQsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztLQTRldEU7SUExZUcsc0NB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QyxDQUFDLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRU8sZUFBZSxDQUFDLG1CQUEyQixFQUFFLGNBQXNCO1FBQ3ZFLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QyxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsQyxDQUFDOzhHQXZnQlEsY0FBYztrSEFBZCxjQUFjOztTQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIGluamVjdCwgSW5qZWN0YWJsZSwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IE5HWF9NQVNLX0NPTkZJRywgSUNvbmZpZyB9IGZyb20gJy4vbmd4LW1hc2suY29uZmlnJztcbmltcG9ydCB7IE5neE1hc2tBcHBsaWVyU2VydmljZSB9IGZyb20gJy4vbmd4LW1hc2stYXBwbGllci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5neE1hc2tTZXJ2aWNlIGV4dGVuZHMgTmd4TWFza0FwcGxpZXJTZXJ2aWNlIHtcbiAgICBwdWJsaWMgaXNOdW1iZXJWYWx1ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIG1hc2tJc1Nob3duID0gJyc7XG5cbiAgICBwdWJsaWMgc2VsU3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIHNlbEVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgaW4gd3JpdGVWYWx1ZSBmdW5jdGlvbiwgaW4gdGhpcyBjYXNlIHdoZW4gYXBwbHlpbmcgdGhlIG1hc2sgd2UgZG9uJ3Qgd2FudCB0byB0cmlnZ2VyIG9uQ2hhbmdlIGZ1bmN0aW9uLFxuICAgICAqIHNpbmNlIHdyaXRlVmFsdWUgc2hvdWxkIGJlIGEgb25lIHdheSBvbmx5IHByb2Nlc3Mgb2Ygd3JpdGluZyB0aGUgRE9NIHZhbHVlIGJhc2VkIG9uIHRoZSBBbmd1bGFyIG1vZGVsIHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0aW5nVmFsdWUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBtYXNrQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIHRyaWdnZXJPbk1hc2tDaGFuZ2UgPSBmYWxzZTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwdWJsaWMgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9jb25maWcgPSBpbmplY3Q8SUNvbmZpZz4oTkdYX01BU0tfQ09ORklHKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgcHVibGljIG92ZXJyaWRlIGFwcGx5TWFzayhcbiAgICAgICAgaW5wdXRWYWx1ZTogc3RyaW5nLFxuICAgICAgICBtYXNrRXhwcmVzc2lvbjogc3RyaW5nLFxuICAgICAgICBwb3NpdGlvbiA9IDAsXG4gICAgICAgIGp1c3RQYXN0ZWQgPSBmYWxzZSxcbiAgICAgICAgYmFja3NwYWNlZCA9IGZhbHNlLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNiOiAoLi4uYXJnczogYW55W10pID0+IGFueSA9ICgpID0+IHt9XG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFtYXNrRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0VmFsdWUgIT09IHRoaXMuYWN0dWFsVmFsdWUgPyB0aGlzLmFjdHVhbFZhbHVlIDogaW5wdXRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hc2tJc1Nob3duID0gdGhpcy5zaG93TWFza1R5cGVkID8gdGhpcy5zaG93TWFza0luSW5wdXQoKSA6ICcnO1xuICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbiA9PT0gJ0lQJyAmJiB0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0lzU2hvd24gPSB0aGlzLnNob3dNYXNrSW5JbnB1dChpbnB1dFZhbHVlIHx8ICcjJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWFza0V4cHJlc3Npb24gPT09ICdDUEZfQ05QSicgJiYgdGhpcy5zaG93TWFza1R5cGVkKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tJc1Nob3duID0gdGhpcy5zaG93TWFza0luSW5wdXQoaW5wdXRWYWx1ZSB8fCAnIycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSAmJiB0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2xSZXN1bHQodGhpcy5wcmVmaXgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlZml4ICsgdGhpcy5tYXNrSXNTaG93bjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnZXRTeW1ib2w6IHN0cmluZyA9XG4gICAgICAgICAgICAhIWlucHV0VmFsdWUgJiYgdHlwZW9mIHRoaXMuc2VsU3RhcnQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgPyBpbnB1dFZhbHVlW3RoaXMuc2VsU3RhcnRdID8/ICcnXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgbGV0IG5ld0lucHV0VmFsdWUgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuSW5wdXQgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy53cml0aW5nVmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBhY3R1YWxSZXN1bHQ6IHN0cmluZ1tdID0gdGhpcy5hY3R1YWxWYWx1ZS5zcGxpdCgnJyk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZSAgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGlucHV0VmFsdWUgIT09ICcnICYmIGFjdHVhbFJlc3VsdC5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IHR5cGVvZiB0aGlzLnNlbFN0YXJ0ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdGhpcy5zZWxFbmQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXRWYWx1ZS5sZW5ndGggPiBhY3R1YWxSZXN1bHQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGFjdHVhbFJlc3VsdC5zcGxpY2UodGhpcy5zZWxTdGFydCwgMCwgZ2V0U3ltYm9sKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dFZhbHVlLmxlbmd0aCA8IGFjdHVhbFJlc3VsdC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0dWFsUmVzdWx0Lmxlbmd0aCAtIGlucHV0VmFsdWUubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3R1YWxSZXN1bHQuc3BsaWNlKHRoaXMuc2VsU3RhcnQgLSAxLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWN0dWFsUmVzdWx0LnNwbGljZSh0aGlzLnNlbFN0YXJ0LCB0aGlzLnNlbEVuZCAtIHRoaXMuc2VsU3RhcnQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgOiAoYWN0dWFsUmVzdWx0ID0gW10pO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd01hc2tUeXBlZCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSB0aGlzLnJlbW92ZU1hc2soaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2xpbnQtZW5hYmxlICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAgICAgICBuZXdJbnB1dFZhbHVlID1cbiAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbFZhbHVlLmxlbmd0aCAmJiBhY3R1YWxSZXN1bHQubGVuZ3RoIDw9IGlucHV0VmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5zaGlmdFR5cGVkU3ltYm9scyhhY3R1YWxSZXN1bHQuam9pbignJykpXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMucmVtb3ZlTWFzayhpbnB1dFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld0lucHV0VmFsdWUgPSBCb29sZWFuKG5ld0lucHV0VmFsdWUpICYmIG5ld0lucHV0VmFsdWUubGVuZ3RoID8gbmV3SW5wdXRWYWx1ZSA6IGlucHV0VmFsdWU7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgPSBzdXBlci5hcHBseU1hc2soXG4gICAgICAgICAgICBuZXdJbnB1dFZhbHVlLFxuICAgICAgICAgICAgbWFza0V4cHJlc3Npb24sXG4gICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgIGp1c3RQYXN0ZWQsXG4gICAgICAgICAgICBiYWNrc3BhY2VkLFxuICAgICAgICAgICAgY2JcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hY3R1YWxWYWx1ZSA9IHRoaXMuZ2V0QWN0dWFsVmFsdWUocmVzdWx0KTtcbiAgICAgICAgLy8gaGFuZGxlIHNvbWUgc2VwYXJhdG9yIGltcGxpY2F0aW9uczpcbiAgICAgICAgLy8gYS4pIGFkanVzdCBkZWNpbWFsTWFya2VyIGRlZmF1bHQgKC4gLT4gLCkgaWYgdGhvdXNhbmRTZXBhcmF0b3IgaXMgYSBkb3RcbiAgICAgICAgaWYgKHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPT09ICcuJyAmJiB0aGlzLmRlY2ltYWxNYXJrZXIgPT09ICcuJykge1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsTWFya2VyID0gJywnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYikgcmVtb3ZlIGRlY2ltYWwgbWFya2VyIGZyb20gbGlzdCBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gbWFza1xuICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbi5zdGFydHNXaXRoKCdzZXBhcmF0b3InKSAmJiB0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycyA9IHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChpdGVtOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgICAgICF0aGlzLl9jb21wYXJlT3JJbmNsdWRlcyhpdGVtLCB0aGlzLmRlY2ltYWxNYXJrZXIsIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IpIC8vaXRlbSAhPT0gdGhpcy5kZWNpbWFsTWFya2VyLCAvLyAhXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xSZXN1bHQocmVzdWx0KTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGRlbklucHV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5oaWRlSW5wdXQocmVzdWx0LCB0aGlzLm1hc2tFeHByZXNzaW9uKVxuICAgICAgICAgICAgICAgICAgICA6IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzTGVuOiBudW1iZXIgPSByZXN1bHQubGVuZ3RoO1xuICAgICAgICBjb25zdCBwcmVmTm1hc2s6IHN0cmluZyA9IHRoaXMucHJlZml4ICsgdGhpcy5tYXNrSXNTaG93bjtcblxuICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbi5pbmNsdWRlcygnSCcpKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudFNraXBlZFN5bWJvbCA9IHRoaXMuX251bWJlclNraXBlZFN5bWJvbHMocmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBwcmVmTm1hc2suc2xpY2UocmVzTGVuICsgY291bnRTa2lwZWRTeW1ib2wpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFza0V4cHJlc3Npb24gPT09ICdJUCcgfHwgdGhpcy5tYXNrRXhwcmVzc2lvbiA9PT0gJ0NQRl9DTlBKJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIHByZWZObWFzaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0ICsgcHJlZk5tYXNrLnNsaWNlKHJlc0xlbik7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdlcmUgc2hpZnRlZFxuICAgIHByaXZhdGUgX251bWJlclNraXBlZFN5bWJvbHModmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLyhefFxcRCkoXFxkXFxEKS9nO1xuICAgICAgICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHZhbHVlKTtcbiAgICAgICAgbGV0IGNvdW50U2tpcGVkU3ltYm9sID0gMDtcbiAgICAgICAgd2hpbGUgKG1hdGNoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvdW50U2tpcGVkU3ltYm9sICs9IDE7XG4gICAgICAgICAgICBtYXRjaCA9IHJlZ2V4LmV4ZWModmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudFNraXBlZFN5bWJvbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHlWYWx1ZUNoYW5nZXMoXG4gICAgICAgIHBvc2l0aW9uOiBudW1iZXIsXG4gICAgICAgIGp1c3RQYXN0ZWQ6IGJvb2xlYW4sXG4gICAgICAgIGJhY2tzcGFjZWQ6IGJvb2xlYW4sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY2I6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID0gKCkgPT4ge31cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWZvcm1FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUgPSB0aGlzLmFwcGx5TWFzayhcbiAgICAgICAgICAgIGZvcm1FbGVtZW50LnZhbHVlLFxuICAgICAgICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAganVzdFBhc3RlZCxcbiAgICAgICAgICAgIGJhY2tzcGFjZWQsXG4gICAgICAgICAgICBjYlxuICAgICAgICApO1xuICAgICAgICBpZiAoZm9ybUVsZW1lbnQgPT09IHRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJJZk5vdE1hdGNoRm4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZUlucHV0KGlucHV0VmFsdWU6IHN0cmluZywgbWFza0V4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpbnB1dFZhbHVlXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAubWFwKChjdXJyOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybnMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJuc1ttYXNrRXhwcmVzc2lvbltpbmRleF0gPz8gJyddICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybnNbbWFza0V4cHJlc3Npb25baW5kZXhdID8/ICcnXT8uc3ltYm9sXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhdHRlcm5zW21hc2tFeHByZXNzaW9uW2luZGV4XSA/PyAnJ10/LnN5bWJvbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgbm90IG5lY2Vzc2FyeSwgaXQgY2hlY2tzIHJlc3VsdCBhZ2FpbnN0IG1hc2tFeHByZXNzaW9uXG4gICAgcHVibGljIGdldEFjdHVhbFZhbHVlKHJlczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY29tcGFyZTogc3RyaW5nW10gPSByZXMuc3BsaXQoJycpLmZpbHRlcigoc3ltYm9sOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWFza0NoYXIgPSB0aGlzLm1hc2tFeHByZXNzaW9uW2ldID8/ICcnO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1N5bWJvbE1hc2soc3ltYm9sLCBtYXNrQ2hhcikgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhtYXNrQ2hhcikgJiYgc3ltYm9sID09PSBtYXNrQ2hhcilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29tcGFyZS5qb2luKCcnKSA9PT0gcmVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcGFyZS5qb2luKCcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaGlmdFR5cGVkU3ltYm9scyhpbnB1dFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgc3ltYm9sVG9SZXBsYWNlID0gJyc7XG4gICAgICAgIGNvbnN0IG5ld0lucHV0VmFsdWU6IChzdHJpbmcgfCB1bmRlZmluZWQpW10gPVxuICAgICAgICAgICAgKGlucHV0VmFsdWUgJiZcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLnNwbGl0KCcnKS5tYXAoKGN1cnJTeW1ib2w6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKGlucHV0VmFsdWVbaW5kZXggKyAxXSA/PyAnJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVbaW5kZXggKyAxXSAhPT0gdGhpcy5tYXNrRXhwcmVzc2lvbltpbmRleCArIDFdXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVG9SZXBsYWNlID0gY3VyclN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dFZhbHVlW2luZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbFRvUmVwbGFjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VTeW1ib2w6IHN0cmluZyA9IHN5bWJvbFRvUmVwbGFjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRvUmVwbGFjZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VTeW1ib2w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJTeW1ib2w7XG4gICAgICAgICAgICAgICAgfSkpIHx8XG4gICAgICAgICAgICBbXTtcbiAgICAgICAgcmV0dXJuIG5ld0lucHV0VmFsdWUuam9pbignJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBudW1iZXIgdmFsdWUgdG8gc3RyaW5nXG4gICAgICogMy4xNDE1IC0+ICczLjE0MTUnXG4gICAgICogMWUtNyAtPiAnMC4wMDAwMDAxJ1xuICAgICAqL1xuICAgIHB1YmxpYyBudW1iZXJUb1N0cmluZyh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSkudG9Mb2NhbGVTdHJpbmcoJ2Z1bGx3aWRlJywge1xuICAgICAgICAgICAgdXNlR3JvdXBpbmc6IGZhbHNlLFxuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyMCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dNYXNrSW5JbnB1dChpbnB1dFZhbD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnNob3dNYXNrVHlwZWQgJiYgISF0aGlzLnNob3duTWFza0V4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hc2tFeHByZXNzaW9uLmxlbmd0aCAhPT0gdGhpcy5zaG93bk1hc2tFeHByZXNzaW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWFzayBleHByZXNzaW9uIG11c3QgbWF0Y2ggbWFzayBwbGFjZWhvbGRlciBsZW5ndGgnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd25NYXNrRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dFZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hc2tFeHByZXNzaW9uID09PSAnSVAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGVja0ZvcklwKGlucHV0VmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFza0V4cHJlc3Npb24gPT09ICdDUEZfQ05QSicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrRm9yQ3BmQ25waihpbnB1dFZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFza0V4cHJlc3Npb24ucmVwbGFjZSgvXFx3L2csIHRoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJJZk5vdE1hdGNoRm4oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1FbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKCFmb3JtRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJZk5vdE1hdGNoICYmXG4gICAgICAgICAgICB0aGlzLnByZWZpeC5sZW5ndGggKyB0aGlzLm1hc2tFeHByZXNzaW9uLmxlbmd0aCArIHRoaXMuc3VmZml4Lmxlbmd0aCAhPT1cbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC52YWx1ZS5yZXBsYWNlKC9fL2csICcnKS5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50UHJvcGVydHkgPSBbJ3ZhbHVlJywgJyddO1xuICAgICAgICAgICAgdGhpcy5hcHBseU1hc2soZm9ybUVsZW1lbnQudmFsdWUsIHRoaXMubWFza0V4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBmb3JtRWxlbWVudFByb3BlcnR5KFtuYW1lLCB2YWx1ZV06IFtzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW5dKSB7XG4gICAgICAgIGlmICghdGhpcy5fcmVuZGVyZXIgfHwgIXRoaXMuX2VsZW1lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcj8uc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCwgbmFtZSwgdmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrU3BlY2lhbENoYXJBbW91bnQobWFzazogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2hhcnM6IHN0cmluZ1tdID0gbWFza1xuICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB0aGlzLl9maW5kU3BlY2lhbENoYXIoaXRlbSkpO1xuICAgICAgICByZXR1cm4gY2hhcnMubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVNYXNrKGlucHV0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVNYXNrKFxuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU3VmZml4KHRoaXMuX3JlbW92ZVByZWZpeChpbnB1dFZhbHVlKSksXG4gICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmNvbmNhdCgnXycpLmNvbmNhdCh0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrRm9ySXAoaW5wdXRWYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChpbnB1dFZhbCA9PT0gJyMnKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0uJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfS4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9LiR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFycjogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dFZhbFtpXSA/PyAnJztcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaCgnXFxcXGQnKSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA8PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0uJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfS4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDMgJiYgYXJyLmxlbmd0aCA8PSA2KSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0uJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiA2ICYmIGFyci5sZW5ndGggPD0gOSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiA5ICYmIGFyci5sZW5ndGggPD0gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tGb3JDcGZDbnBqKGlucHV0VmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjcGYgPVxuICAgICAgICAgICAgYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWAgK1xuICAgICAgICAgICAgYC4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gICtcbiAgICAgICAgICAgIGAuJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcbiAgICAgICAgY29uc3QgY25waiA9XG4gICAgICAgICAgICBgJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gICtcbiAgICAgICAgICAgIGAuJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLiR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWAgK1xuICAgICAgICAgICAgYC8ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcblxuICAgICAgICBpZiAoaW5wdXRWYWwgPT09ICcjJykge1xuICAgICAgICAgICAgcmV0dXJuIGNwZjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcnI6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRWYWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRWYWxbaV0gPz8gJyc7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUubWF0Y2goJ1xcXFxkJykpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPD0gMykge1xuICAgICAgICAgICAgcmV0dXJuIGNwZi5zbGljZShhcnIubGVuZ3RoLCBjcGYubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDMgJiYgYXJyLmxlbmd0aCA8PSA2KSB7XG4gICAgICAgICAgICByZXR1cm4gY3BmLnNsaWNlKGFyci5sZW5ndGggKyAxLCBjcGYubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDYgJiYgYXJyLmxlbmd0aCA8PSA5KSB7XG4gICAgICAgICAgICByZXR1cm4gY3BmLnNsaWNlKGFyci5sZW5ndGggKyAyLCBjcGYubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDkgJiYgYXJyLmxlbmd0aCA8IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gY3BmLnNsaWNlKGFyci5sZW5ndGggKyAzLCBjcGYubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMTIpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dFZhbC5sZW5ndGggPT09IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNucGouc2xpY2UoMTYsIGNucGoubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjbnBqLnNsaWNlKDE1LCBjbnBqLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiAxMiAmJiBhcnIubGVuZ3RoIDw9IDE0KSB7XG4gICAgICAgICAgICByZXR1cm4gY25wai5zbGljZShhcnIubGVuZ3RoICsgNCwgY25wai5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmVseSBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgYWN0aXZlIGVsZW1lbnQgYnkgbmF2aWdhdGluZyB0aGUgU2hhZG93IERPTSB1bnRpbCB0aGUgQWN0aXZlIEVsZW1lbnQgaXMgZm91bmQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZlRWxlbWVudChkb2N1bWVudDogRG9jdW1lbnRPclNoYWRvd1Jvb3QgPSB0aGlzLmRvY3VtZW50KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBzaGFkb3dSb290RWwgPSBkb2N1bWVudD8uYWN0aXZlRWxlbWVudD8uc2hhZG93Um9vdDtcbiAgICAgICAgaWYgKCFzaGFkb3dSb290RWw/LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoc2hhZG93Um9vdEVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BvZ2F0ZXMgdGhlIGlucHV0IHZhbHVlIGJhY2sgdG8gdGhlIEFuZ3VsYXIgbW9kZWwgYnkgdHJpZ2dlcmluZyB0aGUgb25DaGFuZ2UgZnVuY3Rpb24uIEl0IHdvbid0IGRvIHRoaXMgaWYgd3JpdGluZ1ZhbHVlXG4gICAgICogaXMgdHJ1ZS4gSWYgdGhhdCBpcyB0cnVlIGl0IG1lYW5zIHdlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHdyaXRlVmFsdWUgZnVuY3Rpb24sIHdoaWNoIGlzIHN1cHBvc2VkIHRvIG9ubHkgdXBkYXRlIHRoZSBhY3R1YWxcbiAgICAgKiBET00gZWxlbWVudCBiYXNlZCBvbiB0aGUgQW5ndWxhciBtb2RlbCB2YWx1ZS4gSXQgc2hvdWxkIGJlIGEgb25lIHdheSBwcm9jZXNzLCBpLmUuIHdyaXRlVmFsdWUgc2hvdWxkIG5vdCBiZSBtb2RpZnlpbmcgdGhlIEFuZ3VsYXJcbiAgICAgKiBtb2RlbCB2YWx1ZSB0b28uIFRoZXJlZm9yZSwgd2UgZG9uJ3QgdHJpZ2dlciBvbkNoYW5nZSBpbiB0aGlzIHNjZW5hcmlvLlxuICAgICAqIEBwYXJhbSBpbnB1dFZhbHVlIHRoZSBjdXJyZW50IGZvcm0gaW5wdXQgdmFsdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIGZvcm1Db250cm9sUmVzdWx0KGlucHV0VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy53cml0aW5nVmFsdWUgfHwgKCF0aGlzLnRyaWdnZXJPbk1hc2tDaGFuZ2UgJiYgdGhpcy5tYXNrQ2hhbmdlZCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycykpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5fdG9OdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU3ltYm9scyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZU1hc2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU3VmZml4KHRoaXMuX3JlbW92ZVByZWZpeChpbnB1dFZhbHVlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnMpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5fdG9OdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU3ltYm9scyh0aGlzLl9yZW1vdmVTdWZmaXgodGhpcy5fcmVtb3ZlUHJlZml4KGlucHV0VmFsdWUpKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl90b051bWJlcihpbnB1dFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF90b051bWJlcih2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNOdW1iZXJWYWx1ZSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG51bSkgPyB2YWx1ZSA6IG51bTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVNYXNrKHZhbHVlOiBzdHJpbmcsIHNwZWNpYWxDaGFyYWN0ZXJzRm9yUmVtb3ZlOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLm1hc2tFeHByZXNzaW9uLnN0YXJ0c1dpdGgoJ3BlcmNlbnQnKSAmJiB2YWx1ZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUucmVwbGFjZSh0aGlzLl9yZWdFeHBGb3JSZW1vdmUoc3BlY2lhbENoYXJhY3RlcnNGb3JSZW1vdmUpLCAnJykgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVQcmVmaXgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5wcmVmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS5yZXBsYWNlKHRoaXMucHJlZml4LCAnJykgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVTdWZmaXgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5zdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS5yZXBsYWNlKHRoaXMuc3VmZml4LCAnJykgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXRyaWV2ZVNlcGFyYXRvclZhbHVlKHJlc3VsdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3BlY2lhbENoYXJhY3RlcnMgPSBBcnJheS5pc0FycmF5KHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzKVxuICAgICAgICAgICAgPyB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmZpbHRlcigodikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycyBhcyBzdHJpbmdbXSkuaW5jbHVkZXModik7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IHRoaXMuc3BlY2lhbENoYXJhY3RlcnM7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVNYXNrKHJlc3VsdCwgc3BlY2lhbENoYXJhY3RlcnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZ0V4cEZvclJlbW92ZShzcGVjaWFsQ2hhcmFjdGVyc0ZvclJlbW92ZTogc3RyaW5nW10pOiBSZWdFeHAge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgIHNwZWNpYWxDaGFyYWN0ZXJzRm9yUmVtb3ZlLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBgXFxcXCR7aXRlbX1gKS5qb2luKCd8JyksXG4gICAgICAgICAgICAnZ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVwbGFjZURlY2ltYWxNYXJrZXJUb0RvdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWFya2VycyA9IEFycmF5LmlzQXJyYXkodGhpcy5kZWNpbWFsTWFya2VyKVxuICAgICAgICAgICAgPyB0aGlzLmRlY2ltYWxNYXJrZXJcbiAgICAgICAgICAgIDogW3RoaXMuZGVjaW1hbE1hcmtlcl07XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UodGhpcy5fcmVnRXhwRm9yUmVtb3ZlKG1hcmtlcnMpLCAnLicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrU3ltYm9scyhyZXN1bHQ6IHN0cmluZyk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgICAgICBpZiAocmVzdWx0ID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcGFyYXRvclByZWNpc2lvbjogbnVtYmVyIHwgbnVsbCA9IHRoaXMuX3JldHJpZXZlU2VwYXJhdG9yUHJlY2lzaW9uKFxuICAgICAgICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzZXBhcmF0b3JWYWx1ZTogc3RyaW5nID0gdGhpcy5fcmVwbGFjZURlY2ltYWxNYXJrZXJUb0RvdChcbiAgICAgICAgICAgIHRoaXMuX3JldHJpZXZlU2VwYXJhdG9yVmFsdWUocmVzdWx0KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghdGhpcy5pc051bWJlclZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VwYXJhdG9yVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvclByZWNpc2lvbikge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdGhpcy5kZWNpbWFsTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tQcmVjaXNpb24odGhpcy5tYXNrRXhwcmVzc2lvbiwgc2VwYXJhdG9yVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNlcGFyYXRvclZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETyBzaG91bGQgdGhpbmsgYWJvdXQgaGVscGVycyBvciBzZXBhcnRpbmcgZGVjaW1hbCBwcmVjaXNpb24gdG8gb3duIHByb3BlcnR5XG4gICAgcHJpdmF0ZSBfcmV0cmlldmVTZXBhcmF0b3JQcmVjaXNpb24obWFza0V4cHJldGlvbjogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXI6IFJlZ0V4cE1hdGNoQXJyYXkgfCBudWxsID0gbWFza0V4cHJldGlvbi5tYXRjaChcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYF5zZXBhcmF0b3JcXFxcLihbXmRdKilgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWF0Y2hlciA/IE51bWJlcihtYXRjaGVyWzFdKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tQcmVjaXNpb24oc2VwYXJhdG9yRXhwcmVzc2lvbjogc3RyaW5nLCBzZXBhcmF0b3JWYWx1ZTogc3RyaW5nKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICAgICAgaWYgKHNlcGFyYXRvckV4cHJlc3Npb24uaW5kZXhPZignMicpID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzZXBhcmF0b3JWYWx1ZSkudG9GaXhlZCgyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyKHNlcGFyYXRvclZhbHVlKTtcbiAgICB9XG59XG4iXX0=
@@ -1005,6 +1005,9 @@ class NgxMaskService extends NgxMaskApplierService {
1005
1005
  return Number.isNaN(num) ? value : num;
1006
1006
  }
1007
1007
  _removeMask(value, specialCharactersForRemove) {
1008
+ if (this.maskExpression.startsWith('percent') && value.includes('.')) {
1009
+ return value;
1010
+ }
1008
1011
  return value ? value.replace(this._regExpForRemove(specialCharactersForRemove), '') : value;
1009
1012
  }
1010
1013
  _removePrefix(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-mask.mjs","sources":["../../../projects/ngx-mask-lib/src/lib/ngx-mask.config.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask-applier.service.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.service.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.providers.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.directive.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.pipe.ts","../../../projects/ngx-mask-lib/src/ngx-mask.ts"],"sourcesContent":["import { InjectionToken, EventEmitter } from '@angular/core';\n\nexport interface IConfig {\n suffix: string;\n prefix: string;\n thousandSeparator: string;\n decimalMarker: '.' | ',' | ['.', ','];\n clearIfNotMatch: boolean;\n showTemplate: boolean;\n showMaskTyped: boolean;\n placeHolderCharacter: string;\n shownMaskExpression: string;\n dropSpecialCharacters: boolean | string[];\n specialCharacters: string[];\n hiddenInput: boolean | undefined;\n validation: boolean;\n separatorLimit: string;\n allowNegativeNumbers: boolean;\n leadZeroDateTime: boolean;\n triggerOnMaskChange: boolean;\n maskFilled: EventEmitter<void>;\n patterns: {\n [character: string]: {\n pattern: RegExp;\n optional?: boolean;\n symbol?: string;\n };\n };\n}\n\nexport type optionsConfig = Partial<IConfig>;\nexport const NGX_MASK_CONFIG: InjectionToken<IConfig> = new InjectionToken('ngx-mask config');\nexport const NEW_CONFIG: InjectionToken<IConfig> = new InjectionToken('new ngx-mask config');\nexport const INITIAL_CONFIG: InjectionToken<IConfig> = new InjectionToken(\n 'initial ngx-mask config'\n);\n\nexport const initialConfig: IConfig = {\n suffix: '',\n prefix: '',\n thousandSeparator: ' ',\n decimalMarker: ['.', ','],\n clearIfNotMatch: false,\n showTemplate: false,\n showMaskTyped: false,\n placeHolderCharacter: '_',\n dropSpecialCharacters: true,\n hiddenInput: undefined,\n shownMaskExpression: '',\n separatorLimit: '',\n allowNegativeNumbers: false,\n validation: true,\n // eslint-disable-next-line @typescript-eslint/quotes\n specialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '\"', \"'\"],\n leadZeroDateTime: false,\n triggerOnMaskChange: false,\n maskFilled: new EventEmitter<void>(),\n patterns: {\n '0': {\n pattern: new RegExp('\\\\d'),\n },\n '9': {\n pattern: new RegExp('\\\\d'),\n optional: true,\n },\n X: {\n pattern: new RegExp('\\\\d'),\n symbol: '*',\n },\n A: {\n pattern: new RegExp('[a-zA-Z0-9]'),\n },\n S: {\n pattern: new RegExp('[a-zA-Z]'),\n },\n U: {\n pattern: new RegExp('[A-Z]'),\n },\n L: {\n pattern: new RegExp('[a-z]'),\n },\n d: {\n pattern: new RegExp('\\\\d'),\n },\n m: {\n pattern: new RegExp('\\\\d'),\n },\n M: {\n pattern: new RegExp('\\\\d'),\n },\n H: {\n pattern: new RegExp('\\\\d'),\n },\n h: {\n pattern: new RegExp('\\\\d'),\n },\n s: {\n pattern: new RegExp('\\\\d'),\n },\n },\n};\n\nexport const timeMasks: string[] = ['Hh:m0:s0', 'Hh:m0', 'm0:s0'];\n\nexport const withoutValidation: string[] = [\n 'percent',\n 'Hh',\n 's0',\n 'm0',\n 'separator',\n 'd0/M0/0000',\n 'd0/M0',\n 'd0',\n 'M0',\n];\n","import { inject, Injectable } from '@angular/core';\nimport { NGX_MASK_CONFIG, IConfig } from './ngx-mask.config';\n\n@Injectable()\nexport class NgxMaskApplierService {\n protected _config = inject<IConfig>(NGX_MASK_CONFIG);\n\n public dropSpecialCharacters: IConfig['dropSpecialCharacters'] =\n this._config.dropSpecialCharacters;\n\n public hiddenInput: IConfig['hiddenInput'] = this._config.hiddenInput;\n\n public showTemplate!: IConfig['showTemplate'];\n\n public clearIfNotMatch: IConfig['clearIfNotMatch'] = this._config.clearIfNotMatch;\n\n public specialCharacters: IConfig['specialCharacters'] = this._config.specialCharacters;\n\n public patterns: IConfig['patterns'] = this._config.patterns;\n\n public prefix: IConfig['prefix'] = this._config.prefix;\n\n public suffix: IConfig['suffix'] = this._config.suffix;\n\n public thousandSeparator: IConfig['thousandSeparator'] = this._config.thousandSeparator;\n\n public decimalMarker: IConfig['decimalMarker'] = this._config.decimalMarker;\n\n public customPattern!: IConfig['patterns'];\n\n public showMaskTyped: IConfig['showMaskTyped'] = this._config.showMaskTyped;\n\n public placeHolderCharacter: IConfig['placeHolderCharacter'] =\n this._config.placeHolderCharacter;\n\n public validation: IConfig['validation'] = this._config.validation;\n\n public separatorLimit: IConfig['separatorLimit'] = this._config.separatorLimit;\n\n public allowNegativeNumbers: IConfig['allowNegativeNumbers'] =\n this._config.allowNegativeNumbers;\n\n public leadZeroDateTime: IConfig['leadZeroDateTime'] = this._config.leadZeroDateTime;\n\n private _shift: Set<number> = new Set();\n\n public maskExpression = '';\n\n public actualValue = '';\n\n public shownMaskExpression = '';\n\n public ipError?: boolean;\n\n public cpfCnpjError?: boolean;\n public applyMaskWithPattern(\n inputValue: string,\n maskAndPattern: [string, IConfig['patterns']]\n ): string {\n const [mask, customPattern] = maskAndPattern;\n this.customPattern = customPattern;\n return this.applyMask(inputValue, mask);\n }\n\n public applyMask(\n inputValue: string | object | boolean | null | undefined,\n maskExpression: string,\n position = 0,\n justPasted = false,\n backspaced = false,\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb: (...args: any[]) => any = () => {}\n ): string {\n if (!maskExpression || typeof inputValue !== 'string') {\n return '';\n }\n let cursor = 0;\n let result = '';\n let multi = false;\n let backspaceShift = false;\n let shift = 1;\n let stepBack = false;\n if (inputValue.slice(0, this.prefix.length) === this.prefix) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.slice(this.prefix.length, inputValue.length);\n }\n if (!!this.suffix && inputValue?.length > 0) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkAndRemoveSuffix(inputValue);\n }\n const inputArray: string[] = inputValue.toString().split('');\n if (this.allowNegativeNumbers && inputValue.slice(cursor, cursor + 1) === '-') {\n // eslint-disable-next-line no-param-reassign\n result += inputValue.slice(cursor, cursor + 1);\n }\n if (maskExpression === 'IP') {\n const valuesIP = inputValue.split('.');\n this.ipError = this._validIP(valuesIP);\n // eslint-disable-next-line no-param-reassign\n maskExpression = '099.099.099.099';\n }\n const arr: string[] = [];\n for (let i = 0; i < inputValue.length; i++) {\n if (inputValue[i]?.match('\\\\d')) {\n arr.push(inputValue[i] ?? '');\n }\n }\n if (maskExpression === 'CPF_CNPJ') {\n this.cpfCnpjError = arr.length !== 11 && arr.length !== 14;\n if (arr.length > 11) {\n // eslint-disable-next-line no-param-reassign\n maskExpression = '00.000.000/0000-00';\n } else {\n // eslint-disable-next-line no-param-reassign\n maskExpression = '000.000.000-00';\n }\n }\n if (maskExpression.startsWith('percent')) {\n //ogranich posle tochki\n if (\n inputValue.match('[a-z]|[A-Z]') ||\n // eslint-disable-next-line no-useless-escape\n inputValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/.]/)\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._stripToDecimal(inputValue);\n const precision: number = this.getPrecision(maskExpression);\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n }\n if (\n inputValue.indexOf('.') > 0 &&\n !this.percentage(inputValue.substring(0, inputValue.indexOf('.')))\n ) {\n let base: string = inputValue.substring(0, inputValue.indexOf('.') - 1);\n if (this.allowNegativeNumbers && inputValue.slice(cursor, cursor + 1) === '-') {\n base = inputValue.substring(0, inputValue.indexOf('.'));\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = `${base}${inputValue.substring(\n inputValue.indexOf('.'),\n inputValue.length\n )}`;\n }\n let value = '';\n this.allowNegativeNumbers && inputValue.slice(cursor, cursor + 1) === '-'\n ? (value = inputValue.slice(cursor + 1, cursor + inputValue.length))\n : (value = inputValue);\n if (this.percentage(value)) {\n result = inputValue;\n } else {\n result = inputValue.substring(0, inputValue.length - 1);\n }\n } else if (maskExpression.startsWith('separator')) {\n if (\n inputValue.match('[wа-яА-Я]') ||\n inputValue.match('[ЁёА-я]') ||\n inputValue.match('[a-z]|[A-Z]') ||\n inputValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\]:\";<>.?/]/) ||\n inputValue.match('[^A-Za-z0-9,]')\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._stripToDecimal(inputValue);\n }\n // eslint-disable-next-line no-param-reassign\n inputValue =\n inputValue.length > 1 &&\n inputValue[0] === '0' &&\n inputValue[1] !== this.thousandSeparator &&\n !this._compareOrIncludes(\n inputValue[1],\n this.decimalMarker,\n this.thousandSeparator\n ) &&\n !backspaced\n ? inputValue.slice(0, inputValue.length - 1)\n : inputValue;\n if (backspaced) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._compareOrIncludes(\n inputValue[inputValue.length - 1],\n this.decimalMarker,\n this.thousandSeparator\n )\n ? inputValue.slice(0, inputValue.length - 1)\n : inputValue;\n }\n // TODO: we had different rexexps here for the different cases... but tests dont seam to bother - check this\n // separator: no COMMA, dot-sep: no SPACE, COMMA OK, comma-sep: no SPACE, COMMA OK\n\n const thousandSeparatorCharEscaped: string = this._charToRegExpExpression(\n this.thousandSeparator\n );\n let invalidChars: string = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\\\\.\";<>?\\\\/'.replace(\n thousandSeparatorCharEscaped,\n ''\n );\n //.replace(decimalMarkerEscaped, '');\n if (Array.isArray(this.decimalMarker)) {\n for (const marker of this.decimalMarker) {\n invalidChars = invalidChars.replace(this._charToRegExpExpression(marker), '');\n }\n } else {\n invalidChars = invalidChars.replace(\n this._charToRegExpExpression(this.decimalMarker),\n ''\n );\n }\n\n const invalidCharRegexp = new RegExp('[' + invalidChars + ']');\n\n if (\n inputValue.match(invalidCharRegexp) ||\n (inputValue.length === 1 &&\n this._compareOrIncludes(inputValue, this.decimalMarker, this.thousandSeparator))\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n\n const precision: number = this.getPrecision(maskExpression);\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n const strForSep: string = inputValue.replace(\n new RegExp(thousandSeparatorCharEscaped, 'g'),\n ''\n );\n result = this._formatWithSeparators(\n strForSep,\n this.thousandSeparator,\n this.decimalMarker,\n precision\n );\n const commaShift: number = result.indexOf(',') - inputValue.indexOf(',');\n const shiftStep: number = result.length - inputValue.length;\n\n if (shiftStep > 0 && result[position] !== ',') {\n backspaceShift = true;\n let _shift = 0;\n do {\n this._shift.add(position + _shift);\n _shift++;\n } while (_shift < shiftStep);\n } else if (\n (commaShift !== 0 &&\n position > 0 &&\n !(result.indexOf(',') >= position && position > 3)) ||\n (!(result.indexOf('.') >= position && position > 3) && shiftStep <= 0)\n ) {\n this._shift.clear();\n backspaceShift = true;\n shift = shiftStep;\n // eslint-disable-next-line no-param-reassign\n position += shiftStep;\n this._shift.add(position);\n } else {\n this._shift.clear();\n }\n } else {\n for (\n // eslint-disable-next-line\n let i: number = 0, inputSymbol: string = inputArray[0]!;\n i < inputArray.length;\n i++, inputSymbol = inputArray[i] ?? ''\n ) {\n if (cursor === maskExpression.length) {\n break;\n }\n if (\n this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? '') &&\n maskExpression[cursor + 1] === '?'\n ) {\n result += inputSymbol;\n cursor += 2;\n } else if (\n maskExpression[cursor + 1] === '*' &&\n multi &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? '')\n ) {\n result += inputSymbol;\n cursor += 3;\n multi = false;\n } else if (\n this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? '') &&\n maskExpression[cursor + 1] === '*'\n ) {\n result += inputSymbol;\n multi = true;\n } else if (\n maskExpression[cursor + 1] === '?' &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? '')\n ) {\n result += inputSymbol;\n cursor += 3;\n } else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? '')) {\n if (maskExpression[cursor] === 'H') {\n if (Number(inputSymbol) > 2) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === 'h') {\n if (result === '2' && Number(inputSymbol) > 3) {\n cursor += 1;\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 'm') {\n if (Number(inputSymbol) > 5) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === 's') {\n if (Number(inputSymbol) > 5) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n const daysCount = 31;\n if (maskExpression[cursor] === 'd') {\n const maskStartWithMonth = maskExpression.slice(0, 2) === 'M0';\n const startWithMonthInput: boolean =\n maskExpression.slice(0, 2) === 'M0' &&\n (inputValue[cursor - 2] === '/' ||\n inputValue[cursor - 2] === '.' ||\n inputValue[cursor - 2] === '-');\n if (\n (Number(inputSymbol) > 3 && this.leadZeroDateTime) ||\n (!maskStartWithMonth &&\n (Number(inputValue.slice(cursor, cursor + 2)) > daysCount ||\n Number(inputValue.slice(cursor - 1, cursor + 1)) > daysCount ||\n inputValue[cursor + 1] === '/' ||\n inputValue[cursor + 1] === '-')) ||\n (startWithMonthInput\n ? Number(inputValue.slice(cursor - 1, cursor + 1)) > daysCount ||\n (inputValue[cursor] !== '/' &&\n (inputValue[cursor + 2] === '.' ||\n inputValue[cursor + 2] === '/' ||\n inputValue[cursor + 2] === '-')) ||\n inputValue[cursor] === '.' ||\n inputValue[cursor] === '/' ||\n inputValue[cursor] === '-'\n : Number(inputValue.slice(cursor, cursor + 2)) > daysCount ||\n inputValue[cursor + 1] === '/' ||\n inputValue[cursor + 1] === '-' ||\n inputValue[cursor + 1] === '.')\n ) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === 'M') {\n const monthsCount = 12;\n // mask without day\n const withoutDays: boolean =\n cursor === 0 &&\n (Number(inputSymbol) > 2 ||\n Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n inputValue[cursor + 1] === '/');\n // day<10 && month<12 for input\n const day1monthInput: boolean =\n inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n ((inputValue[cursor - 2] === '/' &&\n Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount &&\n inputValue[cursor] !== '/') ||\n inputValue[cursor] === '/' ||\n inputValue[cursor] === '-' ||\n (inputValue[cursor - 3] === '/' &&\n Number(inputValue.slice(cursor - 2, cursor)) > monthsCount &&\n inputValue[cursor - 1] !== '/') ||\n inputValue[cursor - 1] === '/' ||\n inputValue[cursor - 1] === '-');\n // month<12 && day<10 for input\n const day2monthInput: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n (inputValue[cursor - 1] === '/' || inputValue[cursor - 1] === '-') &&\n (Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n inputValue[cursor + 1] === '/' ||\n inputValue[cursor + 1] === '-');\n // cursor === 5 && without days\n const day2monthInputDot: boolean =\n (Number(inputValue.slice(cursor, cursor + 2)) > monthsCount &&\n cursor === 5) ||\n inputValue[cursor + 1] === '.' ||\n inputValue[cursor + 1] === '-' ||\n inputValue[cursor + 1] === '/';\n // day<10 && month<12 for paste whole data\n const day1monthPaste: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) > daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n !inputValue.slice(cursor - 2, cursor).includes('/') &&\n Number(inputValue.slice(cursor - 2, cursor)) > monthsCount;\n // 10<day<31 && month<12 for paste whole data\n const day2monthPaste: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n inputValue[cursor - 1] !== '/' &&\n Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount;\n if (\n (Number(inputSymbol) > 1 && this.leadZeroDateTime) ||\n withoutDays ||\n day1monthInput ||\n day2monthPaste ||\n day1monthPaste ||\n day2monthInput ||\n day2monthInputDot\n ) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n result += inputSymbol;\n cursor++;\n } else if (inputSymbol === ' ' && maskExpression[cursor] === ' ') {\n result += inputSymbol;\n cursor++;\n } else if (this.specialCharacters.indexOf(maskExpression[cursor] ?? '') !== -1) {\n result += maskExpression[cursor];\n cursor++;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n } else if (maskExpression[cursor] === '9' && this.showMaskTyped) {\n this._shiftStep(maskExpression, cursor, inputArray.length);\n } else if (\n this.specialCharacters.indexOf(inputSymbol) > -1 &&\n this.patterns[maskExpression[cursor] ?? ''] &&\n this.patterns[maskExpression[cursor] ?? '']?.optional\n ) {\n if (\n !!inputArray[cursor] &&\n maskExpression !== '099.099.099.099' &&\n maskExpression !== '000.000.000-00' &&\n maskExpression !== '00.000.000/0000-00' &&\n !maskExpression.match(/^9+\\.0+$/)\n ) {\n result += inputArray[cursor];\n }\n cursor++;\n i--;\n } else if (\n this.maskExpression[cursor + 1] === '*' &&\n this._findSpecialChar(this.maskExpression[cursor + 2] ?? '') &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi\n ) {\n cursor += 3;\n result += inputSymbol;\n } else if (\n this.maskExpression[cursor + 1] === '?' &&\n this._findSpecialChar(this.maskExpression[cursor + 2] ?? '') &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi\n ) {\n cursor += 3;\n result += inputSymbol;\n } else if (\n this.showMaskTyped &&\n this.specialCharacters.indexOf(inputSymbol) < 0 &&\n inputSymbol !== this.placeHolderCharacter\n ) {\n stepBack = true;\n }\n }\n }\n if (\n result.length + 1 === maskExpression.length &&\n this.specialCharacters.indexOf(maskExpression[maskExpression.length - 1] ?? '') !== -1\n ) {\n result += maskExpression[maskExpression.length - 1];\n }\n let newPosition: number = position + 1;\n\n while (this._shift.has(newPosition)) {\n shift++;\n newPosition++;\n }\n\n let actualShift: number =\n justPasted && !maskExpression.startsWith('separator')\n ? cursor\n : this._shift.has(position)\n ? shift\n : 0;\n if (stepBack) {\n actualShift--;\n }\n\n cb(actualShift, backspaceShift);\n if (shift < 0) {\n this._shift.clear();\n }\n let onlySpecial = false;\n if (backspaced) {\n onlySpecial = inputArray.every((char) => this.specialCharacters.includes(char));\n }\n let res = `${this.prefix}${onlySpecial ? '' : result}${this.suffix}`;\n if (result.length === 0) {\n res = `${this.prefix}${result}`;\n }\n return res;\n }\n\n public _findSpecialChar(inputSymbol: string): undefined | string {\n return this.specialCharacters.find((val: string) => val === inputSymbol);\n }\n\n protected _checkSymbolMask(inputSymbol: string, maskSymbol: string): boolean {\n this.patterns = this.customPattern ? this.customPattern : this.patterns;\n return (\n (this.patterns[maskSymbol]?.pattern &&\n this.patterns[maskSymbol]?.pattern.test(inputSymbol)) ??\n false\n );\n }\n\n private _formatWithSeparators = (\n str: string,\n thousandSeparatorChar: string,\n decimalChars: string | string[],\n precision: number\n ) => {\n let x: string[] = [];\n let decimalChar = '';\n if (Array.isArray(decimalChars)) {\n const regExp = new RegExp(\n decimalChars.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|')\n );\n x = str.split(regExp);\n decimalChar = str.match(regExp)?.[0] ?? '';\n } else {\n x = str.split(decimalChars);\n decimalChar = decimalChars;\n }\n const decimals: string = x.length > 1 ? `${decimalChar}${x[1]}` : '';\n let res: string = x[0] ?? '';\n const separatorLimit: string = this.separatorLimit.replace(/\\s/g, '');\n if (separatorLimit && +separatorLimit) {\n if (res[0] === '-') {\n res = `-${res.slice(1, res.length).slice(0, separatorLimit.length)}`;\n } else {\n res = res.slice(0, separatorLimit.length);\n }\n }\n const rgx = /(\\d+)(\\d{3})/;\n\n while (thousandSeparatorChar && rgx.test(res)) {\n res = res.replace(rgx, '$1' + thousandSeparatorChar + '$2');\n }\n\n if (precision === undefined) {\n return res + decimals;\n } else if (precision === 0) {\n return res;\n }\n return res + decimals.substring(0, precision + 1);\n };\n\n private percentage = (str: string): boolean => {\n return Number(str) >= 0 && Number(str) <= 100;\n };\n\n private getPrecision = (maskExpression: string): number => {\n const x: string[] = maskExpression.split('.');\n if (x.length > 1) {\n return Number(x[x.length - 1]);\n }\n\n return Infinity;\n };\n\n private checkAndRemoveSuffix = (inputValue: string): string => {\n for (let i = this.suffix?.length - 1; i >= 0; i--) {\n const substr = this.suffix.substring(i, this.suffix?.length);\n if (\n inputValue.includes(substr) &&\n i !== this.suffix?.length - 1 &&\n (i - 1 < 0 ||\n !inputValue.includes(this.suffix.substring(i - 1, this.suffix?.length)))\n ) {\n return inputValue.replace(substr, '');\n }\n }\n return inputValue;\n };\n\n private checkInputPrecision = (\n inputValue: string,\n precision: number,\n decimalMarker: IConfig['decimalMarker']\n ): string => {\n if (precision < Infinity) {\n // TODO need think about decimalMarker\n if (Array.isArray(decimalMarker)) {\n const marker = decimalMarker.find((dm) => dm !== this.thousandSeparator);\n // eslint-disable-next-line no-param-reassign\n decimalMarker = marker ? marker : decimalMarker[0];\n }\n const precisionRegEx = new RegExp(\n this._charToRegExpExpression(decimalMarker) + `\\\\d{${precision}}.*$`\n );\n\n const precisionMatch: RegExpMatchArray | null = inputValue.match(precisionRegEx);\n const precisionMatchLength: number = (precisionMatch && precisionMatch[0]?.length) ?? 0;\n if (precisionMatchLength - 1 > precision) {\n const diff = precisionMatchLength - 1 - precision;\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - diff);\n }\n if (\n precision === 0 &&\n this._compareOrIncludes(\n inputValue[inputValue.length - 1],\n decimalMarker,\n this.thousandSeparator\n )\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n }\n return inputValue;\n };\n\n private _stripToDecimal(str: string): string {\n return str\n .split('')\n .filter((i: string, idx: number) => {\n const isDecimalMarker =\n typeof this.decimalMarker === 'string'\n ? i === this.decimalMarker\n : // TODO (inepipenko) use utility type\n this.decimalMarker.includes(i as ',' | '.');\n return (\n i.match('^-?\\\\d') ||\n i === this.thousandSeparator ||\n isDecimalMarker ||\n (i === '-' && idx === 0 && this.allowNegativeNumbers)\n );\n })\n .join('');\n }\n\n private _charToRegExpExpression(char: string): string {\n // if (Array.isArray(char)) {\n // \treturn char.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|');\n // }\n if (char) {\n const charsToEscape = '[\\\\^$.|?*+()';\n return char === ' ' ? '\\\\s' : charsToEscape.indexOf(char) >= 0 ? `\\\\${char}` : char;\n }\n return char;\n }\n\n private _shiftStep(maskExpression: string, cursor: number, inputLength: number) {\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor))\n ? inputLength\n : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n }\n\n protected _compareOrIncludes<T>(value: T, comparedValue: T | T[], excludedValue: T): boolean {\n return Array.isArray(comparedValue)\n ? comparedValue.filter((v) => v !== excludedValue).includes(value)\n : value === comparedValue;\n }\n\n private _validIP(valuesIP: string[]): boolean {\n return !(\n valuesIP.length === 4 &&\n !valuesIP.some((value: string, index: number) => {\n if (valuesIP.length !== index + 1) {\n return value === '' || Number(value) > 255;\n }\n return value === '' || Number(value.substring(0, 3)) > 255;\n })\n );\n }\n}\n","import { ElementRef, inject, Injectable, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { NGX_MASK_CONFIG, IConfig } from './ngx-mask.config';\nimport { NgxMaskApplierService } from './ngx-mask-applier.service';\n\n@Injectable()\nexport class NgxMaskService extends NgxMaskApplierService {\n public isNumberValue = false;\n\n public maskIsShown = '';\n\n public selStart: number | null = null;\n\n public selEnd: number | null = null;\n\n /**\n * Whether we are currently in writeValue function, in this case when applying the mask we don't want to trigger onChange function,\n * since writeValue should be a one way only process of writing the DOM value based on the Angular model value.\n */\n public writingValue = false;\n\n public maskChanged = false;\n\n public triggerOnMaskChange = false;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n public onChange = (_: any) => {};\n\n private readonly document = inject(DOCUMENT);\n\n protected override _config = inject<IConfig>(NGX_MASK_CONFIG);\n\n private readonly _elementRef = inject(ElementRef, { optional: true });\n\n private readonly _renderer = inject(Renderer2, { optional: true });\n\n // eslint-disable-next-line complexity\n public override applyMask(\n inputValue: string,\n maskExpression: string,\n position = 0,\n justPasted = false,\n backspaced = false,\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb: (...args: any[]) => any = () => {}\n ): string {\n if (!maskExpression) {\n return inputValue !== this.actualValue ? this.actualValue : inputValue;\n }\n this.maskIsShown = this.showMaskTyped ? this.showMaskInInput() : '';\n if (this.maskExpression === 'IP' && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || '#');\n }\n if (this.maskExpression === 'CPF_CNPJ' && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || '#');\n }\n if (!inputValue && this.showMaskTyped) {\n this.formControlResult(this.prefix);\n return this.prefix + this.maskIsShown;\n }\n const getSymbol: string =\n !!inputValue && typeof this.selStart === 'number'\n ? inputValue[this.selStart] ?? ''\n : '';\n let newInputValue = '';\n if (this.hiddenInput !== undefined && !this.writingValue) {\n let actualResult: string[] = this.actualValue.split('');\n // eslint-disable @typescript-eslint/no-unused-expressions\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n inputValue !== '' && actualResult.length\n ? typeof this.selStart === 'number' && typeof this.selEnd === 'number'\n ? inputValue.length > actualResult.length\n ? actualResult.splice(this.selStart, 0, getSymbol)\n : inputValue.length < actualResult.length\n ? actualResult.length - inputValue.length === 1\n ? actualResult.splice(this.selStart - 1, 1)\n : actualResult.splice(this.selStart, this.selEnd - this.selStart)\n : null\n : null\n : (actualResult = []);\n if (this.showMaskTyped) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.removeMask(inputValue);\n }\n // eslint-enable @typescript-eslint/no-unused-expressions\n newInputValue =\n this.actualValue.length && actualResult.length <= inputValue.length\n ? this.shiftTypedSymbols(actualResult.join(''))\n : inputValue;\n }\n\n if (this.showMaskTyped) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.removeMask(inputValue);\n }\n\n newInputValue = Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n\n const result: string = super.applyMask(\n newInputValue,\n maskExpression,\n position,\n justPasted,\n backspaced,\n cb\n );\n this.actualValue = this.getActualValue(result);\n // handle some separator implications:\n // a.) adjust decimalMarker default (. -> ,) if thousandSeparator is a dot\n if (this.thousandSeparator === '.' && this.decimalMarker === '.') {\n this.decimalMarker = ',';\n }\n\n // b) remove decimal marker from list of special characters to mask\n if (this.maskExpression.startsWith('separator') && this.dropSpecialCharacters === true) {\n this.specialCharacters = this.specialCharacters.filter(\n (item: string) =>\n !this._compareOrIncludes(item, this.decimalMarker, this.thousandSeparator) //item !== this.decimalMarker, // !\n );\n }\n this.formControlResult(result);\n if (!this.showMaskTyped) {\n if (this.hiddenInput) {\n return result && result.length\n ? this.hideInput(result, this.maskExpression)\n : result;\n }\n return result;\n }\n const resLen: number = result.length;\n const prefNmask: string = this.prefix + this.maskIsShown;\n\n if (this.maskExpression.includes('H')) {\n const countSkipedSymbol = this._numberSkipedSymbols(result);\n return result + prefNmask.slice(resLen + countSkipedSymbol);\n } else if (this.maskExpression === 'IP' || this.maskExpression === 'CPF_CNPJ') {\n return result + prefNmask;\n }\n return result + prefNmask.slice(resLen);\n }\n\n // get the number of characters that were shifted\n private _numberSkipedSymbols(value: string): number {\n const regex = /(^|\\D)(\\d\\D)/g;\n let match = regex.exec(value);\n let countSkipedSymbol = 0;\n while (match != null) {\n countSkipedSymbol += 1;\n match = regex.exec(value);\n }\n return countSkipedSymbol;\n }\n\n public applyValueChanges(\n position: number,\n justPasted: boolean,\n backspaced: boolean,\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb: (...args: any[]) => any = () => {}\n ): void {\n const formElement = this._elementRef?.nativeElement;\n if (!formElement) {\n return;\n }\n formElement.value = this.applyMask(\n formElement.value,\n this.maskExpression,\n position,\n justPasted,\n backspaced,\n cb\n );\n if (formElement === this._getActiveElement()) {\n return;\n }\n this.clearIfNotMatchFn();\n }\n\n public hideInput(inputValue: string, maskExpression: string): string {\n return inputValue\n .split('')\n .map((curr: string, index: number) => {\n if (\n this.patterns &&\n this.patterns[maskExpression[index] ?? ''] &&\n this.patterns[maskExpression[index] ?? '']?.symbol\n ) {\n return this.patterns[maskExpression[index] ?? '']?.symbol;\n }\n return curr;\n })\n .join('');\n }\n\n // this function is not necessary, it checks result against maskExpression\n public getActualValue(res: string): string {\n const compare: string[] = res.split('').filter((symbol: string, i: number) => {\n const maskChar = this.maskExpression[i] ?? '';\n return (\n this._checkSymbolMask(symbol, maskChar) ||\n (this.specialCharacters.includes(maskChar) && symbol === maskChar)\n );\n });\n if (compare.join('') === res) {\n return compare.join('');\n }\n return res;\n }\n\n public shiftTypedSymbols(inputValue: string): string {\n let symbolToReplace = '';\n const newInputValue: (string | undefined)[] =\n (inputValue &&\n inputValue.split('').map((currSymbol: string, index: number) => {\n if (\n this.specialCharacters.includes(inputValue[index + 1] ?? '') &&\n inputValue[index + 1] !== this.maskExpression[index + 1]\n ) {\n symbolToReplace = currSymbol;\n return inputValue[index + 1];\n }\n if (symbolToReplace.length) {\n const replaceSymbol: string = symbolToReplace;\n symbolToReplace = '';\n return replaceSymbol;\n }\n return currSymbol;\n })) ||\n [];\n return newInputValue.join('');\n }\n\n /**\n * Convert number value to string\n * 3.1415 -> '3.1415'\n * 1e-7 -> '0.0000001'\n */\n public numberToString(value: number | string): string {\n if (!value && value !== 0) {\n return String(value);\n }\n return Number(value).toLocaleString('fullwide', {\n useGrouping: false,\n maximumFractionDigits: 20,\n });\n }\n\n public showMaskInInput(inputVal?: string): string {\n if (this.showMaskTyped && !!this.shownMaskExpression) {\n if (this.maskExpression.length !== this.shownMaskExpression.length) {\n throw new Error('Mask expression must match mask placeholder length');\n } else {\n return this.shownMaskExpression;\n }\n } else if (this.showMaskTyped) {\n if (inputVal) {\n if (this.maskExpression === 'IP') {\n return this._checkForIp(inputVal);\n }\n if (this.maskExpression === 'CPF_CNPJ') {\n return this._checkForCpfCnpj(inputVal);\n }\n }\n return this.maskExpression.replace(/\\w/g, this.placeHolderCharacter);\n }\n return '';\n }\n\n public clearIfNotMatchFn(): void {\n const formElement = this._elementRef?.nativeElement;\n if (!formElement) {\n return;\n }\n if (\n this.clearIfNotMatch &&\n this.prefix.length + this.maskExpression.length + this.suffix.length !==\n formElement.value.replace(/_/g, '').length\n ) {\n this.formElementProperty = ['value', ''];\n this.applyMask(formElement.value, this.maskExpression);\n }\n }\n\n public set formElementProperty([name, value]: [string, string | boolean]) {\n if (!this._renderer || !this._elementRef) {\n return;\n }\n Promise.resolve().then(() =>\n this._renderer?.setProperty(this._elementRef?.nativeElement, name, value)\n );\n }\n\n public checkSpecialCharAmount(mask: string): number {\n const chars: string[] = mask\n .split('')\n .filter((item: string) => this._findSpecialChar(item));\n return chars.length;\n }\n\n public removeMask(inputValue: string): string {\n return this._removeMask(\n this._removeSuffix(this._removePrefix(inputValue)),\n this.specialCharacters.concat('_').concat(this.placeHolderCharacter)\n );\n }\n\n private _checkForIp(inputVal: string): string {\n if (inputVal === '#') {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n const arr: string[] = [];\n for (let i = 0; i < inputVal.length; i++) {\n const value = inputVal[i] ?? '';\n if (!value) {\n continue;\n }\n if (value.match('\\\\d')) {\n arr.push(value);\n }\n }\n if (arr.length <= 3) {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n if (arr.length > 3 && arr.length <= 6) {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n if (arr.length > 6 && arr.length <= 9) {\n return this.placeHolderCharacter;\n }\n if (arr.length > 9 && arr.length <= 12) {\n return '';\n }\n return '';\n }\n\n private _checkForCpfCnpj(inputVal: string): string {\n const cpf =\n `${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n const cnpj =\n `${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `/${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n\n if (inputVal === '#') {\n return cpf;\n }\n const arr: string[] = [];\n for (let i = 0; i < inputVal.length; i++) {\n const value = inputVal[i] ?? '';\n if (!value) {\n continue;\n }\n if (value.match('\\\\d')) {\n arr.push(value);\n }\n }\n if (arr.length <= 3) {\n return cpf.slice(arr.length, cpf.length);\n }\n if (arr.length > 3 && arr.length <= 6) {\n return cpf.slice(arr.length + 1, cpf.length);\n }\n if (arr.length > 6 && arr.length <= 9) {\n return cpf.slice(arr.length + 2, cpf.length);\n }\n if (arr.length > 9 && arr.length < 11) {\n return cpf.slice(arr.length + 3, cpf.length);\n }\n if (arr.length === 11) {\n return '';\n }\n if (arr.length === 12) {\n if (inputVal.length === 17) {\n return cnpj.slice(16, cnpj.length);\n }\n return cnpj.slice(15, cnpj.length);\n }\n if (arr.length > 12 && arr.length <= 14) {\n return cnpj.slice(arr.length + 4, cnpj.length);\n }\n return '';\n }\n\n /**\n * Recursively determine the current active element by navigating the Shadow DOM until the Active Element is found.\n */\n private _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n const shadowRootEl = document?.activeElement?.shadowRoot;\n if (!shadowRootEl?.activeElement) {\n return document.activeElement;\n } else {\n return this._getActiveElement(shadowRootEl);\n }\n }\n\n /**\n * Propogates the input value back to the Angular model by triggering the onChange function. It won't do this if writingValue\n * is true. If that is true it means we are currently in the writeValue function, which is supposed to only update the actual\n * DOM element based on the Angular model value. It should be a one way process, i.e. writeValue should not be modifying the Angular\n * model value too. Therefore, we don't trigger onChange in this scenario.\n * @param inputValue the current form input value\n */\n private formControlResult(inputValue: string): void {\n if (this.writingValue || (!this.triggerOnMaskChange && this.maskChanged)) {\n this.maskChanged = false;\n return;\n }\n if (Array.isArray(this.dropSpecialCharacters)) {\n this.onChange(\n this._toNumber(\n this._checkSymbols(\n this._removeMask(\n this._removeSuffix(this._removePrefix(inputValue)),\n this.dropSpecialCharacters\n )\n )\n )\n );\n } else if (this.dropSpecialCharacters) {\n this.onChange(\n this._toNumber(\n this._checkSymbols(this._removeSuffix(this._removePrefix(inputValue)))\n )\n );\n } else {\n this.onChange(this._toNumber(inputValue));\n }\n }\n\n private _toNumber(value: string | number | undefined | null) {\n if (!this.isNumberValue || value === '') {\n return value;\n }\n const num = Number(value);\n return Number.isNaN(num) ? value : num;\n }\n\n private _removeMask(value: string, specialCharactersForRemove: string[]): string {\n return value ? value.replace(this._regExpForRemove(specialCharactersForRemove), '') : value;\n }\n\n private _removePrefix(value: string): string {\n if (!this.prefix) {\n return value;\n }\n return value ? value.replace(this.prefix, '') : value;\n }\n\n private _removeSuffix(value: string): string {\n if (!this.suffix) {\n return value;\n }\n return value ? value.replace(this.suffix, '') : value;\n }\n\n private _retrieveSeparatorValue(result: string): string {\n const specialCharacters = Array.isArray(this.dropSpecialCharacters)\n ? this.specialCharacters.filter((v) => {\n return (this.dropSpecialCharacters as string[]).includes(v);\n })\n : this.specialCharacters;\n return this._removeMask(result, specialCharacters);\n }\n\n private _regExpForRemove(specialCharactersForRemove: string[]): RegExp {\n return new RegExp(\n specialCharactersForRemove.map((item: string) => `\\\\${item}`).join('|'),\n 'gi'\n );\n }\n\n private _replaceDecimalMarkerToDot(value: string): string {\n const markers = Array.isArray(this.decimalMarker)\n ? this.decimalMarker\n : [this.decimalMarker];\n\n return value.replace(this._regExpForRemove(markers), '.');\n }\n\n private _checkSymbols(result: string): string | number | undefined | null {\n if (result === '') {\n return result;\n }\n\n const separatorPrecision: number | null = this._retrieveSeparatorPrecision(\n this.maskExpression\n );\n const separatorValue: string = this._replaceDecimalMarkerToDot(\n this._retrieveSeparatorValue(result)\n );\n\n if (!this.isNumberValue) {\n return separatorValue;\n }\n if (separatorPrecision) {\n if (result === this.decimalMarker) {\n return null;\n }\n return this._checkPrecision(this.maskExpression, separatorValue);\n } else {\n return separatorValue;\n }\n }\n\n // TODO should think about helpers or separting decimal precision to own property\n private _retrieveSeparatorPrecision(maskExpretion: string): number | null {\n const matcher: RegExpMatchArray | null = maskExpretion.match(\n new RegExp(`^separator\\\\.([^d]*)`)\n );\n return matcher ? Number(matcher[1]) : null;\n }\n\n private _checkPrecision(separatorExpression: string, separatorValue: string): number | string {\n if (separatorExpression.indexOf('2') > 0) {\n return Number(separatorValue).toFixed(2);\n }\n return Number(separatorValue);\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, Provider } from '@angular/core';\n\nimport {\n NGX_MASK_CONFIG,\n INITIAL_CONFIG,\n initialConfig,\n NEW_CONFIG,\n optionsConfig,\n} from './ngx-mask.config';\nimport { NgxMaskService } from './ngx-mask.service';\n\n/**\n * @internal\n */\nfunction _configFactory(): optionsConfig {\n const initConfig = inject<optionsConfig>(INITIAL_CONFIG);\n const configValue = inject<optionsConfig | (() => optionsConfig)>(NEW_CONFIG);\n\n return configValue instanceof Function\n ? { ...initConfig, ...configValue() }\n : { ...initConfig, ...configValue };\n}\n\nexport function provideNgxMask(configValue?: optionsConfig | (() => optionsConfig)): Provider[] {\n return [\n {\n provide: NEW_CONFIG,\n useValue: configValue,\n },\n {\n provide: INITIAL_CONFIG,\n useValue: initialConfig,\n },\n {\n provide: NGX_MASK_CONFIG,\n useFactory: _configFactory,\n },\n NgxMaskService,\n ];\n}\n\nexport function provideEnvironmentNgxMask(\n configValue?: optionsConfig | (() => optionsConfig)\n): EnvironmentProviders {\n return makeEnvironmentProviders(provideNgxMask(configValue));\n}\n","import {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n FormControl,\n} from '@angular/forms';\nimport {\n Directive,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { CustomKeyboardEvent } from './custom-keyboard-event';\nimport { NGX_MASK_CONFIG, IConfig, timeMasks, withoutValidation } from './ngx-mask.config';\nimport { NgxMaskService } from './ngx-mask.service';\n\n@Directive({\n selector: 'input[mask], textarea[mask]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n NgxMaskService,\n ],\n exportAs: 'mask,ngxMask',\n})\nexport class NgxMaskDirective implements ControlValueAccessor, OnChanges, Validator {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('mask') public maskExpression: string | undefined | null = '';\n\n @Input() public specialCharacters: IConfig['specialCharacters'] = [];\n\n @Input() public patterns: IConfig['patterns'] = {};\n\n @Input() public prefix: IConfig['prefix'] = '';\n\n @Input() public suffix: IConfig['suffix'] = '';\n\n @Input() public thousandSeparator: IConfig['thousandSeparator'] = ' ';\n\n @Input() public decimalMarker: IConfig['decimalMarker'] = '.';\n\n @Input() public dropSpecialCharacters: IConfig['dropSpecialCharacters'] | null = null;\n\n @Input() public hiddenInput: IConfig['hiddenInput'] | null = null;\n\n @Input() public showMaskTyped: IConfig['showMaskTyped'] | null = null;\n\n @Input() public placeHolderCharacter: IConfig['placeHolderCharacter'] | null = null;\n\n @Input() public shownMaskExpression: IConfig['shownMaskExpression'] | null = null;\n\n @Input() public showTemplate: IConfig['showTemplate'] | null = null;\n\n @Input() public clearIfNotMatch: IConfig['clearIfNotMatch'] | null = null;\n\n @Input() public validation: IConfig['validation'] | null = null;\n\n @Input() public separatorLimit: IConfig['separatorLimit'] | null = null;\n\n @Input() public allowNegativeNumbers: IConfig['allowNegativeNumbers'] | null = null;\n\n @Input() public leadZeroDateTime: IConfig['leadZeroDateTime'] | null = null;\n\n @Input() public triggerOnMaskChange: IConfig['triggerOnMaskChange'] | null = null;\n\n @Output() public maskFilled: IConfig['maskFilled'] = new EventEmitter<void>();\n\n private _maskValue = '';\n\n private _inputValue!: string;\n\n private _position: number | null = null;\n\n private _start!: number;\n\n private _end!: number;\n\n private _code!: string;\n\n private _maskExpressionArray: string[] = [];\n\n private _justPasted = false;\n\n private readonly document = inject(DOCUMENT);\n\n public _maskService = inject(NgxMaskService, { self: true });\n\n protected _config = inject<IConfig>(NGX_MASK_CONFIG);\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n public onChange = (_: any) => {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onTouch = () => {};\n\n public ngOnChanges(changes: SimpleChanges): void {\n const {\n maskExpression,\n specialCharacters,\n patterns,\n prefix,\n suffix,\n thousandSeparator,\n decimalMarker,\n dropSpecialCharacters,\n hiddenInput,\n showMaskTyped,\n placeHolderCharacter,\n shownMaskExpression,\n showTemplate,\n clearIfNotMatch,\n validation,\n separatorLimit,\n allowNegativeNumbers,\n leadZeroDateTime,\n triggerOnMaskChange,\n } = changes;\n if (maskExpression) {\n if (\n maskExpression.currentValue !== maskExpression.previousValue &&\n !maskExpression.firstChange\n ) {\n this._maskService.maskChanged = true;\n }\n if (allowNegativeNumbers) {\n this._maskService.allowNegativeNumbers = allowNegativeNumbers.currentValue;\n if (this._maskService.allowNegativeNumbers) {\n this._maskService.specialCharacters =\n this._maskService.specialCharacters.filter((c: string) => c !== '-');\n }\n }\n if (maskExpression.currentValue && maskExpression.currentValue.split('||').length > 1) {\n this._maskExpressionArray = maskExpression.currentValue\n .split('||')\n .sort((a: string, b: string) => {\n return a.length - b.length;\n });\n this._setMask();\n } else {\n this._maskExpressionArray = [];\n this._maskValue = maskExpression.currentValue || '';\n this._maskService.maskExpression = this._maskValue;\n }\n }\n if (specialCharacters) {\n if (!specialCharacters.currentValue || !Array.isArray(specialCharacters.currentValue)) {\n return;\n } else {\n this._maskService.specialCharacters = specialCharacters.currentValue || [];\n }\n }\n // Only overwrite the mask available patterns if a pattern has actually been passed in\n if (patterns && patterns.currentValue) {\n this._maskService.patterns = patterns.currentValue;\n }\n if (prefix) {\n this._maskService.prefix = prefix.currentValue;\n }\n if (suffix) {\n this._maskService.suffix = suffix.currentValue;\n }\n if (thousandSeparator) {\n this._maskService.thousandSeparator = thousandSeparator.currentValue;\n }\n if (decimalMarker) {\n this._maskService.decimalMarker = decimalMarker.currentValue;\n }\n if (dropSpecialCharacters) {\n this._maskService.dropSpecialCharacters = dropSpecialCharacters.currentValue;\n }\n if (hiddenInput) {\n this._maskService.hiddenInput = hiddenInput.currentValue;\n }\n if (showMaskTyped) {\n this._maskService.showMaskTyped = showMaskTyped.currentValue;\n }\n if (placeHolderCharacter) {\n this._maskService.placeHolderCharacter = placeHolderCharacter.currentValue;\n }\n if (shownMaskExpression) {\n this._maskService.shownMaskExpression = shownMaskExpression.currentValue;\n }\n if (showTemplate) {\n this._maskService.showTemplate = showTemplate.currentValue;\n }\n if (clearIfNotMatch) {\n this._maskService.clearIfNotMatch = clearIfNotMatch.currentValue;\n }\n if (validation) {\n this._maskService.validation = validation.currentValue;\n }\n if (separatorLimit) {\n this._maskService.separatorLimit = separatorLimit.currentValue;\n }\n if (leadZeroDateTime) {\n this._maskService.leadZeroDateTime = leadZeroDateTime.currentValue;\n }\n if (triggerOnMaskChange) {\n this._maskService.triggerOnMaskChange = triggerOnMaskChange.currentValue;\n }\n\n this._applyMask();\n }\n\n // eslint-disable-next-line complexity\n public validate({ value }: FormControl): ValidationErrors | null {\n if (!this._maskService.validation || !this._maskValue) {\n return null;\n }\n if (this._maskService.ipError) {\n return this._createValidationError(value);\n }\n if (this._maskService.cpfCnpjError) {\n return this._createValidationError(value);\n }\n if (this._maskValue.startsWith('separator')) {\n return null;\n }\n if (withoutValidation.includes(this._maskValue)) {\n return null;\n }\n if (this._maskService.clearIfNotMatch) {\n return null;\n }\n if (timeMasks.includes(this._maskValue)) {\n return this._validateTime(value);\n }\n if (value && value.toString().length >= 1) {\n let counterOfOpt = 0;\n for (const key in this._maskService.patterns) {\n if (this._maskService.patterns[key]?.optional) {\n if (this._maskValue.indexOf(key) !== this._maskValue.lastIndexOf(key)) {\n const opt: string = this._maskValue\n .split('')\n .filter((i: string) => i === key)\n .join('');\n counterOfOpt += opt.length;\n } else if (this._maskValue.indexOf(key) !== -1) {\n counterOfOpt++;\n }\n if (\n this._maskValue.indexOf(key) !== -1 &&\n value.toString().length >= this._maskValue.indexOf(key)\n ) {\n return null;\n }\n if (counterOfOpt === this._maskValue.length) {\n return null;\n }\n }\n }\n if (\n this._maskValue.indexOf('{') === 1 &&\n value.toString().length ===\n this._maskValue.length +\n Number((this._maskValue.split('{')[1] ?? '').split('}')[0]) -\n 4\n ) {\n return null;\n }\n if (this._maskValue.indexOf('*') === 1 || this._maskValue.indexOf('?') === 1) {\n return null;\n } else if (\n (this._maskValue.indexOf('*') > 1 &&\n value.toString().length < this._maskValue.indexOf('*')) ||\n (this._maskValue.indexOf('?') > 1 &&\n value.toString().length < this._maskValue.indexOf('?')) ||\n this._maskValue.indexOf('{') === 1\n ) {\n return this._createValidationError(value);\n }\n if (this._maskValue.indexOf('*') === -1 || this._maskValue.indexOf('?') === -1) {\n const length: number = this._maskService.dropSpecialCharacters\n ? this._maskValue.length -\n this._maskService.checkSpecialCharAmount(this._maskValue) -\n counterOfOpt\n : this._maskValue.length - counterOfOpt;\n if (value.toString().length < length) {\n return this._createValidationError(value);\n }\n }\n }\n if (value) {\n this.maskFilled.emit();\n return null;\n }\n return null;\n }\n\n @HostListener('paste')\n public onPaste() {\n this._justPasted = true;\n }\n\n @HostListener('ngModelChange', ['$event'])\n public onModelChange(value: string | undefined | null | number): void {\n // on form reset we need to update the actualValue\n if (\n (value === '' || value === null || value === undefined) &&\n this._maskService.actualValue\n ) {\n this._maskService.actualValue = this._maskService.getActualValue('');\n }\n }\n\n @HostListener('input', ['$event'])\n public onInput(e: CustomKeyboardEvent): void {\n const el: HTMLInputElement = e.target as HTMLInputElement;\n this._inputValue = el.value;\n\n this._setMask();\n\n if (!this._maskValue) {\n this.onChange(el.value);\n return;\n }\n let position: number =\n el.selectionStart === 1\n ? (el.selectionStart as number) + this._maskService.prefix.length\n : (el.selectionStart as number);\n let caretShift = 0;\n let backspaceShift = false;\n this._maskService.applyValueChanges(\n position,\n this._justPasted,\n this._code === 'Backspace' || this._code === 'Delete',\n (shift: number, _backspaceShift: boolean) => {\n this._justPasted = false;\n caretShift = shift;\n backspaceShift = _backspaceShift;\n }\n );\n // only set the selection if the element is active\n if (this._getActiveElement() !== el) {\n return;\n }\n\n // update position after applyValueChanges to prevent cursor on wrong position when it has an array of maskExpression\n if (this._maskExpressionArray.length) {\n position =\n el.selectionStart === 1\n ? (el.selectionStart as number) + this._maskService.prefix.length\n : (el.selectionStart as number);\n }\n\n this._position =\n this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n let positionToApply: number = this._position\n ? this._inputValue.length + position + caretShift\n : position + (this._code === 'Backspace' && !backspaceShift ? 0 : caretShift);\n if (positionToApply > this._getActualInputLength()) {\n positionToApply = this._getActualInputLength();\n }\n if (positionToApply < 0) {\n positionToApply = 0;\n }\n el.setSelectionRange(positionToApply, positionToApply);\n this._position = null;\n }\n\n @HostListener('blur')\n public onBlur(): void {\n if (this._maskValue) {\n this._maskService.clearIfNotMatchFn();\n }\n this.onTouch();\n }\n\n @HostListener('click', ['$event'])\n public onClick(e: MouseEvent | CustomKeyboardEvent): void {\n if (!this._maskValue) {\n return;\n }\n const el: HTMLInputElement = e.target as HTMLInputElement;\n const posStart = 0;\n const posEnd = 0;\n if (\n el !== null &&\n el.selectionStart !== null &&\n el.selectionStart === el.selectionEnd &&\n el.selectionStart > this._maskService.prefix.length &&\n // eslint-disable-next-line\n (e as any).keyCode !== 38\n ) {\n if (this._maskService.showMaskTyped) {\n // We are showing the mask in the input\n this._maskService.maskIsShown = this._maskService.showMaskInInput();\n if (\n el.setSelectionRange &&\n this._maskService.prefix + this._maskService.maskIsShown === el.value\n ) {\n // the input ONLY contains the mask, so position the cursor at the start\n el.focus();\n el.setSelectionRange(posStart, posEnd);\n } else {\n // the input contains some characters already\n if (el.selectionStart > this._maskService.actualValue.length) {\n // if the user clicked beyond our value's length, position the cursor at the end of our value\n el.setSelectionRange(\n this._maskService.actualValue.length,\n this._maskService.actualValue.length\n );\n }\n }\n }\n }\n const nextValue: string | null =\n el &&\n (!el.value || el.value === this._maskService.prefix\n ? this._maskService.prefix + this._maskService.maskIsShown\n : el.value);\n /** Fix of cursor position jumping to end in most browsers no matter where cursor is inserted onFocus */\n if (el && el.value !== nextValue) {\n el.value = nextValue;\n }\n\n /** fix of cursor position with prefix when mouse click occur */\n if (\n el &&\n ((el.selectionStart as number) || (el.selectionEnd as number)) <=\n this._maskService.prefix.length\n ) {\n el.selectionStart = this._maskService.prefix.length;\n return;\n }\n /** select only inserted text */\n if (el && (el.selectionEnd as number) > this._getActualInputLength()) {\n el.selectionEnd = this._getActualInputLength();\n }\n }\n\n // eslint-disable-next-line complexity\n @HostListener('keydown', ['$event'])\n public onKeyDown(e: CustomKeyboardEvent): void {\n if (!this._maskValue) {\n return;\n }\n this._code = e.code ? e.code : e.key;\n const el: HTMLInputElement = e.target as HTMLInputElement;\n this._inputValue = el.value;\n\n this._setMask();\n\n if (e.keyCode === 38) {\n e.preventDefault();\n }\n if (e.keyCode === 37 || e.keyCode === 8 || e.keyCode === 46) {\n if (e.keyCode === 8 && el.value.length === 0) {\n el.selectionStart = el.selectionEnd;\n }\n if (e.keyCode === 8 && (el.selectionStart as number) !== 0) {\n // If specialChars is false, (shouldn't ever happen) then set to the defaults\n this.specialCharacters = this.specialCharacters?.length\n ? this.specialCharacters\n : this._config.specialCharacters;\n if (this.prefix.length > 1 && (el.selectionStart as number) <= this.prefix.length) {\n el.setSelectionRange(this.prefix.length, el.selectionEnd);\n } else {\n if (\n this._inputValue.length !== (el.selectionStart as number) &&\n (el.selectionStart as number) !== 1\n ) {\n while (\n this.specialCharacters.includes(\n (\n this._inputValue[(el.selectionStart as number) - 1] ?? ''\n ).toString()\n ) &&\n ((this.prefix.length >= 1 &&\n (el.selectionStart as number) > this.prefix.length) ||\n this.prefix.length === 0)\n ) {\n el.setSelectionRange(\n (el.selectionStart as number) - 1,\n el.selectionEnd\n );\n }\n }\n }\n }\n this.checkSelectionOnDeletion(el);\n if (\n this._maskService.prefix.length &&\n (el.selectionStart as number) <= this._maskService.prefix.length &&\n (el.selectionEnd as number) <= this._maskService.prefix.length\n ) {\n e.preventDefault();\n }\n const cursorStart: number | null = el.selectionStart;\n if (\n e.keyCode === 8 &&\n !el.readOnly &&\n cursorStart === 0 &&\n el.selectionEnd === el.value.length &&\n el.value.length !== 0\n ) {\n this._position = this._maskService.prefix ? this._maskService.prefix.length : 0;\n this._maskService.applyMask(\n this._maskService.prefix,\n this._maskService.maskExpression,\n this._position\n );\n }\n }\n if (\n !!this.suffix &&\n this.suffix.length > 1 &&\n this._inputValue.length - this.suffix.length < (el.selectionStart as number)\n ) {\n el.setSelectionRange(\n this._inputValue.length - this.suffix.length,\n this._inputValue.length\n );\n } else if (\n (e.keyCode === 65 && e.ctrlKey) ||\n (e.keyCode === 65 && e.metaKey) // Cmd + A (Mac)\n ) {\n el.setSelectionRange(0, this._getActualInputLength());\n e.preventDefault();\n }\n this._maskService.selStart = el.selectionStart;\n this._maskService.selEnd = el.selectionEnd;\n }\n\n /** It writes the value in the input */\n public async writeValue(\n inputValue: string | number | { value: string | number; disable?: boolean }\n ): Promise<void> {\n if (typeof inputValue === 'object' && inputValue !== null && 'value' in inputValue) {\n if ('disable' in inputValue) {\n this.setDisabledState(Boolean(inputValue.disable));\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.value;\n }\n\n if (typeof inputValue === 'number' || this._maskValue.startsWith('separator')) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._maskService.numberToString(inputValue);\n if (!Array.isArray(this.decimalMarker)) {\n const localeDecimalMarker = this._currentLocaleDecimalMarker();\n // eslint-disable-next-line no-param-reassign\n inputValue =\n this.decimalMarker !== localeDecimalMarker\n ? inputValue.replace(localeDecimalMarker, this.decimalMarker)\n : inputValue;\n }\n this._maskService.isNumberValue = true;\n }\n\n if (typeof inputValue !== 'string') {\n // eslint-disable-next-line no-param-reassign\n inputValue = '';\n }\n\n this._inputValue = inputValue;\n this._setMask();\n\n if (\n (inputValue && this._maskService.maskExpression) ||\n (this._maskService.maskExpression &&\n (this._maskService.prefix || this._maskService.showMaskTyped))\n ) {\n // Let the service we know we are writing value so that triggering onChange function won't happen during applyMask\n this._maskService.writingValue = true;\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(inputValue, this._maskService.maskExpression),\n ];\n // Let the service know we've finished writing value\n this._maskService.writingValue = false;\n } else {\n this._maskService.formElementProperty = ['value', inputValue];\n }\n this._inputValue = inputValue;\n }\n\n public registerOnChange(fn: typeof this.onChange): void {\n this._maskService.onChange = this.onChange = fn;\n }\n\n public registerOnTouched(fn: typeof this.onTouch): void {\n this.onTouch = fn;\n }\n\n private _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n const shadowRootEl = document?.activeElement?.shadowRoot;\n if (!shadowRootEl?.activeElement) {\n return document.activeElement;\n } else {\n return this._getActiveElement(shadowRootEl);\n }\n }\n\n public checkSelectionOnDeletion(el: HTMLInputElement): void {\n el.selectionStart = Math.min(\n Math.max(this.prefix.length, el.selectionStart as number),\n this._inputValue.length - this.suffix.length\n );\n el.selectionEnd = Math.min(\n Math.max(this.prefix.length, el.selectionEnd as number),\n this._inputValue.length - this.suffix.length\n );\n }\n\n /** It disables the input element */\n public setDisabledState(isDisabled: boolean): void {\n this._maskService.formElementProperty = ['disabled', isDisabled];\n }\n\n private _repeatPatternSymbols(maskExp: string): string {\n return (\n (maskExp.match(/{[0-9]+}/) &&\n maskExp\n .split('')\n .reduce((accum: string, currVal: string, index: number): string => {\n this._start = currVal === '{' ? index : this._start;\n\n if (currVal !== '}') {\n return this._maskService._findSpecialChar(currVal)\n ? accum + currVal\n : accum;\n }\n this._end = index;\n const repeatNumber = Number(maskExp.slice(this._start + 1, this._end));\n const replaceWith: string = new Array(repeatNumber + 1).join(\n maskExp[this._start - 1]\n );\n return accum + replaceWith;\n }, '')) ||\n maskExp\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _applyMask(): any {\n this._maskService.maskExpression = this._repeatPatternSymbols(this._maskValue || '');\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(this._inputValue, this._maskService.maskExpression),\n ];\n }\n\n private _validateTime(value: string): ValidationErrors | null {\n const rowMaskLen: number = this._maskValue\n .split('')\n .filter((s: string) => s !== ':').length;\n if (!value) {\n return null; // Don't validate empty values to allow for optional form control\n }\n\n if (\n (+(value[value.length - 1] ?? -1) === 0 && value.length < rowMaskLen) ||\n value.length <= rowMaskLen - 2\n ) {\n return this._createValidationError(value);\n }\n\n return null;\n }\n\n private _getActualInputLength() {\n return (\n this._maskService.actualValue.length ||\n this._maskService.actualValue.length + this._maskService.prefix.length\n );\n }\n\n private _createValidationError(actualValue: string): ValidationErrors {\n return {\n mask: {\n requiredMask: this._maskValue,\n actualValue,\n },\n };\n }\n\n private _setMask() {\n if (this._maskExpressionArray.length > 0) {\n this._maskExpressionArray.some((mask): boolean | void => {\n const test =\n this._maskService.removeMask(this._inputValue)?.length <=\n this._maskService.removeMask(mask)?.length;\n if (this._inputValue && test) {\n this._maskValue = mask;\n this.maskExpression = mask;\n this._maskService.maskExpression = mask;\n return test;\n } else {\n const expression =\n this._maskExpressionArray[this._maskExpressionArray.length - 1] ?? '';\n this._maskValue =\n this.maskExpression =\n this._maskService.maskExpression =\n expression;\n }\n });\n }\n }\n\n private _currentLocaleDecimalMarker(): string {\n return (1.1).toLocaleString().substring(1, 2);\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\n\nimport { IConfig } from './ngx-mask.config';\nimport { NgxMaskService } from './ngx-mask.service';\n\n@Pipe({\n name: 'mask',\n pure: true,\n standalone: true,\n})\nexport class NgxMaskPipe implements PipeTransform {\n private readonly defaultOptions: Partial<IConfig> = {};\n\n private readonly _maskService = inject(NgxMaskService);\n\n public transform(\n value: string | number,\n mask: string,\n { patterns, ...config }: Partial<IConfig> = {} as Partial<IConfig>\n ): string {\n const currentConfig = {\n maskExpression: mask,\n ...this.defaultOptions,\n ...config,\n patterns: {\n ...this._maskService.patterns,\n ...patterns,\n },\n };\n Object.entries(currentConfig).forEach(([key, value]) => {\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._maskService as any)[key] = value;\n });\n return this._maskService.applyMask(`${value}`, mask);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-mask.mjs","sources":["../../../projects/ngx-mask-lib/src/lib/ngx-mask.config.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask-applier.service.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.service.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.providers.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.directive.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.pipe.ts","../../../projects/ngx-mask-lib/src/ngx-mask.ts"],"sourcesContent":["import { InjectionToken, EventEmitter } from '@angular/core';\n\nexport interface IConfig {\n suffix: string;\n prefix: string;\n thousandSeparator: string;\n decimalMarker: '.' | ',' | ['.', ','];\n clearIfNotMatch: boolean;\n showTemplate: boolean;\n showMaskTyped: boolean;\n placeHolderCharacter: string;\n shownMaskExpression: string;\n dropSpecialCharacters: boolean | string[];\n specialCharacters: string[];\n hiddenInput: boolean | undefined;\n validation: boolean;\n separatorLimit: string;\n allowNegativeNumbers: boolean;\n leadZeroDateTime: boolean;\n triggerOnMaskChange: boolean;\n maskFilled: EventEmitter<void>;\n patterns: {\n [character: string]: {\n pattern: RegExp;\n optional?: boolean;\n symbol?: string;\n };\n };\n}\n\nexport type optionsConfig = Partial<IConfig>;\nexport const NGX_MASK_CONFIG: InjectionToken<IConfig> = new InjectionToken('ngx-mask config');\nexport const NEW_CONFIG: InjectionToken<IConfig> = new InjectionToken('new ngx-mask config');\nexport const INITIAL_CONFIG: InjectionToken<IConfig> = new InjectionToken(\n 'initial ngx-mask config'\n);\n\nexport const initialConfig: IConfig = {\n suffix: '',\n prefix: '',\n thousandSeparator: ' ',\n decimalMarker: ['.', ','],\n clearIfNotMatch: false,\n showTemplate: false,\n showMaskTyped: false,\n placeHolderCharacter: '_',\n dropSpecialCharacters: true,\n hiddenInput: undefined,\n shownMaskExpression: '',\n separatorLimit: '',\n allowNegativeNumbers: false,\n validation: true,\n // eslint-disable-next-line @typescript-eslint/quotes\n specialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '\"', \"'\"],\n leadZeroDateTime: false,\n triggerOnMaskChange: false,\n maskFilled: new EventEmitter<void>(),\n patterns: {\n '0': {\n pattern: new RegExp('\\\\d'),\n },\n '9': {\n pattern: new RegExp('\\\\d'),\n optional: true,\n },\n X: {\n pattern: new RegExp('\\\\d'),\n symbol: '*',\n },\n A: {\n pattern: new RegExp('[a-zA-Z0-9]'),\n },\n S: {\n pattern: new RegExp('[a-zA-Z]'),\n },\n U: {\n pattern: new RegExp('[A-Z]'),\n },\n L: {\n pattern: new RegExp('[a-z]'),\n },\n d: {\n pattern: new RegExp('\\\\d'),\n },\n m: {\n pattern: new RegExp('\\\\d'),\n },\n M: {\n pattern: new RegExp('\\\\d'),\n },\n H: {\n pattern: new RegExp('\\\\d'),\n },\n h: {\n pattern: new RegExp('\\\\d'),\n },\n s: {\n pattern: new RegExp('\\\\d'),\n },\n },\n};\n\nexport const timeMasks: string[] = ['Hh:m0:s0', 'Hh:m0', 'm0:s0'];\n\nexport const withoutValidation: string[] = [\n 'percent',\n 'Hh',\n 's0',\n 'm0',\n 'separator',\n 'd0/M0/0000',\n 'd0/M0',\n 'd0',\n 'M0',\n];\n","import { inject, Injectable } from '@angular/core';\nimport { NGX_MASK_CONFIG, IConfig } from './ngx-mask.config';\n\n@Injectable()\nexport class NgxMaskApplierService {\n protected _config = inject<IConfig>(NGX_MASK_CONFIG);\n\n public dropSpecialCharacters: IConfig['dropSpecialCharacters'] =\n this._config.dropSpecialCharacters;\n\n public hiddenInput: IConfig['hiddenInput'] = this._config.hiddenInput;\n\n public showTemplate!: IConfig['showTemplate'];\n\n public clearIfNotMatch: IConfig['clearIfNotMatch'] = this._config.clearIfNotMatch;\n\n public specialCharacters: IConfig['specialCharacters'] = this._config.specialCharacters;\n\n public patterns: IConfig['patterns'] = this._config.patterns;\n\n public prefix: IConfig['prefix'] = this._config.prefix;\n\n public suffix: IConfig['suffix'] = this._config.suffix;\n\n public thousandSeparator: IConfig['thousandSeparator'] = this._config.thousandSeparator;\n\n public decimalMarker: IConfig['decimalMarker'] = this._config.decimalMarker;\n\n public customPattern!: IConfig['patterns'];\n\n public showMaskTyped: IConfig['showMaskTyped'] = this._config.showMaskTyped;\n\n public placeHolderCharacter: IConfig['placeHolderCharacter'] =\n this._config.placeHolderCharacter;\n\n public validation: IConfig['validation'] = this._config.validation;\n\n public separatorLimit: IConfig['separatorLimit'] = this._config.separatorLimit;\n\n public allowNegativeNumbers: IConfig['allowNegativeNumbers'] =\n this._config.allowNegativeNumbers;\n\n public leadZeroDateTime: IConfig['leadZeroDateTime'] = this._config.leadZeroDateTime;\n\n private _shift: Set<number> = new Set();\n\n public maskExpression = '';\n\n public actualValue = '';\n\n public shownMaskExpression = '';\n\n public ipError?: boolean;\n\n public cpfCnpjError?: boolean;\n public applyMaskWithPattern(\n inputValue: string,\n maskAndPattern: [string, IConfig['patterns']]\n ): string {\n const [mask, customPattern] = maskAndPattern;\n this.customPattern = customPattern;\n return this.applyMask(inputValue, mask);\n }\n\n public applyMask(\n inputValue: string | object | boolean | null | undefined,\n maskExpression: string,\n position = 0,\n justPasted = false,\n backspaced = false,\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb: (...args: any[]) => any = () => {}\n ): string {\n if (!maskExpression || typeof inputValue !== 'string') {\n return '';\n }\n let cursor = 0;\n let result = '';\n let multi = false;\n let backspaceShift = false;\n let shift = 1;\n let stepBack = false;\n if (inputValue.slice(0, this.prefix.length) === this.prefix) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.slice(this.prefix.length, inputValue.length);\n }\n if (!!this.suffix && inputValue?.length > 0) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkAndRemoveSuffix(inputValue);\n }\n const inputArray: string[] = inputValue.toString().split('');\n if (this.allowNegativeNumbers && inputValue.slice(cursor, cursor + 1) === '-') {\n // eslint-disable-next-line no-param-reassign\n result += inputValue.slice(cursor, cursor + 1);\n }\n if (maskExpression === 'IP') {\n const valuesIP = inputValue.split('.');\n this.ipError = this._validIP(valuesIP);\n // eslint-disable-next-line no-param-reassign\n maskExpression = '099.099.099.099';\n }\n const arr: string[] = [];\n for (let i = 0; i < inputValue.length; i++) {\n if (inputValue[i]?.match('\\\\d')) {\n arr.push(inputValue[i] ?? '');\n }\n }\n if (maskExpression === 'CPF_CNPJ') {\n this.cpfCnpjError = arr.length !== 11 && arr.length !== 14;\n if (arr.length > 11) {\n // eslint-disable-next-line no-param-reassign\n maskExpression = '00.000.000/0000-00';\n } else {\n // eslint-disable-next-line no-param-reassign\n maskExpression = '000.000.000-00';\n }\n }\n if (maskExpression.startsWith('percent')) {\n //ogranich posle tochki\n if (\n inputValue.match('[a-z]|[A-Z]') ||\n // eslint-disable-next-line no-useless-escape\n inputValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/.]/)\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._stripToDecimal(inputValue);\n const precision: number = this.getPrecision(maskExpression);\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n }\n if (\n inputValue.indexOf('.') > 0 &&\n !this.percentage(inputValue.substring(0, inputValue.indexOf('.')))\n ) {\n let base: string = inputValue.substring(0, inputValue.indexOf('.') - 1);\n if (this.allowNegativeNumbers && inputValue.slice(cursor, cursor + 1) === '-') {\n base = inputValue.substring(0, inputValue.indexOf('.'));\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = `${base}${inputValue.substring(\n inputValue.indexOf('.'),\n inputValue.length\n )}`;\n }\n let value = '';\n this.allowNegativeNumbers && inputValue.slice(cursor, cursor + 1) === '-'\n ? (value = inputValue.slice(cursor + 1, cursor + inputValue.length))\n : (value = inputValue);\n if (this.percentage(value)) {\n result = inputValue;\n } else {\n result = inputValue.substring(0, inputValue.length - 1);\n }\n } else if (maskExpression.startsWith('separator')) {\n if (\n inputValue.match('[wа-яА-Я]') ||\n inputValue.match('[ЁёА-я]') ||\n inputValue.match('[a-z]|[A-Z]') ||\n inputValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\]:\";<>.?/]/) ||\n inputValue.match('[^A-Za-z0-9,]')\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._stripToDecimal(inputValue);\n }\n // eslint-disable-next-line no-param-reassign\n inputValue =\n inputValue.length > 1 &&\n inputValue[0] === '0' &&\n inputValue[1] !== this.thousandSeparator &&\n !this._compareOrIncludes(\n inputValue[1],\n this.decimalMarker,\n this.thousandSeparator\n ) &&\n !backspaced\n ? inputValue.slice(0, inputValue.length - 1)\n : inputValue;\n if (backspaced) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._compareOrIncludes(\n inputValue[inputValue.length - 1],\n this.decimalMarker,\n this.thousandSeparator\n )\n ? inputValue.slice(0, inputValue.length - 1)\n : inputValue;\n }\n // TODO: we had different rexexps here for the different cases... but tests dont seam to bother - check this\n // separator: no COMMA, dot-sep: no SPACE, COMMA OK, comma-sep: no SPACE, COMMA OK\n\n const thousandSeparatorCharEscaped: string = this._charToRegExpExpression(\n this.thousandSeparator\n );\n let invalidChars: string = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\\\\.\";<>?\\\\/'.replace(\n thousandSeparatorCharEscaped,\n ''\n );\n //.replace(decimalMarkerEscaped, '');\n if (Array.isArray(this.decimalMarker)) {\n for (const marker of this.decimalMarker) {\n invalidChars = invalidChars.replace(this._charToRegExpExpression(marker), '');\n }\n } else {\n invalidChars = invalidChars.replace(\n this._charToRegExpExpression(this.decimalMarker),\n ''\n );\n }\n\n const invalidCharRegexp = new RegExp('[' + invalidChars + ']');\n\n if (\n inputValue.match(invalidCharRegexp) ||\n (inputValue.length === 1 &&\n this._compareOrIncludes(inputValue, this.decimalMarker, this.thousandSeparator))\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n\n const precision: number = this.getPrecision(maskExpression);\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n const strForSep: string = inputValue.replace(\n new RegExp(thousandSeparatorCharEscaped, 'g'),\n ''\n );\n result = this._formatWithSeparators(\n strForSep,\n this.thousandSeparator,\n this.decimalMarker,\n precision\n );\n const commaShift: number = result.indexOf(',') - inputValue.indexOf(',');\n const shiftStep: number = result.length - inputValue.length;\n\n if (shiftStep > 0 && result[position] !== ',') {\n backspaceShift = true;\n let _shift = 0;\n do {\n this._shift.add(position + _shift);\n _shift++;\n } while (_shift < shiftStep);\n } else if (\n (commaShift !== 0 &&\n position > 0 &&\n !(result.indexOf(',') >= position && position > 3)) ||\n (!(result.indexOf('.') >= position && position > 3) && shiftStep <= 0)\n ) {\n this._shift.clear();\n backspaceShift = true;\n shift = shiftStep;\n // eslint-disable-next-line no-param-reassign\n position += shiftStep;\n this._shift.add(position);\n } else {\n this._shift.clear();\n }\n } else {\n for (\n // eslint-disable-next-line\n let i: number = 0, inputSymbol: string = inputArray[0]!;\n i < inputArray.length;\n i++, inputSymbol = inputArray[i] ?? ''\n ) {\n if (cursor === maskExpression.length) {\n break;\n }\n if (\n this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? '') &&\n maskExpression[cursor + 1] === '?'\n ) {\n result += inputSymbol;\n cursor += 2;\n } else if (\n maskExpression[cursor + 1] === '*' &&\n multi &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? '')\n ) {\n result += inputSymbol;\n cursor += 3;\n multi = false;\n } else if (\n this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? '') &&\n maskExpression[cursor + 1] === '*'\n ) {\n result += inputSymbol;\n multi = true;\n } else if (\n maskExpression[cursor + 1] === '?' &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? '')\n ) {\n result += inputSymbol;\n cursor += 3;\n } else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? '')) {\n if (maskExpression[cursor] === 'H') {\n if (Number(inputSymbol) > 2) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === 'h') {\n if (result === '2' && Number(inputSymbol) > 3) {\n cursor += 1;\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 'm') {\n if (Number(inputSymbol) > 5) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === 's') {\n if (Number(inputSymbol) > 5) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n const daysCount = 31;\n if (maskExpression[cursor] === 'd') {\n const maskStartWithMonth = maskExpression.slice(0, 2) === 'M0';\n const startWithMonthInput: boolean =\n maskExpression.slice(0, 2) === 'M0' &&\n (inputValue[cursor - 2] === '/' ||\n inputValue[cursor - 2] === '.' ||\n inputValue[cursor - 2] === '-');\n if (\n (Number(inputSymbol) > 3 && this.leadZeroDateTime) ||\n (!maskStartWithMonth &&\n (Number(inputValue.slice(cursor, cursor + 2)) > daysCount ||\n Number(inputValue.slice(cursor - 1, cursor + 1)) > daysCount ||\n inputValue[cursor + 1] === '/' ||\n inputValue[cursor + 1] === '-')) ||\n (startWithMonthInput\n ? Number(inputValue.slice(cursor - 1, cursor + 1)) > daysCount ||\n (inputValue[cursor] !== '/' &&\n (inputValue[cursor + 2] === '.' ||\n inputValue[cursor + 2] === '/' ||\n inputValue[cursor + 2] === '-')) ||\n inputValue[cursor] === '.' ||\n inputValue[cursor] === '/' ||\n inputValue[cursor] === '-'\n : Number(inputValue.slice(cursor, cursor + 2)) > daysCount ||\n inputValue[cursor + 1] === '/' ||\n inputValue[cursor + 1] === '-' ||\n inputValue[cursor + 1] === '.')\n ) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === 'M') {\n const monthsCount = 12;\n // mask without day\n const withoutDays: boolean =\n cursor === 0 &&\n (Number(inputSymbol) > 2 ||\n Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n inputValue[cursor + 1] === '/');\n // day<10 && month<12 for input\n const day1monthInput: boolean =\n inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n ((inputValue[cursor - 2] === '/' &&\n Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount &&\n inputValue[cursor] !== '/') ||\n inputValue[cursor] === '/' ||\n inputValue[cursor] === '-' ||\n (inputValue[cursor - 3] === '/' &&\n Number(inputValue.slice(cursor - 2, cursor)) > monthsCount &&\n inputValue[cursor - 1] !== '/') ||\n inputValue[cursor - 1] === '/' ||\n inputValue[cursor - 1] === '-');\n // month<12 && day<10 for input\n const day2monthInput: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n (inputValue[cursor - 1] === '/' || inputValue[cursor - 1] === '-') &&\n (Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n inputValue[cursor + 1] === '/' ||\n inputValue[cursor + 1] === '-');\n // cursor === 5 && without days\n const day2monthInputDot: boolean =\n (Number(inputValue.slice(cursor, cursor + 2)) > monthsCount &&\n cursor === 5) ||\n inputValue[cursor + 1] === '.' ||\n inputValue[cursor + 1] === '-' ||\n inputValue[cursor + 1] === '/';\n // day<10 && month<12 for paste whole data\n const day1monthPaste: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) > daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n !inputValue.slice(cursor - 2, cursor).includes('/') &&\n Number(inputValue.slice(cursor - 2, cursor)) > monthsCount;\n // 10<day<31 && month<12 for paste whole data\n const day2monthPaste: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n inputValue[cursor - 1] !== '/' &&\n Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount;\n if (\n (Number(inputSymbol) > 1 && this.leadZeroDateTime) ||\n withoutDays ||\n day1monthInput ||\n day2monthPaste ||\n day1monthPaste ||\n day2monthInput ||\n day2monthInputDot\n ) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n result += inputSymbol;\n cursor++;\n } else if (inputSymbol === ' ' && maskExpression[cursor] === ' ') {\n result += inputSymbol;\n cursor++;\n } else if (this.specialCharacters.indexOf(maskExpression[cursor] ?? '') !== -1) {\n result += maskExpression[cursor];\n cursor++;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n } else if (maskExpression[cursor] === '9' && this.showMaskTyped) {\n this._shiftStep(maskExpression, cursor, inputArray.length);\n } else if (\n this.specialCharacters.indexOf(inputSymbol) > -1 &&\n this.patterns[maskExpression[cursor] ?? ''] &&\n this.patterns[maskExpression[cursor] ?? '']?.optional\n ) {\n if (\n !!inputArray[cursor] &&\n maskExpression !== '099.099.099.099' &&\n maskExpression !== '000.000.000-00' &&\n maskExpression !== '00.000.000/0000-00' &&\n !maskExpression.match(/^9+\\.0+$/)\n ) {\n result += inputArray[cursor];\n }\n cursor++;\n i--;\n } else if (\n this.maskExpression[cursor + 1] === '*' &&\n this._findSpecialChar(this.maskExpression[cursor + 2] ?? '') &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi\n ) {\n cursor += 3;\n result += inputSymbol;\n } else if (\n this.maskExpression[cursor + 1] === '?' &&\n this._findSpecialChar(this.maskExpression[cursor + 2] ?? '') &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi\n ) {\n cursor += 3;\n result += inputSymbol;\n } else if (\n this.showMaskTyped &&\n this.specialCharacters.indexOf(inputSymbol) < 0 &&\n inputSymbol !== this.placeHolderCharacter\n ) {\n stepBack = true;\n }\n }\n }\n if (\n result.length + 1 === maskExpression.length &&\n this.specialCharacters.indexOf(maskExpression[maskExpression.length - 1] ?? '') !== -1\n ) {\n result += maskExpression[maskExpression.length - 1];\n }\n let newPosition: number = position + 1;\n\n while (this._shift.has(newPosition)) {\n shift++;\n newPosition++;\n }\n\n let actualShift: number =\n justPasted && !maskExpression.startsWith('separator')\n ? cursor\n : this._shift.has(position)\n ? shift\n : 0;\n if (stepBack) {\n actualShift--;\n }\n\n cb(actualShift, backspaceShift);\n if (shift < 0) {\n this._shift.clear();\n }\n let onlySpecial = false;\n if (backspaced) {\n onlySpecial = inputArray.every((char) => this.specialCharacters.includes(char));\n }\n let res = `${this.prefix}${onlySpecial ? '' : result}${this.suffix}`;\n if (result.length === 0) {\n res = `${this.prefix}${result}`;\n }\n return res;\n }\n\n public _findSpecialChar(inputSymbol: string): undefined | string {\n return this.specialCharacters.find((val: string) => val === inputSymbol);\n }\n\n protected _checkSymbolMask(inputSymbol: string, maskSymbol: string): boolean {\n this.patterns = this.customPattern ? this.customPattern : this.patterns;\n return (\n (this.patterns[maskSymbol]?.pattern &&\n this.patterns[maskSymbol]?.pattern.test(inputSymbol)) ??\n false\n );\n }\n\n private _formatWithSeparators = (\n str: string,\n thousandSeparatorChar: string,\n decimalChars: string | string[],\n precision: number\n ) => {\n let x: string[] = [];\n let decimalChar = '';\n if (Array.isArray(decimalChars)) {\n const regExp = new RegExp(\n decimalChars.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|')\n );\n x = str.split(regExp);\n decimalChar = str.match(regExp)?.[0] ?? '';\n } else {\n x = str.split(decimalChars);\n decimalChar = decimalChars;\n }\n const decimals: string = x.length > 1 ? `${decimalChar}${x[1]}` : '';\n let res: string = x[0] ?? '';\n const separatorLimit: string = this.separatorLimit.replace(/\\s/g, '');\n if (separatorLimit && +separatorLimit) {\n if (res[0] === '-') {\n res = `-${res.slice(1, res.length).slice(0, separatorLimit.length)}`;\n } else {\n res = res.slice(0, separatorLimit.length);\n }\n }\n const rgx = /(\\d+)(\\d{3})/;\n\n while (thousandSeparatorChar && rgx.test(res)) {\n res = res.replace(rgx, '$1' + thousandSeparatorChar + '$2');\n }\n\n if (precision === undefined) {\n return res + decimals;\n } else if (precision === 0) {\n return res;\n }\n return res + decimals.substring(0, precision + 1);\n };\n\n private percentage = (str: string): boolean => {\n return Number(str) >= 0 && Number(str) <= 100;\n };\n\n private getPrecision = (maskExpression: string): number => {\n const x: string[] = maskExpression.split('.');\n if (x.length > 1) {\n return Number(x[x.length - 1]);\n }\n\n return Infinity;\n };\n\n private checkAndRemoveSuffix = (inputValue: string): string => {\n for (let i = this.suffix?.length - 1; i >= 0; i--) {\n const substr = this.suffix.substring(i, this.suffix?.length);\n if (\n inputValue.includes(substr) &&\n i !== this.suffix?.length - 1 &&\n (i - 1 < 0 ||\n !inputValue.includes(this.suffix.substring(i - 1, this.suffix?.length)))\n ) {\n return inputValue.replace(substr, '');\n }\n }\n return inputValue;\n };\n\n private checkInputPrecision = (\n inputValue: string,\n precision: number,\n decimalMarker: IConfig['decimalMarker']\n ): string => {\n if (precision < Infinity) {\n // TODO need think about decimalMarker\n if (Array.isArray(decimalMarker)) {\n const marker = decimalMarker.find((dm) => dm !== this.thousandSeparator);\n // eslint-disable-next-line no-param-reassign\n decimalMarker = marker ? marker : decimalMarker[0];\n }\n const precisionRegEx = new RegExp(\n this._charToRegExpExpression(decimalMarker) + `\\\\d{${precision}}.*$`\n );\n\n const precisionMatch: RegExpMatchArray | null = inputValue.match(precisionRegEx);\n const precisionMatchLength: number = (precisionMatch && precisionMatch[0]?.length) ?? 0;\n if (precisionMatchLength - 1 > precision) {\n const diff = precisionMatchLength - 1 - precision;\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - diff);\n }\n if (\n precision === 0 &&\n this._compareOrIncludes(\n inputValue[inputValue.length - 1],\n decimalMarker,\n this.thousandSeparator\n )\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n }\n return inputValue;\n };\n\n private _stripToDecimal(str: string): string {\n return str\n .split('')\n .filter((i: string, idx: number) => {\n const isDecimalMarker =\n typeof this.decimalMarker === 'string'\n ? i === this.decimalMarker\n : // TODO (inepipenko) use utility type\n this.decimalMarker.includes(i as ',' | '.');\n return (\n i.match('^-?\\\\d') ||\n i === this.thousandSeparator ||\n isDecimalMarker ||\n (i === '-' && idx === 0 && this.allowNegativeNumbers)\n );\n })\n .join('');\n }\n\n private _charToRegExpExpression(char: string): string {\n // if (Array.isArray(char)) {\n // \treturn char.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|');\n // }\n if (char) {\n const charsToEscape = '[\\\\^$.|?*+()';\n return char === ' ' ? '\\\\s' : charsToEscape.indexOf(char) >= 0 ? `\\\\${char}` : char;\n }\n return char;\n }\n\n private _shiftStep(maskExpression: string, cursor: number, inputLength: number) {\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor))\n ? inputLength\n : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n }\n\n protected _compareOrIncludes<T>(value: T, comparedValue: T | T[], excludedValue: T): boolean {\n return Array.isArray(comparedValue)\n ? comparedValue.filter((v) => v !== excludedValue).includes(value)\n : value === comparedValue;\n }\n\n private _validIP(valuesIP: string[]): boolean {\n return !(\n valuesIP.length === 4 &&\n !valuesIP.some((value: string, index: number) => {\n if (valuesIP.length !== index + 1) {\n return value === '' || Number(value) > 255;\n }\n return value === '' || Number(value.substring(0, 3)) > 255;\n })\n );\n }\n}\n","import { ElementRef, inject, Injectable, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { NGX_MASK_CONFIG, IConfig } from './ngx-mask.config';\nimport { NgxMaskApplierService } from './ngx-mask-applier.service';\n\n@Injectable()\nexport class NgxMaskService extends NgxMaskApplierService {\n public isNumberValue = false;\n\n public maskIsShown = '';\n\n public selStart: number | null = null;\n\n public selEnd: number | null = null;\n\n /**\n * Whether we are currently in writeValue function, in this case when applying the mask we don't want to trigger onChange function,\n * since writeValue should be a one way only process of writing the DOM value based on the Angular model value.\n */\n public writingValue = false;\n\n public maskChanged = false;\n\n public triggerOnMaskChange = false;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n public onChange = (_: any) => {};\n\n private readonly document = inject(DOCUMENT);\n\n protected override _config = inject<IConfig>(NGX_MASK_CONFIG);\n\n private readonly _elementRef = inject(ElementRef, { optional: true });\n\n private readonly _renderer = inject(Renderer2, { optional: true });\n\n // eslint-disable-next-line complexity\n public override applyMask(\n inputValue: string,\n maskExpression: string,\n position = 0,\n justPasted = false,\n backspaced = false,\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb: (...args: any[]) => any = () => {}\n ): string {\n if (!maskExpression) {\n return inputValue !== this.actualValue ? this.actualValue : inputValue;\n }\n this.maskIsShown = this.showMaskTyped ? this.showMaskInInput() : '';\n if (this.maskExpression === 'IP' && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || '#');\n }\n if (this.maskExpression === 'CPF_CNPJ' && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || '#');\n }\n if (!inputValue && this.showMaskTyped) {\n this.formControlResult(this.prefix);\n return this.prefix + this.maskIsShown;\n }\n const getSymbol: string =\n !!inputValue && typeof this.selStart === 'number'\n ? inputValue[this.selStart] ?? ''\n : '';\n let newInputValue = '';\n if (this.hiddenInput !== undefined && !this.writingValue) {\n let actualResult: string[] = this.actualValue.split('');\n // eslint-disable @typescript-eslint/no-unused-expressions\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n inputValue !== '' && actualResult.length\n ? typeof this.selStart === 'number' && typeof this.selEnd === 'number'\n ? inputValue.length > actualResult.length\n ? actualResult.splice(this.selStart, 0, getSymbol)\n : inputValue.length < actualResult.length\n ? actualResult.length - inputValue.length === 1\n ? actualResult.splice(this.selStart - 1, 1)\n : actualResult.splice(this.selStart, this.selEnd - this.selStart)\n : null\n : null\n : (actualResult = []);\n if (this.showMaskTyped) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.removeMask(inputValue);\n }\n // eslint-enable @typescript-eslint/no-unused-expressions\n newInputValue =\n this.actualValue.length && actualResult.length <= inputValue.length\n ? this.shiftTypedSymbols(actualResult.join(''))\n : inputValue;\n }\n\n if (this.showMaskTyped) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.removeMask(inputValue);\n }\n\n newInputValue = Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n\n const result: string = super.applyMask(\n newInputValue,\n maskExpression,\n position,\n justPasted,\n backspaced,\n cb\n );\n this.actualValue = this.getActualValue(result);\n // handle some separator implications:\n // a.) adjust decimalMarker default (. -> ,) if thousandSeparator is a dot\n if (this.thousandSeparator === '.' && this.decimalMarker === '.') {\n this.decimalMarker = ',';\n }\n\n // b) remove decimal marker from list of special characters to mask\n if (this.maskExpression.startsWith('separator') && this.dropSpecialCharacters === true) {\n this.specialCharacters = this.specialCharacters.filter(\n (item: string) =>\n !this._compareOrIncludes(item, this.decimalMarker, this.thousandSeparator) //item !== this.decimalMarker, // !\n );\n }\n this.formControlResult(result);\n if (!this.showMaskTyped) {\n if (this.hiddenInput) {\n return result && result.length\n ? this.hideInput(result, this.maskExpression)\n : result;\n }\n return result;\n }\n const resLen: number = result.length;\n const prefNmask: string = this.prefix + this.maskIsShown;\n\n if (this.maskExpression.includes('H')) {\n const countSkipedSymbol = this._numberSkipedSymbols(result);\n return result + prefNmask.slice(resLen + countSkipedSymbol);\n } else if (this.maskExpression === 'IP' || this.maskExpression === 'CPF_CNPJ') {\n return result + prefNmask;\n }\n return result + prefNmask.slice(resLen);\n }\n\n // get the number of characters that were shifted\n private _numberSkipedSymbols(value: string): number {\n const regex = /(^|\\D)(\\d\\D)/g;\n let match = regex.exec(value);\n let countSkipedSymbol = 0;\n while (match != null) {\n countSkipedSymbol += 1;\n match = regex.exec(value);\n }\n return countSkipedSymbol;\n }\n\n public applyValueChanges(\n position: number,\n justPasted: boolean,\n backspaced: boolean,\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb: (...args: any[]) => any = () => {}\n ): void {\n const formElement = this._elementRef?.nativeElement;\n if (!formElement) {\n return;\n }\n formElement.value = this.applyMask(\n formElement.value,\n this.maskExpression,\n position,\n justPasted,\n backspaced,\n cb\n );\n if (formElement === this._getActiveElement()) {\n return;\n }\n this.clearIfNotMatchFn();\n }\n\n public hideInput(inputValue: string, maskExpression: string): string {\n return inputValue\n .split('')\n .map((curr: string, index: number) => {\n if (\n this.patterns &&\n this.patterns[maskExpression[index] ?? ''] &&\n this.patterns[maskExpression[index] ?? '']?.symbol\n ) {\n return this.patterns[maskExpression[index] ?? '']?.symbol;\n }\n return curr;\n })\n .join('');\n }\n\n // this function is not necessary, it checks result against maskExpression\n public getActualValue(res: string): string {\n const compare: string[] = res.split('').filter((symbol: string, i: number) => {\n const maskChar = this.maskExpression[i] ?? '';\n return (\n this._checkSymbolMask(symbol, maskChar) ||\n (this.specialCharacters.includes(maskChar) && symbol === maskChar)\n );\n });\n if (compare.join('') === res) {\n return compare.join('');\n }\n return res;\n }\n\n public shiftTypedSymbols(inputValue: string): string {\n let symbolToReplace = '';\n const newInputValue: (string | undefined)[] =\n (inputValue &&\n inputValue.split('').map((currSymbol: string, index: number) => {\n if (\n this.specialCharacters.includes(inputValue[index + 1] ?? '') &&\n inputValue[index + 1] !== this.maskExpression[index + 1]\n ) {\n symbolToReplace = currSymbol;\n return inputValue[index + 1];\n }\n if (symbolToReplace.length) {\n const replaceSymbol: string = symbolToReplace;\n symbolToReplace = '';\n return replaceSymbol;\n }\n return currSymbol;\n })) ||\n [];\n return newInputValue.join('');\n }\n\n /**\n * Convert number value to string\n * 3.1415 -> '3.1415'\n * 1e-7 -> '0.0000001'\n */\n public numberToString(value: number | string): string {\n if (!value && value !== 0) {\n return String(value);\n }\n return Number(value).toLocaleString('fullwide', {\n useGrouping: false,\n maximumFractionDigits: 20,\n });\n }\n\n public showMaskInInput(inputVal?: string): string {\n if (this.showMaskTyped && !!this.shownMaskExpression) {\n if (this.maskExpression.length !== this.shownMaskExpression.length) {\n throw new Error('Mask expression must match mask placeholder length');\n } else {\n return this.shownMaskExpression;\n }\n } else if (this.showMaskTyped) {\n if (inputVal) {\n if (this.maskExpression === 'IP') {\n return this._checkForIp(inputVal);\n }\n if (this.maskExpression === 'CPF_CNPJ') {\n return this._checkForCpfCnpj(inputVal);\n }\n }\n return this.maskExpression.replace(/\\w/g, this.placeHolderCharacter);\n }\n return '';\n }\n\n public clearIfNotMatchFn(): void {\n const formElement = this._elementRef?.nativeElement;\n if (!formElement) {\n return;\n }\n if (\n this.clearIfNotMatch &&\n this.prefix.length + this.maskExpression.length + this.suffix.length !==\n formElement.value.replace(/_/g, '').length\n ) {\n this.formElementProperty = ['value', ''];\n this.applyMask(formElement.value, this.maskExpression);\n }\n }\n\n public set formElementProperty([name, value]: [string, string | boolean]) {\n if (!this._renderer || !this._elementRef) {\n return;\n }\n Promise.resolve().then(() =>\n this._renderer?.setProperty(this._elementRef?.nativeElement, name, value)\n );\n }\n\n public checkSpecialCharAmount(mask: string): number {\n const chars: string[] = mask\n .split('')\n .filter((item: string) => this._findSpecialChar(item));\n return chars.length;\n }\n\n public removeMask(inputValue: string): string {\n return this._removeMask(\n this._removeSuffix(this._removePrefix(inputValue)),\n this.specialCharacters.concat('_').concat(this.placeHolderCharacter)\n );\n }\n\n private _checkForIp(inputVal: string): string {\n if (inputVal === '#') {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n const arr: string[] = [];\n for (let i = 0; i < inputVal.length; i++) {\n const value = inputVal[i] ?? '';\n if (!value) {\n continue;\n }\n if (value.match('\\\\d')) {\n arr.push(value);\n }\n }\n if (arr.length <= 3) {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n if (arr.length > 3 && arr.length <= 6) {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n if (arr.length > 6 && arr.length <= 9) {\n return this.placeHolderCharacter;\n }\n if (arr.length > 9 && arr.length <= 12) {\n return '';\n }\n return '';\n }\n\n private _checkForCpfCnpj(inputVal: string): string {\n const cpf =\n `${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n const cnpj =\n `${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `/${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n\n if (inputVal === '#') {\n return cpf;\n }\n const arr: string[] = [];\n for (let i = 0; i < inputVal.length; i++) {\n const value = inputVal[i] ?? '';\n if (!value) {\n continue;\n }\n if (value.match('\\\\d')) {\n arr.push(value);\n }\n }\n if (arr.length <= 3) {\n return cpf.slice(arr.length, cpf.length);\n }\n if (arr.length > 3 && arr.length <= 6) {\n return cpf.slice(arr.length + 1, cpf.length);\n }\n if (arr.length > 6 && arr.length <= 9) {\n return cpf.slice(arr.length + 2, cpf.length);\n }\n if (arr.length > 9 && arr.length < 11) {\n return cpf.slice(arr.length + 3, cpf.length);\n }\n if (arr.length === 11) {\n return '';\n }\n if (arr.length === 12) {\n if (inputVal.length === 17) {\n return cnpj.slice(16, cnpj.length);\n }\n return cnpj.slice(15, cnpj.length);\n }\n if (arr.length > 12 && arr.length <= 14) {\n return cnpj.slice(arr.length + 4, cnpj.length);\n }\n return '';\n }\n\n /**\n * Recursively determine the current active element by navigating the Shadow DOM until the Active Element is found.\n */\n private _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n const shadowRootEl = document?.activeElement?.shadowRoot;\n if (!shadowRootEl?.activeElement) {\n return document.activeElement;\n } else {\n return this._getActiveElement(shadowRootEl);\n }\n }\n\n /**\n * Propogates the input value back to the Angular model by triggering the onChange function. It won't do this if writingValue\n * is true. If that is true it means we are currently in the writeValue function, which is supposed to only update the actual\n * DOM element based on the Angular model value. It should be a one way process, i.e. writeValue should not be modifying the Angular\n * model value too. Therefore, we don't trigger onChange in this scenario.\n * @param inputValue the current form input value\n */\n private formControlResult(inputValue: string): void {\n if (this.writingValue || (!this.triggerOnMaskChange && this.maskChanged)) {\n this.maskChanged = false;\n return;\n }\n if (Array.isArray(this.dropSpecialCharacters)) {\n this.onChange(\n this._toNumber(\n this._checkSymbols(\n this._removeMask(\n this._removeSuffix(this._removePrefix(inputValue)),\n this.dropSpecialCharacters\n )\n )\n )\n );\n } else if (this.dropSpecialCharacters) {\n this.onChange(\n this._toNumber(\n this._checkSymbols(this._removeSuffix(this._removePrefix(inputValue)))\n )\n );\n } else {\n this.onChange(this._toNumber(inputValue));\n }\n }\n\n private _toNumber(value: string | number | undefined | null) {\n if (!this.isNumberValue || value === '') {\n return value;\n }\n const num = Number(value);\n return Number.isNaN(num) ? value : num;\n }\n\n private _removeMask(value: string, specialCharactersForRemove: string[]): string {\n if (this.maskExpression.startsWith('percent') && value.includes('.')) {\n return value;\n }\n return value ? value.replace(this._regExpForRemove(specialCharactersForRemove), '') : value;\n }\n\n private _removePrefix(value: string): string {\n if (!this.prefix) {\n return value;\n }\n return value ? value.replace(this.prefix, '') : value;\n }\n\n private _removeSuffix(value: string): string {\n if (!this.suffix) {\n return value;\n }\n return value ? value.replace(this.suffix, '') : value;\n }\n\n private _retrieveSeparatorValue(result: string): string {\n const specialCharacters = Array.isArray(this.dropSpecialCharacters)\n ? this.specialCharacters.filter((v) => {\n return (this.dropSpecialCharacters as string[]).includes(v);\n })\n : this.specialCharacters;\n return this._removeMask(result, specialCharacters);\n }\n\n private _regExpForRemove(specialCharactersForRemove: string[]): RegExp {\n return new RegExp(\n specialCharactersForRemove.map((item: string) => `\\\\${item}`).join('|'),\n 'gi'\n );\n }\n\n private _replaceDecimalMarkerToDot(value: string): string {\n const markers = Array.isArray(this.decimalMarker)\n ? this.decimalMarker\n : [this.decimalMarker];\n\n return value.replace(this._regExpForRemove(markers), '.');\n }\n\n private _checkSymbols(result: string): string | number | undefined | null {\n if (result === '') {\n return result;\n }\n\n const separatorPrecision: number | null = this._retrieveSeparatorPrecision(\n this.maskExpression\n );\n const separatorValue: string = this._replaceDecimalMarkerToDot(\n this._retrieveSeparatorValue(result)\n );\n\n if (!this.isNumberValue) {\n return separatorValue;\n }\n if (separatorPrecision) {\n if (result === this.decimalMarker) {\n return null;\n }\n return this._checkPrecision(this.maskExpression, separatorValue);\n } else {\n return separatorValue;\n }\n }\n\n // TODO should think about helpers or separting decimal precision to own property\n private _retrieveSeparatorPrecision(maskExpretion: string): number | null {\n const matcher: RegExpMatchArray | null = maskExpretion.match(\n new RegExp(`^separator\\\\.([^d]*)`)\n );\n return matcher ? Number(matcher[1]) : null;\n }\n\n private _checkPrecision(separatorExpression: string, separatorValue: string): number | string {\n if (separatorExpression.indexOf('2') > 0) {\n return Number(separatorValue).toFixed(2);\n }\n return Number(separatorValue);\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, Provider } from '@angular/core';\n\nimport {\n NGX_MASK_CONFIG,\n INITIAL_CONFIG,\n initialConfig,\n NEW_CONFIG,\n optionsConfig,\n} from './ngx-mask.config';\nimport { NgxMaskService } from './ngx-mask.service';\n\n/**\n * @internal\n */\nfunction _configFactory(): optionsConfig {\n const initConfig = inject<optionsConfig>(INITIAL_CONFIG);\n const configValue = inject<optionsConfig | (() => optionsConfig)>(NEW_CONFIG);\n\n return configValue instanceof Function\n ? { ...initConfig, ...configValue() }\n : { ...initConfig, ...configValue };\n}\n\nexport function provideNgxMask(configValue?: optionsConfig | (() => optionsConfig)): Provider[] {\n return [\n {\n provide: NEW_CONFIG,\n useValue: configValue,\n },\n {\n provide: INITIAL_CONFIG,\n useValue: initialConfig,\n },\n {\n provide: NGX_MASK_CONFIG,\n useFactory: _configFactory,\n },\n NgxMaskService,\n ];\n}\n\nexport function provideEnvironmentNgxMask(\n configValue?: optionsConfig | (() => optionsConfig)\n): EnvironmentProviders {\n return makeEnvironmentProviders(provideNgxMask(configValue));\n}\n","import {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n FormControl,\n} from '@angular/forms';\nimport {\n Directive,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { CustomKeyboardEvent } from './custom-keyboard-event';\nimport { NGX_MASK_CONFIG, IConfig, timeMasks, withoutValidation } from './ngx-mask.config';\nimport { NgxMaskService } from './ngx-mask.service';\n\n@Directive({\n selector: 'input[mask], textarea[mask]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n NgxMaskService,\n ],\n exportAs: 'mask,ngxMask',\n})\nexport class NgxMaskDirective implements ControlValueAccessor, OnChanges, Validator {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('mask') public maskExpression: string | undefined | null = '';\n\n @Input() public specialCharacters: IConfig['specialCharacters'] = [];\n\n @Input() public patterns: IConfig['patterns'] = {};\n\n @Input() public prefix: IConfig['prefix'] = '';\n\n @Input() public suffix: IConfig['suffix'] = '';\n\n @Input() public thousandSeparator: IConfig['thousandSeparator'] = ' ';\n\n @Input() public decimalMarker: IConfig['decimalMarker'] = '.';\n\n @Input() public dropSpecialCharacters: IConfig['dropSpecialCharacters'] | null = null;\n\n @Input() public hiddenInput: IConfig['hiddenInput'] | null = null;\n\n @Input() public showMaskTyped: IConfig['showMaskTyped'] | null = null;\n\n @Input() public placeHolderCharacter: IConfig['placeHolderCharacter'] | null = null;\n\n @Input() public shownMaskExpression: IConfig['shownMaskExpression'] | null = null;\n\n @Input() public showTemplate: IConfig['showTemplate'] | null = null;\n\n @Input() public clearIfNotMatch: IConfig['clearIfNotMatch'] | null = null;\n\n @Input() public validation: IConfig['validation'] | null = null;\n\n @Input() public separatorLimit: IConfig['separatorLimit'] | null = null;\n\n @Input() public allowNegativeNumbers: IConfig['allowNegativeNumbers'] | null = null;\n\n @Input() public leadZeroDateTime: IConfig['leadZeroDateTime'] | null = null;\n\n @Input() public triggerOnMaskChange: IConfig['triggerOnMaskChange'] | null = null;\n\n @Output() public maskFilled: IConfig['maskFilled'] = new EventEmitter<void>();\n\n private _maskValue = '';\n\n private _inputValue!: string;\n\n private _position: number | null = null;\n\n private _start!: number;\n\n private _end!: number;\n\n private _code!: string;\n\n private _maskExpressionArray: string[] = [];\n\n private _justPasted = false;\n\n private readonly document = inject(DOCUMENT);\n\n public _maskService = inject(NgxMaskService, { self: true });\n\n protected _config = inject<IConfig>(NGX_MASK_CONFIG);\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n public onChange = (_: any) => {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onTouch = () => {};\n\n public ngOnChanges(changes: SimpleChanges): void {\n const {\n maskExpression,\n specialCharacters,\n patterns,\n prefix,\n suffix,\n thousandSeparator,\n decimalMarker,\n dropSpecialCharacters,\n hiddenInput,\n showMaskTyped,\n placeHolderCharacter,\n shownMaskExpression,\n showTemplate,\n clearIfNotMatch,\n validation,\n separatorLimit,\n allowNegativeNumbers,\n leadZeroDateTime,\n triggerOnMaskChange,\n } = changes;\n if (maskExpression) {\n if (\n maskExpression.currentValue !== maskExpression.previousValue &&\n !maskExpression.firstChange\n ) {\n this._maskService.maskChanged = true;\n }\n if (allowNegativeNumbers) {\n this._maskService.allowNegativeNumbers = allowNegativeNumbers.currentValue;\n if (this._maskService.allowNegativeNumbers) {\n this._maskService.specialCharacters =\n this._maskService.specialCharacters.filter((c: string) => c !== '-');\n }\n }\n if (maskExpression.currentValue && maskExpression.currentValue.split('||').length > 1) {\n this._maskExpressionArray = maskExpression.currentValue\n .split('||')\n .sort((a: string, b: string) => {\n return a.length - b.length;\n });\n this._setMask();\n } else {\n this._maskExpressionArray = [];\n this._maskValue = maskExpression.currentValue || '';\n this._maskService.maskExpression = this._maskValue;\n }\n }\n if (specialCharacters) {\n if (!specialCharacters.currentValue || !Array.isArray(specialCharacters.currentValue)) {\n return;\n } else {\n this._maskService.specialCharacters = specialCharacters.currentValue || [];\n }\n }\n // Only overwrite the mask available patterns if a pattern has actually been passed in\n if (patterns && patterns.currentValue) {\n this._maskService.patterns = patterns.currentValue;\n }\n if (prefix) {\n this._maskService.prefix = prefix.currentValue;\n }\n if (suffix) {\n this._maskService.suffix = suffix.currentValue;\n }\n if (thousandSeparator) {\n this._maskService.thousandSeparator = thousandSeparator.currentValue;\n }\n if (decimalMarker) {\n this._maskService.decimalMarker = decimalMarker.currentValue;\n }\n if (dropSpecialCharacters) {\n this._maskService.dropSpecialCharacters = dropSpecialCharacters.currentValue;\n }\n if (hiddenInput) {\n this._maskService.hiddenInput = hiddenInput.currentValue;\n }\n if (showMaskTyped) {\n this._maskService.showMaskTyped = showMaskTyped.currentValue;\n }\n if (placeHolderCharacter) {\n this._maskService.placeHolderCharacter = placeHolderCharacter.currentValue;\n }\n if (shownMaskExpression) {\n this._maskService.shownMaskExpression = shownMaskExpression.currentValue;\n }\n if (showTemplate) {\n this._maskService.showTemplate = showTemplate.currentValue;\n }\n if (clearIfNotMatch) {\n this._maskService.clearIfNotMatch = clearIfNotMatch.currentValue;\n }\n if (validation) {\n this._maskService.validation = validation.currentValue;\n }\n if (separatorLimit) {\n this._maskService.separatorLimit = separatorLimit.currentValue;\n }\n if (leadZeroDateTime) {\n this._maskService.leadZeroDateTime = leadZeroDateTime.currentValue;\n }\n if (triggerOnMaskChange) {\n this._maskService.triggerOnMaskChange = triggerOnMaskChange.currentValue;\n }\n\n this._applyMask();\n }\n\n // eslint-disable-next-line complexity\n public validate({ value }: FormControl): ValidationErrors | null {\n if (!this._maskService.validation || !this._maskValue) {\n return null;\n }\n if (this._maskService.ipError) {\n return this._createValidationError(value);\n }\n if (this._maskService.cpfCnpjError) {\n return this._createValidationError(value);\n }\n if (this._maskValue.startsWith('separator')) {\n return null;\n }\n if (withoutValidation.includes(this._maskValue)) {\n return null;\n }\n if (this._maskService.clearIfNotMatch) {\n return null;\n }\n if (timeMasks.includes(this._maskValue)) {\n return this._validateTime(value);\n }\n if (value && value.toString().length >= 1) {\n let counterOfOpt = 0;\n for (const key in this._maskService.patterns) {\n if (this._maskService.patterns[key]?.optional) {\n if (this._maskValue.indexOf(key) !== this._maskValue.lastIndexOf(key)) {\n const opt: string = this._maskValue\n .split('')\n .filter((i: string) => i === key)\n .join('');\n counterOfOpt += opt.length;\n } else if (this._maskValue.indexOf(key) !== -1) {\n counterOfOpt++;\n }\n if (\n this._maskValue.indexOf(key) !== -1 &&\n value.toString().length >= this._maskValue.indexOf(key)\n ) {\n return null;\n }\n if (counterOfOpt === this._maskValue.length) {\n return null;\n }\n }\n }\n if (\n this._maskValue.indexOf('{') === 1 &&\n value.toString().length ===\n this._maskValue.length +\n Number((this._maskValue.split('{')[1] ?? '').split('}')[0]) -\n 4\n ) {\n return null;\n }\n if (this._maskValue.indexOf('*') === 1 || this._maskValue.indexOf('?') === 1) {\n return null;\n } else if (\n (this._maskValue.indexOf('*') > 1 &&\n value.toString().length < this._maskValue.indexOf('*')) ||\n (this._maskValue.indexOf('?') > 1 &&\n value.toString().length < this._maskValue.indexOf('?')) ||\n this._maskValue.indexOf('{') === 1\n ) {\n return this._createValidationError(value);\n }\n if (this._maskValue.indexOf('*') === -1 || this._maskValue.indexOf('?') === -1) {\n const length: number = this._maskService.dropSpecialCharacters\n ? this._maskValue.length -\n this._maskService.checkSpecialCharAmount(this._maskValue) -\n counterOfOpt\n : this._maskValue.length - counterOfOpt;\n if (value.toString().length < length) {\n return this._createValidationError(value);\n }\n }\n }\n if (value) {\n this.maskFilled.emit();\n return null;\n }\n return null;\n }\n\n @HostListener('paste')\n public onPaste() {\n this._justPasted = true;\n }\n\n @HostListener('ngModelChange', ['$event'])\n public onModelChange(value: string | undefined | null | number): void {\n // on form reset we need to update the actualValue\n if (\n (value === '' || value === null || value === undefined) &&\n this._maskService.actualValue\n ) {\n this._maskService.actualValue = this._maskService.getActualValue('');\n }\n }\n\n @HostListener('input', ['$event'])\n public onInput(e: CustomKeyboardEvent): void {\n const el: HTMLInputElement = e.target as HTMLInputElement;\n this._inputValue = el.value;\n\n this._setMask();\n\n if (!this._maskValue) {\n this.onChange(el.value);\n return;\n }\n let position: number =\n el.selectionStart === 1\n ? (el.selectionStart as number) + this._maskService.prefix.length\n : (el.selectionStart as number);\n let caretShift = 0;\n let backspaceShift = false;\n this._maskService.applyValueChanges(\n position,\n this._justPasted,\n this._code === 'Backspace' || this._code === 'Delete',\n (shift: number, _backspaceShift: boolean) => {\n this._justPasted = false;\n caretShift = shift;\n backspaceShift = _backspaceShift;\n }\n );\n // only set the selection if the element is active\n if (this._getActiveElement() !== el) {\n return;\n }\n\n // update position after applyValueChanges to prevent cursor on wrong position when it has an array of maskExpression\n if (this._maskExpressionArray.length) {\n position =\n el.selectionStart === 1\n ? (el.selectionStart as number) + this._maskService.prefix.length\n : (el.selectionStart as number);\n }\n\n this._position =\n this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n let positionToApply: number = this._position\n ? this._inputValue.length + position + caretShift\n : position + (this._code === 'Backspace' && !backspaceShift ? 0 : caretShift);\n if (positionToApply > this._getActualInputLength()) {\n positionToApply = this._getActualInputLength();\n }\n if (positionToApply < 0) {\n positionToApply = 0;\n }\n el.setSelectionRange(positionToApply, positionToApply);\n this._position = null;\n }\n\n @HostListener('blur')\n public onBlur(): void {\n if (this._maskValue) {\n this._maskService.clearIfNotMatchFn();\n }\n this.onTouch();\n }\n\n @HostListener('click', ['$event'])\n public onClick(e: MouseEvent | CustomKeyboardEvent): void {\n if (!this._maskValue) {\n return;\n }\n const el: HTMLInputElement = e.target as HTMLInputElement;\n const posStart = 0;\n const posEnd = 0;\n if (\n el !== null &&\n el.selectionStart !== null &&\n el.selectionStart === el.selectionEnd &&\n el.selectionStart > this._maskService.prefix.length &&\n // eslint-disable-next-line\n (e as any).keyCode !== 38\n ) {\n if (this._maskService.showMaskTyped) {\n // We are showing the mask in the input\n this._maskService.maskIsShown = this._maskService.showMaskInInput();\n if (\n el.setSelectionRange &&\n this._maskService.prefix + this._maskService.maskIsShown === el.value\n ) {\n // the input ONLY contains the mask, so position the cursor at the start\n el.focus();\n el.setSelectionRange(posStart, posEnd);\n } else {\n // the input contains some characters already\n if (el.selectionStart > this._maskService.actualValue.length) {\n // if the user clicked beyond our value's length, position the cursor at the end of our value\n el.setSelectionRange(\n this._maskService.actualValue.length,\n this._maskService.actualValue.length\n );\n }\n }\n }\n }\n const nextValue: string | null =\n el &&\n (!el.value || el.value === this._maskService.prefix\n ? this._maskService.prefix + this._maskService.maskIsShown\n : el.value);\n /** Fix of cursor position jumping to end in most browsers no matter where cursor is inserted onFocus */\n if (el && el.value !== nextValue) {\n el.value = nextValue;\n }\n\n /** fix of cursor position with prefix when mouse click occur */\n if (\n el &&\n ((el.selectionStart as number) || (el.selectionEnd as number)) <=\n this._maskService.prefix.length\n ) {\n el.selectionStart = this._maskService.prefix.length;\n return;\n }\n /** select only inserted text */\n if (el && (el.selectionEnd as number) > this._getActualInputLength()) {\n el.selectionEnd = this._getActualInputLength();\n }\n }\n\n // eslint-disable-next-line complexity\n @HostListener('keydown', ['$event'])\n public onKeyDown(e: CustomKeyboardEvent): void {\n if (!this._maskValue) {\n return;\n }\n this._code = e.code ? e.code : e.key;\n const el: HTMLInputElement = e.target as HTMLInputElement;\n this._inputValue = el.value;\n\n this._setMask();\n\n if (e.keyCode === 38) {\n e.preventDefault();\n }\n if (e.keyCode === 37 || e.keyCode === 8 || e.keyCode === 46) {\n if (e.keyCode === 8 && el.value.length === 0) {\n el.selectionStart = el.selectionEnd;\n }\n if (e.keyCode === 8 && (el.selectionStart as number) !== 0) {\n // If specialChars is false, (shouldn't ever happen) then set to the defaults\n this.specialCharacters = this.specialCharacters?.length\n ? this.specialCharacters\n : this._config.specialCharacters;\n if (this.prefix.length > 1 && (el.selectionStart as number) <= this.prefix.length) {\n el.setSelectionRange(this.prefix.length, el.selectionEnd);\n } else {\n if (\n this._inputValue.length !== (el.selectionStart as number) &&\n (el.selectionStart as number) !== 1\n ) {\n while (\n this.specialCharacters.includes(\n (\n this._inputValue[(el.selectionStart as number) - 1] ?? ''\n ).toString()\n ) &&\n ((this.prefix.length >= 1 &&\n (el.selectionStart as number) > this.prefix.length) ||\n this.prefix.length === 0)\n ) {\n el.setSelectionRange(\n (el.selectionStart as number) - 1,\n el.selectionEnd\n );\n }\n }\n }\n }\n this.checkSelectionOnDeletion(el);\n if (\n this._maskService.prefix.length &&\n (el.selectionStart as number) <= this._maskService.prefix.length &&\n (el.selectionEnd as number) <= this._maskService.prefix.length\n ) {\n e.preventDefault();\n }\n const cursorStart: number | null = el.selectionStart;\n if (\n e.keyCode === 8 &&\n !el.readOnly &&\n cursorStart === 0 &&\n el.selectionEnd === el.value.length &&\n el.value.length !== 0\n ) {\n this._position = this._maskService.prefix ? this._maskService.prefix.length : 0;\n this._maskService.applyMask(\n this._maskService.prefix,\n this._maskService.maskExpression,\n this._position\n );\n }\n }\n if (\n !!this.suffix &&\n this.suffix.length > 1 &&\n this._inputValue.length - this.suffix.length < (el.selectionStart as number)\n ) {\n el.setSelectionRange(\n this._inputValue.length - this.suffix.length,\n this._inputValue.length\n );\n } else if (\n (e.keyCode === 65 && e.ctrlKey) ||\n (e.keyCode === 65 && e.metaKey) // Cmd + A (Mac)\n ) {\n el.setSelectionRange(0, this._getActualInputLength());\n e.preventDefault();\n }\n this._maskService.selStart = el.selectionStart;\n this._maskService.selEnd = el.selectionEnd;\n }\n\n /** It writes the value in the input */\n public async writeValue(\n inputValue: string | number | { value: string | number; disable?: boolean }\n ): Promise<void> {\n if (typeof inputValue === 'object' && inputValue !== null && 'value' in inputValue) {\n if ('disable' in inputValue) {\n this.setDisabledState(Boolean(inputValue.disable));\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.value;\n }\n\n if (typeof inputValue === 'number' || this._maskValue.startsWith('separator')) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._maskService.numberToString(inputValue);\n if (!Array.isArray(this.decimalMarker)) {\n const localeDecimalMarker = this._currentLocaleDecimalMarker();\n // eslint-disable-next-line no-param-reassign\n inputValue =\n this.decimalMarker !== localeDecimalMarker\n ? inputValue.replace(localeDecimalMarker, this.decimalMarker)\n : inputValue;\n }\n this._maskService.isNumberValue = true;\n }\n\n if (typeof inputValue !== 'string') {\n // eslint-disable-next-line no-param-reassign\n inputValue = '';\n }\n\n this._inputValue = inputValue;\n this._setMask();\n\n if (\n (inputValue && this._maskService.maskExpression) ||\n (this._maskService.maskExpression &&\n (this._maskService.prefix || this._maskService.showMaskTyped))\n ) {\n // Let the service we know we are writing value so that triggering onChange function won't happen during applyMask\n this._maskService.writingValue = true;\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(inputValue, this._maskService.maskExpression),\n ];\n // Let the service know we've finished writing value\n this._maskService.writingValue = false;\n } else {\n this._maskService.formElementProperty = ['value', inputValue];\n }\n this._inputValue = inputValue;\n }\n\n public registerOnChange(fn: typeof this.onChange): void {\n this._maskService.onChange = this.onChange = fn;\n }\n\n public registerOnTouched(fn: typeof this.onTouch): void {\n this.onTouch = fn;\n }\n\n private _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n const shadowRootEl = document?.activeElement?.shadowRoot;\n if (!shadowRootEl?.activeElement) {\n return document.activeElement;\n } else {\n return this._getActiveElement(shadowRootEl);\n }\n }\n\n public checkSelectionOnDeletion(el: HTMLInputElement): void {\n el.selectionStart = Math.min(\n Math.max(this.prefix.length, el.selectionStart as number),\n this._inputValue.length - this.suffix.length\n );\n el.selectionEnd = Math.min(\n Math.max(this.prefix.length, el.selectionEnd as number),\n this._inputValue.length - this.suffix.length\n );\n }\n\n /** It disables the input element */\n public setDisabledState(isDisabled: boolean): void {\n this._maskService.formElementProperty = ['disabled', isDisabled];\n }\n\n private _repeatPatternSymbols(maskExp: string): string {\n return (\n (maskExp.match(/{[0-9]+}/) &&\n maskExp\n .split('')\n .reduce((accum: string, currVal: string, index: number): string => {\n this._start = currVal === '{' ? index : this._start;\n\n if (currVal !== '}') {\n return this._maskService._findSpecialChar(currVal)\n ? accum + currVal\n : accum;\n }\n this._end = index;\n const repeatNumber = Number(maskExp.slice(this._start + 1, this._end));\n const replaceWith: string = new Array(repeatNumber + 1).join(\n maskExp[this._start - 1]\n );\n return accum + replaceWith;\n }, '')) ||\n maskExp\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _applyMask(): any {\n this._maskService.maskExpression = this._repeatPatternSymbols(this._maskValue || '');\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(this._inputValue, this._maskService.maskExpression),\n ];\n }\n\n private _validateTime(value: string): ValidationErrors | null {\n const rowMaskLen: number = this._maskValue\n .split('')\n .filter((s: string) => s !== ':').length;\n if (!value) {\n return null; // Don't validate empty values to allow for optional form control\n }\n\n if (\n (+(value[value.length - 1] ?? -1) === 0 && value.length < rowMaskLen) ||\n value.length <= rowMaskLen - 2\n ) {\n return this._createValidationError(value);\n }\n\n return null;\n }\n\n private _getActualInputLength() {\n return (\n this._maskService.actualValue.length ||\n this._maskService.actualValue.length + this._maskService.prefix.length\n );\n }\n\n private _createValidationError(actualValue: string): ValidationErrors {\n return {\n mask: {\n requiredMask: this._maskValue,\n actualValue,\n },\n };\n }\n\n private _setMask() {\n if (this._maskExpressionArray.length > 0) {\n this._maskExpressionArray.some((mask): boolean | void => {\n const test =\n this._maskService.removeMask(this._inputValue)?.length <=\n this._maskService.removeMask(mask)?.length;\n if (this._inputValue && test) {\n this._maskValue = mask;\n this.maskExpression = mask;\n this._maskService.maskExpression = mask;\n return test;\n } else {\n const expression =\n this._maskExpressionArray[this._maskExpressionArray.length - 1] ?? '';\n this._maskValue =\n this.maskExpression =\n this._maskService.maskExpression =\n expression;\n }\n });\n }\n }\n\n private _currentLocaleDecimalMarker(): string {\n return (1.1).toLocaleString().substring(1, 2);\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\n\nimport { IConfig } from './ngx-mask.config';\nimport { NgxMaskService } from './ngx-mask.service';\n\n@Pipe({\n name: 'mask',\n pure: true,\n standalone: true,\n})\nexport class NgxMaskPipe implements PipeTransform {\n private readonly defaultOptions: Partial<IConfig> = {};\n\n private readonly _maskService = inject(NgxMaskService);\n\n public transform(\n value: string | number,\n mask: string,\n { patterns, ...config }: Partial<IConfig> = {} as Partial<IConfig>\n ): string {\n const currentConfig = {\n maskExpression: mask,\n ...this.defaultOptions,\n ...config,\n patterns: {\n ...this._maskService.patterns,\n ...patterns,\n },\n };\n Object.entries(currentConfig).forEach(([key, value]) => {\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._maskService as any)[key] = value;\n });\n return this._maskService.applyMask(`${value}`, mask);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-mask",
3
- "version": "16.0.1",
3
+ "version": "16.0.2",
4
4
  "description": "awesome ngx mask",
5
5
  "keywords": [
6
6
  "ng2-mask",