import {ParameterReducer} from './types'; export type Chain = ParameterReducer & { addParam: (param: ParameterReducer) => Chain; }; export function startChain( param: ParameterReducer = () => undefined, ): Chain { return Object.assign( (input: string[], parsed: S) => param(input, parsed), { addParam: (childParam: ParameterReducer): Chain => startChain( (input, parsed) => (param(input, parsed) as any) || childParam(input, parsed), ), }, ); }