@sumaris-net/ngx-components 18.22.26 → 18.22.27

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.
package/doc/changelog.md CHANGED
@@ -2051,3 +2051,6 @@ enh: Environment: add useHash property to configure Angular router to use hash U
2051
2051
 
2052
2052
  # 18.22.26
2053
2053
  - fix(mat-autocomplete-field) Avoid template error, when an item is null (when accessing the property 'classList')
2054
+
2055
+ # 18.22.27
2056
+ - fix(regexps) Revert changes in SPECIAL_CHARACTERS_REGEXP - reintroduce the last '/g' as string.replace(RegExp) is not stateful
@@ -2,7 +2,7 @@ export class RegExpUtils {
2
2
  static _cachedSearchRegexps = {};
3
3
  static _cachedSearchTexts = [];
4
4
  static MAX_CACHE_SIZE = 100;
5
- static SPECIAL_CHARACTERS_REGEXP = /[.\[\](){}\\$^|+*?]/;
5
+ static SPECIAL_CHARACTERS_REGEXP = /[.\[\](){}\\$^|+*?]/g;
6
6
  static SPECIAL_CHARACTERS_REPLACEMENT_MAP = {
7
7
  // Escape some characters
8
8
  '.': '[.]', // Escape point
@@ -61,26 +61,26 @@ export class RegExpUtils {
61
61
  return null;
62
62
  // Use cached regexp if exists
63
63
  const cacheKey = searchText + '|' + flags;
64
- const cachedRegexp = this._cachedSearchRegexps[cacheKey];
64
+ const cachedRegexp = RegExpUtils._cachedSearchRegexps[cacheKey];
65
65
  if (cachedRegexp)
66
66
  return cachedRegexp;
67
- const searchRegexpText = searchText.replace(this.SPECIAL_CHARACTERS_REGEXP, (match) => this.SPECIAL_CHARACTERS_REPLACEMENT_MAP[match] || match);
67
+ const searchRegexpText = searchText.replace(RegExpUtils.SPECIAL_CHARACTERS_REGEXP, (match) => RegExpUtils.SPECIAL_CHARACTERS_REPLACEMENT_MAP[match] || match);
68
68
  // DEBUG
69
69
  //console.debug(`[regexp-utils] Computing new regexp '${searchRegexpText}' from searchText '${searchText}'`);
70
70
  const regexp = new RegExp(`[ ]*${searchRegexpText}`, flags);
71
71
  // If cache is full: remove older cache element
72
- if (this._cachedSearchTexts.length >= this.MAX_CACHE_SIZE) {
72
+ if (RegExpUtils._cachedSearchTexts.length >= RegExpUtils.MAX_CACHE_SIZE) {
73
73
  // DEBUG
74
74
  //console.debug('[regexp-utils] Removing older cached regexp');
75
75
  // Clear half cache's elements
76
- while (this._cachedSearchTexts.length > this.MAX_CACHE_SIZE / 2) {
77
- const cacheKeyToEvict = this._cachedSearchTexts.shift();
78
- delete this._cachedSearchRegexps[cacheKeyToEvict];
76
+ while (RegExpUtils._cachedSearchTexts.length > RegExpUtils.MAX_CACHE_SIZE / 2) {
77
+ const cacheKeyToEvict = RegExpUtils._cachedSearchTexts.shift();
78
+ delete RegExpUtils._cachedSearchRegexps[cacheKeyToEvict];
79
79
  }
80
80
  }
81
81
  // Add to static cache
82
- this._cachedSearchRegexps[cacheKey] = regexp;
83
- this._cachedSearchTexts.push(cacheKey);
82
+ RegExpUtils._cachedSearchRegexps[cacheKey] = regexp;
83
+ RegExpUtils._cachedSearchTexts.push(cacheKey);
84
84
  return regexp;
85
85
  }
86
86
  static match(input, regexp) {
@@ -100,4 +100,4 @@ export class RegExpUtils {
100
100
  return (input && (input.includes('*') || input.includes('?'))) || false;
101
101
  }
102
102
  }
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXhwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3JlZ2V4cHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFnQixXQUFXO0lBQ3ZCLE1BQU0sQ0FBQyxvQkFBb0IsR0FBOEIsRUFBRSxDQUFDO0lBQzVELE1BQU0sQ0FBQyxrQkFBa0IsR0FBYSxFQUFFLENBQUM7SUFFekMsTUFBTSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFDNUIsTUFBTSxDQUFDLHlCQUF5QixHQUFHLHFCQUFxQixDQUFDO0lBQ3pELE1BQU0sQ0FBQyxrQ0FBa0MsR0FBRztRQUNsRCx5QkFBeUI7UUFDekIsR0FBRyxFQUFFLEtBQUssRUFBRSxlQUFlO1FBQzNCLEdBQUcsRUFBRSxLQUFLLEVBQUUscUJBQXFCO1FBQ2pDLEdBQUcsRUFBRSxLQUFLLEVBQUUscUJBQXFCO1FBQ2pDLEdBQUcsRUFBRSxLQUFLLEVBQUUseUNBQXlDO1FBQ3JELEdBQUcsRUFBRSxLQUFLLEVBQUUseUNBQXlDO1FBQ3JELEdBQUcsRUFBRSxLQUFLLEVBQUUsa0NBQWtDO1FBQzlDLEdBQUcsRUFBRSxLQUFLLEVBQUUsa0NBQWtDO1FBQzlDLElBQUksRUFBRSxNQUFNLEVBQUUsMEJBQTBCO1FBQ3hDLENBQUMsRUFBRSxLQUFLLEVBQUUscUJBQXFCO1FBQy9CLEdBQUcsRUFBRSxLQUFLLEVBQUUsZUFBZTtRQUMzQixHQUFHLEVBQUUsS0FBSyxFQUFFLDRCQUE0QjtRQUN4QyxHQUFHLEVBQUUsS0FBSyxFQUFFLGNBQWM7UUFFMUIsMENBQTBDO1FBQzFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsd0JBQXdCO1FBQ2xDLEdBQUcsRUFBRSxJQUFJLEVBQUUseUJBQXlCO0tBQ3JDLENBQUM7SUFFRjs7Ozs7Ozs7O09BU0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQWtCLEVBQUUsT0FBMkIsRUFBRSxJQUFJLEVBQUUsSUFB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Q3pELENBQUM7SUFFRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsS0FBYTtRQUN2QyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZWdFeHBVdGlscyB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWRTZWFyY2hSZWdleHBzOiB7IFtrZXk6IHN0cmluZ106IFJlZ0V4cCB9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWRTZWFyY2hUZXh0czogc3RyaW5nW10gPSBbXTtcblxuICBwcml2YXRlIHN0YXRpYyBNQVhfQ0FDSEVfU0laRSA9IDEwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgU1BFQ0lBTF9DSEFSQUNURVJTX1JFR0VYUCA9IC9bLlxcW1xcXSgpe31cXFxcJF58Kyo/XS87XG4gIHByaXZhdGUgc3RhdGljIFNQRUNJQUxfQ0hBUkFDVEVSU19SRVBMQUNFTUVOVF9NQVAgPSB7XG4gICAgLy8gRXNjYXBlIHNvbWUgY2hhcmFjdGVyc1xuICAgICcuJzogJ1suXScsIC8vIEVzY2FwZSBwb2ludFxuICAgICcoJzogJ1xcXFwoJywgLy8gRXNjYXBlIHBhcmVudGhlc2lzXG4gICAgJyknOiAnXFxcXCknLCAvLyBFc2NhcGUgcGFyZW50aGVzaXNcbiAgICAnWyc6ICdcXFxcWycsIC8vIEVzY2FwZSBjaGFyYWN0ZXIgY2xhc3Mgb3BlbmluZyBicmFja2V0XG4gICAgJ10nOiAnXFxcXF0nLCAvLyBFc2NhcGUgY2hhcmFjdGVyIGNsYXNzIGNsb3NpbmcgYnJhY2tldFxuICAgICd7JzogJ1xcXFx7JywgLy8gRXNjYXBlIHF1YW50aWZpZXIgb3BlbmluZyBicmFjZVxuICAgICd9JzogJ1xcXFx9JywgLy8gRXNjYXBlIHF1YW50aWZpZXIgY2xvc2luZyBicmFjZVxuICAgICdcXFxcJzogJ1xcXFxcXFxcJywgLy8gRXNjYXBlIGJhY2tzbGFzaCBpdHNlbGZcbiAgICAkOiAnXFxcXCQnLCAvLyBFc2NhcGUgZG9sbGFyIHNpZ25cbiAgICAnXic6ICdcXFxcXicsIC8vIEVzY2FwZSBjYXJldFxuICAgICd8JzogJ1xcXFx8JywgLy8gRXNjYXBlIHBpcGUgKGFsdGVybmF0aW9uKVxuICAgICcrJzogJ1xcXFwrJywgLy8gRXNjYXBlIHBsdXNcblxuICAgIC8vIFRyYW5zZm9ybSB3aWxkY2FyZCBjaGFyYWN0ZXJzIHRvIHJlZ2V4cFxuICAgICc/JzogJy4nLCAvLyBFeGFjdGx5IG9uZSBjaGFyYWN0ZXJcbiAgICAnKic6ICcuKicsIC8vIFplcm8gb3IgbW9yZSBjaGFyYWN0ZXJcbiAgfTtcblxuICAvKipcbiAgICogQ2xlYW5zIHRoZSBwcm92aWRlZCBzZWFyY2ggdGV4dCBieSB0cmltbWluZyB3aGl0ZXNwYWNlIGFuZCByZW1vdmluZyBvciBjb25kZW5zaW5nXG4gICAqIHdpbGRjYXJkIGNoYXJhY3RlcnMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBvcHRpb25zLlxuICAgKiAoZS5nLiAnYSoqJyBiZWNvbWVzICdhJywgJyonIGJlY29tZXMgJycsIGV0Yy4pXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXh0IC0gVGhlIHNlYXJjaCB0ZXh0IHRvIGJlIGNsZWFuZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgY2xlYW5pbmcgdGhlIHNlYXJjaCB0ZXh0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmFueVNlYXJjaF0gLSBJZiB0cnVlLCB0aGUgc2VhcmNoIHRleHQgaXMgY2xlYW5lZCBmb3IgYW55IG1hdGNoLiBJZiBmYWxzZSwgc2VhcmNoIGFzIGEgcHJlZml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gLSBUaGUgY2xlYW5lZCBzZWFyY2ggdGV4dC5cbiAgICovXG4gIHN0YXRpYyBjbGVhblNlYXJjaFRleHQoc2VhcmNoVGV4dDogc3RyaW5nLCBvcHRzOiB7IHRyaW0/OiBib29sZWFuIH0gPSB7IHRyaW06IHRydWUgfSk6IHN0cmluZyB7XG4gICAgaWYgKCFzZWFyY2hUZXh0Py5sZW5ndGgpIHJldHVybiBzZWFyY2hUZXh0O1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoYFtyZWdleHAtdXRpbHNdIENsZWFuaW5nIHNlYXJjaFRleHQgJyR7c2VhcmNoVGV4dH0nYCk7XG5cbiAgICBzZWFyY2hUZXh0ID0gc2VhcmNoVGV4dC5yZXBsYWNlKC9bKl17Mix9L2csICcqJyk7IC8vIFJlcGxhY2UgbWFueSAnKicgaW50byBvbmx5IG9uZVxuXG4gICAgLy8gVHJpbSB3aGl0ZXNwYWNlXG4gICAgaWYgKG9wdHM/LnRyaW0gIT09IGZhbHNlKSB7XG4gICAgICBzZWFyY2hUZXh0ID0gc2VhcmNoVGV4dC50cmltKCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHdpbGRjYXJkIGNoYXJhY3RlcnNcbiAgICBzZWFyY2hUZXh0ID0gc2VhcmNoVGV4dC5yZXBsYWNlKC9eWypdKyQvZywgJycpO1xuXG4gICAgLy8gQ2xlYW4gYW55IG1hdGNoIGV4cHJlc3Npb25cbiAgICBpZiAoc2VhcmNoVGV4dCA9PT0gJyonKSByZXR1cm4gJyc7XG5cbiAgICByZXR1cm4gc2VhcmNoVGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21waWxlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBwcm92aWRlZCBzZWFyY2ggdGV4dCwgdXNpbmcgYSBzdGF0aWMgY2FjaGUgdG8gc3RvcmVcbiAgICogcHJldmlvdXNseSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBmYXN0ZXIgcmV0cmlldmFsLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGV4dCAtIFRoZSB0ZXh0IHRvIGNvbXBpbGUgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICogQHBhcmFtIGZsYWdzXG4gICAqIEByZXR1cm4ge1JlZ0V4cH0gLSBUaGUgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uLlxuICAgKi9cbiAgc3RhdGljIGNvbXBpbGVTZWFyY2hSZWdleHAoc2VhcmNoVGV4dDogc3RyaW5nLCBmbGFncyA9ICdnaScpOiBSZWdFeHAge1xuICAgIGlmICghc2VhcmNoVGV4dD8ubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIFVzZSBjYWNoZWQgcmVnZXhwIGlmIGV4aXN0c1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gc2VhcmNoVGV4dCArICd8JyArIGZsYWdzO1xuICAgIGNvbnN0IGNhY2hlZFJlZ2V4cCA9IHRoaXMuX2NhY2hlZFNlYXJjaFJlZ2V4cHNbY2FjaGVLZXldO1xuICAgIGlmIChjYWNoZWRSZWdleHApIHJldHVybiBjYWNoZWRSZWdleHA7XG5cbiAgICBjb25zdCBzZWFyY2hSZWdleHBUZXh0ID0gc2VhcmNoVGV4dC5yZXBsYWNlKHRoaXMuU1BFQ0lBTF9DSEFSQUNURVJTX1JFR0VYUCwgKG1hdGNoKSA9PiB0aGlzLlNQRUNJQUxfQ0hBUkFDVEVSU19SRVBMQUNFTUVOVF9NQVBbbWF0Y2hdIHx8IG1hdGNoKTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKGBbcmVnZXhwLXV0aWxzXSBDb21wdXRpbmcgbmV3IHJlZ2V4cCAnJHtzZWFyY2hSZWdleHBUZXh0fScgZnJvbSBzZWFyY2hUZXh0ICcke3NlYXJjaFRleHR9J2ApO1xuXG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgWyBdKiR7c2VhcmNoUmVnZXhwVGV4dH1gLCBmbGFncyk7XG5cbiAgICAvLyBJZiBjYWNoZSBpcyBmdWxsOiByZW1vdmUgb2xkZXIgY2FjaGUgZWxlbWVudFxuICAgIGlmICh0aGlzLl9jYWNoZWRTZWFyY2hUZXh0cy5sZW5ndGggPj0gdGhpcy5NQVhfQ0FDSEVfU0laRSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnW3JlZ2V4cC11dGlsc10gUmVtb3Zpbmcgb2xkZXIgY2FjaGVkIHJlZ2V4cCcpO1xuXG4gICAgICAvLyBDbGVhciBoYWxmIGNhY2hlJ3MgZWxlbWVudHNcbiAgICAgIHdoaWxlICh0aGlzLl9jYWNoZWRTZWFyY2hUZXh0cy5sZW5ndGggPiB0aGlzLk1BWF9DQUNIRV9TSVpFIC8gMikge1xuICAgICAgICBjb25zdCBjYWNoZUtleVRvRXZpY3QgPSB0aGlzLl9jYWNoZWRTZWFyY2hUZXh0cy5zaGlmdCgpO1xuICAgICAgICBkZWxldGUgdGhpcy5fY2FjaGVkU2VhcmNoUmVnZXhwc1tjYWNoZUtleVRvRXZpY3RdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCB0byBzdGF0aWMgY2FjaGVcbiAgICB0aGlzLl9jYWNoZWRTZWFyY2hSZWdleHBzW2NhY2hlS2V5XSA9IHJlZ2V4cDtcbiAgICB0aGlzLl9jYWNoZWRTZWFyY2hUZXh0cy5wdXNoKGNhY2hlS2V5KTtcblxuICAgIHJldHVybiByZWdleHA7XG4gIH1cblxuICBzdGF0aWMgbWF0Y2goaW5wdXQ6IHN0cmluZywgcmVnZXhwOiBzdHJpbmcgfCBSZWdFeHApOiBib29sZWFuIHtcbiAgICBpZiAoIWlucHV0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHJlZ2V4cCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuIHJlZ2V4cC50ZXN0KGlucHV0KTtcbiAgICB9XG4gICAgLy8gU2kgYydlc3QgdW5lIHN0cmluZywgb24gZ2FyZGUgbWF0Y2ggcXVpIGZlcmEgbGEgY29udmVyc2lvbiBpbXBsaWNpdGVcbiAgICAvLyBvdSBvbiBwb3VycmFpdCBmYWlyZSBuZXcgUmVnRXhwKHJlZ2V4cCkudGVzdChpbnB1dClcbiAgICByZXR1cm4gISFpbnB1dC5tYXRjaChyZWdleHApO1xuICB9XG5cbiAgc3RhdGljIG1hdGNoVXBwZXJDYXNlKGlucHV0OiBzdHJpbmcsIHJlZ2V4cDogc3RyaW5nIHwgUmVnRXhwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFJlZ0V4cFV0aWxzLm1hdGNoKGlucHV0Py50b1VwcGVyQ2FzZSgpLCByZWdleHApO1xuICB9XG5cbiAgc3RhdGljIGhhc1dpbGRjYXJkQ2hhcmFjdGVyKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGlucHV0ICYmIChpbnB1dC5pbmNsdWRlcygnKicpIHx8IGlucHV0LmluY2x1ZGVzKCc/JykpKSB8fCBmYWxzZTtcbiAgfVxufVxuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXhwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3JlZ2V4cHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFnQixXQUFXO0lBQ3ZCLE1BQU0sQ0FBQyxvQkFBb0IsR0FBOEIsRUFBRSxDQUFDO0lBQzVELE1BQU0sQ0FBQyxrQkFBa0IsR0FBYSxFQUFFLENBQUM7SUFFekMsTUFBTSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFDNUIsTUFBTSxDQUFDLHlCQUF5QixHQUFHLHNCQUFzQixDQUFDO0lBQzFELE1BQU0sQ0FBQyxrQ0FBa0MsR0FBRztRQUNsRCx5QkFBeUI7UUFDekIsR0FBRyxFQUFFLEtBQUssRUFBRSxlQUFlO1FBQzNCLEdBQUcsRUFBRSxLQUFLLEVBQUUscUJBQXFCO1FBQ2pDLEdBQUcsRUFBRSxLQUFLLEVBQUUscUJBQXFCO1FBQ2pDLEdBQUcsRUFBRSxLQUFLLEVBQUUseUNBQXlDO1FBQ3JELEdBQUcsRUFBRSxLQUFLLEVBQUUseUNBQXlDO1FBQ3JELEdBQUcsRUFBRSxLQUFLLEVBQUUsa0NBQWtDO1FBQzlDLEdBQUcsRUFBRSxLQUFLLEVBQUUsa0NBQWtDO1FBQzlDLElBQUksRUFBRSxNQUFNLEVBQUUsMEJBQTBCO1FBQ3hDLENBQUMsRUFBRSxLQUFLLEVBQUUscUJBQXFCO1FBQy9CLEdBQUcsRUFBRSxLQUFLLEVBQUUsZUFBZTtRQUMzQixHQUFHLEVBQUUsS0FBSyxFQUFFLDRCQUE0QjtRQUN4QyxHQUFHLEVBQUUsS0FBSyxFQUFFLGNBQWM7UUFFMUIsMENBQTBDO1FBQzFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsd0JBQXdCO1FBQ2xDLEdBQUcsRUFBRSxJQUFJLEVBQUUseUJBQXlCO0tBQ3JDLENBQUM7SUFFRjs7Ozs7Ozs7O09BU0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQWtCLEVBQUUsT0FBMkIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO1FBQ2xGLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTTtZQUFFLE9BQU8sVUFBVSxDQUFDO1FBRTNDLFFBQVE7UUFDUixzRUFBc0U7UUFFdEUsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsaUNBQWlDO1FBRW5GLGtCQUFrQjtRQUNsQixJQUFJLElBQUksRUFBRSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDekIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvQyw2QkFBNkI7UUFDN0IsSUFBSSxVQUFVLEtBQUssR0FBRztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRWxDLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQWtCLEVBQUUsS0FBSyxHQUFHLElBQUk7UUFDekQsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFckMsOEJBQThCO1FBQzlCLE1BQU0sUUFBUSxHQUFHLFVBQVUsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQzFDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRSxJQUFJLFlBQVk7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUV0QyxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7UUFFOUosUUFBUTtRQUNSLDZHQUE2RztRQUU3RyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLGdCQUFnQixFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFNUQsK0NBQStDO1FBQy9DLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEUsUUFBUTtZQUNSLCtEQUErRDtZQUUvRCw4QkFBOEI7WUFDOUIsT0FBTyxXQUFXLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlFLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDL0QsT0FBTyxXQUFXLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsV0FBVyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNwRCxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQWEsRUFBRSxNQUF1QjtRQUNqRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3pCLElBQUksTUFBTSxZQUFZLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsdUVBQXVFO1FBQ3ZFLHNEQUFzRDtRQUN0RCxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWEsRUFBRSxNQUF1QjtRQUMxRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsS0FBYTtRQUN2QyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZWdFeHBVdGlscyB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWRTZWFyY2hSZWdleHBzOiB7IFtrZXk6IHN0cmluZ106IFJlZ0V4cCB9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWRTZWFyY2hUZXh0czogc3RyaW5nW10gPSBbXTtcblxuICBwcml2YXRlIHN0YXRpYyBNQVhfQ0FDSEVfU0laRSA9IDEwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgU1BFQ0lBTF9DSEFSQUNURVJTX1JFR0VYUCA9IC9bLlxcW1xcXSgpe31cXFxcJF58Kyo/XS9nO1xuICBwcml2YXRlIHN0YXRpYyBTUEVDSUFMX0NIQVJBQ1RFUlNfUkVQTEFDRU1FTlRfTUFQID0ge1xuICAgIC8vIEVzY2FwZSBzb21lIGNoYXJhY3RlcnNcbiAgICAnLic6ICdbLl0nLCAvLyBFc2NhcGUgcG9pbnRcbiAgICAnKCc6ICdcXFxcKCcsIC8vIEVzY2FwZSBwYXJlbnRoZXNpc1xuICAgICcpJzogJ1xcXFwpJywgLy8gRXNjYXBlIHBhcmVudGhlc2lzXG4gICAgJ1snOiAnXFxcXFsnLCAvLyBFc2NhcGUgY2hhcmFjdGVyIGNsYXNzIG9wZW5pbmcgYnJhY2tldFxuICAgICddJzogJ1xcXFxdJywgLy8gRXNjYXBlIGNoYXJhY3RlciBjbGFzcyBjbG9zaW5nIGJyYWNrZXRcbiAgICAneyc6ICdcXFxceycsIC8vIEVzY2FwZSBxdWFudGlmaWVyIG9wZW5pbmcgYnJhY2VcbiAgICAnfSc6ICdcXFxcfScsIC8vIEVzY2FwZSBxdWFudGlmaWVyIGNsb3NpbmcgYnJhY2VcbiAgICAnXFxcXCc6ICdcXFxcXFxcXCcsIC8vIEVzY2FwZSBiYWNrc2xhc2ggaXRzZWxmXG4gICAgJDogJ1xcXFwkJywgLy8gRXNjYXBlIGRvbGxhciBzaWduXG4gICAgJ14nOiAnXFxcXF4nLCAvLyBFc2NhcGUgY2FyZXRcbiAgICAnfCc6ICdcXFxcfCcsIC8vIEVzY2FwZSBwaXBlIChhbHRlcm5hdGlvbilcbiAgICAnKyc6ICdcXFxcKycsIC8vIEVzY2FwZSBwbHVzXG5cbiAgICAvLyBUcmFuc2Zvcm0gd2lsZGNhcmQgY2hhcmFjdGVycyB0byByZWdleHBcbiAgICAnPyc6ICcuJywgLy8gRXhhY3RseSBvbmUgY2hhcmFjdGVyXG4gICAgJyonOiAnLionLCAvLyBaZXJvIG9yIG1vcmUgY2hhcmFjdGVyXG4gIH07XG5cbiAgLyoqXG4gICAqIENsZWFucyB0aGUgcHJvdmlkZWQgc2VhcmNoIHRleHQgYnkgdHJpbW1pbmcgd2hpdGVzcGFjZSBhbmQgcmVtb3Zpbmcgb3IgY29uZGVuc2luZ1xuICAgKiB3aWxkY2FyZCBjaGFyYWN0ZXJzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy5cbiAgICogKGUuZy4gJ2EqKicgYmVjb21lcyAnYScsICcqJyBiZWNvbWVzICcnLCBldGMuKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGV4dCAtIFRoZSBzZWFyY2ggdGV4dCB0byBiZSBjbGVhbmVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIGNsZWFuaW5nIHRoZSBzZWFyY2ggdGV4dC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5hbnlTZWFyY2hdIC0gSWYgdHJ1ZSwgdGhlIHNlYXJjaCB0ZXh0IGlzIGNsZWFuZWQgZm9yIGFueSBtYXRjaC4gSWYgZmFsc2UsIHNlYXJjaCBhcyBhIHByZWZpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IC0gVGhlIGNsZWFuZWQgc2VhcmNoIHRleHQuXG4gICAqL1xuICBzdGF0aWMgY2xlYW5TZWFyY2hUZXh0KHNlYXJjaFRleHQ6IHN0cmluZywgb3B0czogeyB0cmltPzogYm9vbGVhbiB9ID0geyB0cmltOiB0cnVlIH0pOiBzdHJpbmcge1xuICAgIGlmICghc2VhcmNoVGV4dD8ubGVuZ3RoKSByZXR1cm4gc2VhcmNoVGV4dDtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKGBbcmVnZXhwLXV0aWxzXSBDbGVhbmluZyBzZWFyY2hUZXh0ICcke3NlYXJjaFRleHR9J2ApO1xuXG4gICAgc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQucmVwbGFjZSgvWypdezIsfS9nLCAnKicpOyAvLyBSZXBsYWNlIG1hbnkgJyonIGludG8gb25seSBvbmVcblxuICAgIC8vIFRyaW0gd2hpdGVzcGFjZVxuICAgIGlmIChvcHRzPy50cmltICE9PSBmYWxzZSkge1xuICAgICAgc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQudHJpbSgpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB3aWxkY2FyZCBjaGFyYWN0ZXJzXG4gICAgc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQucmVwbGFjZSgvXlsqXSskL2csICcnKTtcblxuICAgIC8vIENsZWFuIGFueSBtYXRjaCBleHByZXNzaW9uXG4gICAgaWYgKHNlYXJjaFRleHQgPT09ICcqJykgcmV0dXJuICcnO1xuXG4gICAgcmV0dXJuIHNlYXJjaFRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGlsZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgcHJvdmlkZWQgc2VhcmNoIHRleHQsIHVzaW5nIGEgc3RhdGljIGNhY2hlIHRvIHN0b3JlXG4gICAqIHByZXZpb3VzbHkgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucyBmb3IgZmFzdGVyIHJldHJpZXZhbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRleHQgLSBUaGUgdGV4dCB0byBjb21waWxlIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gICAqIEBwYXJhbSBmbGFnc1xuICAgKiBAcmV0dXJuIHtSZWdFeHB9IC0gVGhlIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICovXG4gIHN0YXRpYyBjb21waWxlU2VhcmNoUmVnZXhwKHNlYXJjaFRleHQ6IHN0cmluZywgZmxhZ3MgPSAnZ2knKTogUmVnRXhwIHtcbiAgICBpZiAoIXNlYXJjaFRleHQ/Lmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBVc2UgY2FjaGVkIHJlZ2V4cCBpZiBleGlzdHNcbiAgICBjb25zdCBjYWNoZUtleSA9IHNlYXJjaFRleHQgKyAnfCcgKyBmbGFncztcbiAgICBjb25zdCBjYWNoZWRSZWdleHAgPSBSZWdFeHBVdGlscy5fY2FjaGVkU2VhcmNoUmVnZXhwc1tjYWNoZUtleV07XG4gICAgaWYgKGNhY2hlZFJlZ2V4cCkgcmV0dXJuIGNhY2hlZFJlZ2V4cDtcblxuICAgIGNvbnN0IHNlYXJjaFJlZ2V4cFRleHQgPSBzZWFyY2hUZXh0LnJlcGxhY2UoUmVnRXhwVXRpbHMuU1BFQ0lBTF9DSEFSQUNURVJTX1JFR0VYUCwgKG1hdGNoKSA9PiBSZWdFeHBVdGlscy5TUEVDSUFMX0NIQVJBQ1RFUlNfUkVQTEFDRU1FTlRfTUFQW21hdGNoXSB8fCBtYXRjaCk7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhgW3JlZ2V4cC11dGlsc10gQ29tcHV0aW5nIG5ldyByZWdleHAgJyR7c2VhcmNoUmVnZXhwVGV4dH0nIGZyb20gc2VhcmNoVGV4dCAnJHtzZWFyY2hUZXh0fSdgKTtcblxuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoYFsgXSoke3NlYXJjaFJlZ2V4cFRleHR9YCwgZmxhZ3MpO1xuXG4gICAgLy8gSWYgY2FjaGUgaXMgZnVsbDogcmVtb3ZlIG9sZGVyIGNhY2hlIGVsZW1lbnRcbiAgICBpZiAoUmVnRXhwVXRpbHMuX2NhY2hlZFNlYXJjaFRleHRzLmxlbmd0aCA+PSBSZWdFeHBVdGlscy5NQVhfQ0FDSEVfU0laRSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnW3JlZ2V4cC11dGlsc10gUmVtb3Zpbmcgb2xkZXIgY2FjaGVkIHJlZ2V4cCcpO1xuXG4gICAgICAvLyBDbGVhciBoYWxmIGNhY2hlJ3MgZWxlbWVudHNcbiAgICAgIHdoaWxlIChSZWdFeHBVdGlscy5fY2FjaGVkU2VhcmNoVGV4dHMubGVuZ3RoID4gUmVnRXhwVXRpbHMuTUFYX0NBQ0hFX1NJWkUgLyAyKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5VG9FdmljdCA9IFJlZ0V4cFV0aWxzLl9jYWNoZWRTZWFyY2hUZXh0cy5zaGlmdCgpO1xuICAgICAgICBkZWxldGUgUmVnRXhwVXRpbHMuX2NhY2hlZFNlYXJjaFJlZ2V4cHNbY2FjaGVLZXlUb0V2aWN0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgdG8gc3RhdGljIGNhY2hlXG4gICAgUmVnRXhwVXRpbHMuX2NhY2hlZFNlYXJjaFJlZ2V4cHNbY2FjaGVLZXldID0gcmVnZXhwO1xuICAgIFJlZ0V4cFV0aWxzLl9jYWNoZWRTZWFyY2hUZXh0cy5wdXNoKGNhY2hlS2V5KTtcblxuICAgIHJldHVybiByZWdleHA7XG4gIH1cblxuICBzdGF0aWMgbWF0Y2goaW5wdXQ6IHN0cmluZywgcmVnZXhwOiBzdHJpbmcgfCBSZWdFeHApOiBib29sZWFuIHtcbiAgICBpZiAoIWlucHV0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHJlZ2V4cCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuIHJlZ2V4cC50ZXN0KGlucHV0KTtcbiAgICB9XG4gICAgLy8gU2kgYydlc3QgdW5lIHN0cmluZywgb24gZ2FyZGUgbWF0Y2ggcXVpIGZlcmEgbGEgY29udmVyc2lvbiBpbXBsaWNpdGVcbiAgICAvLyBvdSBvbiBwb3VycmFpdCBmYWlyZSBuZXcgUmVnRXhwKHJlZ2V4cCkudGVzdChpbnB1dClcbiAgICByZXR1cm4gISFpbnB1dC5tYXRjaChyZWdleHApO1xuICB9XG5cbiAgc3RhdGljIG1hdGNoVXBwZXJDYXNlKGlucHV0OiBzdHJpbmcsIHJlZ2V4cDogc3RyaW5nIHwgUmVnRXhwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFJlZ0V4cFV0aWxzLm1hdGNoKGlucHV0Py50b1VwcGVyQ2FzZSgpLCByZWdleHApO1xuICB9XG5cbiAgc3RhdGljIGhhc1dpbGRjYXJkQ2hhcmFjdGVyKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGlucHV0ICYmIChpbnB1dC5pbmNsdWRlcygnKicpIHx8IGlucHV0LmluY2x1ZGVzKCc/JykpKSB8fCBmYWxzZTtcbiAgfVxufVxuIl19
@@ -247,7 +247,7 @@ class RegExpUtils {
247
247
  static _cachedSearchRegexps = {};
248
248
  static _cachedSearchTexts = [];
249
249
  static MAX_CACHE_SIZE = 100;
250
- static SPECIAL_CHARACTERS_REGEXP = /[.\[\](){}\\$^|+*?]/;
250
+ static SPECIAL_CHARACTERS_REGEXP = /[.\[\](){}\\$^|+*?]/g;
251
251
  static SPECIAL_CHARACTERS_REPLACEMENT_MAP = {
252
252
  // Escape some characters
253
253
  '.': '[.]', // Escape point
@@ -306,26 +306,26 @@ class RegExpUtils {
306
306
  return null;
307
307
  // Use cached regexp if exists
308
308
  const cacheKey = searchText + '|' + flags;
309
- const cachedRegexp = this._cachedSearchRegexps[cacheKey];
309
+ const cachedRegexp = RegExpUtils._cachedSearchRegexps[cacheKey];
310
310
  if (cachedRegexp)
311
311
  return cachedRegexp;
312
- const searchRegexpText = searchText.replace(this.SPECIAL_CHARACTERS_REGEXP, (match) => this.SPECIAL_CHARACTERS_REPLACEMENT_MAP[match] || match);
312
+ const searchRegexpText = searchText.replace(RegExpUtils.SPECIAL_CHARACTERS_REGEXP, (match) => RegExpUtils.SPECIAL_CHARACTERS_REPLACEMENT_MAP[match] || match);
313
313
  // DEBUG
314
314
  //console.debug(`[regexp-utils] Computing new regexp '${searchRegexpText}' from searchText '${searchText}'`);
315
315
  const regexp = new RegExp(`[ ]*${searchRegexpText}`, flags);
316
316
  // If cache is full: remove older cache element
317
- if (this._cachedSearchTexts.length >= this.MAX_CACHE_SIZE) {
317
+ if (RegExpUtils._cachedSearchTexts.length >= RegExpUtils.MAX_CACHE_SIZE) {
318
318
  // DEBUG
319
319
  //console.debug('[regexp-utils] Removing older cached regexp');
320
320
  // Clear half cache's elements
321
- while (this._cachedSearchTexts.length > this.MAX_CACHE_SIZE / 2) {
322
- const cacheKeyToEvict = this._cachedSearchTexts.shift();
323
- delete this._cachedSearchRegexps[cacheKeyToEvict];
321
+ while (RegExpUtils._cachedSearchTexts.length > RegExpUtils.MAX_CACHE_SIZE / 2) {
322
+ const cacheKeyToEvict = RegExpUtils._cachedSearchTexts.shift();
323
+ delete RegExpUtils._cachedSearchRegexps[cacheKeyToEvict];
324
324
  }
325
325
  }
326
326
  // Add to static cache
327
- this._cachedSearchRegexps[cacheKey] = regexp;
328
- this._cachedSearchTexts.push(cacheKey);
327
+ RegExpUtils._cachedSearchRegexps[cacheKey] = regexp;
328
+ RegExpUtils._cachedSearchTexts.push(cacheKey);
329
329
  return regexp;
330
330
  }
331
331
  static match(input, regexp) {