import type { Unwrap } from "../utils/tricks"; type Token = Parser<[K, V]>; type Parser = (argv: Argv) => Match; type Match = MatchOk | MatchFail | MatchError; type MatchOk = { kind: "ok"; value: T; rest: Argv; }; type MatchFail = { kind: "fail"; }; type MatchError = { kind: "error"; rest: Argv; }; type Argv = string[]; type NotIn = [K] extends [keyof T] ? never : K; type TokenMap = { [K in keyof T]?: T[K][]; }; type TokensPublic = { add: (token: Token, V>) => TokensPrivate>; end: Parser>>; }; type TokensPrivate = TokensNext & TokensPublic; type TokensNext = { next: Parser<(obj: TokenMap) => void>; }; export type ArgParser = ReturnType; export type GetParserResult = [T] extends [ (...args: never[]) => Match> ] ? U : never; type ArgParserErrors = { argumentHasParameter: (param: string, argName: string) => void; unexpectedArgument: (text: string | undefined) => void; }; export declare const ArgParser: (Errors: ArgParserErrors) => { immediate: Token<"immediate", string>; boolean: (longName: K, shortName: string | undefined) => Token; string: (longName: K, shortName: string | undefined, argName: string) => Token; tokenizer: TokensPrivate; }; export {};