/* IMPORT */ import { OWNER } from '../objects/superroot' import memo from '~/methods/memo' import $ from '~/methods/observable' import resolve from '~/methods/resolve' import type { TryCatchFunction, ObservableReadonly, Resolved } from '~/types' /* MAIN */ const tryCatch = (value: T, fn: TryCatchFunction): ObservableReadonly> => { const observable = $() return memo((stack) => { const error = observable() if (error) { const reset = () => observable(undefined) const options = { error, reset } return resolve(fn(options)) } else { OWNER.errorHandler = observable return resolve(value) } }) } /* EXPORT */ export default tryCatch