export type AstNode = LiteralNode | IdentifierNode | MemberNode | IndexNode | UnaryNode | BinaryNode | LogicalNode | TernaryNode | CallNode | ArrayNode; export interface LiteralNode { readonly kind: 'Literal'; readonly value: string | number | boolean | null; } export interface IdentifierNode { readonly kind: 'Identifier'; readonly name: string; } export interface MemberNode { readonly kind: 'Member'; readonly object: AstNode; readonly property: string; } export interface IndexNode { readonly kind: 'Index'; readonly object: AstNode; readonly index: AstNode; } export type UnaryOp = '-' | '!'; export interface UnaryNode { readonly kind: 'Unary'; readonly op: UnaryOp; readonly operand: AstNode; } export type BinaryOp = '+' | '-' | '*' | '/' | '%' | '==' | '!=' | '<' | '<=' | '>' | '>='; export interface BinaryNode { readonly kind: 'Binary'; readonly op: BinaryOp; readonly left: AstNode; readonly right: AstNode; } export type LogicalOp = '&&' | '||' | '??'; export interface LogicalNode { readonly kind: 'Logical'; readonly op: LogicalOp; readonly left: AstNode; readonly right: AstNode; } export interface TernaryNode { readonly kind: 'Ternary'; readonly test: AstNode; readonly consequent: AstNode; readonly alternate: AstNode; } export interface CallNode { readonly kind: 'Call'; readonly callee: string; readonly args: readonly AstNode[]; } export interface ArrayNode { readonly kind: 'Array'; readonly elements: readonly AstNode[]; } //# sourceMappingURL=ast.d.ts.map