type Scalar = string | number | Date | boolean | null | undefined; type FieldsToRemove = '__alias' | '__isUnion' | '__scalar' | '__name'; type Nil = undefined | null; /** * FieldsSelection is a recursive type that creates a response type based on request type and fields */ export type FieldsSelection = { tuple: DST extends Nil ? never : DST extends readonly [any, infer PAYLOAD] ? FieldsSelection : never; scalar: SRC; union: Handle__isUnion; object: HandleObject; array: SRC extends Nil ? never : SRC extends (infer T)[] ? Array> : never; __scalar: Handle__scalar; never: never; }[DST extends Nil ? 'never' : SRC extends Nil ? 'never' : DST extends readonly [any, any] ? 'tuple' : DST extends false | 0 ? 'never' : SRC extends Scalar ? 'scalar' : SRC extends any[] ? 'array' : SRC extends { __isUnion?: any; } ? 'union' : DST extends { __scalar?: any; } ? '__scalar' : DST extends {} ? 'object' : 'never']; /** * HandleObject processes object types in the selection */ type HandleObject = SRC extends Nil ? never : Pick<{ [Key in keyof SRC]: Key extends keyof DST ? FieldsSelection, NonNullable> : SRC[Key]; }, Extract, keyof SRC>> & HandleAliases; type HandleAliases = DST extends { __alias?: infer ALIASES; } ? ALIASES extends Record ? { [Alias in keyof ALIASES]: HandleAlias; } : {} : {}; type HandleAlias = { [Key in Extract]: FieldsSelection, NonNullable>; }[Extract]; /** * Handle__scalar adds all scalar properties excluding non-scalar props */ type Handle__scalar = 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]>; /** * Handle__isUnion processes union types in the selection */ type Handle__isUnion = SRC extends Nil ? never : Omit; export {}; //# sourceMappingURL=typeSelection.d.ts.map