UNPKG

ts-graphql-query-genrator

Version:
40 lines (39 loc) 2.25 kB
declare type Unpacked<T> = T extends (infer U)[] ? U : T extends (...args: any[]) => infer U ? U : T extends Promise<infer U> ? U : T; declare type SpecialUnpack<T> = T extends (...args: any[]) => infer U ? U : T extends Promise<infer U> ? U : T; declare type ToUnpackModel<T extends {}> = { [K in keyof T]: SpecialUnpack<T[K]>; }; declare type PropertyName<T, F> = { [K in keyof T]: T[K] extends F ? K : never; }[keyof T]; declare type NonNullPropertyNames<T extends {}> = { [K in keyof T]: SpecialUnpack<T[K]> extends void | null | undefined ? never : K; }[keyof T]; declare type PrimitiveTypes = string | number | boolean | string[] | number[] | boolean[]; declare type PrimitivePropertyNames<T> = PropertyName<T, PrimitiveTypes>; declare type ObjectPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? never : Unpacked<T[K]> extends object ? K : never; }[keyof T]; declare type FunctionPropertyNameOnReturnType<T, U> = { [K in keyof T]: T[K] extends (...args: any[]) => any ? (ReturnType<T[K]> extends U ? K : never) : never; }[keyof T]; declare type PrimitiveFunctionPropertyNames<T> = FunctionPropertyNameOnReturnType<T, PrimitiveTypes>; declare type FunctionPropertyNames<T> = { [K in keyof T]: T[K] extends (...args: any[]) => any ? (ReturnType<T[K]> extends object ? K : never) : never; }[keyof T]; export declare class Query<TData extends {}> { private Prefix; private Indent; private Fields; private ObjectFields; private SimpleFunctionFields; private FunctionFields; constructor(Prefix?: string, Indent?: number); IncludeField(Key: PrimitivePropertyNames<TData>): this; IncludeObject<TCol extends ObjectPropertyNames<TData>, TIncl extends Unpacked<TData[TCol]>>(Key: TCol, Include: (q: Query<TIncl>) => any): this; IncludeSimpleFunction<TCol extends PrimitiveFunctionPropertyNames<TData>>(Key: TCol, ...args: [string, any][]): this; IncludeFunction<TCol extends FunctionPropertyNames<TData>>(Key: TCol, Include: (q: Query<Unpacked<TData[TCol]>>) => any, ...args: [string, any][]): this; ToQuery(): string; } export declare type ToGraphQLModel<T> = ToUnpackModel<ToUnpackModel<Pick<T, NonNullPropertyNames<T>>>>; export {};