import { ExcludeMatchingProperties } from "@0x706b/convenience-ts/Utils"; import { Any as _A } from "ts-toolbelt"; import { InputTypeConfig, OutputTypeConfig } from "../Config"; import { AnyExtendObjectType } from "./ExtendObjectType"; import { AnyFieldType, FieldType } from "./FieldType"; import { AnyInputObjectType } from "./InputObjectType"; import { InputObjectValueType } from "./InputObjectValueType"; import { InputValueType } from "./InputValueType"; import { AnyObjectFieldType, ObjectFieldType } from "./ObjectFieldType"; import { AnyObjectType } from "./ObjectType"; import { RecursiveType } from "./RecursiveObjectType"; import { AnyScalarFieldType, ScalarFieldType } from "./ScalarFieldType"; import { AnyScalarType } from "./ScalarType"; export type AnyField = | AnyScalarFieldType | AnyObjectFieldType; export type AnyOutputType = | AnyScalarFieldType | AnyObjectType | AnyFieldType | RecursiveType | AnyObjectFieldType; export type AnyOutputFieldType = | AnyScalarFieldType | AnyFieldType | RecursiveType | AnyObjectFieldType; export type AnyRootTypes = | AnyInputObjectType | AnyObjectType | AnyExtendObjectType | AnyScalarType; export type FieldRecord = Partial< { [k in keyof Root]: Root[k] extends Iterable ? | ScalarFieldType | FieldType< ApolloURI, OutputTypeConfig, AnyField, Root, any, any, any, any > : Root[k] extends { [x: string]: any } ? | ObjectFieldType< ApolloURI, OutputTypeConfig, Root[k], Ctx, any, { [k1 in keyof Root[k]]: Root[k][k1] } > | FieldType< ApolloURI, OutputTypeConfig, AnyField, Root, any, Ctx, any, any > : | ScalarFieldType | FieldType< ApolloURI, OutputTypeConfig, AnyField, Root, any, Ctx, any, any > | RecursiveType | ObjectFieldType; } > & { [k in Exclude]: | FieldType | ScalarFieldType | RecursiveType | ObjectFieldType< ApolloURI, OutputTypeConfig, any, Ctx, AnyObjectType, any >; }; export type FieldResolverRecord< ApolloURI extends string, Fields extends FieldRecord > = _A.Compute< ExcludeMatchingProperties< { [k in keyof Fields]: Fields[k] extends FieldType< any, any, any, any, infer Args, any, infer Res, any > ? Res : never; }, never > >; export type InputRecord = { [k in keyof Args]: | InputValueType, any> | InputObjectValueType, AnyInputObjectType, any>; };