import { stringify } from '../JSON' import { Mapper } from '../Mapper' import { Modifier } from '../Modifier' import { Runner } from '../Runner' export function withErrorContext(runner: Runner, mutatorOfCaughtValue: Modifier) { try { return runner() } catch (e) { throw mutatorOfCaughtValue(e) } } export function ifErrorThenMapElseThrow(mapper: Mapper) { return (something: unknown) => { throw (something instanceof Error) ? mapper(something) : something } } export const concatErrorMessage = (suffix: string) => (error: Error) => new Error(error.message + ' ' + suffix) export const addContextString = (context: unknown) => ifErrorThenMapElseThrow(concatErrorMessage(stringify(context)))