import { Primitive } from './typescript' // eslint-disable-next-line @typescript-eslint/ban-types export type Caged = Primitive | object | null | undefined export type Cage = Value | (() => Value) export type CageP = Value | (() => Value) | (() => Promise) export function uncage(cage: (() => Value)): Value export function uncage(cage: Value): Value export function uncage(cage: Cage) { if (typeof cage === 'function') { return cage() } else { return cage } } export function uncageP(cage: (() => Promise)): Promise export function uncageP(cage: (() => Value)): Promise export function uncageP(cage: Value): Promise export async function uncageP(cage: CageP) { if (typeof cage === 'function') { return await cage() } else { return cage } }