{
  "version": 3,
  "sources": ["../../../src/core/workbook-renamer.ts"],
  "sourcesContent": [
    "/**\n * Workbook renamer utility for updating cross-workbook references in formulas\n */\n\nimport { parseFormula } from \"../parser/parser.cjs\";\nimport { astToString } from \"../parser/formatter.cjs\";\nimport { transformAST } from \"./ast-traverser.cjs\";\nimport type { ASTNode } from \"../parser/ast.cjs\";\n\n/**\n * Renames workbook references in a formula string\n * @param formula The formula string (without the leading =)\n * @param oldWorkbookName The old workbook name to replace\n * @param newWorkbookName The new workbook name to use\n * @returns The updated formula string\n */\nexport function renameWorkbookInFormula(options: {\n  formula: string;\n  oldWorkbookName: string;\n  newWorkbookName: string;\n}): string {\n  const { formula, oldWorkbookName, newWorkbookName } = options;\n  try {\n    const ast = parseFormula(formula);\n    \n    const updatedAst = transformAST(ast, (node) => {\n      // Handle cross-workbook references (e.g., [MyWorkbook]Sheet1!A1)\n      if (node.type === \"reference\" && node.workbookName === oldWorkbookName) {\n        return {\n          ...node,\n          workbookName: newWorkbookName,\n        };\n      }\n      \n      // Handle range references with workbook names (e.g., [MyWorkbook]Sheet1!A1:B2)\n      if (node.type === \"range\" && node.workbookName === oldWorkbookName) {\n        return {\n          ...node,\n          workbookName: newWorkbookName,\n        };\n      }\n      \n      // Handle named expressions with workbook names\n      if (node.type === \"named-expression\" && node.workbookName === oldWorkbookName) {\n        return {\n          ...node,\n          workbookName: newWorkbookName,\n        };\n      }\n      \n      // Handle structured references with workbook names (e.g., [MyWorkbook]!Table1[Column1])\n      if (node.type === \"structured-reference\" && node.workbookName === oldWorkbookName) {\n        return {\n          ...node,\n          workbookName: newWorkbookName,\n        };\n      }\n      \n      // Handle 3D ranges with workbook names (e.g., [MyWorkbook]Sheet1:Sheet3!A1:C5)\n      if (node.type === \"3d-range\" && node.workbookName === oldWorkbookName) {\n        return {\n          ...node,\n          workbookName: newWorkbookName,\n        };\n      }\n      \n      return node;\n    });\n    \n    return astToString(updatedAst);\n  } catch (error) {\n    // If parsing fails, return the original formula\n    return formula;\n  }\n}\n\n/**\n * Checks if a formula references a specific workbook\n * @param formula The formula string (without the leading =)\n * @param workbookName The workbook name to check for\n * @returns True if the formula references the workbook\n */\nexport function formulaReferencesWorkbook(formula: string, workbookName: string): boolean {\n  try {\n    const referencedWorkbooks = getReferencedWorkbookNames(formula);\n    return referencedWorkbooks.includes(workbookName);\n  } catch (error) {\n    // If parsing fails, assume no reference\n    return false;\n  }\n}\n\n/**\n * Gets all workbook names referenced in a formula\n * @param formula The formula string (without the leading =)\n * @returns Array of unique workbook names referenced in the formula\n */\nexport function getReferencedWorkbookNames(formula: string): string[] {\n  try {\n    const ast = parseFormula(formula);\n    const workbookNames = new Set<string>();\n\n    transformAST(ast, (node) => {\n      // Handle cross-workbook references\n      if ((node.type === \"reference\" || \n           node.type === \"range\" || \n           node.type === \"named-expression\" || \n           node.type === \"structured-reference\" ||\n           node.type === \"3d-range\") && \n          node.workbookName) {\n        workbookNames.add(node.workbookName);\n      }\n      \n      return node;\n    });\n\n    return Array.from(workbookNames);\n  } catch (error) {\n    // If parsing fails, return empty array\n    return [];\n  }\n}\n"
  ],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAI6B,IAA7B;AAC4B,IAA5B;AAC6B,IAA7B;AAUO,SAAS,uBAAuB,CAAC,SAI7B;AAAA,EACT,QAAQ,SAAS,iBAAiB,oBAAoB;AAAA,EACtD,IAAI;AAAA,IACF,MAAM,MAAM,2BAAa,OAAO;AAAA,IAEhC,MAAM,aAAa,kCAAa,KAAK,CAAC,SAAS;AAAA,MAE7C,IAAI,KAAK,SAAS,eAAe,KAAK,iBAAiB,iBAAiB;AAAA,QACtE,OAAO;AAAA,aACF;AAAA,UACH,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,MAGA,IAAI,KAAK,SAAS,WAAW,KAAK,iBAAiB,iBAAiB;AAAA,QAClE,OAAO;AAAA,aACF;AAAA,UACH,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,MAGA,IAAI,KAAK,SAAS,sBAAsB,KAAK,iBAAiB,iBAAiB;AAAA,QAC7E,OAAO;AAAA,aACF;AAAA,UACH,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,MAGA,IAAI,KAAK,SAAS,0BAA0B,KAAK,iBAAiB,iBAAiB;AAAA,QACjF,OAAO;AAAA,aACF;AAAA,UACH,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,MAGA,IAAI,KAAK,SAAS,cAAc,KAAK,iBAAiB,iBAAiB;AAAA,QACrE,OAAO;AAAA,aACF;AAAA,UACH,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,MAEA,OAAO;AAAA,KACR;AAAA,IAED,OAAO,6BAAY,UAAU;AAAA,IAC7B,OAAO,OAAO;AAAA,IAEd,OAAO;AAAA;AAAA;AAUJ,SAAS,yBAAyB,CAAC,SAAiB,cAA+B;AAAA,EACxF,IAAI;AAAA,IACF,MAAM,sBAAsB,2BAA2B,OAAO;AAAA,IAC9D,OAAO,oBAAoB,SAAS,YAAY;AAAA,IAChD,OAAO,OAAO;AAAA,IAEd,OAAO;AAAA;AAAA;AASJ,SAAS,0BAA0B,CAAC,SAA2B;AAAA,EACpE,IAAI;AAAA,IACF,MAAM,MAAM,2BAAa,OAAO;AAAA,IAChC,MAAM,gBAAgB,IAAI;AAAA,IAE1B,kCAAa,KAAK,CAAC,SAAS;AAAA,MAE1B,KAAK,KAAK,SAAS,eACd,KAAK,SAAS,WACd,KAAK,SAAS,sBACd,KAAK,SAAS,0BACd,KAAK,SAAS,eACf,KAAK,cAAc;AAAA,QACrB,cAAc,IAAI,KAAK,YAAY;AAAA,MACrC;AAAA,MAEA,OAAO;AAAA,KACR;AAAA,IAED,OAAO,MAAM,KAAK,aAAa;AAAA,IAC/B,OAAO,OAAO;AAAA,IAEd,OAAO,CAAC;AAAA;AAAA;",
  "debugId": "19CD3826FBA48AA364756E2164756E21",
  "names": []
}