import { SourceLocation } from './lexer.js'; export declare enum NodeType { PROGRAM = "Program", COMPONENT_DEFINITION = "ComponentDefinition", COMPONENT_INVOCATION = "ComponentInvocation", HTML_TAG = "HtmlTag", TEXT = "Text", EXPRESSION = "Expression", IF_STATEMENT = "IfStatement", FOR_STATEMENT = "ForStatement", CODE_BLOCK = "CodeBlock", FRAGMENT = "Fragment", SLOT = "Slot",// v2 slot syntax CONDITIONAL_ATTRIBUTE = "ConditionalAttribute" } export interface BaseNode { type: NodeType; start: number; end: number; line: number; column: number; loc?: SourceLocation; range?: [number, number]; } export interface ProgramNode extends BaseNode { type: NodeType.PROGRAM; body: ASTNode[]; } export interface ComponentDefinitionNode extends BaseNode { type: NodeType.COMPONENT_DEFINITION; name: string; body: ASTNode[]; attributes: Record; extends?: string; defineArgs?: Record; isSlotOnly?: boolean; slotNames?: string[]; } export interface TextNode extends BaseNode { type: NodeType.TEXT; content: string; } export interface ExpressionNode extends BaseNode { type: NodeType.EXPRESSION; code: string; escaped: boolean; } export interface IfStatementNode extends BaseNode { type: NodeType.IF_STATEMENT; condition: string; consequent: ASTNode[]; alternate: ASTNode[] | null; } export interface ForStatementNode extends BaseNode { type: NodeType.FOR_STATEMENT; iterator: string; body: ASTNode[]; } export interface CodeBlockNode extends BaseNode { type: NodeType.CODE_BLOCK; tokens?: Array<{ type: string; value: string; }>; code?: string; } export interface ConditionalAttributeNode extends BaseNode { type: NodeType.CONDITIONAL_ATTRIBUTE; condition: string; attributes: Record; } export interface FragmentNode extends BaseNode { type: NodeType.FRAGMENT; children: ASTNode[]; } export interface SlotNode extends BaseNode { type: NodeType.SLOT; name: string; attributes?: Record; children: ASTNode[]; selfClosing: boolean; } export interface ComponentInvocationNode extends BaseNode { type: NodeType.COMPONENT_INVOCATION; name: string; attributes: Record; conditionalAttributes?: ConditionalAttributeNode[]; children: ASTNode[]; selfClosing: boolean; } export interface HtmlTagNode extends BaseNode { type: NodeType.HTML_TAG; name: string; attributes: Record; conditionalAttributes?: ConditionalAttributeNode[]; children: ASTNode[]; selfClosing: boolean; preserveWhitespace?: boolean; } export type ASTNode = ProgramNode | ComponentDefinitionNode | ComponentInvocationNode | HtmlTagNode | TextNode | ExpressionNode | IfStatementNode | ForStatementNode | CodeBlockNode | FragmentNode | SlotNode | ConditionalAttributeNode; export declare function createNode(type: T['type'], props: Omit, start: number, end: number, line: number, column: number, loc?: SourceLocation): T; //# sourceMappingURL=ast.d.ts.map