import { Parser, ParseResult, OkResult, FailResult } from "./parser"; declare type ParserLike = string | (() => string) | RegExp | (() => RegExp) | Parser | (() => Parser); declare type ParserValue = T extends ParserLike ? T extends string ? T : T extends RegExp ? string : T extends Parser ? P : T extends () => infer R ? R extends string ? R : R extends RegExp ? string : R extends Parser ? P : never : never : never; declare type ToParser = Parser>; export declare type ParserValues = { [P in keyof T]: P extends `${number}` ? ParserValue : T[P]; }; export declare type LanguageInfo = { [P in keyof T]: T[P] extends (...args: infer R1) => infer R2 ? (...args: R1) => Parser : Parser; }; export declare type ParserContainer = { [P in keyof T]: T[P] extends (A1: infer R1, ...rest: infer R2) => infer R3 ? (info: LanguageInfo, A1: R1, ...rest: R2) => Parser : (info: LanguageInfo) => Parser; }; export declare type Markable = readonly [ParserLike] | ParserLike; export declare type MarkableToMono = NotUnion<{ [P in keyof T]: T[P] extends readonly [ParserLike] ? ToParser : never; }[number]>; declare type NotUnion = T extends any ? Org[] extends T[] ? Org : never : never; declare type Labelable = readonly [string, ParserLike] | ParserLike; declare type LabelableToObj = T extends [] ? Obj : T extends [readonly [infer Key, infer Value], ...infer Rest] ? Key extends string ? Value extends ParserLike ? Rest extends readonly Labelable[] ? LabelableToObj<[ ...Rest ], { [K in Key | keyof Obj]: K extends Key ? ParserValue : K extends keyof Obj ? Obj[K] : never; }> : { [K in Key | keyof Obj]: K extends Key ? ParserValue : K extends keyof Obj ? Obj[K] : never; } : Value : Key : T extends [ParserLike, ...infer Rest] ? Rest extends readonly Labelable[] ? LabelableToObj<[...Rest], Obj> : Obj : Obj; declare type PipeFn = (value: T1) => T2; interface Pipe { (a: A, ab: PipeFn): B; (a: A, ab: PipeFn, bc: PipeFn): C; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn): D; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn): E; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn): F; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn, fg: PipeFn): G; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn, fg: PipeFn, gh: PipeFn): H; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn, fg: PipeFn, gh: PipeFn, hi: PipeFn): I; (a: A, ab: PipeFn): B; (a: A, ab: PipeFn, bc: PipeFn): C; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn): D; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn): E; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn): F; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn, fg: PipeFn): G; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn, fg: PipeFn, gh: PipeFn): H; (a: A, ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn, fg: PipeFn, gh: PipeFn, hi: PipeFn): I; } declare const pipe: Pipe; interface Combine { (ab: PipeFn): B; (ab: PipeFn, bc: PipeFn): PipeFn; (ab: PipeFn, bc: PipeFn, cd: PipeFn): PipeFn; (ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn): PipeFn; (ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn): PipeFn; (ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn, fg: PipeFn): PipeFn; (ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn, fg: PipeFn, gh: PipeFn): PipeFn; (ab: PipeFn, bc: PipeFn, cd: PipeFn, de: PipeFn, ef: PipeFn, fg: PipeFn, gh: PipeFn, hi: PipeFn): PipeFn; } declare const combine: Combine; declare type Lazy = (func: () => Parser) => Parser; declare const lazy: Lazy; declare const toParser: (x: T) => Parser>; declare const toParsers: (xs: readonly [...T]) => Parser>[]; interface Of { (v1: T): Parser; (v2: T): Parser; (func1: () => T): Parser; (func2: () => RegExp): Parser; (fn3: () => Parser): Parser; (...parserLikes: T): Parser>; (...parserLikeOrLabeled: T): Parser>; } declare const of: Of; declare type DescFn = (prev: string, i: number) => string; interface Desc { (expect: string): (parser: Parser) => Parser; (descFn: DescFn): (parser: Parser) => Parser; } declare const desc: Desc; interface ParseResultDetail { readonly wholeText: string; readonly ok: boolean; readonly start: number; readonly end: number; readonly expect: string; readonly parsed: () => string; } interface MapResult { (onOk: (result: OkResult, i: ParseResultDetail) => ParseResult): (parser2: Parser) => Parser; (onOk: (result: OkResult, i: ParseResultDetail) => ParseResult, onFail: (result: FailResult, i: ParseResultDetail) => ParseResult): (parser2: Parser) => Parser; } declare const mapResult: MapResult; declare type MapOperator = { (mapFn1: (value: V, i: ParseResultDetail) => R): (parser: Parser) => Parser; }; declare const map: MapOperator; declare const seq: (...parserLikes: T) => Parser>; declare const seqToMono: (...markables: T) => NotUnion<{ [P in keyof T]: T[P] extends readonly [ParserLike] ? ToParser : never; }[number], { [P in keyof T]: T[P] extends readonly [ParserLike] ? ToParser : never; }[number]>; declare const seqObj: (...p: T) => Parser>; declare const createLanguage: (parsers: ParserContainer) => LanguageInfo; declare const alt: (...p: T) => Parser>; declare const peek: (x: T) => Parser>; declare const takeWhile: (predicate: ParserLike) => Parser; declare const takeTo: (stop_0: ParserLike, ...stop_1: ParserLike[]) => Parser; declare const between: (start: ParserLike, end: ParserLike) => Parser; interface Prev { (text: string): Parser; (parser: Parser, backTo: number): Parser; } declare const prev: Prev; export { toParser, toParsers, lazy, desc, map, mapResult, seq, seqToMono, seqObj, createLanguage, alt, peek, takeWhile, takeTo, pipe, prev, combine, between, alt as anyOf, of, }; export type { ParserValue, ToParser, ParserLike, ParseResultDetail as ParseResultDetaill, Labelable, }; //# sourceMappingURL=combinators.d.ts.map