flowie
Version:
Library for creating, and working with flows
38 lines (37 loc) • 4.8 kB
TypeScript
import { Map as ImmutableMap } from 'immutable';
import { FlowResult2, FlowFunctionResult2 } from './flowieResult2';
export { FlowResult2, FlowFunctionResult2 };
export interface Flowie2<Argument, Result, InitialArgument = Argument> extends FlowieExtender<Argument, Result, InitialArgument> {
(parameter: InitialArgument): Promise<FlowResult2<Result>>;
}
export interface FlowieExtender<Argument, Result, InitialArgument = Argument> {
readonly split: SplitFlowFunction2<Result, InitialArgument>;
readonly pipe: PipeFlowFunction<Result, InitialArgument>;
}
export interface PipeFlowFunction<Result, InitialArgument> {
<NewResult>(flowItem: FlowItem<Result, NewResult>): Flowie2<Result, NewResult, InitialArgument>;
}
export interface SplitFlowFunction2<Result, InitialArgument> {
<NewResult1, NewResult2>(flowItem1: FlowItem<Result, NewResult1, InitialArgument>, flowItem2: FlowItem<Result, NewResult2, InitialArgument>): Flowie2<Result, readonly [NewResult1, NewResult2], InitialArgument>;
<NewResult1, NewResult2, NewResult3>(flowItem1: FlowItem<Result, NewResult1, InitialArgument>, flowItem2: FlowItem<Result, NewResult2, InitialArgument>, flowItem3: FlowItem<Result, NewResult3, InitialArgument>): Flowie2<Result, readonly [NewResult1, NewResult2, NewResult3], InitialArgument>;
<NewResult1, NewResult2, NewResult3, NewResult4>(flowItem1: FlowItem<Result, NewResult1, InitialArgument>, flowItem2: FlowItem<Result, NewResult2, InitialArgument>, flowItem3: FlowItem<Result, NewResult3, InitialArgument>, flowItem4: FlowItem<Result, NewResult4, InitialArgument>): Flowie2<Result, readonly [NewResult1, NewResult2, NewResult3, NewResult4], InitialArgument>;
<NewResult1, NewResult2, NewResult3, NewResult4, NewResult5>(flowItem1: FlowItem<Result, NewResult1, InitialArgument>, flowItem2: FlowItem<Result, NewResult2, InitialArgument>, flowItem3: FlowItem<Result, NewResult3, InitialArgument>, flowItem4: FlowItem<Result, NewResult4, InitialArgument>, flowItem5: FlowItem<Result, NewResult5, InitialArgument>): Flowie2<Result, readonly [NewResult1, NewResult2, NewResult3, NewResult4, NewResult5], InitialArgument>;
<NewResult1, NewResult2, NewResult3, NewResult4, NewResult5, NewResult6>(flowItem1: FlowItem<Result, NewResult1, InitialArgument>, flowItem2: FlowItem<Result, NewResult2, InitialArgument>, flowItem3: FlowItem<Result, NewResult3, InitialArgument>, flowItem4: FlowItem<Result, NewResult4, InitialArgument>, flowItem5: FlowItem<Result, NewResult5, InitialArgument>, flowItem6: FlowItem<Result, NewResult6, InitialArgument>): Flowie2<Result, readonly [NewResult1, NewResult2, NewResult3, NewResult4, NewResult5, NewResult6], InitialArgument>;
<NewResult1, NewResult2, NewResult3, NewResult4, NewResult5, NewResult6, NewResult7>(flowItem1: FlowItem<Result, NewResult1, InitialArgument>, flowItem2: FlowItem<Result, NewResult2, InitialArgument>, flowItem3: FlowItem<Result, NewResult3, InitialArgument>, flowItem4: FlowItem<Result, NewResult4, InitialArgument>, flowItem5: FlowItem<Result, NewResult5, InitialArgument>, flowItem6: FlowItem<Result, NewResult6, InitialArgument>, flowItem7: FlowItem<Result, NewResult7, InitialArgument>): Flowie2<Result, readonly [NewResult1, NewResult2, NewResult3, NewResult4, NewResult5, NewResult6, NewResult7], InitialArgument>;
<NewResult1, NewResult2, NewResult3, NewResult4, NewResult5, NewResult6, NewResult7, NewResult8>(flowItem1: FlowItem<Result, NewResult1, InitialArgument>, flowItem2: FlowItem<Result, NewResult2, InitialArgument>, flowItem3: FlowItem<Result, NewResult3, InitialArgument>, flowItem4: FlowItem<Result, NewResult4, InitialArgument>, flowItem5: FlowItem<Result, NewResult5, InitialArgument>, flowItem6: FlowItem<Result, NewResult6, InitialArgument>, flowItem7: FlowItem<Result, NewResult7, InitialArgument>, flowItem8: FlowItem<Result, NewResult8, InitialArgument>): Flowie2<Result, readonly [NewResult1, NewResult2, NewResult3, NewResult4, NewResult5, NewResult6, NewResult7, NewResult8], InitialArgument>;
(...flowItemsList: readonly FlowItem<Result, any, InitialArgument>[]): Flowie2<Result, readonly any[], InitialArgument>;
}
export declare type FlowItem<Argument = any, Result = any, InitialArgument = Argument> = FlowFunction<Argument, Result> | Flowie2<Argument, Result, InitialArgument>;
export interface FlowFunction<Argument = any, Result = any> {
(firstargument: Argument): Unpacked<Result>;
}
export interface Flow {
readonly pipe?: readonly string[];
readonly split?: readonly string[];
}
export interface FunctionReport<Result> {
readonly result: Result;
readonly functionsReport: ImmutableMap<string, FlowFunctionResult2>;
}
export declare type NoTypedFlowie = Flowie2<any, any>;
export declare type Unpacked<T> = T extends Promise<infer U> ? U : T;