@odyssoft/tsorm
Version:
TypeScript ORM for MySQL
69 lines (68 loc) • 3.32 kB
TypeScript
import { FieldPacket, OkPacket, RowDataPacket } from 'mysql2';
import { Alias, AliasModel, ColumnOptions, Indexable, KeyOf, OperatorType, Or } from './';
export declare type DeleteOptions = {
limit?: number;
};
export declare type ModelKeys<T> = {
[key in KeyOf<T>]-?: ColumnOptions;
} & Indexable;
export declare type ModelType<T> = {
new (data: T): {
data: T;
save: (options?: InsertOptions) => Promise<T>;
};
delete: (query: Where<T>, limit?: number) => Promise<[OkPacket, FieldPacket[]]>;
insert: (data: Partial<T> | Partial<T>[], options?: InsertOptions) => Promise<[OkPacket, FieldPacket[]]>;
select: (query?: SelectOptions<T>) => Promise<[RowDataPacket[], FieldPacket[]]>;
truncate: () => Promise<[OkPacket, FieldPacket[]]>;
update: (data: Partial<T>, query: WhereOptions<T>) => Promise<[OkPacket, FieldPacket[]]>;
upsert: (data: T | T[]) => Promise<[OkPacket, FieldPacket[]]>;
SQL: () => SQLModelType<T>;
as: <A extends string>(alias: A) => AliasModel<Alias<T, A>>;
create: (data: Partial<T>, options?: InsertOptions) => Promise<Partial<T>>;
createOne: (data: Partial<T>, options?: InsertOptions) => Promise<Partial<T>>;
createMany: (data: Partial<T>[], options?: InsertOptions) => Promise<Partial<T>[]>;
deleteBy: (key: KeyOf<T>, query: QueryType<T>) => Promise<number>;
deleteById: (id: number) => Promise<boolean>;
deleteOne: (query: Where<T>) => Promise<boolean>;
deleteOneBy: (key: KeyOf<T>, query: QueryType<T>) => Promise<boolean>;
find: (query?: Where<T>) => Promise<T[]>;
findBy: (key: KeyOf<T>, query: QueryType<T>) => Promise<T[]>;
findById: (id: number) => Promise<T | null>;
findOne: (query?: Where<T>) => Promise<T | null>;
findOneBy: (key: KeyOf<T>, query: QueryType<T>) => Promise<T | null>;
insertIgnore: (data: Partial<T> | Partial<T>[]) => Promise<Partial<T> | Partial<T>[]>;
upsertOne: (data: T) => Promise<boolean>;
upsertMany: (data: T[]) => Promise<boolean>;
};
export declare type InsertOptions = {
ignore?: boolean;
};
export declare type QueryType<T> = boolean | number | null | OperatorType<T> | OperatorType<T>[] | StringOverride;
export declare type Limit = number | [LimitStart, LimitEnd];
export declare type LimitStart = number;
export declare type LimitEnd = number;
export declare type GroupBy<T> = KeyOf<T> | StringOverride;
export declare type OrderBy<T> = KeyOf<T> | `${KeyOf<T>} ASC` | `${KeyOf<T>} DESC` | StringOverride;
export declare type ColumnType<T> = KeyOf<T> | StringOverride;
export interface SelectOptions<T> {
$columns?: ColumnType<T>[];
$where?: Where<T>;
$limit?: Limit;
$groupBy?: GroupBy<T> | GroupBy<T>[];
$orderBy?: OrderBy<T> | OrderBy<T>[];
}
export declare type SQLModelType<T> = {
delete: (query: Where<T>, limit?: number) => string;
insert: (data: Partial<T> | Partial<T>[], options?: InsertOptions) => string;
select: (query?: SelectOptions<T>) => string;
truncate: () => string;
update: (data: Partial<T>, query: WhereOptions<T>) => string;
upsert: (data: T | T[]) => string;
};
export interface StringOverride extends String {
}
export declare type Where<T> = Or<WhereOptions<T>> | WhereOptions<T>;
export declare type WhereOptions<T> = {
[Key in KeyOf<T>]?: QueryType<T>;
};