import { ChildNode, Node, BlockNode as TemplateBlock } from "../../ast"; import { RenderContext } from "../../context"; import { Expression, StringLiteral } from "../../expression"; import { ExpressionTokenStream } from "../../expressions"; import { Tag, RenderStream, Environment, Template, LiquidDispatchableSync, liquidDispatchSync } from "../../liquidscript"; import { Token, TokenStream } from "../../token"; export type BlockStackItem = { block: BlockNode; required: boolean; sourceName: string; parent?: BlockStackItem; }; export declare class BlockDrop implements LiquidDispatchableSync { readonly context: RenderContext; readonly out: RenderStream; readonly name: string; readonly parent?: BlockStackItem | undefined; constructor(context: RenderContext, out: RenderStream, name: string, parent?: BlockStackItem | undefined); [liquidDispatchSync](name: string): unknown; } export declare class BlockTag implements Tag { parse(stream: TokenStream, environment: Environment): Node; protected parseBlockName(eStream: ExpressionTokenStream): StringLiteral; } export declare class ExtendsTag implements Tag { readonly block = false; readonly name: string; protected nodeClass: typeof ExtendsNode; parse(stream: TokenStream): Node; } export declare class BlockNode implements Node { readonly token: Token; readonly block: TemplateBlock; readonly required: boolean; readonly expression: Expression; readonly name: string; constructor(token: Token, name: StringLiteral, block: TemplateBlock, required: boolean); render(context: RenderContext, out: RenderStream): Promise; renderSync(context: RenderContext, out: RenderStream): void; children(): ChildNode[]; } export declare class ExtendsNode implements Node { readonly token: Token; readonly name: StringLiteral; protected static tag: string; constructor(token: Token, name: StringLiteral); render(context: RenderContext, out: RenderStream): Promise; renderSync(context: RenderContext, out: RenderStream): void; children(): ChildNode[]; } export type StackedBlocks = { extendsNode?: ExtendsNode; blockNodes: BlockNode[]; }; export declare function stackBlocks(context: RenderContext, template: Template): StackedBlocks;