@plugjs/plug
Version:
PlugJS Build System ===================
17 lines (16 loc) • 1.52 kB
TypeScript
/** 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>;