import { InitTag, HasMeta, HasContexts, HasInit, TokenTag, TokenByTag, ContextKey, ContextToken, ContextMeta, ParserResult } from './model'; export interface RenderFunc, Token extends ContextToken, Meta> { (handle: RenderHandle, token: Exclude): Type; } export interface JoinFunc, Meta> { (handle: RenderHandle, elms: Type[]): Type; } export interface RenderHandle, Meta> { r: RenderMethods; j: JoinFunc; c: Ctx; m: Meta; } export declare type ContextRenderMethods, Meta> = { [Tag in TokenTag>]: RenderFunc, Tag>, Meta>; }; export declare type RenderMethods = { [Ctx in ContextKey]: ContextRenderMethods; }; export declare type TaggedRenderRule, Tag extends TokenTag>, Meta> = [Ctx, Tag, RenderFunc, Tag>, Meta>]; export declare type RenderRule, Meta> = TaggedRenderRule>, Meta>; export declare type RenderRules = RenderRule, ContextMeta>[]; export interface Renderer> { r: RenderMethods>; j: JoinFunc>; s: Ctx; } export interface InitRender { (...rules: RenderRules): Renderer; >(start: Ctx, ...rules: RenderRules): Renderer; } export declare function makeRender(join: JoinFunc): InitRender; export declare function render>({ r, j, s }: Renderer, [meta, tokens]: ParserResult): Type; export declare function renderNest, NestedCtx extends ContextKey>($: RenderHandle>, tokens: ContextToken[], ctx: NestedCtx): Type; export declare function renderNest>($: RenderHandle>, tokens: ContextToken[]): Type;