{
  "version": 3,
  "sources": ["../../../../src/core/managers/reference-manager.ts"],
  "sourcesContent": [
    "/**\n * ReferenceManager - Manages tracked references for external elements\n * \n * Allows consumers to create stable references to ranges that automatically\n * update when sheets/workbooks are renamed and become invalid when deleted.\n */\n\nimport type { RangeAddress, TrackedReference } from \"../types.mjs\";\nimport type { ReferenceManagerSnapshot } from \"../engine-snapshot.mjs\";\n\nexport class ReferenceManager {\n  private references: Map<string, TrackedReference>;\n\n  constructor() {\n    this.references = new Map();\n  }\n\n  /**\n   * Create a new tracked reference\n   * Returns UUID for the reference\n   */\n  createRef(address: RangeAddress): string {\n    const uuid = crypto.randomUUID();\n    this.references.set(uuid, {\n      id: uuid,\n      address: {\n        workbookName: address.workbookName,\n        sheetName: address.sheetName,\n        range: address.range,\n      },\n      isValid: true,\n    });\n    return uuid;\n  }\n\n  /**\n   * Get the current address for a reference\n   * Returns undefined if reference doesn't exist or is invalid\n   */\n  getRefAddress(refId: string): RangeAddress | undefined {\n    const ref = this.references.get(refId);\n    if (!ref || !ref.isValid) {\n      return undefined;\n    }\n    return {\n      workbookName: ref.address.workbookName,\n      sheetName: ref.address.sheetName,\n      range: ref.address.range,\n    };\n  }\n\n  /**\n   * Delete a reference\n   * Returns true if reference was deleted, false if it didn't exist\n   */\n  deleteRef(refId: string): boolean {\n    return this.references.delete(refId);\n  }\n\n  /**\n   * Get all invalid reference IDs\n   */\n  getInvalidRefs(): string[] {\n    const invalid: string[] = [];\n    for (const [id, ref] of this.references) {\n      if (!ref.isValid) {\n        invalid.push(id);\n      }\n    }\n    return invalid;\n  }\n\n  /**\n   * Update references when sheet is renamed\n   */\n  updateSheetName(\n    workbookName: string,\n    oldSheetName: string,\n    newSheetName: string\n  ): void {\n    for (const ref of this.references.values()) {\n      if (\n        ref.address.workbookName === workbookName &&\n        ref.address.sheetName === oldSheetName\n      ) {\n        ref.address.sheetName = newSheetName;\n      }\n    }\n  }\n\n  /**\n   * Update references when workbook is renamed\n   */\n  updateWorkbookName(oldWorkbookName: string, newWorkbookName: string): void {\n    for (const ref of this.references.values()) {\n      if (ref.address.workbookName === oldWorkbookName) {\n        ref.address.workbookName = newWorkbookName;\n      }\n    }\n  }\n\n  /**\n   * Mark references as invalid when sheet is removed\n   */\n  invalidateSheet(workbookName: string, sheetName: string): void {\n    for (const ref of this.references.values()) {\n      if (\n        ref.address.workbookName === workbookName &&\n        ref.address.sheetName === sheetName\n      ) {\n        ref.isValid = false;\n      }\n    }\n  }\n\n  /**\n   * Mark references as invalid when workbook is removed\n   */\n  invalidateWorkbook(workbookName: string): void {\n    for (const ref of this.references.values()) {\n      if (ref.address.workbookName === workbookName) {\n        ref.isValid = false;\n      }\n    }\n  }\n\n  /**\n   * Get all references for serialization\n   */\n  getAllReferences(): Map<string, TrackedReference> {\n    return new Map(this.references);\n  }\n\n  /**\n   * Restore references from serialization\n   */\n  resetReferences(refs: Map<string, TrackedReference>): void {\n    this.references.clear();\n    for (const [id, ref] of refs) {\n      this.references.set(id, {\n        id: ref.id,\n        address: {\n          workbookName: ref.address.workbookName,\n          sheetName: ref.address.sheetName,\n          range: ref.address.range,\n        },\n        isValid: ref.isValid,\n      });\n    }\n  }\n\n  toSnapshot(): ReferenceManagerSnapshot {\n    return this.getAllReferences();\n  }\n\n  restoreFromSnapshot(snapshot: ReferenceManagerSnapshot): void {\n    this.resetReferences(snapshot);\n  }\n}\n"
  ],
  "mappings": ";AAUO,MAAM,iBAAiB;AAAA,EACpB;AAAA,EAER,WAAW,GAAG;AAAA,IACZ,KAAK,aAAa,IAAI;AAAA;AAAA,EAOxB,SAAS,CAAC,SAA+B;AAAA,IACvC,MAAM,OAAO,OAAO,WAAW;AAAA,IAC/B,KAAK,WAAW,IAAI,MAAM;AAAA,MACxB,IAAI;AAAA,MACJ,SAAS;AAAA,QACP,cAAc,QAAQ;AAAA,QACtB,WAAW,QAAQ;AAAA,QACnB,OAAO,QAAQ;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAAA,IACD,OAAO;AAAA;AAAA,EAOT,aAAa,CAAC,OAAyC;AAAA,IACrD,MAAM,MAAM,KAAK,WAAW,IAAI,KAAK;AAAA,IACrC,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS;AAAA,MACxB;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,cAAc,IAAI,QAAQ;AAAA,MAC1B,WAAW,IAAI,QAAQ;AAAA,MACvB,OAAO,IAAI,QAAQ;AAAA,IACrB;AAAA;AAAA,EAOF,SAAS,CAAC,OAAwB;AAAA,IAChC,OAAO,KAAK,WAAW,OAAO,KAAK;AAAA;AAAA,EAMrC,cAAc,GAAa;AAAA,IACzB,MAAM,UAAoB,CAAC;AAAA,IAC3B,YAAY,IAAI,QAAQ,KAAK,YAAY;AAAA,MACvC,IAAI,CAAC,IAAI,SAAS;AAAA,QAChB,QAAQ,KAAK,EAAE;AAAA,MACjB;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAMT,eAAe,CACb,cACA,cACA,cACM;AAAA,IACN,WAAW,OAAO,KAAK,WAAW,OAAO,GAAG;AAAA,MAC1C,IACE,IAAI,QAAQ,iBAAiB,gBAC7B,IAAI,QAAQ,cAAc,cAC1B;AAAA,QACA,IAAI,QAAQ,YAAY;AAAA,MAC1B;AAAA,IACF;AAAA;AAAA,EAMF,kBAAkB,CAAC,iBAAyB,iBAA+B;AAAA,IACzE,WAAW,OAAO,KAAK,WAAW,OAAO,GAAG;AAAA,MAC1C,IAAI,IAAI,QAAQ,iBAAiB,iBAAiB;AAAA,QAChD,IAAI,QAAQ,eAAe;AAAA,MAC7B;AAAA,IACF;AAAA;AAAA,EAMF,eAAe,CAAC,cAAsB,WAAyB;AAAA,IAC7D,WAAW,OAAO,KAAK,WAAW,OAAO,GAAG;AAAA,MAC1C,IACE,IAAI,QAAQ,iBAAiB,gBAC7B,IAAI,QAAQ,cAAc,WAC1B;AAAA,QACA,IAAI,UAAU;AAAA,MAChB;AAAA,IACF;AAAA;AAAA,EAMF,kBAAkB,CAAC,cAA4B;AAAA,IAC7C,WAAW,OAAO,KAAK,WAAW,OAAO,GAAG;AAAA,MAC1C,IAAI,IAAI,QAAQ,iBAAiB,cAAc;AAAA,QAC7C,IAAI,UAAU;AAAA,MAChB;AAAA,IACF;AAAA;AAAA,EAMF,gBAAgB,GAAkC;AAAA,IAChD,OAAO,IAAI,IAAI,KAAK,UAAU;AAAA;AAAA,EAMhC,eAAe,CAAC,MAA2C;AAAA,IACzD,KAAK,WAAW,MAAM;AAAA,IACtB,YAAY,IAAI,QAAQ,MAAM;AAAA,MAC5B,KAAK,WAAW,IAAI,IAAI;AAAA,QACtB,IAAI,IAAI;AAAA,QACR,SAAS;AAAA,UACP,cAAc,IAAI,QAAQ;AAAA,UAC1B,WAAW,IAAI,QAAQ;AAAA,UACvB,OAAO,IAAI,QAAQ;AAAA,QACrB;AAAA,QACA,SAAS,IAAI;AAAA,MACf,CAAC;AAAA,IACH;AAAA;AAAA,EAGF,UAAU,GAA6B;AAAA,IACrC,OAAO,KAAK,iBAAiB;AAAA;AAAA,EAG/B,mBAAmB,CAAC,UAA0C;AAAA,IAC5D,KAAK,gBAAgB,QAAQ;AAAA;AAEjC;",
  "debugId": "662E1DA7C4CF1F8064756E2164756E21",
  "names": []
}