import { UnionToIntersection } from "@effect-ts/core/Utils"; import { DocumentNode } from "graphql"; import { Any as _A } from "ts-toolbelt"; import { AnyRootTypes, ExtendObjectType, FieldRecord, ObjectType, ScalarType } from "./containers"; export declare type AllResolvers< ApolloURI extends string, Ctx, Types extends AnyRootTypes[] > = _A.Compute< UnionToIntersection< { [k in keyof Types]: Types[k] extends ObjectType< infer URI, infer Name, infer Root, Ctx, infer FieldResolvers, infer Res, infer R, infer A > ? ApolloURI extends URI ? { [k in Name]: Res; } : never : Types[k] extends ExtendObjectType< infer URI, infer Root, Ctx, infer Type, infer Fields, infer Res, infer A > ? ApolloURI extends URI ? { [k in Type["name"]]: Res; } : never : never; }[keyof Types & number] > >; export declare type AllScalarDefinitions< ApolloURI extends string, Types extends AnyRootTypes[] > = _A.Compute< UnionToIntersection< { [k in keyof Types]: Types[k] extends ScalarType< infer URI, infer Name, infer Funcs, infer E, infer A > ? ApolloURI extends URI ? { [k in Name]: { functions: Funcs; name: Name; }; } : never : never; }[keyof Types & number] > >; export interface SchemaParts< ApolloURI extends string, Ctx, Types extends Array> > { resolvers: AllResolvers; scalars: AllScalarDefinitions; typeDefs: DocumentNode; } export interface SchemaGenerator { < Types extends [ ObjectType< ApolloURI, "Query", {}, Ctx, FieldRecord, any, any, any >, ...AnyRootTypes[] ] >( ...types: [...Types] ): SchemaParts; } export declare const makeSchemaGenerator: () => SchemaGenerator< ApolloURI, Ctx >;