t-graphql
Version:
typed GraphQL - end-to-end type-safe GraphQL for TypeScript. Think tRPC, but GraphQL
43 lines (42 loc) • 3.87 kB
TypeScript
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 {};