/** * ExprNode to MEL Renderer * * Converts ExprNode AST to MEL expression syntax. * * @example * // { kind: "lit", value: 5 } -> "5" * // { kind: "get", path: "count" } -> "count" * // { kind: "add", left: { kind: "get", path: "x" }, right: { kind: "lit", value: 1 } } -> "add(x, 1)" * // { kind: "gt", left: { kind: "get", path: "count" }, right: { kind: "lit", value: 0 } } -> "gt(count, 0)" */ /** * ExprNode type (subset from core package) */ export type ExprNode = { kind: "lit"; value: unknown; } | { kind: "get"; path: string; } | { kind: "eq"; left: ExprNode; right: ExprNode; } | { kind: "neq"; left: ExprNode; right: ExprNode; } | { kind: "gt"; left: ExprNode; right: ExprNode; } | { kind: "gte"; left: ExprNode; right: ExprNode; } | { kind: "lt"; left: ExprNode; right: ExprNode; } | { kind: "lte"; left: ExprNode; right: ExprNode; } | { kind: "and"; args: ExprNode[]; } | { kind: "or"; args: ExprNode[]; } | { kind: "not"; arg: ExprNode; } | { kind: "if"; cond: ExprNode; then: ExprNode; else: ExprNode; } | { kind: "add"; left: ExprNode; right: ExprNode; } | { kind: "sub"; left: ExprNode; right: ExprNode; } | { kind: "mul"; left: ExprNode; right: ExprNode; } | { kind: "div"; left: ExprNode; right: ExprNode; } | { kind: "mod"; left: ExprNode; right: ExprNode; } | { kind: "concat"; args: ExprNode[]; } | { kind: "substring"; str: ExprNode; start: ExprNode; end?: ExprNode; } | { kind: "trim"; str: ExprNode; } | { kind: "len"; arg: ExprNode; } | { kind: "at"; array: ExprNode; index: ExprNode; } | { kind: "first"; array: ExprNode; } | { kind: "last"; array: ExprNode; } | { kind: "slice"; array: ExprNode; start: ExprNode; end?: ExprNode; } | { kind: "includes"; array: ExprNode; item: ExprNode; } | { kind: "filter"; array: ExprNode; predicate: ExprNode; } | { kind: "map"; array: ExprNode; mapper: ExprNode; } | { kind: "find"; array: ExprNode; predicate: ExprNode; } | { kind: "every"; array: ExprNode; predicate: ExprNode; } | { kind: "some"; array: ExprNode; predicate: ExprNode; } | { kind: "append"; array: ExprNode; items: ExprNode[]; } | { kind: "object"; fields: Record; } | { kind: "field"; object: ExprNode; property: string; } | { kind: "keys"; obj: ExprNode; } | { kind: "values"; obj: ExprNode; } | { kind: "entries"; obj: ExprNode; } | { kind: "merge"; objects: ExprNode[]; } | { kind: "typeof"; arg: ExprNode; } | { kind: "isNull"; arg: ExprNode; } | { kind: "coalesce"; args: ExprNode[]; }; /** * Renders an ExprNode to MEL expression syntax string. * * @param expr - The ExprNode to render * @returns MEL expression syntax string */ export declare function renderExprNode(expr: ExprNode): string;