{
  "version": 3,
  "sources": ["../../../../src/core/utils/range-serializer.ts"],
  "sourcesContent": [
    "import type { SpreadsheetRange } from \"../types.mjs\";\nimport { indexToColumn, getRowNumber } from \"../utils.mjs\";\n\n/**\n * Serializes a SpreadsheetRange into a human-readable range string following canonical format.\n * \n * Examples:\n * - Finite range: A2:B10\n * - Column-infinite range: A2:B (row infinite, column bounded)\n * - Row-infinite range: A2:10 (column infinite, row bounded)\n * - Fully infinite range: A2:INFINITY (both infinite)\n * \n * @param range The SpreadsheetRange to serialize\n * @returns A human-readable range string in canonical format\n */\nexport function serializeRange(range: SpreadsheetRange): string {\n  // Format start cell\n  const startCell = `${indexToColumn(range.start.col)}${getRowNumber(range.start.row)}`;\n  \n  // Determine end format based on infinity types\n  const endRowIsInfinity = range.end.row.type === \"infinity\";\n  const endColIsInfinity = range.end.col.type === \"infinity\";\n  \n  let rangeEnd: string;\n  \n  if (endRowIsInfinity && endColIsInfinity) {\n    // Both infinite: A2:INFINITY\n    rangeEnd = \"INFINITY\";\n  } else if (endRowIsInfinity && range.end.col.type === \"number\") {\n    // Row infinite, col finite: A2:B (column only)\n    rangeEnd = indexToColumn(range.end.col.value);\n  } else if (range.end.row.type === \"number\" && endColIsInfinity) {\n    // Row finite, col infinite: A2:10 (row only)\n    rangeEnd = getRowNumber(range.end.row.value).toString();\n  } else if (range.end.row.type === \"number\" && range.end.col.type === \"number\") {\n    // Both finite: A2:B10\n    rangeEnd = `${indexToColumn(range.end.col.value)}${getRowNumber(range.end.row.value)}`;\n  } else {\n    throw new Error(\"Invalid range end configuration\");\n  }\n  \n  return `${startCell}:${rangeEnd}`;\n}\n\n/**\n * Serializes a SpreadsheetRange with an optional sheet name prefix.\n * \n * @param range The SpreadsheetRange to serialize\n * @param sheetName Optional sheet name to prefix the range\n * @returns A human-readable range string, optionally prefixed with sheet name\n */\nexport function serializeRangeWithSheet(range: SpreadsheetRange, sheetName?: string): string {\n  const rangeStr = serializeRange(range);\n  \n  if (sheetName) {\n    // Handle sheet names that need quoting (contain spaces or special characters)\n    const needsQuotes = /[^A-Za-z0-9_]/.test(sheetName);\n    const quotedSheetName = needsQuotes ? `'${sheetName}'` : sheetName;\n    return `${quotedSheetName}!${rangeStr}`;\n  }\n  \n  return rangeStr;\n}\n"
  ],
  "mappings": ";AACA;AAcO,SAAS,cAAc,CAAC,OAAiC;AAAA,EAE9D,MAAM,YAAY,GAAG,cAAc,MAAM,MAAM,GAAG,IAAI,aAAa,MAAM,MAAM,GAAG;AAAA,EAGlF,MAAM,mBAAmB,MAAM,IAAI,IAAI,SAAS;AAAA,EAChD,MAAM,mBAAmB,MAAM,IAAI,IAAI,SAAS;AAAA,EAEhD,IAAI;AAAA,EAEJ,IAAI,oBAAoB,kBAAkB;AAAA,IAExC,WAAW;AAAA,EACb,EAAO,SAAI,oBAAoB,MAAM,IAAI,IAAI,SAAS,UAAU;AAAA,IAE9D,WAAW,cAAc,MAAM,IAAI,IAAI,KAAK;AAAA,EAC9C,EAAO,SAAI,MAAM,IAAI,IAAI,SAAS,YAAY,kBAAkB;AAAA,IAE9D,WAAW,aAAa,MAAM,IAAI,IAAI,KAAK,EAAE,SAAS;AAAA,EACxD,EAAO,SAAI,MAAM,IAAI,IAAI,SAAS,YAAY,MAAM,IAAI,IAAI,SAAS,UAAU;AAAA,IAE7E,WAAW,GAAG,cAAc,MAAM,IAAI,IAAI,KAAK,IAAI,aAAa,MAAM,IAAI,IAAI,KAAK;AAAA,EACrF,EAAO;AAAA,IACL,MAAM,IAAI,MAAM,iCAAiC;AAAA;AAAA,EAGnD,OAAO,GAAG,aAAa;AAAA;AAUlB,SAAS,uBAAuB,CAAC,OAAyB,WAA4B;AAAA,EAC3F,MAAM,WAAW,eAAe,KAAK;AAAA,EAErC,IAAI,WAAW;AAAA,IAEb,MAAM,cAAc,gBAAgB,KAAK,SAAS;AAAA,IAClD,MAAM,kBAAkB,cAAc,IAAI,eAAe;AAAA,IACzD,OAAO,GAAG,mBAAmB;AAAA,EAC/B;AAAA,EAEA,OAAO;AAAA;",
  "debugId": "EAB81BB82F22743064756E2164756E21",
  "names": []
}