{"version":3,"file":"string-pool.cjs","sources":["../../../src/utils/string-pool.ts"],"sourcesContent":["/**\n * String pooling utility for memory optimization\n * Deduplicates strings to reduce memory usage without data loss\n */\n\nexport class StringPool {\n  private pool: Map<string, string>;\n  private stats: {\n    totalStrings: number;\n    uniqueStrings: number;\n    memorySaved: number;\n  };\n\n  constructor() {\n    this.pool = new Map();\n    this.stats = {\n      totalStrings: 0,\n      uniqueStrings: 0,\n      memorySaved: 0,\n    };\n  }\n\n  /**\n   * Intern a string - returns the canonical instance\n   * If the string already exists in the pool, returns that instance\n   * Otherwise, adds it to the pool and returns it\n   */\n  intern(str: string): string {\n    this.stats.totalStrings++;\n    \n    const existing = this.pool.get(str);\n    if (existing !== undefined) {\n      // String already in pool - memory saved!\n      this.stats.memorySaved += str.length * 2; // Approximate bytes (UTF-16)\n      return existing;\n    }\n    \n    // New string - add to pool\n    this.pool.set(str, str);\n    this.stats.uniqueStrings++;\n    return str;\n  }\n\n  /**\n   * Intern an array of strings\n   */\n  internArray(strings: string[]): string[] {\n    return strings.map(s => this.intern(s));\n  }\n\n  /**\n   * Intern a Set of strings\n   */\n  internSet(strings: Set<string>): Set<string> {\n    const result = new Set<string>();\n    for (const str of strings) {\n      result.add(this.intern(str));\n    }\n    return result;\n  }\n\n  /**\n   * Get pooling statistics\n   */\n  getStats() {\n    return {\n      ...this.stats,\n      deduplicationRate: this.stats.totalStrings > 0 \n        ? ((this.stats.totalStrings - this.stats.uniqueStrings) / this.stats.totalStrings * 100).toFixed(2) + '%'\n        : '0%',\n      memorySavedMB: (this.stats.memorySaved / 1024 / 1024).toFixed(2) + ' MB',\n    };\n  }\n\n  /**\n   * Clear the pool\n   */\n  clear() {\n    this.pool.clear();\n    this.stats = {\n      totalStrings: 0,\n      uniqueStrings: 0,\n      memorySaved: 0,\n    };\n  }\n\n  /**\n   * Get pool size\n   */\n  size(): number {\n    return this.pool.size;\n  }\n}\n\n/**\n * Global string pool instance for index building\n */\nexport const globalStringPool = new StringPool();\n"],"names":[],"mappings":";;AAKO,MAAM,WAAW;AAAA,EACd;AAAA,EACA;AAAA,EAMR,cAAc;AACZ,SAAK,2BAAW,IAAA;AAChB,SAAK,QAAQ;AAAA,MACX,cAAc;AAAA,MACd,eAAe;AAAA,MACf,aAAa;AAAA,IAAA;AAAA,EAEjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,KAAqB;AAC1B,SAAK,MAAM;AAEX,UAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAClC,QAAI,aAAa,QAAW;AAE1B,WAAK,MAAM,eAAe,IAAI,SAAS;AACvC,aAAO;AAAA,IACT;AAGA,SAAK,KAAK,IAAI,KAAK,GAAG;AACtB,SAAK,MAAM;AACX,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,SAA6B;AACvC,WAAO,QAAQ,IAAI,CAAA,MAAK,KAAK,OAAO,CAAC,CAAC;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,SAAmC;AAC3C,UAAM,6BAAa,IAAA;AACnB,eAAW,OAAO,SAAS;AACzB,aAAO,IAAI,KAAK,OAAO,GAAG,CAAC;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACT,WAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR,mBAAmB,KAAK,MAAM,eAAe,MACvC,KAAK,MAAM,eAAe,KAAK,MAAM,iBAAiB,KAAK,MAAM,eAAe,KAAK,QAAQ,CAAC,IAAI,MACpG;AAAA,MACJ,gBAAgB,KAAK,MAAM,cAAc,OAAO,MAAM,QAAQ,CAAC,IAAI;AAAA,IAAA;AAAA,EAEvE;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,SAAK,KAAK,MAAA;AACV,SAAK,QAAQ;AAAA,MACX,cAAc;AAAA,MACd,eAAe;AAAA,MACf,aAAa;AAAA,IAAA;AAAA,EAEjB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe;AACb,WAAO,KAAK,KAAK;AAAA,EACnB;AACF;;"}