UNPKG

termost

Version:
110 lines (102 loc) 4.36 kB
type CommandName = string; type ObjectLikeConstraint = Record<string, any>; type EmptyObject = {}; /** * Raw CLI arguments parsed from user inputs. */ type ArgumentValues = { command: CommandName; operands: string[]; options: Record<string, boolean | number | string>; }; type PackageMetadata = { name: string; description: string; version: string; }; type Context<Values extends ObjectLikeConstraint> = Values; type InstructionParameters<Values extends ObjectLikeConstraint, ExtraParameters extends ObjectLikeConstraint = EmptyObject> = ExtraParameters & { skip?: (context: Context<Values>, argv: ArgumentValues) => boolean; }; type InstructionKey<Key> = { /** * Makes the method output available in the context object. * By default, if no provided key, the output is not included in the context. */ key: Key; }; type Label<Values extends ObjectLikeConstraint> = string | ((context: Context<Values>, argv: ArgumentValues) => string); type TaskParameters<Values extends ObjectLikeConstraint, Key extends keyof Values | undefined = undefined> = InstructionParameters<Values, Partial<InstructionKey<Key>> & { label?: Label<Values>; handler: (context: Context<Values>, argv: ArgumentValues) => Key extends keyof Values ? Promise<Values[Key]> | Values[Key] : Promise<void> | void; }>; type CommandParameters = { name: string; description: string; }; type OptionParameters<Values extends ObjectLikeConstraint, Key extends keyof Values> = InstructionParameters<Values, InstructionKey<Key> & { name: string | { long: string; short: string; }; description: string; defaultValue?: Values[Key]; }>; type InputParameters<Values extends ObjectLikeConstraint, Key extends keyof Values> = InstructionParameters<Values, InstructionKey<Key> & ({ label: Label<Values>; defaultValue?: Values[Key] extends boolean ? Values[Key] : never; type: "confirm"; } | { label: Label<Values>; defaultValue?: Values[Key] extends string ? Values[Key] : never; options: Values[Key] extends string ? Values[Key][] : never; type: "select"; } | { label: Label<Values>; defaultValue?: Values[Key] extends string ? Values[Key] : never; type: "text"; } | { label: Label<Values>; defaultValue?: Values[Key] extends string[] ? Values[Key] : never; options: Values[Key] extends string[] ? Values[Key] : never; type: "multiselect"; })>; /** * The termost fluent interface API. */ type Termost<Values extends ObjectLikeConstraint = EmptyObject> = { /** * Allows to attach a new sub-command to the program. * @param name - The CLI command name. * @param description - The CLI command description. * @returns The Command API. */ command: <CommandValues extends ObjectLikeConstraint = EmptyObject>(parameters: CommandParameters) => Termost<CommandValues & Values>; input: <Key extends keyof Values>(parameters: InputParameters<Values, Key>) => Termost<Values>; option: <Key extends keyof Values>(parameters: OptionParameters<Values, Key>) => Termost<Values>; task: <Key extends keyof Values | undefined = undefined>(parameters: TaskParameters<Values, Key>) => Termost<Values>; }; declare function termost<Values extends ObjectLikeConstraint = EmptyObject>({ name, description, onException, onShutdown, version, }: PackageMetadata & TerminationCallbacks): Termost<Values>; type TerminationCallbacks = Partial<{ onException: ((error: Error) => void) | undefined; onShutdown: (() => void) | undefined; }>; declare const helpers: { exec: (command: string, options?: { cwd?: string; hasLiveOutput?: boolean; }) => Promise<string>; format: (message: string, options?: { color?: "black" | "blue" | "cyan" | "green" | "grey" | "magenta" | "red" | "white" | "yellow"; modifiers?: ("bold" | "italic" | "lowercase" | "strikethrough" | "underline" | "uppercase")[]; }) => string; message: (content: Error | string, { label: optionLabel, lineBreak: optionlineBreak, type: optionType, }?: { label?: string | false; lineBreak?: { end: boolean; start: boolean; } | boolean; type?: "error" | "information" | "success" | "warning"; }) => void; }; export { type Termost, helpers, termost };