🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
102 lines
3.1 KiB
TypeScript
Executable File
102 lines
3.1 KiB
TypeScript
Executable File
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<string, any>;
|
|
extends?: string;
|
|
defineArgs?: Record<string, any>;
|
|
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<string, any>;
|
|
}
|
|
export interface FragmentNode extends BaseNode {
|
|
type: NodeType.FRAGMENT;
|
|
children: ASTNode[];
|
|
}
|
|
export interface SlotNode extends BaseNode {
|
|
type: NodeType.SLOT;
|
|
name: string;
|
|
attributes?: Record<string, any>;
|
|
children: ASTNode[];
|
|
selfClosing: boolean;
|
|
}
|
|
export interface ComponentInvocationNode extends BaseNode {
|
|
type: NodeType.COMPONENT_INVOCATION;
|
|
name: string;
|
|
attributes: Record<string, any>;
|
|
conditionalAttributes?: ConditionalAttributeNode[];
|
|
children: ASTNode[];
|
|
selfClosing: boolean;
|
|
}
|
|
export interface HtmlTagNode extends BaseNode {
|
|
type: NodeType.HTML_TAG;
|
|
name: string;
|
|
attributes: Record<string, any>;
|
|
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<T extends ASTNode>(type: T['type'], props: Omit<T, 'type' | keyof BaseNode>, start: number, end: number, line: number, column: number, loc?: SourceLocation): T;
|
|
//# sourceMappingURL=ast.d.ts.map
|