{
  "version": 3,
  "sources": ["../../../src/core/sheet-renamer.ts"],
  "sourcesContent": [
    "/**\n * Sheet renamer utility for updating cross-sheet references in formulas\n */\n\nimport { parseFormula } from \"../parser/parser.mjs\";\nimport { astToString } from \"../parser/formatter.mjs\";\nimport { transformAST } from \"./ast-traverser.mjs\";\nimport type { ASTNode } from \"../parser/ast.mjs\";\n\n/**\n * Renames sheet references in a formula string\n * @param formula The formula string (without the leading =)\n * @param oldSheetName The old sheet name to replace\n * @param newSheetName The new sheet name to use\n * @returns The updated formula string\n */\nexport function renameSheetInFormula(options: {\n  formula: string,\n  oldSheetName: string;\n  newSheetName: string;\n}): string {\n  const { formula, oldSheetName, newSheetName } = options;\n  try {\n    const ast = parseFormula(formula);\n    \n    const updatedAst = transformAST(ast, (node) => {\n      // Handle regular cross-sheet references (e.g., Sheet1!A1)\n      if (node.type === \"reference\" && node.sheetName === oldSheetName) {\n        return {\n          ...node,\n          sheetName: newSheetName,\n        };\n      }\n      \n      // Handle range references with sheet names (e.g., Sheet1!A1:B2)\n      if (node.type === \"range\" && node.sheetName === oldSheetName) {\n        return {\n          ...node,\n          sheetName: newSheetName,\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 sheet\n * @param formula The formula string (without the leading =)\n * @param sheetName The sheet name to check for\n * @returns True if the formula references the sheet\n */\nexport function formulaReferencesSheet(formula: string, sheetName: string): boolean {\n  try {\n    const ast = parseFormula(formula);\n    const referencedSheets = getReferencedSheetNames(formula);\n    return referencedSheets.includes(sheetName);\n  } catch (error) {\n    // If parsing fails, assume no reference\n    return false;\n  }\n}\n\n/**\n * Gets all sheet names referenced in a formula\n * @param formula The formula string (without the leading =)\n * @returns Array of unique sheet names referenced in the formula\n */\nexport function getReferencedSheetNames(formula: string): string[] {\n  try {\n    const ast = parseFormula(formula);\n    const sheetNames = new Set<string>();\n\n    transformAST(ast, (node) => {\n      // Handle cross-sheet references\n      if ((node.type === \"reference\" || node.type === \"range\") && node.sheetName) {\n        sheetNames.add(node.sheetName);\n      }\n      \n      return node;\n    });\n\n    return Array.from(sheetNames);\n  } catch (error) {\n    // If parsing fails, return empty array\n    return [];\n  }\n}\n\n"
  ],
  "mappings": ";AAIA;AACA;AACA;AAUO,SAAS,oBAAoB,CAAC,SAI1B;AAAA,EACT,QAAQ,SAAS,cAAc,iBAAiB;AAAA,EAChD,IAAI;AAAA,IACF,MAAM,MAAM,aAAa,OAAO;AAAA,IAEhC,MAAM,aAAa,aAAa,KAAK,CAAC,SAAS;AAAA,MAE7C,IAAI,KAAK,SAAS,eAAe,KAAK,cAAc,cAAc;AAAA,QAChE,OAAO;AAAA,aACF;AAAA,UACH,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MAGA,IAAI,KAAK,SAAS,WAAW,KAAK,cAAc,cAAc;AAAA,QAC5D,OAAO;AAAA,aACF;AAAA,UACH,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MAEA,OAAO;AAAA,KACR;AAAA,IAED,OAAO,YAAY,UAAU;AAAA,IAC7B,OAAO,OAAO;AAAA,IAEd,OAAO;AAAA;AAAA;AAUJ,SAAS,sBAAsB,CAAC,SAAiB,WAA4B;AAAA,EAClF,IAAI;AAAA,IACF,MAAM,MAAM,aAAa,OAAO;AAAA,IAChC,MAAM,mBAAmB,wBAAwB,OAAO;AAAA,IACxD,OAAO,iBAAiB,SAAS,SAAS;AAAA,IAC1C,OAAO,OAAO;AAAA,IAEd,OAAO;AAAA;AAAA;AASJ,SAAS,uBAAuB,CAAC,SAA2B;AAAA,EACjE,IAAI;AAAA,IACF,MAAM,MAAM,aAAa,OAAO;AAAA,IAChC,MAAM,aAAa,IAAI;AAAA,IAEvB,aAAa,KAAK,CAAC,SAAS;AAAA,MAE1B,KAAK,KAAK,SAAS,eAAe,KAAK,SAAS,YAAY,KAAK,WAAW;AAAA,QAC1E,WAAW,IAAI,KAAK,SAAS;AAAA,MAC/B;AAAA,MAEA,OAAO;AAAA,KACR;AAAA,IAED,OAAO,MAAM,KAAK,UAAU;AAAA,IAC5B,OAAO,OAAO;AAAA,IAEd,OAAO,CAAC;AAAA;AAAA;",
  "debugId": "0B6036BCDD11B7B564756E2164756E21",
  "names": []
}