@zhin.js/database 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +1360 -34
- package/lib/base/database.d.ts +71 -13
- package/lib/base/database.d.ts.map +1 -1
- package/lib/base/database.js +128 -4
- package/lib/base/database.js.map +1 -1
- package/lib/base/dialect.d.ts +27 -10
- package/lib/base/dialect.d.ts.map +1 -1
- package/lib/base/dialect.js +32 -0
- package/lib/base/dialect.js.map +1 -1
- package/lib/base/index.d.ts +1 -0
- package/lib/base/index.d.ts.map +1 -1
- package/lib/base/index.js +1 -0
- package/lib/base/index.js.map +1 -1
- package/lib/base/model.d.ts +105 -12
- package/lib/base/model.d.ts.map +1 -1
- package/lib/base/model.js +224 -3
- package/lib/base/model.js.map +1 -1
- package/lib/base/query-classes.d.ts +204 -33
- package/lib/base/query-classes.d.ts.map +1 -1
- package/lib/base/query-classes.js +276 -0
- package/lib/base/query-classes.js.map +1 -1
- package/lib/base/thenable.d.ts +7 -7
- package/lib/base/thenable.d.ts.map +1 -1
- package/lib/base/thenable.js +5 -4
- package/lib/base/thenable.js.map +1 -1
- package/lib/base/transaction.d.ts +46 -0
- package/lib/base/transaction.d.ts.map +1 -0
- package/lib/base/transaction.js +186 -0
- package/lib/base/transaction.js.map +1 -0
- package/lib/dialects/memory.d.ts +12 -7
- package/lib/dialects/memory.d.ts.map +1 -1
- package/lib/dialects/memory.js +7 -4
- package/lib/dialects/memory.js.map +1 -1
- package/lib/dialects/mongodb.d.ts +11 -7
- package/lib/dialects/mongodb.d.ts.map +1 -1
- package/lib/dialects/mongodb.js +18 -15
- package/lib/dialects/mongodb.js.map +1 -1
- package/lib/dialects/mysql.d.ts +35 -6
- package/lib/dialects/mysql.d.ts.map +1 -1
- package/lib/dialects/mysql.js +137 -18
- package/lib/dialects/mysql.js.map +1 -1
- package/lib/dialects/pg.d.ts +35 -6
- package/lib/dialects/pg.d.ts.map +1 -1
- package/lib/dialects/pg.js +137 -18
- package/lib/dialects/pg.js.map +1 -1
- package/lib/dialects/redis.d.ts +11 -6
- package/lib/dialects/redis.d.ts.map +1 -1
- package/lib/dialects/redis.js +11 -8
- package/lib/dialects/redis.js.map +1 -1
- package/lib/dialects/sqlite.d.ts +19 -6
- package/lib/dialects/sqlite.d.ts.map +1 -1
- package/lib/dialects/sqlite.js +63 -10
- package/lib/dialects/sqlite.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/migration.d.ts +132 -0
- package/lib/migration.d.ts.map +1 -0
- package/lib/migration.js +475 -0
- package/lib/migration.js.map +1 -0
- package/lib/registry.d.ts +26 -23
- package/lib/registry.d.ts.map +1 -1
- package/lib/registry.js +1 -5
- package/lib/registry.js.map +1 -1
- package/lib/type/document/database.d.ts +11 -11
- package/lib/type/document/database.d.ts.map +1 -1
- package/lib/type/document/database.js.map +1 -1
- package/lib/type/document/model.d.ts +7 -7
- package/lib/type/document/model.d.ts.map +1 -1
- package/lib/type/document/model.js.map +1 -1
- package/lib/type/keyvalue/database.d.ts +11 -11
- package/lib/type/keyvalue/database.d.ts.map +1 -1
- package/lib/type/keyvalue/database.js.map +1 -1
- package/lib/type/keyvalue/model.d.ts +2 -2
- package/lib/type/keyvalue/model.d.ts.map +1 -1
- package/lib/type/keyvalue/model.js.map +1 -1
- package/lib/type/related/database.d.ts +48 -13
- package/lib/type/related/database.d.ts.map +1 -1
- package/lib/type/related/database.js +258 -27
- package/lib/type/related/database.js.map +1 -1
- package/lib/type/related/model.d.ts +251 -15
- package/lib/type/related/model.d.ts.map +1 -1
- package/lib/type/related/model.js +647 -22
- package/lib/type/related/model.js.map +1 -1
- package/lib/types.d.ts +475 -37
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +6 -0
- package/lib/types.js.map +1 -1
- package/package.json +14 -5
- package/src/base/database.ts +168 -24
- package/src/base/dialect.ts +49 -10
- package/src/base/index.ts +2 -1
- package/src/base/model.ts +258 -18
- package/src/base/query-classes.ts +471 -63
- package/src/base/thenable.ts +12 -11
- package/src/base/transaction.ts +213 -0
- package/src/dialects/memory.ts +14 -13
- package/src/dialects/mongodb.ts +40 -38
- package/src/dialects/mysql.ts +151 -22
- package/src/dialects/pg.ts +148 -21
- package/src/dialects/redis.ts +40 -38
- package/src/dialects/sqlite.ts +73 -15
- package/src/index.ts +1 -2
- package/src/migration.ts +544 -0
- package/src/registry.ts +33 -33
- package/src/type/document/database.ts +32 -32
- package/src/type/document/model.ts +14 -14
- package/src/type/keyvalue/database.ts +32 -32
- package/src/type/keyvalue/model.ts +18 -18
- package/src/type/related/database.ts +309 -34
- package/src/type/related/model.ts +800 -33
- package/src/types.ts +559 -44
- package/tests/database.test.ts +1738 -0
package/lib/base/database.d.ts
CHANGED
|
@@ -1,17 +1,45 @@
|
|
|
1
1
|
import type { Dialect } from './dialect.js';
|
|
2
2
|
import { Model } from './model.js';
|
|
3
|
-
import { Definition, QueryParams, AlterDefinition, Condition, BuildQueryResult } from '../types.js';
|
|
3
|
+
import { Definition, QueryParams, AlterDefinition, Condition, BuildQueryResult, TransactionOptions, TransactionContext } from '../types.js';
|
|
4
4
|
import * as QueryClasses from './query-classes.js';
|
|
5
|
+
/**
|
|
6
|
+
* 查询日志处理器类型
|
|
7
|
+
*/
|
|
8
|
+
export type QueryLogger = (info: {
|
|
9
|
+
sql: string;
|
|
10
|
+
params?: any[];
|
|
11
|
+
duration: number;
|
|
12
|
+
error?: Error;
|
|
13
|
+
}) => void;
|
|
5
14
|
/**
|
|
6
15
|
* 基础数据库抽象类
|
|
7
16
|
* 定义所有数据库类型的通用接口和行为
|
|
8
17
|
*/
|
|
9
18
|
export declare abstract class Database<D = any, S extends Record<string, object> = Record<string, object>, Q = string> {
|
|
10
|
-
readonly dialect: Dialect<D, Q>;
|
|
11
|
-
definitions?: Database.Definitions<S> | undefined;
|
|
19
|
+
readonly dialect: Dialect<D, S, Q>;
|
|
12
20
|
protected hasStarted: boolean;
|
|
13
|
-
readonly
|
|
14
|
-
|
|
21
|
+
readonly definitions: Database.Definitions<S>;
|
|
22
|
+
readonly models: Database.Models<S, D, Q>;
|
|
23
|
+
private _logger?;
|
|
24
|
+
private _logging;
|
|
25
|
+
constructor(dialect: Dialect<D, S, Q>, definitions?: Database.DefinitionObj<S>);
|
|
26
|
+
/**
|
|
27
|
+
* 启用查询日志
|
|
28
|
+
* @param handler 自定义日志处理器,不传则使用默认控制台输出
|
|
29
|
+
*/
|
|
30
|
+
enableLogging(handler?: QueryLogger): this;
|
|
31
|
+
/**
|
|
32
|
+
* 禁用查询日志
|
|
33
|
+
*/
|
|
34
|
+
disableLogging(): this;
|
|
35
|
+
/**
|
|
36
|
+
* 查询日志是否启用
|
|
37
|
+
*/
|
|
38
|
+
get isLogging(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* 记录查询日志
|
|
41
|
+
*/
|
|
42
|
+
protected log(sql: string, params?: any[], duration?: number, error?: Error): void;
|
|
15
43
|
/**
|
|
16
44
|
* 数据库是否已启动
|
|
17
45
|
*/
|
|
@@ -32,7 +60,7 @@ export declare abstract class Database<D = any, S extends Record<string, object>
|
|
|
32
60
|
* 执行原生查询
|
|
33
61
|
*/
|
|
34
62
|
query<U = any>(sql: Q, params?: any[]): Promise<U>;
|
|
35
|
-
abstract buildQuery<
|
|
63
|
+
abstract buildQuery<T extends keyof S>(params: QueryParams<S, T>): BuildQueryResult<Q>;
|
|
36
64
|
/**
|
|
37
65
|
* 获取数据库方言名称
|
|
38
66
|
*/
|
|
@@ -45,15 +73,38 @@ export declare abstract class Database<D = any, S extends Record<string, object>
|
|
|
45
73
|
* 抽象方法:初始化数据库
|
|
46
74
|
*/
|
|
47
75
|
protected abstract initialize(): Promise<void>;
|
|
76
|
+
define<K extends keyof S>(name: K, definition: Definition<S[K]>): void;
|
|
77
|
+
/**
|
|
78
|
+
* 删除表定义
|
|
79
|
+
*/
|
|
80
|
+
destroy<K extends keyof S>(name: K): void;
|
|
48
81
|
/**
|
|
49
82
|
* 创建表
|
|
50
83
|
*/
|
|
51
|
-
create<T extends
|
|
52
|
-
alter<T extends
|
|
53
|
-
select<T extends
|
|
54
|
-
insert<T extends
|
|
55
|
-
update<T extends
|
|
56
|
-
delete<T extends
|
|
84
|
+
create<T extends keyof S>(name: T, definition: Definition<S[T]>): QueryClasses.Creation<S, T, D, Q>;
|
|
85
|
+
alter<T extends keyof S>(name: T, alterations: AlterDefinition<S[T]>): QueryClasses.Alteration<S, T, D, Q>;
|
|
86
|
+
select<T extends keyof S, K extends keyof S[T]>(name: T, fields: Array<K>): QueryClasses.Selection<S, T, K, D, Q>;
|
|
87
|
+
insert<T extends keyof S>(name: T, data: S[T]): QueryClasses.Insertion<S, T, D, Q>;
|
|
88
|
+
update<T extends keyof S>(name: T, update: Partial<S[T]>): QueryClasses.Updation<S, T, D, Q>;
|
|
89
|
+
delete<T extends keyof S>(name: T, condition: Condition<S[T]>): QueryClasses.Deletion<S, T, D, Q>;
|
|
90
|
+
/**
|
|
91
|
+
* 批量插入
|
|
92
|
+
*/
|
|
93
|
+
insertMany<T extends keyof S>(name: T, data: S[T][]): QueryClasses.BatchInsertion<S, T, D, Q>;
|
|
94
|
+
/**
|
|
95
|
+
* 聚合查询
|
|
96
|
+
*/
|
|
97
|
+
aggregate<T extends keyof S>(name: T): QueryClasses.Aggregation<S, T, D, Q>;
|
|
98
|
+
/**
|
|
99
|
+
* 是否支持事务
|
|
100
|
+
*/
|
|
101
|
+
supportsTransactions(): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* 在事务中执行操作
|
|
104
|
+
* 自动处理 commit 和 rollback
|
|
105
|
+
* 支持链式调用:trx.insert(), trx.select(), trx.update(), trx.delete()
|
|
106
|
+
*/
|
|
107
|
+
transaction<R>(callback: (trx: TransactionContext<S>) => Promise<R>, options?: TransactionOptions): Promise<R>;
|
|
57
108
|
/**
|
|
58
109
|
* 抽象方法:获取所有模型名称
|
|
59
110
|
*/
|
|
@@ -64,7 +115,14 @@ export declare abstract class Database<D = any, S extends Record<string, object>
|
|
|
64
115
|
dispose(): Promise<void>;
|
|
65
116
|
}
|
|
66
117
|
export declare namespace Database {
|
|
67
|
-
|
|
118
|
+
class Definitions<S extends Record<string, object>> extends Map<keyof S, Definition<S[keyof S]>> {
|
|
119
|
+
constructor();
|
|
120
|
+
}
|
|
121
|
+
class Models<S extends Record<string, object>, D = any, Q = string> extends Map<keyof S, Model<D, S, Q, keyof S>> {
|
|
122
|
+
constructor();
|
|
123
|
+
get<K extends keyof S>(key: K): Model<D, S, Q, K> | undefined;
|
|
124
|
+
}
|
|
125
|
+
type DefinitionObj<S extends Record<string, object>> = {
|
|
68
126
|
[K in keyof S]: Definition<S[K]>;
|
|
69
127
|
};
|
|
70
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/base/database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/base/database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAe,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACzJ,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AAGnD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,KAAK,IAAI,CAAC;AAWX;;;GAGG;AACH,8BAAsB,QAAQ,CAAC,CAAC,GAAC,GAAG,EAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAC,CAAC,GAAC,MAAM;aASjF,OAAO,EAAE,OAAO,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;IARzC,SAAS,CAAC,UAAU,UAAS;IAC7B,SAAgB,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAA+B;IACnF,SAAgB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAgC;IAE9E,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,QAAQ,CAAS;gBAGP,OAAO,EAAE,OAAO,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EACvC,WAAW,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAWzC;;;OAGG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;IAM1C;;OAEG;IACH,cAAc,IAAI,IAAI;IAKtB;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAKlF;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;OAEG;IACG,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAcxD,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;IACrF;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAKxB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,GAAG,CAKhB;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAC9C,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAG/D;;OAEG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;IAIlC;;OAEG;IACH,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,EACtB,IAAI,EAAE,CAAC,EACP,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC3B,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;IAGjC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;IAGvG,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;IAG7G,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;IAG/E,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;IAGzF,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;IAI9F;;OAEG;IACH,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;IAI1F;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;IAQxE;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;;;OAIG;IACG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBpH;;OAEG;IACH,QAAQ,CAAC,aAAa,IAAI,MAAM,EAAE;IAElC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAO/B;AACD,yBAAiB,QAAQ,CAAC;IACxB,MAAa,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAE,SAAQ,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;KAItG;IACD,MAAa,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAC,CAAC,GAAC,GAAG,EAAC,CAAC,GAAC,MAAM,CAAE,SAAQ,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,MAAM,CAAC,CAAC,CAAC;;QAI7G,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,SAAS;KAG3D;IACD,KAAY,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI;SAC3D,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjC,CAAC;CACH"}
|
package/lib/base/database.js
CHANGED
|
@@ -1,16 +1,62 @@
|
|
|
1
1
|
import * as QueryClasses from './query-classes.js';
|
|
2
|
+
import { TransactionContextImpl } from './transaction.js';
|
|
3
|
+
/**
|
|
4
|
+
* 默认查询日志处理器
|
|
5
|
+
*/
|
|
6
|
+
const defaultLogger = ({ sql, params, duration, error }) => {
|
|
7
|
+
const paramStr = params?.length ? ` [${JSON.stringify(params)}]` : '';
|
|
8
|
+
const status = error ? `❌ ERROR: ${error.message}` : `✅ ${duration}ms`;
|
|
9
|
+
console.log(`[SQL] ${sql}${paramStr} → ${status}`);
|
|
10
|
+
};
|
|
2
11
|
/**
|
|
3
12
|
* 基础数据库抽象类
|
|
4
13
|
* 定义所有数据库类型的通用接口和行为
|
|
5
14
|
*/
|
|
6
15
|
export class Database {
|
|
7
16
|
dialect;
|
|
8
|
-
definitions;
|
|
9
17
|
hasStarted = false;
|
|
10
|
-
|
|
18
|
+
definitions = new Database.Definitions();
|
|
19
|
+
models = new Database.Models();
|
|
20
|
+
_logger;
|
|
21
|
+
_logging = false;
|
|
11
22
|
constructor(dialect, definitions) {
|
|
12
23
|
this.dialect = dialect;
|
|
13
|
-
|
|
24
|
+
for (const key in definitions) {
|
|
25
|
+
this.definitions.set(key, definitions[key]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Query Logging
|
|
30
|
+
// ============================================================================
|
|
31
|
+
/**
|
|
32
|
+
* 启用查询日志
|
|
33
|
+
* @param handler 自定义日志处理器,不传则使用默认控制台输出
|
|
34
|
+
*/
|
|
35
|
+
enableLogging(handler) {
|
|
36
|
+
this._logging = true;
|
|
37
|
+
this._logger = handler ?? defaultLogger;
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 禁用查询日志
|
|
42
|
+
*/
|
|
43
|
+
disableLogging() {
|
|
44
|
+
this._logging = false;
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 查询日志是否启用
|
|
49
|
+
*/
|
|
50
|
+
get isLogging() {
|
|
51
|
+
return this._logging;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 记录查询日志
|
|
55
|
+
*/
|
|
56
|
+
log(sql, params, duration, error) {
|
|
57
|
+
if (this._logging && this._logger) {
|
|
58
|
+
this._logger({ sql: String(sql), params, duration: duration ?? 0, error });
|
|
59
|
+
}
|
|
14
60
|
}
|
|
15
61
|
/**
|
|
16
62
|
* 数据库是否已启动
|
|
@@ -32,6 +78,7 @@ export class Database {
|
|
|
32
78
|
async stop() {
|
|
33
79
|
await this.dialect.disconnect();
|
|
34
80
|
this.hasStarted = false;
|
|
81
|
+
console.log(`Database disconnected from dialect: ${this.dialect.name}`);
|
|
35
82
|
}
|
|
36
83
|
/**
|
|
37
84
|
* 健康检查
|
|
@@ -46,7 +93,16 @@ export class Database {
|
|
|
46
93
|
if (!this.isStarted) {
|
|
47
94
|
throw new Error('Database not started');
|
|
48
95
|
}
|
|
49
|
-
|
|
96
|
+
const start = Date.now();
|
|
97
|
+
try {
|
|
98
|
+
const result = await this.dialect.query(sql, params);
|
|
99
|
+
this.log(String(sql), params, Date.now() - start);
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
this.log(String(sql), params, Date.now() - start, error);
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
50
106
|
}
|
|
51
107
|
/**
|
|
52
108
|
* 获取数据库方言名称
|
|
@@ -66,6 +122,15 @@ export class Database {
|
|
|
66
122
|
}
|
|
67
123
|
return this.dialect.config;
|
|
68
124
|
}
|
|
125
|
+
define(name, definition) {
|
|
126
|
+
this.definitions.set(name, definition);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 删除表定义
|
|
130
|
+
*/
|
|
131
|
+
destroy(name) {
|
|
132
|
+
this.definitions.delete(name);
|
|
133
|
+
}
|
|
69
134
|
/**
|
|
70
135
|
* 创建表
|
|
71
136
|
*/
|
|
@@ -87,6 +152,48 @@ export class Database {
|
|
|
87
152
|
delete(name, condition) {
|
|
88
153
|
return new QueryClasses.Deletion(this, name).where(condition);
|
|
89
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* 批量插入
|
|
157
|
+
*/
|
|
158
|
+
insertMany(name, data) {
|
|
159
|
+
return new QueryClasses.BatchInsertion(this, name, data);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 聚合查询
|
|
163
|
+
*/
|
|
164
|
+
aggregate(name) {
|
|
165
|
+
return new QueryClasses.Aggregation(this, name);
|
|
166
|
+
}
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Transaction Support
|
|
169
|
+
// ============================================================================
|
|
170
|
+
/**
|
|
171
|
+
* 是否支持事务
|
|
172
|
+
*/
|
|
173
|
+
supportsTransactions() {
|
|
174
|
+
return this.dialect.supportsTransactions();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* 在事务中执行操作
|
|
178
|
+
* 自动处理 commit 和 rollback
|
|
179
|
+
* 支持链式调用:trx.insert(), trx.select(), trx.update(), trx.delete()
|
|
180
|
+
*/
|
|
181
|
+
async transaction(callback, options) {
|
|
182
|
+
if (!this.isStarted) {
|
|
183
|
+
throw new Error('Database not started');
|
|
184
|
+
}
|
|
185
|
+
const trx = await this.dialect.beginTransaction(options);
|
|
186
|
+
const trxContext = new TransactionContextImpl(this, trx);
|
|
187
|
+
try {
|
|
188
|
+
const result = await callback(trxContext);
|
|
189
|
+
await trxContext.commit();
|
|
190
|
+
return result;
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
await trxContext.rollback();
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
90
197
|
/**
|
|
91
198
|
* 抽象方法:清理资源
|
|
92
199
|
*/
|
|
@@ -98,4 +205,21 @@ export class Database {
|
|
|
98
205
|
await this.dialect.dispose();
|
|
99
206
|
}
|
|
100
207
|
}
|
|
208
|
+
(function (Database) {
|
|
209
|
+
class Definitions extends Map {
|
|
210
|
+
constructor() {
|
|
211
|
+
super();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
Database.Definitions = Definitions;
|
|
215
|
+
class Models extends Map {
|
|
216
|
+
constructor() {
|
|
217
|
+
super();
|
|
218
|
+
}
|
|
219
|
+
get(key) {
|
|
220
|
+
return super.get(key);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
Database.Models = Models;
|
|
224
|
+
})(Database || (Database = {}));
|
|
101
225
|
//# sourceMappingURL=database.js.map
|
package/lib/base/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/base/database.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/base/database.ts"],"names":[],"mappings":"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"}
|
package/lib/base/dialect.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { Transaction, TransactionOptions, IsolationLevel } from '../types.js';
|
|
2
|
+
export declare abstract class Dialect<T, S extends Record<string, object>, Q> {
|
|
2
3
|
readonly name: string;
|
|
3
4
|
readonly config: T;
|
|
4
5
|
protected constructor(name: string, config: T);
|
|
@@ -8,7 +9,7 @@ export declare abstract class Dialect<T, Q> {
|
|
|
8
9
|
abstract healthCheck(): Promise<boolean>;
|
|
9
10
|
abstract query<U = any>(query: Q, params?: any[]): Promise<U>;
|
|
10
11
|
abstract mapColumnType(type: string): string;
|
|
11
|
-
abstract quoteIdentifier(identifier: string): string;
|
|
12
|
+
abstract quoteIdentifier(identifier: string | number | symbol): string;
|
|
12
13
|
abstract getParameterPlaceholder(index: number): string;
|
|
13
14
|
abstract getStatementTerminator(): string;
|
|
14
15
|
abstract formatBoolean(value: boolean): string;
|
|
@@ -19,16 +20,32 @@ export declare abstract class Dialect<T, Q> {
|
|
|
19
20
|
abstract formatLimit(limit: number): string;
|
|
20
21
|
abstract formatOffset(offset: number): string;
|
|
21
22
|
abstract formatLimitOffset(limit: number, offset: number): string;
|
|
22
|
-
abstract formatCreateTable(tableName:
|
|
23
|
-
abstract formatAlterTable(tableName:
|
|
24
|
-
abstract formatDropTable(tableName:
|
|
25
|
-
abstract formatDropIndex(indexName: string, tableName:
|
|
23
|
+
abstract formatCreateTable<T extends keyof S>(tableName: T, columns: string[]): string;
|
|
24
|
+
abstract formatAlterTable<T extends keyof S>(tableName: T, alterations: string[]): string;
|
|
25
|
+
abstract formatDropTable<T extends keyof S>(tableName: T, ifExists?: boolean): string;
|
|
26
|
+
abstract formatDropIndex<T extends keyof S>(indexName: string, tableName: T, ifExists?: boolean): string;
|
|
26
27
|
abstract dispose(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* 是否支持事务
|
|
30
|
+
*/
|
|
31
|
+
supportsTransactions(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* 开始事务
|
|
34
|
+
*/
|
|
35
|
+
beginTransaction(options?: TransactionOptions): Promise<Transaction>;
|
|
36
|
+
/**
|
|
37
|
+
* 格式化事务隔离级别
|
|
38
|
+
*/
|
|
39
|
+
formatIsolationLevel(level: IsolationLevel): string;
|
|
40
|
+
/**
|
|
41
|
+
* 格式化聚合函数
|
|
42
|
+
*/
|
|
43
|
+
formatAggregate(fn: string, field: string, alias?: string): string;
|
|
27
44
|
}
|
|
28
45
|
export declare namespace Dialect {
|
|
29
|
-
type Creator<D, Q> = (config: D) => Dialect<D, Q>;
|
|
30
|
-
type Constructor<D, Q> = new (config: D) => Dialect<D, Q>;
|
|
31
|
-
type Factory<D, Q> = Creator<D, Q> | Constructor<D, Q>;
|
|
32
|
-
function isConstructor<D, Q>(fn: Factory<D, Q>): fn is Constructor<D, Q>;
|
|
46
|
+
type Creator<D, S extends Record<string, object>, Q> = (config: D) => Dialect<D, S, Q>;
|
|
47
|
+
type Constructor<D, S extends Record<string, object>, Q> = new (config: D) => Dialect<D, S, Q>;
|
|
48
|
+
type Factory<D, S extends Record<string, object>, Q> = Creator<D, S, Q> | Constructor<D, S, Q>;
|
|
49
|
+
function isConstructor<D, S extends Record<string, object>, Q>(fn: Factory<D, S, Q>): fn is Constructor<D, S, Q>;
|
|
33
50
|
}
|
|
34
51
|
//# sourceMappingURL=dialect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/base/dialect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/base/dialect.ts"],"names":[],"mappings":"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"}
|
package/lib/base/dialect.js
CHANGED
|
@@ -11,6 +11,38 @@ export class Dialect {
|
|
|
11
11
|
this.name = name;
|
|
12
12
|
this.config = config;
|
|
13
13
|
}
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Transaction Support (optional, default implementations)
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* 是否支持事务
|
|
19
|
+
*/
|
|
20
|
+
supportsTransactions() {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 开始事务
|
|
25
|
+
*/
|
|
26
|
+
async beginTransaction(options) {
|
|
27
|
+
throw new Error(`Dialect ${this.name} does not support transactions`);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 格式化事务隔离级别
|
|
31
|
+
*/
|
|
32
|
+
formatIsolationLevel(level) {
|
|
33
|
+
return level.replace(/_/g, ' ');
|
|
34
|
+
}
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// Aggregation Support
|
|
37
|
+
// ============================================================================
|
|
38
|
+
/**
|
|
39
|
+
* 格式化聚合函数
|
|
40
|
+
*/
|
|
41
|
+
formatAggregate(fn, field, alias) {
|
|
42
|
+
const fnUpper = fn.toUpperCase();
|
|
43
|
+
const aliasClause = alias ? ` AS ${this.quoteIdentifier(alias)}` : '';
|
|
44
|
+
return `${fnUpper}(${field === '*' ? '*' : this.quoteIdentifier(field)})${aliasClause}`;
|
|
45
|
+
}
|
|
14
46
|
}
|
|
15
47
|
(function (Dialect) {
|
|
16
48
|
function isConstructor(fn) {
|
package/lib/base/dialect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../src/base/dialect.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;
|
|
1
|
+
{"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../src/base/dialect.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAI/E,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,OAAgB,OAAO;IACX,IAAI,CAAS;IACb,MAAM,CAAI;IAE1B,YAAsB,IAAY,EAAE,MAAS;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IA0BD,+EAA+E;IAC/E,0DAA0D;IAC1D,+EAA+E;IAE/E;;OAEG;IACH,oBAAoB;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAA4B;QACjD,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,gCAAgC,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,KAAqB;QACxC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,+EAA+E;IAC/E,sBAAsB;IACtB,+EAA+E;IAE/E;;OAEG;IACH,eAAe,CAAC,EAAU,EAAE,KAAa,EAAE,KAAc;QACvD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,GAAG,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;IAC1F,CAAC;CACF;AACD,WAAiB,OAAO;IAItB,SAAgB,aAAa,CAAuC,EAAkB;QACpF,OAAO,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,EAAE,CAAC;IACzD,CAAC;IAFe,qBAAa,gBAE5B,CAAA;AACH,CAAC,EAPgB,OAAO,KAAP,OAAO,QAOvB"}
|
package/lib/base/index.d.ts
CHANGED
package/lib/base/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
package/lib/base/index.js
CHANGED
package/lib/base/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
package/lib/base/model.d.ts
CHANGED
|
@@ -1,19 +1,74 @@
|
|
|
1
1
|
import type { Database } from './database.js';
|
|
2
2
|
import type { Dialect } from './dialect.js';
|
|
3
|
-
import { AlterDefinition, Condition } from '../types.js';
|
|
3
|
+
import { AlterDefinition, Condition, ModelOptions, HookName, HookFn, HookContext, HooksConfig } from '../types.js';
|
|
4
4
|
import * as QueryClasses from './query-classes.js';
|
|
5
5
|
/**
|
|
6
6
|
* 基础模型抽象类
|
|
7
7
|
* 定义所有模型类型的通用接口和行为
|
|
8
|
+
* 支持软删除、自动时间戳和生命周期钩子
|
|
8
9
|
*/
|
|
9
|
-
export declare abstract class Model<C = any,
|
|
10
|
-
readonly database: Database<
|
|
11
|
-
readonly name:
|
|
12
|
-
|
|
10
|
+
export declare abstract class Model<C = any, S extends Record<string, object> = Record<string, object>, Q = string, T extends keyof S = keyof S> {
|
|
11
|
+
readonly database: Database<any, S, Q>;
|
|
12
|
+
readonly name: T;
|
|
13
|
+
/** 模型配置选项 */
|
|
14
|
+
readonly options: ModelOptions;
|
|
15
|
+
/** 生命周期钩子注册表 */
|
|
16
|
+
private readonly hooks;
|
|
17
|
+
constructor(database: Database<any, S, Q>, name: T, options?: ModelOptions);
|
|
18
|
+
/**
|
|
19
|
+
* 注册生命周期钩子
|
|
20
|
+
* @param hookName 钩子名称
|
|
21
|
+
* @param fn 钩子函数
|
|
22
|
+
* @returns this(支持链式调用)
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* userModel
|
|
27
|
+
* .addHook('beforeCreate', (ctx) => {
|
|
28
|
+
* ctx.data.createdBy = 'system';
|
|
29
|
+
* })
|
|
30
|
+
* .addHook('afterDelete', async (ctx) => {
|
|
31
|
+
* await logService.log('User deleted', ctx.result);
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
addHook(hookName: HookName, fn: HookFn<S[T]>): this;
|
|
36
|
+
/**
|
|
37
|
+
* addHook 的别名
|
|
38
|
+
*/
|
|
39
|
+
on(hookName: HookName, fn: HookFn<S[T]>): this;
|
|
40
|
+
/**
|
|
41
|
+
* 批量注册钩子
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* userModel.registerHooks({
|
|
45
|
+
* beforeCreate: (ctx) => { ... },
|
|
46
|
+
* afterUpdate: [(ctx) => { ... }, (ctx) => { ... }]
|
|
47
|
+
* });
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
registerHooks(hooks: HooksConfig<S[T]>): this;
|
|
51
|
+
/**
|
|
52
|
+
* 移除指定钩子
|
|
53
|
+
*/
|
|
54
|
+
removeHook(hookName: HookName, fn?: HookFn<S[T]>): this;
|
|
55
|
+
/**
|
|
56
|
+
* 清除所有钩子
|
|
57
|
+
*/
|
|
58
|
+
clearHooks(): this;
|
|
59
|
+
/**
|
|
60
|
+
* 触发钩子
|
|
61
|
+
* @returns 如果任何 before 钩子返回 false,则返回 false
|
|
62
|
+
*/
|
|
63
|
+
protected runHooks(hookName: HookName, context: HookContext<S[T]>): Promise<boolean>;
|
|
64
|
+
/**
|
|
65
|
+
* 创建钩子上下文
|
|
66
|
+
*/
|
|
67
|
+
protected createHookContext(options?: Partial<HookContext<S[T]>>): HookContext<S[T]>;
|
|
13
68
|
/**
|
|
14
69
|
* 获取数据库方言
|
|
15
70
|
*/
|
|
16
|
-
get dialect(): Dialect<C, Q>;
|
|
71
|
+
get dialect(): Dialect<C, S, Q>;
|
|
17
72
|
/**
|
|
18
73
|
* 获取数据库是否已启动
|
|
19
74
|
*/
|
|
@@ -21,12 +76,50 @@ export declare abstract class Model<C = any, O extends object = object, Q = stri
|
|
|
21
76
|
/**
|
|
22
77
|
* 获取模型名称
|
|
23
78
|
*/
|
|
24
|
-
get modelName():
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
79
|
+
get modelName(): T;
|
|
80
|
+
/**
|
|
81
|
+
* 是否启用软删除
|
|
82
|
+
*/
|
|
83
|
+
get isSoftDelete(): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* 软删除字段名
|
|
86
|
+
*/
|
|
87
|
+
get deletedAtField(): string;
|
|
88
|
+
alter(alterations: AlterDefinition<S[T]>): QueryClasses.Alteration<S, T, C, Q>;
|
|
89
|
+
/**
|
|
90
|
+
* 查询(软删除模式下自动排除已删除记录)
|
|
91
|
+
*/
|
|
92
|
+
select<K extends keyof S[T]>(...fields: Array<K>): QueryClasses.Selection<S, T, K, C, Q>;
|
|
93
|
+
/**
|
|
94
|
+
* 查询(包含已删除的记录)
|
|
95
|
+
*/
|
|
96
|
+
selectWithTrashed<K extends keyof S[T]>(...fields: Array<K>): QueryClasses.Selection<S, T, K, C, Q>;
|
|
97
|
+
/**
|
|
98
|
+
* 仅查询已删除的记录
|
|
99
|
+
*/
|
|
100
|
+
selectOnlyTrashed<K extends keyof S[T]>(...fields: Array<K>): QueryClasses.Selection<S, T, K, C, Q>;
|
|
101
|
+
insert(data: S[T]): QueryClasses.Insertion<S, T, C, Q>;
|
|
102
|
+
update(update: Partial<S[T]>): QueryClasses.Updation<S, T, C, Q>;
|
|
103
|
+
/**
|
|
104
|
+
* 删除(软删除模式下执行软删除)
|
|
105
|
+
*/
|
|
106
|
+
delete(condition: Condition<S[T]>): QueryClasses.Deletion<S, T, C, Q> | QueryClasses.Updation<S, T, C, Q>;
|
|
107
|
+
/**
|
|
108
|
+
* 强制删除(忽略软删除,直接物理删除)
|
|
109
|
+
*/
|
|
110
|
+
forceDelete(condition: Condition<S[T]>): QueryClasses.Deletion<S, T, C, Q>;
|
|
111
|
+
/**
|
|
112
|
+
* 恢复软删除的记录
|
|
113
|
+
*/
|
|
114
|
+
restore(condition: Condition<S[T]>): QueryClasses.Updation<S, T, C, Q>;
|
|
115
|
+
/**
|
|
116
|
+
* 批量插入
|
|
117
|
+
*/
|
|
118
|
+
insertMany(data: S[T][]): QueryClasses.BatchInsertion<S, T, C, Q>;
|
|
119
|
+
/**
|
|
120
|
+
* 聚合查询
|
|
121
|
+
*/
|
|
122
|
+
aggregate(): QueryClasses.Aggregation<S, T, C, Q>;
|
|
30
123
|
/**
|
|
31
124
|
* 验证查询条件
|
|
32
125
|
*/
|
package/lib/base/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/base/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/base/model.ts"],"names":[],"mappings":"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"}
|