{
  "version": 3,
  "sources": ["../../../src/parser/ast.ts"],
  "sourcesContent": [
    "/**\n * Abstract Syntax Tree (AST) node definitions for formula parsing\n */\n\nimport type {\n  CellAddress,\n  CellValue,\n  FormulaError,\n  SpreadsheetRange,\n} from \"../core/types.mjs\";\n\n/**\n * Base interface for all AST nodes\n */\ntype ASTNodeBase = {\n  position?: {\n    start: number;\n    end: number;\n  };\n};\n\n/**\n * Literal value node (number, string, boolean, error)\n */\nexport type ValueNode = ASTNodeBase & {\n  type: \"value\";\n  value: CellValue;\n};\n\n/**\n * Cell reference node (e.g., A1, Sheet1!B2)\n */\nexport type ReferenceNode = ASTNodeBase & {\n  type: \"reference\";\n  address: {\n    colIndex: number;\n    rowIndex: number;\n  };\n  sheetName?: string;\n  workbookName?: string;\n  isAbsolute: {\n    col: boolean;\n    row: boolean;\n  };\n};\n\n/**\n * Range reference node (e.g., A1:B10)\n */\nexport type RangeNode = ASTNodeBase & {\n  type: \"range\";\n  sheetName?: string;\n  workbookName?: string;\n  range: SpreadsheetRange;\n  isAbsolute: {\n    start: {\n      col: boolean;\n      row: boolean;\n    };\n    end: {\n      col: boolean;\n      row: boolean;\n    };\n  };\n};\n\n/**\n * Function call node (e.g., SUM(A1:A10))\n */\nexport type FunctionNode = ASTNodeBase & {\n  type: \"function\";\n  name: string;\n  args: ASTNode[];\n};\n\n/**\n * Unary operator node (e.g., -A1, +B2)\n */\nexport type UnaryOpNode = ASTNodeBase & {\n  type: \"unary-op\";\n  operator: \"+\" | \"-\" | \"%\";\n  operand: ASTNode;\n};\n\n/**\n * Binary operator node (e.g., A1+B1, C1*D1)\n */\nexport type BinaryOpNode = ASTNodeBase & {\n  type: \"binary-op\";\n  operator:\n    | \"+\"\n    | \"-\"\n    | \"*\"\n    | \"/\"\n    | \"^\"\n    | \"&\"\n    | \"=\"\n    | \"<>\"\n    | \"<\"\n    | \">\"\n    | \"<=\"\n    | \">=\";\n  left: ASTNode;\n  right: ASTNode;\n};\n\n/**\n * Array literal node (e.g., {1,2,3;4,5,6})\n */\nexport type ArrayNode = ASTNodeBase & {\n  type: \"array\";\n  elements: ASTNode[][]; // 2D array of elements\n};\n\n/**\n * 3D range node (e.g., Sheet1:Sheet3!A1)\n */\nexport type ThreeDRangeNode = ASTNodeBase & {\n  type: \"3d-range\";\n  startSheet: string;\n  endSheet: string;\n  workbookName?: string;\n  reference: ReferenceNode | RangeNode;\n};\n\n/**\n * Structured reference node (e.g., Table1[Column1])\n */\nexport type StructuredReferenceNode = ASTNodeBase & {\n  type: \"structured-reference\";\n  tableName?: string;\n  sheetName?: string;\n  workbookName?: string;\n  cols?: {\n    startCol: string;\n    endCol: string;\n  };\n  selector?: \"#All\" | \"#Data\" | \"#Headers\";\n  isCurrentRow: boolean;\n};\n\n/**\n * Infinity literal node\n */\nexport type InfinityNode = ASTNodeBase & {\n  type: \"infinity\";\n};\n\nexport type ASTNode =\n  | ValueNode\n  | ReferenceNode\n  | RangeNode\n  | FunctionNode\n  | UnaryOpNode\n  | BinaryOpNode\n  | ArrayNode\n  | NamedExpressionNode\n  | ErrorNode\n  | EmptyNode\n  | ThreeDRangeNode\n  | StructuredReferenceNode\n  | InfinityNode;\n\n/**\n * Named expression reference node\n */\nexport type NamedExpressionNode = ASTNodeBase & {\n  type: \"named-expression\";\n  name: string;\n  sheetName?: string;\n  workbookName?: string;\n};\n\n/**\n * Error node for parsing errors\n */\nexport type ErrorNode = ASTNodeBase & {\n  type: \"error\";\n  error: FormulaError;\n  message: string;\n};\n\nexport type EmptyNode = ASTNodeBase & {\n  type: \"empty\";\n};\n\n/**\n * Helper function to create a value node\n */\nexport function createValueNode(\n  value: CellValue,\n  position?: {\n    start: number;\n    end: number;\n  }\n): ValueNode {\n  return {\n    type: \"value\",\n    value,\n    position,\n  };\n}\n\nexport function createEmptyNode(position?: {\n  start: number;\n  end: number;\n}): EmptyNode {\n  return { type: \"empty\", position };\n}\n\n/**\n * Helper function to create a reference node\n */\nexport function createReferenceNode({\n  address,\n  isAbsolute,\n  position,\n  sheetName,\n  workbookName,\n}: {\n  address: {\n    colIndex: number;\n    rowIndex: number;\n  };\n  isAbsolute: { col: boolean; row: boolean };\n  position?: {\n    start: number;\n    end: number;\n  };\n  sheetName?: string;\n  workbookName?: string;\n}): ReferenceNode {\n  return {\n    type: \"reference\",\n    address,\n    isAbsolute,\n    sheetName,\n    workbookName,\n    position,\n  };\n}\n\n/**\n * Helper function to create a range node\n */\nexport function createRangeNode({\n  sheetName,\n  workbookName,\n  range,\n  isAbsolute,\n  position,\n}: {\n  sheetName?: string;\n  workbookName?: string;\n  range: SpreadsheetRange;\n  isAbsolute: RangeNode[\"isAbsolute\"];\n  position?: {\n    start: number;\n    end: number;\n  };\n}): RangeNode {\n  return {\n    type: \"range\",\n    range,\n    sheetName,\n    workbookName,\n    isAbsolute,\n    position,\n  };\n}\n\n/**\n * Helper function to create a function node\n */\nexport function createFunctionNode(\n  name: string,\n  args: ASTNode[],\n  position?: {\n    start: number;\n    end: number;\n  }\n): FunctionNode {\n  return {\n    type: \"function\",\n    name: name.toUpperCase(), // Normalize function names to uppercase\n    args,\n    position,\n  };\n}\n\n/**\n * Helper function to create a unary operator node\n */\nexport function createUnaryOpNode(\n  operator: UnaryOpNode[\"operator\"],\n  operand: ASTNode,\n  position?: {\n    start: number;\n    end: number;\n  }\n): UnaryOpNode {\n  return {\n    type: \"unary-op\",\n    operator,\n    operand,\n    position,\n  };\n}\n\n/**\n * Helper function to create a binary operator node\n */\nexport function createBinaryOpNode(\n  operator: BinaryOpNode[\"operator\"],\n  left: ASTNode,\n  right: ASTNode,\n  position?: {\n    start: number;\n    end: number;\n  }\n): BinaryOpNode {\n  return {\n    type: \"binary-op\",\n    operator,\n    left,\n    right,\n    position,\n  };\n}\n\n/**\n * Helper function to create an array node\n */\nexport function createArrayNode(\n  elements: ASTNode[][],\n  position?: {\n    start: number;\n    end: number;\n  }\n): ArrayNode {\n  return {\n    type: \"array\",\n    elements,\n    position,\n  };\n}\n\n/**\n * Helper function to create a named expression node\n */\nexport function createNamedExpressionNode(\n  name: string,\n  position?: {\n    start: number;\n    end: number;\n  },\n  sheetName?: string,\n  workbookName?: string\n): NamedExpressionNode {\n  return {\n    type: \"named-expression\",\n    name,\n    sheetName,\n    workbookName,\n    position,\n  };\n}\n\n/**\n * Helper function to create an error node\n */\nexport function createErrorNode(\n  error: FormulaError,\n  message: string,\n  position?: {\n    start: number;\n    end: number;\n  }\n): ErrorNode {\n  return {\n    type: \"error\",\n    error,\n    message,\n    position,\n  };\n}\n\n/**\n * Helper function to create a 3D range node\n */\nexport function createThreeDRangeNode(\n  startSheet: string,\n  endSheet: string,\n  reference: ReferenceNode | RangeNode,\n  position?: {\n    start: number;\n    end: number;\n  },\n  workbookName?: string\n): ThreeDRangeNode {\n  return {\n    type: \"3d-range\",\n    startSheet,\n    endSheet,\n    workbookName,\n    reference,\n    position,\n  };\n}\n\n/**\n * Helper function to create a structured reference node\n */\nexport function createStructuredReferenceNode({\n  tableName,\n  sheetName,\n  workbookName,\n  cols,\n  selector,\n  isCurrentRow = false,\n  position,\n}: {\n  tableName?: string;\n  sheetName?: string;\n  workbookName?: string;\n  cols?: {\n    startCol: string;\n    endCol: string;\n  };\n  selector?: \"#All\" | \"#Data\" | \"#Headers\";\n  isCurrentRow?: boolean;\n  position?: {\n    start: number;\n    end: number;\n  };\n}): StructuredReferenceNode {\n  return {\n    type: \"structured-reference\",\n    tableName,\n    sheetName,\n    workbookName,\n    cols,\n    selector,\n    isCurrentRow,\n    position,\n  };\n}\n\n/**\n * Helper function to create an infinity node\n */\nexport function createInfinityNode(position?: {\n  start: number;\n  end: number;\n}): InfinityNode {\n  return {\n    type: \"infinity\",\n    position,\n  };\n}\n\n/**\n * AST visitor interface for traversing the tree\n */\nexport interface ASTVisitor<T = void> {\n  visitValue?(node: ValueNode): T;\n  visitReference?(node: ReferenceNode): T;\n  visitRange?(node: RangeNode): T;\n  visitFunction?(node: FunctionNode): T;\n  visitUnaryOp?(node: UnaryOpNode): T;\n  visitBinaryOp?(node: BinaryOpNode): T;\n  visitArray?(node: ArrayNode): T;\n  visitNamedExpression?(node: NamedExpressionNode): T;\n  visitError?(node: ErrorNode): T;\n  visitEmpty?(node: EmptyNode): T;\n  visitThreeDRange?(node: ThreeDRangeNode): T;\n  visitStructuredReference?(node: StructuredReferenceNode): T;\n  visitInfinity?(node: InfinityNode): T;\n}\n"
  ],
  "mappings": ";AA6LO,SAAS,eAAe,CAC7B,OACA,UAIW;AAAA,EACX,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AAAA;AAGK,SAAS,eAAe,CAAC,UAGlB;AAAA,EACZ,OAAO,EAAE,MAAM,SAAS,SAAS;AAAA;AAM5B,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GAagB;AAAA,EAChB,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GAUY;AAAA,EACZ,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,kBAAkB,CAChC,MACA,MACA,UAIc;AAAA,EACd,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK,YAAY;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,iBAAiB,CAC/B,UACA,SACA,UAIa;AAAA,EACb,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,kBAAkB,CAChC,UACA,MACA,OACA,UAIc;AAAA,EACd,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,eAAe,CAC7B,UACA,UAIW;AAAA,EACX,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,yBAAyB,CACvC,MACA,UAIA,WACA,cACqB;AAAA,EACrB,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,eAAe,CAC7B,OACA,SACA,UAIW;AAAA,EACX,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,qBAAqB,CACnC,YACA,UACA,WACA,UAIA,cACiB;AAAA,EACjB,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,GAe0B;AAAA,EAC1B,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,kBAAkB,CAAC,UAGlB;AAAA,EACf,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,EACF;AAAA;",
  "debugId": "99B12242BE345E9A64756E2164756E21",
  "names": []
}