export interface Span { start: number; end: number; } export interface ProgramNode { type: "Program"; declarations: ConstDeclarationNode[]; body: ExprNode; span: Span; } export interface ConstDeclarationNode { type: "ConstDeclaration"; name: string; value: ExprNode; span: Span; } export type ExprNode = ArrayNode | AtIdentifierNode | BinaryNode | CallNode | ExistsNode | FilterStageNode | FoldNode | FunctionNode | IdentifierNode | LiteralNode | ObjectNode | ParameterNode | PathNode | ScopeNode | UnaryNode; export type JsonLiteral = string | number | boolean | null; export interface LiteralNode { type: "Literal"; value: JsonLiteral; span: Span; } export interface ArrayNode { type: "Array"; elements: ExprNode[]; span: Span; } export interface ObjectNode { type: "Object"; members: ObjectMemberNode[]; span: Span; } export type ObjectMemberNode = PropertyNode | SpreadNode; export interface PropertyNode { type: "Property"; key: string; value: ExprNode; shorthand: boolean; span: Span; } export interface SpreadNode { type: "Spread"; value: ExprNode; span: Span; } export interface IdentifierNode { type: "Identifier"; name: string; span: Span; } export interface AtIdentifierNode { type: "AtIdentifier"; name: string; span: Span; } export interface ParameterNode { type: "Parameter"; name: string; span: Span; } export interface ScopeNode { type: "Scope"; scope: "root" | "this" | "parent"; span: Span; } export interface PathNode { type: "Path"; base: ExprNode; op: PathOpNode; span: Span; } export type PathOpNode = AttrAccessNode | EachAccessNode | FilterAccessNode | IndexAccessNode | ProjectAccessNode | RecursiveAccessNode | SliceAccessNode | WildcardAccessNode; export interface AttrAccessNode { type: "AttrAccess"; name: string; span: Span; } export interface EachAccessNode { type: "EachAccess"; span: Span; } export interface WildcardAccessNode { type: "WildcardAccess"; span: Span; } export interface RecursiveAccessNode { type: "RecursiveAccess"; name?: string; span: Span; } export interface IndexAccessNode { type: "IndexAccess"; index: ExprNode; span: Span; } export interface SliceAccessNode { type: "SliceAccess"; start?: ExprNode; end?: ExprNode; span: Span; } export interface FilterAccessNode { type: "FilterAccess"; condition: ExprNode; span: Span; } export interface ProjectAccessNode { type: "ProjectAccess"; members: ObjectMemberNode[]; span: Span; } export interface ExistsNode { type: "Exists"; base: ExprNode; span: Span; } export interface FilterStageNode { type: "FilterStage"; condition: ExprNode; span: Span; } export interface FunctionNode { type: "Function"; body: ExprNode; span: Span; } export interface UnaryNode { type: "Unary"; op: "!" | "+" | "-"; argument: ExprNode; span: Span; } export interface BinaryNode { type: "Binary"; op: "!=" | "%" | "&&" | "*" | "+" | "-" | "->" | "/" | "<" | "<=" | "=" | ">" | ">=" | "??" | "in" | "|" | "||" | "~"; left: ExprNode; right: ExprNode; span: Span; } export interface CallNode { type: "Call"; callee: ExprNode; args: ExprNode[]; span: Span; } export interface FoldNode { type: "Fold"; members: ObjectMemberNode[]; span: Span; } //# sourceMappingURL=ast.d.ts.map