@odyssoft/tsorm
Version:
TypeScript ORM for MySQL
25 lines (24 loc) • 1.68 kB
TypeScript
import { KeyOf, OperatorType, Or, SelectOptions, StringOverride } from './';
export declare type Alias<T, A extends string> = {
[K in keyof T as K extends string ? `${A}.${K}` : never]: T[K];
};
export declare type OnJoin<T> = Or<JoinOptions<T>> | JoinOptions<T>;
export declare type AliasModel<T> = {
[key: string]: any;
join: <S, A extends string>(alias: AliasModel<Alias<S, A>>, join: Join, on: OnJoin<T & Alias<S, A>>) => AliasModel<T & Alias<S, A>>;
select: (query?: SelectOptions<T>) => Promise<T[]>;
SQL: () => SQLAliasModel<T>;
crossJoin: <S, A extends string>(alias: AliasModel<Alias<S, A>>, on: OnJoin<T & Alias<S, A>>) => AliasModel<T & Alias<S, A>>;
innerJoin: <S, A extends string>(alias: AliasModel<Alias<S, A>>, on: OnJoin<T & Alias<S, A>>) => AliasModel<T & Alias<S, A>>;
leftJoin: <S, A extends string>(alias: AliasModel<Alias<S, A>>, on: OnJoin<T & Alias<S, A>>) => AliasModel<T & Alias<S, A>>;
leftOuterJoin: <S, A extends string>(alias: AliasModel<Alias<S, A>>, on: OnJoin<T & Alias<S, A>>) => AliasModel<T & Alias<S, A>>;
rightJoin: <S, A extends string>(alias: AliasModel<Alias<S, A>>, on: OnJoin<T & Alias<S, A>>) => AliasModel<T & Alias<S, A>>;
rightOuterJoin: <S, A extends string>(alias: AliasModel<Alias<S, A>>, on: OnJoin<T & Alias<S, A>>) => AliasModel<T & Alias<S, A>>;
};
export declare type Join = 'CROSS' | 'INNER' | 'LEFT' | 'RIGHT' | 'LEFT OUTER' | 'RIGHT OUTER';
export declare type JoinOptions<T> = {
[Key in KeyOf<T>]?: boolean | number | null | OperatorType<T> | OperatorType<T>[] | StringOverride;
};
export declare type SQLAliasModel<T> = {
select: (query?: SelectOptions<T>) => string;
};