/* IMPORT */ import { OWNER } from '../objects/superroot' import Context from '~/objects/context' import { isSymbol, noop } from '~/utils' import type { ContextFunction, Contexts } from '~/types' import { callStack } from './debugger' /* MAIN */ function context(symbol: symbol): T | undefined function context(context: Contexts, fn: ContextFunction): T function context(symbolOrContext: symbol | Contexts, fn?: ContextFunction) { if (isSymbol(symbolOrContext)) { return OWNER.context[symbolOrContext] } else { const stack = callStack() return new Context(symbolOrContext).wrap(fn || noop, undefined as any, undefined, stack) } } /* EXPORT */ export default context