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); };