import { addStackTrace, type TestLogs } from '../api/TestLogs'; export type NextFn = (value: T, logs: TestLogs) => void; export type DieFn = (err: any, logs: TestLogs) => void; export type RunFn = (value: T, next: NextFn, die: DieFn, logs: TestLogs) => void; export const Pipe = (f: RunFn): RunFn => (value: T, next: NextFn, die: DieFn, logs: TestLogs): void => { const bounceNext = (value, nextLogs) => { // eslint-disable-next-line @typescript-eslint/no-floating-promises Promise.resolve().then(() => { next(value, nextLogs); }); }; try { f(value, bounceNext, die, logs); } catch (err) { const logsWithTrace = addStackTrace(logs, err); die(err, logsWithTrace); } };