UNPKG

@plugjs/plug

Version:
17 lines (16 loc) 1.52 kB
/** A type extacting string parameters from an arguments array */ export type ParsedParams<Args extends readonly any[]> = Args extends readonly [infer First, ...infer Rest] ? First extends string ? [First, ...ParsedParams<Rest>] : [] : Args extends readonly [...infer First, infer Rest] ? Rest extends string ? [...ParsedParams<First>, Rest] : [...ParsedParams<First>] : Args extends readonly string[] ? [...Args] : []; /** A type extacting the (last) options type from an arguments array */ export type ParsedOptions<Args extends readonly any[]> = Args extends readonly [...string[], infer Last] ? Last extends object ? Last : never : never; /** Parserable arguments: a number of strings, followed by optional options */ export type ParseOptions<Options extends Record<any, any>> = readonly [...params: string[]] | readonly [...params: string[], options: Options]; /** The return type from {@link ParseOptions} */ export interface ParsedResult<Args extends readonly any[], Options, Defaults> { params: ParsedParams<Args>; options: Defaults extends null | undefined ? Options | undefined : Options & Defaults; } /** * Parse an array of arguments (a number of strings optionally followed by an * options object into parameters and options. */ export declare function parseOptions<Args extends ParseOptions<any>, Options extends ParsedOptions<Args> = ParsedOptions<Args>, Defaults extends ParsedOptions<Args> | null | undefined = undefined>(args: Args, defaults?: Defaults): ParsedResult<Args, Options, Defaults>;