export declare enum MustacheTypes {
    SMUSTACHE = "s__mustache",
    ESMUSTACHE = "es__mustache",
    MUSTACHE = "mustache",
    EMUSTACHE = "e__mustache"
}
export declare enum TagTypes {
    TAG = "tag",
    ETAG = "e__tag"
}
export type TagProps = {
    name: string;
    jsArg: string;
    selfclosed: boolean;
};
export type MustacheProps = {
    jsArg: string;
};
export type LexerLoc = {
    start: {
        line: number;
        col: number;
    };
    end: {
        line: number;
        col: number;
    };
};
export interface LexerTagDefinitionContract {
    block: boolean;
    seekable: boolean;
    noNewLine?: boolean;
}
export type RawToken = {
    type: 'raw';
    value: string;
    line: number;
    filename: string;
};
export type NewLineToken = {
    type: 'newline';
    line: number;
    filename: string;
};
export type CommentToken = {
    type: 'comment';
    value: string;
    loc: LexerLoc;
    filename: string;
};
export type MustacheToken = {
    type: MustacheTypes;
    properties: MustacheProps;
    loc: LexerLoc;
    filename: string;
};
export type TagToken = {
    type: TagTypes;
    properties: TagProps;
    loc: LexerLoc;
    children: Token[];
    filename: string;
};
export type Token = RawToken | NewLineToken | TagToken | MustacheToken | CommentToken;
export type RuntimeTag = LexerTagDefinitionContract & {
    name: string;
    filename: string;
    selfclosed: boolean;
    col: number;
    line: number;
    escaped: boolean;
    hasBrace: boolean;
};
export type RuntimeMustache = {
    isComment: false;
    escaped: boolean;
    filename: string;
    safe: boolean;
    line: number;
    col: number;
    realCol: number;
};
export type RuntimeComment = {
    isComment: true;
    filename: string;
    line: number;
    col: number;
    realCol: number;
};
export interface Tags {
    [name: string]: LexerTagDefinitionContract;
}
