import * as Effect from "effect/Effect" import type { Effectify, EffectifyError } from "../Effectify.js" /** @internal */ export const effectify: { ) => any>(fn: F): Effectify> ) => any, E>( fn: F, onError: (error: EffectifyError, args: Parameters) => E ): Effectify ) => any, E, E2>( fn: F, onError: (error: EffectifyError, args: Parameters) => E, onSyncError: (error: unknown, args: Parameters) => E2 ): Effectify } = ((fn: Function, onError?: (e: any, args: any) => any, onSyncError?: (e: any, args: any) => any) => (...args: Array) => Effect.async((resume) => { try { fn(...args, (err: Error | null, result: A) => { if (err) { resume(Effect.fail(onError ? onError(err, args) : err)) } else { resume(Effect.succeed(result)) } }) } catch (err) { resume(onSyncError ? Effect.fail(onSyncError(err, args)) : Effect.die(err)) } })) as any