@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.
Files changed (115) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1360 -34
  3. package/lib/base/database.d.ts +71 -13
  4. package/lib/base/database.d.ts.map +1 -1
  5. package/lib/base/database.js +128 -4
  6. package/lib/base/database.js.map +1 -1
  7. package/lib/base/dialect.d.ts +27 -10
  8. package/lib/base/dialect.d.ts.map +1 -1
  9. package/lib/base/dialect.js +32 -0
  10. package/lib/base/dialect.js.map +1 -1
  11. package/lib/base/index.d.ts +1 -0
  12. package/lib/base/index.d.ts.map +1 -1
  13. package/lib/base/index.js +1 -0
  14. package/lib/base/index.js.map +1 -1
  15. package/lib/base/model.d.ts +105 -12
  16. package/lib/base/model.d.ts.map +1 -1
  17. package/lib/base/model.js +224 -3
  18. package/lib/base/model.js.map +1 -1
  19. package/lib/base/query-classes.d.ts +204 -33
  20. package/lib/base/query-classes.d.ts.map +1 -1
  21. package/lib/base/query-classes.js +276 -0
  22. package/lib/base/query-classes.js.map +1 -1
  23. package/lib/base/thenable.d.ts +7 -7
  24. package/lib/base/thenable.d.ts.map +1 -1
  25. package/lib/base/thenable.js +5 -4
  26. package/lib/base/thenable.js.map +1 -1
  27. package/lib/base/transaction.d.ts +46 -0
  28. package/lib/base/transaction.d.ts.map +1 -0
  29. package/lib/base/transaction.js +186 -0
  30. package/lib/base/transaction.js.map +1 -0
  31. package/lib/dialects/memory.d.ts +12 -7
  32. package/lib/dialects/memory.d.ts.map +1 -1
  33. package/lib/dialects/memory.js +7 -4
  34. package/lib/dialects/memory.js.map +1 -1
  35. package/lib/dialects/mongodb.d.ts +11 -7
  36. package/lib/dialects/mongodb.d.ts.map +1 -1
  37. package/lib/dialects/mongodb.js +18 -15
  38. package/lib/dialects/mongodb.js.map +1 -1
  39. package/lib/dialects/mysql.d.ts +35 -6
  40. package/lib/dialects/mysql.d.ts.map +1 -1
  41. package/lib/dialects/mysql.js +137 -18
  42. package/lib/dialects/mysql.js.map +1 -1
  43. package/lib/dialects/pg.d.ts +35 -6
  44. package/lib/dialects/pg.d.ts.map +1 -1
  45. package/lib/dialects/pg.js +137 -18
  46. package/lib/dialects/pg.js.map +1 -1
  47. package/lib/dialects/redis.d.ts +11 -6
  48. package/lib/dialects/redis.d.ts.map +1 -1
  49. package/lib/dialects/redis.js +11 -8
  50. package/lib/dialects/redis.js.map +1 -1
  51. package/lib/dialects/sqlite.d.ts +19 -6
  52. package/lib/dialects/sqlite.d.ts.map +1 -1
  53. package/lib/dialects/sqlite.js +63 -10
  54. package/lib/dialects/sqlite.js.map +1 -1
  55. package/lib/index.d.ts +1 -0
  56. package/lib/index.d.ts.map +1 -1
  57. package/lib/index.js +1 -0
  58. package/lib/index.js.map +1 -1
  59. package/lib/migration.d.ts +132 -0
  60. package/lib/migration.d.ts.map +1 -0
  61. package/lib/migration.js +475 -0
  62. package/lib/migration.js.map +1 -0
  63. package/lib/registry.d.ts +26 -23
  64. package/lib/registry.d.ts.map +1 -1
  65. package/lib/registry.js +1 -5
  66. package/lib/registry.js.map +1 -1
  67. package/lib/type/document/database.d.ts +11 -11
  68. package/lib/type/document/database.d.ts.map +1 -1
  69. package/lib/type/document/database.js.map +1 -1
  70. package/lib/type/document/model.d.ts +7 -7
  71. package/lib/type/document/model.d.ts.map +1 -1
  72. package/lib/type/document/model.js.map +1 -1
  73. package/lib/type/keyvalue/database.d.ts +11 -11
  74. package/lib/type/keyvalue/database.d.ts.map +1 -1
  75. package/lib/type/keyvalue/database.js.map +1 -1
  76. package/lib/type/keyvalue/model.d.ts +2 -2
  77. package/lib/type/keyvalue/model.d.ts.map +1 -1
  78. package/lib/type/keyvalue/model.js.map +1 -1
  79. package/lib/type/related/database.d.ts +48 -13
  80. package/lib/type/related/database.d.ts.map +1 -1
  81. package/lib/type/related/database.js +258 -27
  82. package/lib/type/related/database.js.map +1 -1
  83. package/lib/type/related/model.d.ts +251 -15
  84. package/lib/type/related/model.d.ts.map +1 -1
  85. package/lib/type/related/model.js +647 -22
  86. package/lib/type/related/model.js.map +1 -1
  87. package/lib/types.d.ts +475 -37
  88. package/lib/types.d.ts.map +1 -1
  89. package/lib/types.js +6 -0
  90. package/lib/types.js.map +1 -1
  91. package/package.json +14 -5
  92. package/src/base/database.ts +168 -24
  93. package/src/base/dialect.ts +49 -10
  94. package/src/base/index.ts +2 -1
  95. package/src/base/model.ts +258 -18
  96. package/src/base/query-classes.ts +471 -63
  97. package/src/base/thenable.ts +12 -11
  98. package/src/base/transaction.ts +213 -0
  99. package/src/dialects/memory.ts +14 -13
  100. package/src/dialects/mongodb.ts +40 -38
  101. package/src/dialects/mysql.ts +151 -22
  102. package/src/dialects/pg.ts +148 -21
  103. package/src/dialects/redis.ts +40 -38
  104. package/src/dialects/sqlite.ts +73 -15
  105. package/src/index.ts +1 -2
  106. package/src/migration.ts +544 -0
  107. package/src/registry.ts +33 -33
  108. package/src/type/document/database.ts +32 -32
  109. package/src/type/document/model.ts +14 -14
  110. package/src/type/keyvalue/database.ts +32 -32
  111. package/src/type/keyvalue/model.ts +18 -18
  112. package/src/type/related/database.ts +309 -34
  113. package/src/type/related/model.ts +800 -33
  114. package/src/types.ts +559 -44
  115. 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<T extends object = object, D = any> extends Model<D, T, string> {
9
- constructor(database: RelatedDatabase<D>, name: string);
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
- create(data: Partial<T>): Promise<T>;
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
- createMany(data: Partial<T>[]): Promise<T[]>;
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
- selectOne(query?: Condition<T>): Promise<T | null>;
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
- * 根据ID删除
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;AAE3C;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAC,CAAC,GAAC,GAAG,CAAE,SAAQ,KAAK,CAAC,CAAC,EAAC,CAAC,EAAC,MAAM,CAAC;gBAEhF,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAC5B,IAAI,EAAE,MAAM;IAKd;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAY1C;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAgBlD;;OAEG;IACG,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAaxD;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAI5C;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IASxE;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAK7D;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3C;;OAEG;IACG,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAYnD"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/type/related/model.ts"],"names":[],"mappings":"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"}