import { BlockNode, ChildNode, Node } from "../../ast"; import { RenderContext } from "../../context"; import { Environment } from "../../environment"; import { ArgumentList } from "../../expressions/arguments"; import { Expression } from "../../expression"; import { RenderStream } from "../../io/output_stream"; import { Tag } from "../../tag"; import { Token, TokenStream } from "../../token"; import { Undefined } from "../../undefined"; export declare const Macros: unique symbol; export type Macro = { args: ArgumentList; block: BlockNode; }; export type BoundArgs = { args: { [index: string]: Expression; }; excessArgs: Expression[]; excessKeywordArgs: { [index: string]: Expression; }; }; export type ExcessArgs = { kwargs: { [index: string]: unknown; }; args: unknown[]; }; export declare class MacroTag implements Tag { protected nodeClass: typeof MacroNode; parse(stream: TokenStream, environment: Environment): Node; } export declare class CallTag implements Tag { readonly block = false; protected nodeClass: typeof CallNode; parse(stream: TokenStream): Node; } export declare class MacroNode implements Node { readonly token: Token; readonly name: string; readonly args: ArgumentList; readonly block: BlockNode; constructor(token: Token, name: string, args: ArgumentList, block: BlockNode); render(context: RenderContext): Promise; renderSync(context: RenderContext): void; children(): ChildNode[]; } export declare class CallNode implements Node { readonly token: Token; readonly name: string; readonly args: Expression[]; readonly kwargs: ArgumentList; protected disabledTags: string[]; constructor(token: Token, name: string, args: Expression[], kwargs: ArgumentList); render(context: RenderContext, out: RenderStream): Promise; renderSync(context: RenderContext, out: RenderStream): void; children(): ChildNode[]; protected bindArgs(macro: Macro): BoundArgs; protected makeContext(context: RenderContext, macro: Macro): Promise; protected makeContextSync(context: RenderContext, macro: Macro): RenderContext; protected getMacro(context: RenderContext): Macro | Undefined; }