-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathdb.d.ts
95 lines (73 loc) · 3.06 KB
/
db.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import { EventEmitter } from 'events'
type Class<T> = new (...args: any[]) => T;
interface ConnectionOptions {
identifier: string
}
interface DatabaseDriverStatic<DriverType> {
/** Returns database connection by its name */
connect (connection?: string, options?: ConnectionOptions): DriverType;
new (options: ConnectionOptions): DriverType;
}
type FindQuery<Doc> = {
[Key in keyof Doc]?: Doc[Key] | FindQueryOp<Doc[Key]>;
}
declare interface FindQueryOp<T> {
/** Lower that value */
$lt?: T;
/** Lower that value or equal */
$lte?: T;
/** Greater that value */
$gt?: T;
/** Greater that value or equal */
$gte?: T;
/** Not equal to value */
$ne?: T;
}
declare abstract class Model<Doc = any, DocLike = Partial<Doc>> {
public init: (() => Promise<boolean>) | undefined;
public create (values: DocLike): Promise<Doc>;
public find (query: FindQuery<Doc>): Promise<Doc[]>;
public findOne (query: FindQuery<Doc>): Promise<Doc>;
public findById (id: any): Promise<Doc>;
public delete (query: FindQuery<Doc>): Promise<void>;
public deleteOne (query: FindQuery<Doc>): Promise<void>;
public deleteById (id: any): Promise<void>;
public update (query: FindQuery<Doc>, values: DocLike): Promise<void>;
public updateOne (query: FindQuery<Doc>, values: DocLike): Promise<void>;
public updateById (id: any, values: DocLike): Promise<void>;
}
export abstract class DatabaseDriver<ModelType extends Model> extends EventEmitter {
public readonly [modelName: string]: ModelType;
public readonly _self: DatabaseDriverStatic<ModelType>;
public readonly _name: string;
protected constructor ();
public abstract constructor (options: object);
public abstract connect (): Promise<void>;
public getModel (basePath: string, name: string): ModelType;
public makeModel (name: string, schema: any): ModelType;
emit (event: 'disconnected'): void;
}
type ExtractModelType<DriverClass> = InstanceType<DriverClass> extends DatabaseDriver<infer ModelType> ? ModelType : never;
export function registerDriver<DriverClass> (driver: DriverClass, driverName: string): DatabaseDriverStatic<InstanceType<DriverClass>>;
export function connectDatabase (configKey: string, options?: ConnectionOptions): DatabaseDriver<Model>;
export function makeModel (connector: DatabaseDriver, modelName: string, schema: Record<string, ModelField>): Model;
interface ModelFieldInfo {
type: 'string' | 'text' | 'int' | 'long' | 'enum' | 'json'
}
class ModelField<T> {
readonly info: ModelFieldInfo;
get required (): this;
default (value: T): this;
}
class ModelString extends ModelField<string> {}
export function string (length?: number): ModelString;
class ModelText extends ModelField<string> {}
export function text (): ModelText;
class ModelJson extends ModelField<any> {}
export function json (): ModelJson;
class ModelInt extends ModelField<number> {}
export function int (): ModelInt;
class ModelLong extends ModelField<number> {}
export function long (): ModelLong;
class ModelEnum<V> extends ModelField<V[number]> {}
export function enumerable<T extends string, V extends T[]> (...values: V): ModelEnum<typeof values>;