import { Defined } from './commonTypes'; import type { QueryBase } from './queryTypes'; export type SelectFieldPrimitive = { $name: string; $fields: SelectFieldPrimitive[]; $alias: string; $on: string; as: (alias: string) => SelectFieldPrimitive; }; export type SelectFieldPrimitives = Array>; type SelectFieldObjectFn = (select: ((s: Select) => SelectFieldPrimitives) | QueryBase) => SelectFieldPrimitive; type SelectFieldObject = Field extends Array ? SelectFieldPrimitive : SelectFieldObjectFn & Select; type SelectField = Field extends object ? SelectFieldObject : SelectFieldPrimitive; type SelectX = { [K in keyof Def]: SelectField; } & { on: (type: string, cb: (s: Select>) => SelectFieldPrimitives) => SelectFieldPrimitives; }; export type Select = SelectX ? Def[0] : Def>>; export {};