UNPKG

actionhero

Version:

The reusable, scalable, and quick node.js API server for stateless and stateful applications

35 lines (30 loc) 1.04 kB
import { Input } from "./input"; import { Action } from "../classes/action"; import { Task } from "../classes/task"; import { CLI } from "../classes/cli"; export interface Inputs { [key: string]: Input; } type ActionheroWithParams = Action | Task | CLI; type KeysOfType<T, U> = { [K in keyof T]: T[K] extends U ? K : never }[keyof T]; type FormatterOrString<I extends Input> = I["formatter"] extends ( ...args: any[] ) => any ? ReturnType<I["formatter"]> : string; type RequiredParamsKeys<A extends ActionheroWithParams> = KeysOfType< A["inputs"], Required >; type Variadic = { variadic: true }; type Required = Readonly<{ required: true }> | { required: true }; type ParamsExtractor<A extends ActionheroWithParams> = { [Input in keyof A["inputs"]]: A["inputs"][Input] extends Variadic ? FormatterOrString<A["inputs"][Input]>[] : FormatterOrString<A["inputs"][Input]>; }; export type ParamsFrom<A extends ActionheroWithParams> = Pick< ParamsExtractor<A>, RequiredParamsKeys<A> > & Partial<ParamsExtractor<A>>;