UNPKG

t-graphql

Version:

typed GraphQL - end-to-end type-safe GraphQL for TypeScript. Think tRPC, but GraphQL

43 lines (42 loc) 3.87 kB
import { AnyObjectType } from '../outputs/ObjectType'; import { AnyUnionType, UnionTypeNames } from '../outputs/UnionType'; import { AnySchemaType } from '../SchemaType'; import { Prettify } from '../types/Prettify.type'; import { Value } from '../types/Value.type'; import { ResolvedValue } from './ResolvedValue.type'; import { ObjectFieldGeneratorResolver, ObjectFieldResolver } from './Resolver.type'; import { SchemaEntities } from './SchemaEntities.type'; import { SchemaObjectTypeResolver } from './SchemaObjectTypeResolver.type'; import { SchemaObjectTypes } from './SchemaObjectTypes.type'; import { SchemaUnionTypes } from './SchemaUnionTypes.type'; import { UnionResolver } from './UnionResolver.type'; type EntitiesWithDefaults<Schema extends AnySchemaType, Entities extends SchemaEntities<AnySchemaType>> = Entities & { [typename in Exclude<Extract<keyof SchemaObjectTypes<Schema>, string>, keyof Entities | Schema['Query']['typename'] | Schema['Mutation']['typename'] | Schema['Subscription']['typename']>]: ResolvedValue<SchemaObjectTypes<Schema>[typename], Entities>; }; type UnresolvedSchemaObjectTypeFields<Schema extends AnySchemaType, T extends AnyObjectType, Entities extends SchemaEntities<AnySchemaType>> = Exclude<keyof Value<T>, keyof EntitiesWithDefaults<Schema, Entities>[T['typename']]>; export type UnresolvedSchemaObjectTypesnames<Schema extends AnySchemaType, Entities extends SchemaEntities<AnySchemaType>> = { [typename in Extract<keyof SchemaObjectTypes<Schema>, string>]: UnresolvedSchemaObjectTypeFields<Schema, SchemaObjectTypes<Schema>[typename], Entities> extends infer Fields ? Fields extends string ? typename : never : never; }[Extract<keyof SchemaObjectTypes<Schema>, string>]; /** * Type that can be used to implement a complete set of resolvers for a schema. */ export type CompleteSchemaResolvers<Schema extends AnySchemaType, Entities extends SchemaEntities<Schema> = never, Context = never> = Prettify<{ [typename in Extract<keyof SchemaObjectTypes<Schema>, UnresolvedSchemaObjectTypesnames<Schema, Entities>>]: SchemaObjectTypes<Schema>[typename] extends AnyObjectType ? SchemaObjectTypeResolver<Schema, typename, EntitiesWithDefaults<Schema, Entities>, Context> : never; } & { [typename in Exclude<Extract<keyof SchemaObjectTypes<Schema>, string>, UnresolvedSchemaObjectTypesnames<Schema, Entities> | keyof Schema['Query']['schema'] | keyof Schema['Mutation']['schema'] | keyof Schema['Subscription']['schema']>]?: SchemaObjectTypes<Schema>[typename] extends AnyObjectType ? SchemaObjectTypeResolver<Schema, typename, EntitiesWithDefaults<Schema, Entities>, Context> : never; } & { [typename in Extract<keyof SchemaUnionTypes<Schema>, string>]: SchemaUnionTypes<Schema>[typename] extends AnyUnionType ? UnionResolver<Value<SchemaUnionTypes<Schema>[typename]>, UnionTypeNames<SchemaUnionTypes<Schema>[typename]>, Context> : never; } & (Schema['Query']['schema'] extends Record<never, any> ? Record<never, any> : { [typename in Schema['Query']['typename']]: SchemaObjectTypeResolver<Schema, typename, EntitiesWithDefaults<Schema, Entities>, Context>; }) & (Schema['Mutation']['schema'] extends Record<never, any> ? Record<never, any> : { [typename in Schema['Mutation']['typename']]: { [mutationField in keyof Schema['Mutation']['schema']]: ObjectFieldResolver<never, Schema['Mutation']['schema'][mutationField], EntitiesWithDefaults<Schema, Entities>, Context>; }; }) & (Schema['Subscription']['schema'] extends Record<never, any> ? Record<never, any> : { [typename in Schema['Subscription']['typename']]: { [subscriptionField in keyof Schema['Subscription']['schema']]: { subscribe: ObjectFieldGeneratorResolver<never, Schema['Subscription']['schema'][subscriptionField], EntitiesWithDefaults<Schema, Entities>, Context>; }; }; })>; export {};