import type * as T from "@effect-ts/core/Effect"; import type * as U from "@effect-ts/core/Utils"; import type * as O from "@effect-ts/system/Option"; import { Context } from "./Context"; export interface ResolverInput { args: Args; ctx: Ctx; root: O.Option; } export interface SubscriptionResolverInput { ctx: Ctx; result: Root; } export declare type ResolverF = ( _: ResolverInput ) => T.Effect, E, A>; export interface SubscriptionResolverF< URI extends string, Root, Args, Ctx, SS, SR, SE, SA, RS, RR, RE, RA > { resolve?: ( _: SubscriptionResolverInput ) => T.Effect, RE, RA>; subscribe: ( _: ResolverInput ) => T.Effect, SE, AsyncIterable>; } export declare type FieldResolvers = { [k in keyof K]: | ResolverF | SubscriptionResolverF; }; export declare type SchemaResolvers = { [k in keyof N]: FieldResolvers; }; export declare type SchemaResolversEnv = Res extends SchemaResolvers< URI, any, Ctx, any, any > ? FieldResolversEnv, Ctx> : never; export declare type FieldResolversEnv = Res extends FieldResolvers< URI, any, Ctx, any > ? U.UnionToIntersection< { [k in keyof Res]: Res[k] extends ResolverF ? unknown extends R ? never : R : Res[k] extends SubscriptionResolverF< URI, any, any, Ctx, any, infer RS, any, any, any, infer RR, any, any > ? unknown extends RS ? unknown extends RR ? never : RR : unknown extends RR ? RS : RS & RR : never; }[keyof Res] > : never; export declare type AofResolver = Res extends ResolverF< any, any, any, any, any, any, any, infer A > ? A : never; export declare type EofResolver = Res extends ResolverF< any, any, any, any, any, any, infer E, any > ? E : never; export declare type RofResolver = Res extends ResolverF< any, any, any, any, any, infer R, any, any > ? R : never; export declare type SofResolver = Res extends ResolverF< any, any, any, any, infer S, any, any, any > ? S : never;