export type Success = { success: true; value: T; index: number; }; export type Failure = { success: false; }; export type Result = Success | Failure; interface State { trace?: boolean; linkLabel?: boolean; nestLimit: number; depth: number; } export type ParserHandler = (input: string, index: number, state: State) => Result; export declare function success(index: number, value: T): Success; export declare function failure(): Failure; export declare class Parser { name?: string; handler: ParserHandler; constructor(handler: ParserHandler, name?: string); map(fn: (value: T) => U): Parser; text(): Parser; many(min: number): Parser; sep(separator: Parser, min: number): Parser; select(key: K): Parser; option(): Parser; } export declare function str(value: T): Parser; export declare function regexp(pattern: T): Parser; type ParsedType> = T extends Parser ? U : never; export type SeqParseResult = T extends [] ? [] : T extends [infer F, ...infer R] ? (F extends Parser ? [ParsedType, ...SeqParseResult] : [unknown, ...SeqParseResult]) : unknown[]; export declare function seq[]>(...parsers: Parsers): Parser>; export declare function alt[]>(parsers: Parsers): Parser>; export declare function notMatch(parser: Parser): Parser; export declare const cr: Parser<"\r">; export declare const lf: Parser<"\n">; export declare const crlf: Parser<"\r\n">; export declare const newline: Parser<"\r" | "\n" | "\r\n">; export declare const char: Parser; export declare const lineBegin: Parser; export declare const lineEnd: Parser; export declare function lazy(fn: () => Parser): Parser; type ParserTable = { [K in keyof T]: Parser; }; export declare function createLanguage(syntaxes: { [K in keyof T]: (r: ParserTable) => Parser; }): ParserTable; export {};