import { ErrorCode, type IpcError, type IpcResult } from '../../shared/types' export function ok(data: T): IpcResult { return { ok: true, data } } export function fail(code: ErrorCode, message: string, recoverable: boolean): IpcResult { return { ok: false, error: { code, message, recoverable } } } export function wrap(fn: () => T | Promise, recoverable = true): IpcResult | Promise> { try { const out = fn() if (out && typeof (out as Promise).then === 'function') { return (out as Promise) .then((data) => ok(data)) .catch((e) => { const message = e instanceof Error ? e.message : String(e) return fail(ErrorCode.UNKNOWN, message, recoverable) }) } return ok(out as T) } catch (e) { const message = e instanceof Error ? e.message : String(e) return fail(ErrorCode.UNKNOWN, message, recoverable) } }