export declare const NoMatch: unique symbol; export declare type TNoMatch = typeof NoMatch; export declare class ParseResult { res: T; pos: number; constructor(res: T, pos: number); } export declare function escape(str: string): string; export declare function Res(res: T, pos: number): ParseResult; export declare class Rule { parse: (input: string, pos: number, skip: RegExp | undefined) => TNoMatch | ParseResult; constructor(parse: (input: string, pos: number, skip: RegExp | undefined) => TNoMatch | ParseResult); map(fn: (res: T, input: string, pos: number, skip: RegExp | undefined, start: number) => U | TNoMatch | ParseResult): Rule; tap(fn: (res: T, input: string, pos: number, skip: RegExp | undefined, start: number) => any): Rule; } /** * */ export declare type RawRule = Rule | RegExp | string; /** * */ export declare type Result = T extends Rule ? U : T extends RegExp ? RegExpMatchArray : T extends string ? string : never; export declare function Str(str: string): Rule; export declare function Reg(reg: RegExp): Rule; /** * */ export declare function _(exp: RegExp): Rule; export declare function _(exp: string): Rule; export declare function _(exp: Rule): Rule; export declare function _(exp: string | RegExp | Rule): Rule; /** * */ export declare function Seq; }>(obj: T): Rule<{ [K in keyof T]: Result; }>; export declare function SeqArray[]>(..._rules: T): Rule<{ [K in keyof T]: Result; }>; /** * */ export declare function Either[]>(...rules: T): Rule<{ [K in keyof T]: Result; }[number]>; /** * */ export declare function OneOrMore>(r: R): Rule[]>; /** * */ export declare function Repeat>(r: R): Rule[]>; /** * */ export declare function Opt>(r: R): Rule | null>; /** * */ export declare function Not>(r: R): Rule; /** * If provided with a skip rule, any will return a string containing all characters * until the next skip. */ export declare const Any: Rule; export declare function Until(reg: RawRule): Rule; export declare function Parser(rule: Rule, skip?: RegExp): (input: string) => typeof NoMatch | ParseResult; /** * */ export declare function S[]>(tpl: TemplateStringsArray, ...rules: Rules): Rule] ? T : { [K in keyof Rules]: Result; }>; export declare const SeparatedBy: >(rule: T, sep: RawRule) => Rule[]>;