type FieldsSelection | undefined, DST> = { scalar: SRC; union: Handle__isUnion; object: HandleObject; array: SRC extends Nil ? never : SRC extends Array ? Array> : never; __scalar: Handle__scalar; never: never; }[DST extends Nil ? "never" : DST extends false | 0 ? "never" : SRC extends Scalar ? "scalar" : SRC extends any[] ? "array" : SRC extends { __isUnion?: any; } ? "union" : DST extends {} ? "object" : "never"]; type HandleObject, DST> = DST extends boolean ? SRC : SRC extends Nil ? never : Pick<{ [Key in keyof SRC]: Key extends keyof DST ? FieldsSelection> : SRC[Key]; }, Exclude>; type Handle__scalar, DST> = SRC extends Nil ? never : Pick<{ [Key in keyof SRC]: Key extends keyof DST ? FieldsSelection : SRC[Key]; }, { [Key in keyof SRC]: SRC[Key] extends Nil ? never : Key extends FieldsToRemove ? never : SRC[Key] extends Scalar ? Key : Key extends keyof DST ? Key : never; }[keyof SRC]>; type Handle__isUnion, DST> = SRC extends Nil ? never : Omit; type Scalar = string | number | Date | boolean | null | undefined; type Anify = { [P in keyof T]?: any; }; type FieldsToRemove = "__isUnion" | "__scalar" | "__name" | "__fragmentOn" | "__args"; type Nil = undefined | null; export type { FieldsSelection };