UNPKG

prostgles-types

Version:

Shared TypeScript object definitions for prostgles-client and prostgles-server

53 lines 2.08 kB
import type { CommonSelect, DBSchema } from "."; type JoinSelect<S extends DBSchema, ParentK extends keyof S> = Partial<{ [K in keyof Omit<S, ParentK>]: SelectV2<Omit<S, ParentK>, K>; }>; declare const FUNCTIONS: { readonly count: { readonly run: (colName: string) => void; }; readonly max: { readonly run: (colName: string) => number; }; readonly countAll: { readonly run: () => number; }; }; type OneOf<T> = { [K in keyof T]: Pick<T, K> & Partial<Record<Exclude<keyof T, K>, never>>; }[keyof T]; type Functions = typeof FUNCTIONS; type FunctionName = keyof typeof FUNCTIONS; type FunctionAliasedSelect = { [alias: string]: OneOf<{ [F in FunctionName]: Parameters<Functions[F]["run"]>; }>; }; /** * Functions where the first argument is a column name */ type ShorthandFunction = keyof Functions; export type SelectV2<S extends DBSchema, K extends keyof S, T = S[K]["columns"]> = ({ [K in keyof Partial<T>]: true | 1 | ShorthandFunction; } & Omit<JoinSelect<S, K>, keyof T> & Omit<FunctionAliasedSelect, keyof T>) | { [K in keyof Partial<T>]: true | 1 | string; } | { [K in keyof Partial<T>]: 0 | false; } | CommonSelect | (keyof Partial<T>)[]; export type SelectV2ReturnType<S extends DBSchema, K extends keyof S, Sel extends SelectV2<S, K>> = Sel extends (keyof S[K]["columns"])[] ? { [C in Sel[number]]: S[K]["columns"][C]; } : Sel extends "*" ? S[K]["columns"] : Sel extends "" ? Record<string, never> : Sel extends { [key: string]: any; } ? { [C in keyof Sel as Sel[C] extends true | 1 ? C : never]: C extends keyof S[K]["columns"] ? S[K]["columns"][C] : never; } & { [C in keyof Sel as Sel[C] extends ShorthandFunction ? C : never]: number; } & { [C in keyof Sel as Sel[C] extends [infer ColName] ? ColName extends keyof S[K]["columns"] ? C : never : never]: number; } & { [C in keyof Sel as C extends keyof S ? never : Sel[C] extends { [F in FunctionName]: any; } ? C : never]: number; } : never; export {}; //# sourceMappingURL=selectTypesV2.d.ts.map