cypress memory leak code example

Example: cypress memory leak

function StringMap() {
    
      this.stringToIndex = new Map();
      this.indexToString = [];
  
      this.addString = function(str) {
  
      // If this string is known, just return its index
      var index = this.stringToIndex.get(str);
      if (index !== undefined) {
          return index;
      }
      
      // This is a new string. Add it to both maps.
      index = this.indexToString.length;
      this.indexToString.push(str);
      this.stringToIndex.set(str, index);
      return index;
  };
  
  this.getString = function(index) {
      return this.indexToString[index];
  };
  
  this.addStrings = function(strArray) {
      var indices = [];
      for (var i=0; i<strArray.length; i++) {
          var s = strArray[i];
          var index = this.addString(s);
          indices.push(index);
      }
      return indices;
  };
  
  this.getStrings = function(indices) {
      var strArray = [];
      for (var i=0; i<indices.length; i++) {
          var index = indices[i];
          var str   = this.getString(index);
          strArray.push(str);
      }
      return strArray;
  };
};
window.stringMap = new StringMap();

// Adds an array of style strings to the dictionary.
// Returns an array of indices into the global string dictionary.
window.packStyles = function(styles) {
    return window.stringMap.addStrings(styles);
};

// Gets an array of indices into the string dictionary pointing to style strings.
// Returns an array containing the original strings.
window.unpackStyles = function(styles) {
  
    // Return identiy if styles is undefined or already unpacked
    var isPacked = styles && (typeof styles[0] == "number");
    if (!isPacked) {
      return styles;
    }
    return window.stringMap.getStrings(styles);
};