/** * @since 1.0.0 */ import type * as Effect from "effect/Effect" import * as internal from "./internal/effectify.js" interface Callback { (err: E, a?: A): void } type ArgsWithCallback, E, A> = [...args: Args, cb: Callback] type WithoutNull = unknown extends A ? void : Exclude /** * Converts a callback-based function to a function that returns an `Effect`. * * @since 1.0.0 */ export type Effectify = T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 (...args: ArgsWithCallback): infer _R6 (...args: ArgsWithCallback): infer _R7 (...args: ArgsWithCallback): infer _R8 (...args: ArgsWithCallback): infer _R9 (...args: ArgsWithCallback): infer _R10 } ? { (...args: Args1): Effect.Effect, E> (...args: Args2): Effect.Effect, E> (...args: Args3): Effect.Effect, E> (...args: Args4): Effect.Effect, E> (...args: Args5): Effect.Effect, E> (...args: Args6): Effect.Effect, E> (...args: Args7): Effect.Effect, E> (...args: Args8): Effect.Effect, E> (...args: Args9): Effect.Effect, E> (...args: Args10): Effect.Effect, E> } : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 (...args: ArgsWithCallback): infer _R6 (...args: ArgsWithCallback): infer _R7 (...args: ArgsWithCallback): infer _R8 (...args: ArgsWithCallback): infer _R9 } ? { (...args: Args1): Effect.Effect, E> (...args: Args2): Effect.Effect, E> (...args: Args3): Effect.Effect, E> (...args: Args4): Effect.Effect, E> (...args: Args5): Effect.Effect, E> (...args: Args6): Effect.Effect, E> (...args: Args7): Effect.Effect, E> (...args: Args8): Effect.Effect, E> (...args: Args9): Effect.Effect, E> } : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 (...args: ArgsWithCallback): infer _R6 (...args: ArgsWithCallback): infer _R7 (...args: ArgsWithCallback): infer _R8 } ? { (...args: Args1): Effect.Effect, E> (...args: Args2): Effect.Effect, E> (...args: Args3): Effect.Effect, E> (...args: Args4): Effect.Effect, E> (...args: Args5): Effect.Effect, E> (...args: Args6): Effect.Effect, E> (...args: Args7): Effect.Effect, E> (...args: Args8): Effect.Effect, E> } : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 (...args: ArgsWithCallback): infer _R6 (...args: ArgsWithCallback): infer _R7 } ? { (...args: Args1): Effect.Effect, E> (...args: Args2): Effect.Effect, E> (...args: Args3): Effect.Effect, E> (...args: Args4): Effect.Effect, E> (...args: Args5): Effect.Effect, E> (...args: Args6): Effect.Effect, E> (...args: Args7): Effect.Effect, E> } : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 (...args: ArgsWithCallback): infer _R6 } ? { (...args: Args1): Effect.Effect, E> (...args: Args2): Effect.Effect, E> (...args: Args3): Effect.Effect, E> (...args: Args4): Effect.Effect, E> (...args: Args5): Effect.Effect, E> (...args: Args6): Effect.Effect, E> } : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 } ? { (...args: Args1): Effect.Effect, E> (...args: Args2): Effect.Effect, E> (...args: Args3): Effect.Effect, E> (...args: Args4): Effect.Effect, E> (...args: Args5): Effect.Effect, E> } : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 } ? { (...args: Args1): Effect.Effect, E> (...args: Args2): Effect.Effect, E> (...args: Args3): Effect.Effect, E> (...args: Args4): Effect.Effect, E> } : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 } ? { (...args: Args1): Effect.Effect, E> (...args: Args2): Effect.Effect, E> (...args: Args3): Effect.Effect, E> } : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 } ? { (...args: Args1): Effect.Effect, E> (...args: Args2): Effect.Effect, E> } : T extends { (...args: ArgsWithCallback): infer _R1 } ? { (...args: Args1): Effect.Effect, E> } : never /** * @category util * @since 1.0.0 */ export type EffectifyError = T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 (...args: ArgsWithCallback): infer _R6 (...args: ArgsWithCallback): infer _R7 (...args: ArgsWithCallback): infer _R8 (...args: ArgsWithCallback): infer _R9 (...args: ArgsWithCallback): infer _R10 } ? NonNullable : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 (...args: ArgsWithCallback): infer _R6 (...args: ArgsWithCallback): infer _R7 (...args: ArgsWithCallback): infer _R8 (...args: ArgsWithCallback): infer _R9 } ? NonNullable : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 (...args: ArgsWithCallback): infer _R6 (...args: ArgsWithCallback): infer _R7 (...args: ArgsWithCallback): infer _R8 } ? NonNullable : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 (...args: ArgsWithCallback): infer _R6 (...args: ArgsWithCallback): infer _R7 } ? NonNullable : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 (...args: ArgsWithCallback): infer _R6 } ? NonNullable : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 (...args: ArgsWithCallback): infer _R5 } ? NonNullable : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 (...args: ArgsWithCallback): infer _R4 } ? NonNullable : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 (...args: ArgsWithCallback): infer _R3 } ? NonNullable : T extends { (...args: ArgsWithCallback): infer _R1 (...args: ArgsWithCallback): infer _R2 } ? NonNullable : T extends { (...args: ArgsWithCallback): infer _R1 } ? NonNullable : never /** * @since 1.0.0 */ export const effectify: { /** * @since 1.0.0 */ ) => any>(fn: F): Effectify> /** * @since 1.0.0 */ ) => any, E>(fn: F, onError: (error: EffectifyError, args: Parameters) => E): Effectify /** * @since 1.0.0 */ ) => any, E, E2>( fn: F, onError: (error: EffectifyError, args: Parameters) => E, onSyncError: (error: unknown, args: Parameters) => E2 ): Effectify } = internal.effectify