UNPKG

t-graphql

Version:

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

13 lines (12 loc) 1.03 kB
import { AnyObjectType, ObjectType } from '../outputs/ObjectType'; import { AnyUnionType, UnionType } from '../outputs/UnionType'; import { AnySchemaType, SchemaType } from '../SchemaType'; import { AnyType } from '../types/AnyType.type'; import { ObjectUnionToObjectIntersection } from '../types/ObjectUnionToObjectIntersection.type'; type NestedUnionTypes<T extends AnyType> = T extends [infer I extends AnyObjectType | AnyUnionType, null] ? NestedUnionTypes<I> : T extends [infer I extends AnyObjectType | AnyUnionType] ? NestedUnionTypes<I> : T extends UnionType<infer N, infer I> ? { [typename in N]: T; } & NestedUnionTypes<I[number]> : T extends ObjectType<string, infer I> ? ObjectUnionToObjectIntersection<{ [field in keyof I]: NestedUnionTypes<I[field]['type']>; }[keyof I]> : Record<never, any>; export type SchemaUnionTypes<Schema extends AnySchemaType> = Schema extends SchemaType<infer Q, infer M, infer S> ? NestedUnionTypes<Q> & NestedUnionTypes<M> & NestedUnionTypes<S> : Record<never, any>; export {};