@zhin.js/database 1.0.4 → 1.0.5
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 +6 -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 +10 -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
|
@@ -1,43 +1,279 @@
|
|
|
1
1
|
import { Model } from '../../base/index.js';
|
|
2
2
|
import { RelatedDatabase } from './database.js';
|
|
3
|
-
import { Condition } from '../../types.js';
|
|
3
|
+
import { Condition, ModelOptions, RelationDefinition } from '../../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* 关联查询构建器
|
|
6
|
+
* 支持链式调用预加载关联数据
|
|
7
|
+
*/
|
|
8
|
+
export declare class RelationQueryBuilder<D = any, S extends Record<string, object> = Record<string, object>, T extends keyof S = keyof S> {
|
|
9
|
+
private readonly model;
|
|
10
|
+
private readonly relationNames;
|
|
11
|
+
private conditions;
|
|
12
|
+
private orderings;
|
|
13
|
+
private limitCount?;
|
|
14
|
+
private offsetCount?;
|
|
15
|
+
private selectedFields?;
|
|
16
|
+
constructor(model: RelatedModel<D, S, T>, relationNames: string[]);
|
|
17
|
+
/**
|
|
18
|
+
* 选择字段
|
|
19
|
+
*/
|
|
20
|
+
select<K extends keyof S[T]>(...fields: K[]): this;
|
|
21
|
+
/**
|
|
22
|
+
* 添加查询条件
|
|
23
|
+
*/
|
|
24
|
+
where(condition: Condition<S[T]>): this;
|
|
25
|
+
/**
|
|
26
|
+
* 排序
|
|
27
|
+
*/
|
|
28
|
+
orderBy(field: keyof S[T], direction?: 'ASC' | 'DESC'): this;
|
|
29
|
+
/**
|
|
30
|
+
* 限制数量
|
|
31
|
+
*/
|
|
32
|
+
limit(count: number): this;
|
|
33
|
+
/**
|
|
34
|
+
* 偏移量
|
|
35
|
+
*/
|
|
36
|
+
offset(count: number): this;
|
|
37
|
+
/**
|
|
38
|
+
* 执行查询并加载关联
|
|
39
|
+
*/
|
|
40
|
+
then<TResult = (S[T] & {
|
|
41
|
+
[key: string]: any;
|
|
42
|
+
})[]>(onfulfilled?: (value: (S[T] & {
|
|
43
|
+
[key: string]: any;
|
|
44
|
+
})[]) => TResult | PromiseLike<TResult>): Promise<TResult>;
|
|
45
|
+
}
|
|
4
46
|
/**
|
|
5
47
|
* 关系型模型类
|
|
6
48
|
* 继承自 BaseModel,提供关系型数据库特有的操作
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* // 创建带软删除的模型
|
|
53
|
+
* const userModel = new RelatedModel(db, 'users', { softDelete: true });
|
|
54
|
+
*
|
|
55
|
+
* // 删除(实际执行 UPDATE SET deletedAt = NOW())
|
|
56
|
+
* await userModel.delete({ id: 1 });
|
|
57
|
+
*
|
|
58
|
+
* // 查询(自动排除已删除)
|
|
59
|
+
* await userModel.select('id', 'name');
|
|
60
|
+
*
|
|
61
|
+
* // 查询包含已删除
|
|
62
|
+
* await userModel.selectWithTrashed('id', 'name');
|
|
63
|
+
*
|
|
64
|
+
* // 恢复已删除
|
|
65
|
+
* await userModel.restore({ id: 1 });
|
|
66
|
+
* ```
|
|
7
67
|
*/
|
|
8
|
-
export declare class RelatedModel<
|
|
9
|
-
|
|
68
|
+
export declare class RelatedModel<D = any, S extends Record<string, object> = Record<string, object>, T extends keyof S = keyof S> extends Model<D, S, string, T> {
|
|
69
|
+
/** 关系定义存储 */
|
|
70
|
+
private relations;
|
|
71
|
+
constructor(database: RelatedDatabase<D, S>, name: T, options?: ModelOptions);
|
|
72
|
+
/**
|
|
73
|
+
* 定义一对多关系
|
|
74
|
+
* @param targetModel 目标模型实例
|
|
75
|
+
* @param foreignKey 目标表中的外键字段
|
|
76
|
+
* @param localKey 本表的主键字段(默认 'id')
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* const userModel = db.model('users');
|
|
80
|
+
* const orderModel = db.model('orders');
|
|
81
|
+
*
|
|
82
|
+
* // User hasMany Orders (orders.userId -> users.id)
|
|
83
|
+
* userModel.hasMany(orderModel, 'userId');
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
hasMany<To extends keyof S>(targetModel: RelatedModel<D, S, To>, foreignKey: keyof S[To], localKey?: keyof S[T]): this;
|
|
10
87
|
/**
|
|
11
|
-
*
|
|
88
|
+
* 定义多对一关系
|
|
89
|
+
* @param targetModel 目标模型实例
|
|
90
|
+
* @param foreignKey 本表中的外键字段
|
|
91
|
+
* @param targetKey 目标表的主键字段(默认 'id')
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* const userModel = db.model('users');
|
|
95
|
+
* const orderModel = db.model('orders');
|
|
96
|
+
*
|
|
97
|
+
* // Order belongsTo User (orders.userId -> users.id)
|
|
98
|
+
* orderModel.belongsTo(userModel, 'userId');
|
|
99
|
+
* ```
|
|
12
100
|
*/
|
|
13
|
-
|
|
101
|
+
belongsTo<To extends keyof S>(targetModel: RelatedModel<D, S, To>, foreignKey: keyof S[T], targetKey?: keyof S[To]): this;
|
|
14
102
|
/**
|
|
15
|
-
*
|
|
103
|
+
* 定义一对一关系
|
|
104
|
+
* @param targetModel 目标模型实例
|
|
105
|
+
* @param foreignKey 目标表中的外键字段
|
|
106
|
+
* @param localKey 本表的主键字段(默认 'id')
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const userModel = db.model('users');
|
|
110
|
+
* const profileModel = db.model('profiles');
|
|
111
|
+
*
|
|
112
|
+
* // User hasOne Profile (profiles.userId -> users.id)
|
|
113
|
+
* userModel.hasOne(profileModel, 'userId');
|
|
114
|
+
* ```
|
|
16
115
|
*/
|
|
17
|
-
|
|
116
|
+
hasOne<To extends keyof S>(targetModel: RelatedModel<D, S, To>, foreignKey: keyof S[To], localKey?: keyof S[T]): this;
|
|
18
117
|
/**
|
|
19
|
-
*
|
|
118
|
+
* 定义多对多关系
|
|
119
|
+
* @param targetModel 目标模型实例
|
|
120
|
+
* @param pivotTable 中间表名
|
|
121
|
+
* @param foreignPivotKey 中间表中指向本表的外键
|
|
122
|
+
* @param relatedPivotKey 中间表中指向目标表的外键
|
|
123
|
+
* @param localKey 本表的主键字段(默认 'id')
|
|
124
|
+
* @param relatedKey 目标表的主键字段(默认 'id')
|
|
125
|
+
* @example
|
|
126
|
+
* ```ts
|
|
127
|
+
* const userModel = db.model('users');
|
|
128
|
+
* const roleModel = db.model('roles');
|
|
129
|
+
*
|
|
130
|
+
* // User belongsToMany Roles (通过 user_roles 中间表)
|
|
131
|
+
* userModel.belongsToMany(roleModel, 'user_roles', 'user_id', 'role_id');
|
|
132
|
+
*
|
|
133
|
+
* // 双向关系
|
|
134
|
+
* roleModel.belongsToMany(userModel, 'user_roles', 'role_id', 'user_id');
|
|
135
|
+
* ```
|
|
20
136
|
*/
|
|
21
|
-
|
|
137
|
+
belongsToMany<To extends keyof S>(targetModel: RelatedModel<D, S, To>, pivotTable: string, foreignPivotKey: string, relatedPivotKey: string, localKey?: keyof S[T], relatedKey?: keyof S[To], pivotFields?: string[]): this;
|
|
138
|
+
/**
|
|
139
|
+
* 获取关系定义
|
|
140
|
+
*/
|
|
141
|
+
getRelation(name: string): RelationDefinition<S, T, keyof S> | undefined;
|
|
142
|
+
/**
|
|
143
|
+
* 获取所有关系名称
|
|
144
|
+
*/
|
|
145
|
+
getRelationNames(): string[];
|
|
146
|
+
/**
|
|
147
|
+
* 加载单条记录的关联数据
|
|
148
|
+
* @example
|
|
149
|
+
* ```ts
|
|
150
|
+
* const user = await userModel.selectById(1);
|
|
151
|
+
* const userWithPosts = await userModel.loadRelation(user, 'posts');
|
|
152
|
+
* // userWithPosts.posts = [{ id: 1, title: '...' }, ...]
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
loadRelation<RelName extends string, To extends keyof S>(record: S[T], relationName: RelName): Promise<S[T] & {
|
|
156
|
+
[K in RelName]: S[To][] | S[To] | null;
|
|
157
|
+
}>;
|
|
158
|
+
/**
|
|
159
|
+
* 批量加载关联数据(预加载)
|
|
160
|
+
* @example
|
|
161
|
+
* ```ts
|
|
162
|
+
* const users = await userModel.select('id', 'name');
|
|
163
|
+
* const usersWithPosts = await userModel.loadRelations(users, ['posts']);
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
loadRelations<RelNames extends string>(records: S[T][], relationNames: RelNames[]): Promise<(S[T] & {
|
|
167
|
+
[K in RelNames]?: any;
|
|
168
|
+
})[]>;
|
|
169
|
+
/**
|
|
170
|
+
* 带关联的查询(链式调用入口)
|
|
171
|
+
* @example
|
|
172
|
+
* ```ts
|
|
173
|
+
* const users = await userModel.with('posts', 'profile')
|
|
174
|
+
* .where({ status: 'active' });
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
with(...relationNames: string[]): RelationQueryBuilder<D, S, T>;
|
|
178
|
+
/**
|
|
179
|
+
* 获取单条记录的关联数据
|
|
180
|
+
*/
|
|
181
|
+
private fetchRelatedData;
|
|
182
|
+
/**
|
|
183
|
+
* 批量加载关联(优化 N+1 问题)
|
|
184
|
+
*/
|
|
185
|
+
private batchLoadRelation;
|
|
186
|
+
/**
|
|
187
|
+
* 创建数据(支持生命周期钩子)
|
|
188
|
+
* @example
|
|
189
|
+
* ```ts
|
|
190
|
+
* userModel.addHook('beforeCreate', (ctx) => {
|
|
191
|
+
* ctx.data.slug = slugify(ctx.data.name);
|
|
192
|
+
* });
|
|
193
|
+
* const user = await userModel.create({ name: 'John' });
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
create(data: Partial<S[T]>): Promise<S[T] | null>;
|
|
197
|
+
/**
|
|
198
|
+
* 批量创建数据(每条数据都会触发钩子)
|
|
199
|
+
*/
|
|
200
|
+
createMany(data: Partial<S[T]>[]): Promise<S[T][]>;
|
|
201
|
+
/**
|
|
202
|
+
* 查找单个数据(支持生命周期钩子)
|
|
203
|
+
* @example
|
|
204
|
+
* ```ts
|
|
205
|
+
* userModel.addHook('afterFind', (ctx) => {
|
|
206
|
+
* if (ctx.result) {
|
|
207
|
+
* ctx.result.fullName = ctx.result.firstName + ' ' + ctx.result.lastName;
|
|
208
|
+
* }
|
|
209
|
+
* });
|
|
210
|
+
* const user = await userModel.findOne({ id: 1 });
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
findOne(query?: Condition<S[T]>): Promise<S[T] | null>;
|
|
214
|
+
/**
|
|
215
|
+
* 查找多条数据(支持生命周期钩子)
|
|
216
|
+
*/
|
|
217
|
+
findAll(query?: Condition<S[T]>): Promise<S[T][]>;
|
|
218
|
+
/**
|
|
219
|
+
* selectOne 的别名(向后兼容)
|
|
220
|
+
*/
|
|
221
|
+
selectOne(query?: Condition<S[T]>): Promise<S[T] | null>;
|
|
22
222
|
/**
|
|
23
223
|
* 根据ID查找
|
|
24
224
|
*/
|
|
25
|
-
selectById(id: any): Promise<T | null>;
|
|
225
|
+
selectById(id: any): Promise<S[T] | null>;
|
|
226
|
+
/**
|
|
227
|
+
* findById 别名
|
|
228
|
+
*/
|
|
229
|
+
findById(id: any): Promise<S[T] | null>;
|
|
230
|
+
/**
|
|
231
|
+
* 更新数据(支持生命周期钩子)
|
|
232
|
+
* @example
|
|
233
|
+
* ```ts
|
|
234
|
+
* userModel.addHook('beforeUpdate', (ctx) => {
|
|
235
|
+
* ctx.data.updatedAt = new Date();
|
|
236
|
+
* });
|
|
237
|
+
* await userModel.updateWhere({ role: 'guest' }, { role: 'member' });
|
|
238
|
+
* ```
|
|
239
|
+
*/
|
|
240
|
+
updateWhere(query: Condition<S[T]>, data: Partial<S[T]>): Promise<number>;
|
|
26
241
|
/**
|
|
27
|
-
*
|
|
242
|
+
* 更新单个数据(向后兼容)
|
|
28
243
|
*/
|
|
29
|
-
updateOne(query: Condition<T>, data: Partial<T>): Promise<boolean>;
|
|
244
|
+
updateOne(query: Condition<S[T]>, data: Partial<S[T]>): Promise<boolean>;
|
|
30
245
|
/**
|
|
31
246
|
* 根据ID更新
|
|
32
247
|
*/
|
|
33
|
-
updateById(id: any, data: Partial<T>): Promise<boolean>;
|
|
248
|
+
updateById(id: any, data: Partial<S[T]>): Promise<boolean>;
|
|
34
249
|
/**
|
|
35
|
-
*
|
|
250
|
+
* 删除数据(支持生命周期钩子和软删除)
|
|
251
|
+
* @example
|
|
252
|
+
* ```ts
|
|
253
|
+
* userModel.addHook('beforeDelete', async (ctx) => {
|
|
254
|
+
* // 删除前检查
|
|
255
|
+
* const user = await userModel.findOne(ctx.where);
|
|
256
|
+
* if (user?.role === 'admin') return false; // 取消删除
|
|
257
|
+
* });
|
|
258
|
+
* await userModel.deleteWhere({ status: 'inactive' });
|
|
259
|
+
* ```
|
|
260
|
+
*/
|
|
261
|
+
deleteWhere(query: Condition<S[T]>): Promise<number | S[T][]>;
|
|
262
|
+
/**
|
|
263
|
+
* 根据ID删除(支持软删除和钩子)
|
|
36
264
|
*/
|
|
37
265
|
deleteById(id: any): Promise<boolean>;
|
|
266
|
+
/**
|
|
267
|
+
* 根据ID强制删除(物理删除,忽略软删除设置,但仍触发钩子)
|
|
268
|
+
*/
|
|
269
|
+
forceDeleteById(id: any): Promise<boolean>;
|
|
270
|
+
/**
|
|
271
|
+
* 根据ID恢复软删除的记录
|
|
272
|
+
*/
|
|
273
|
+
restoreById(id: any): Promise<boolean>;
|
|
38
274
|
/**
|
|
39
275
|
* 统计数量
|
|
40
276
|
*/
|
|
41
|
-
count(query?: Condition<T>): Promise<number>;
|
|
277
|
+
count(query?: Condition<S[T]>): Promise<number>;
|
|
42
278
|
}
|
|
43
279
|
//# sourceMappingURL=model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/type/related/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/type/related/model.ts"],"names":[],"mappings":"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"}
|