export interface ContinueResult { ok: true; stop: false; output: CO; error: undefined; } export interface StopResult { ok: true; stop: true; output: SO; error: undefined; } export interface ErrorResult { ok: false; stop: true; output: undefined; error: E; } export declare type Result = ContinueResult | StopResult | ErrorResult; export interface Step { (input: I): Result; } export declare type StepInput = T extends Step ? I : never; export declare type StepOutput = T extends Step ? CO | SO : never; export declare type StepError = T extends Step ? E : never; export interface Chain extends Step { then(step: Step): Chain; and(step: Step): Chain; } export declare type ChainInput = T extends Chain ? I : never; export declare type ChainOutput = T extends Chain ? CO | SO : never; export declare type ChainError = T extends Chain ? E : never;