import { isFunction, isString } from 'remeda' import { Cage, CageP } from '../cage' export type ErrorCage = string | Cage export type ErrorCageP = string | CageP export function uncageE(cage: (() => Error)): Error export function uncageE(cage: Error): Error export function uncageE(cage: ErrorCage) { if (isFunction(cage)) { return cage() } else if (isString(cage)) { return new Error(cage) } else { return cage } } export function uncageEP(cage: (() => Promise)): Promise export function uncageEP(cage: (() => Error)): Promise export function uncageEP(cage: Error): Promise export async function uncageEP(cage: ErrorCageP) { if (isFunction(cage)) { return await cage() } else if (isString(cage)) { return new Error(cage) } else { return cage } }