@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
@@ -0,0 +1,475 @@
1
+ /**
2
+ * 记录型迁移上下文
3
+ * 在执行操作的同时记录所有操作,用于自动生成 down
4
+ */
5
+ class RecordingMigrationContext {
6
+ baseContext;
7
+ _operations = [];
8
+ constructor(baseContext) {
9
+ this.baseContext = baseContext;
10
+ }
11
+ get operations() {
12
+ return this._operations;
13
+ }
14
+ async createTable(tableName, columns) {
15
+ this._operations.push({ type: 'createTable', tableName, columns });
16
+ await this.baseContext.createTable(tableName, columns);
17
+ }
18
+ async dropTable(tableName) {
19
+ this._operations.push({ type: 'dropTable', tableName });
20
+ await this.baseContext.dropTable(tableName);
21
+ }
22
+ async addColumn(tableName, columnName, column) {
23
+ this._operations.push({ type: 'addColumn', tableName, columnName, column });
24
+ await this.baseContext.addColumn(tableName, columnName, column);
25
+ }
26
+ async dropColumn(tableName, columnName) {
27
+ this._operations.push({ type: 'dropColumn', tableName, columnName });
28
+ await this.baseContext.dropColumn(tableName, columnName);
29
+ }
30
+ async modifyColumn(tableName, columnName, column) {
31
+ // modifyColumn 不能自动反向,需要原始列定义
32
+ await this.baseContext.modifyColumn(tableName, columnName, column);
33
+ }
34
+ async renameColumn(tableName, oldName, newName) {
35
+ this._operations.push({ type: 'renameColumn', tableName, oldName, newName });
36
+ await this.baseContext.renameColumn(tableName, oldName, newName);
37
+ }
38
+ async addIndex(tableName, indexName, columns, unique) {
39
+ this._operations.push({ type: 'addIndex', tableName, indexName, columns, unique });
40
+ await this.baseContext.addIndex(tableName, indexName, columns, unique);
41
+ }
42
+ async dropIndex(tableName, indexName) {
43
+ this._operations.push({ type: 'dropIndex', tableName, indexName });
44
+ await this.baseContext.dropIndex(tableName, indexName);
45
+ }
46
+ async query(sql, params) {
47
+ // query 操作记录但无法自动反向
48
+ this._operations.push({ type: 'query', sql, params });
49
+ return this.baseContext.query(sql, params);
50
+ }
51
+ }
52
+ /**
53
+ * 根据 up 操作自动生成 down 操作
54
+ */
55
+ function generateReverseOperations(operations) {
56
+ const reversed = [];
57
+ // 反向遍历操作列表
58
+ for (let i = operations.length - 1; i >= 0; i--) {
59
+ const op = operations[i];
60
+ switch (op.type) {
61
+ case 'createTable':
62
+ // createTable -> dropTable
63
+ reversed.push({ type: 'dropTable', tableName: op.tableName });
64
+ break;
65
+ case 'dropTable':
66
+ // dropTable 无法自动反向(需要原始表结构)
67
+ throw new Error(`Cannot auto-reverse 'dropTable("${op.tableName}")'. Please provide explicit 'down' function.`);
68
+ case 'addColumn':
69
+ // addColumn -> dropColumn
70
+ reversed.push({ type: 'dropColumn', tableName: op.tableName, columnName: op.columnName });
71
+ break;
72
+ case 'dropColumn':
73
+ // dropColumn 无法自动反向(需要原始列定义)
74
+ throw new Error(`Cannot auto-reverse 'dropColumn("${op.tableName}", "${op.columnName}")'. Please provide explicit 'down' function.`);
75
+ case 'addIndex':
76
+ // addIndex -> dropIndex
77
+ reversed.push({ type: 'dropIndex', tableName: op.tableName, indexName: op.indexName });
78
+ break;
79
+ case 'dropIndex':
80
+ // dropIndex 无法自动反向(需要原始索引定义)
81
+ throw new Error(`Cannot auto-reverse 'dropIndex("${op.tableName}", "${op.indexName}")'. Please provide explicit 'down' function.`);
82
+ case 'renameColumn':
83
+ // renameColumn -> renameColumn (反向)
84
+ reversed.push({ type: 'renameColumn', tableName: op.tableName, oldName: op.newName, newName: op.oldName });
85
+ break;
86
+ case 'query':
87
+ // query 无法自动反向
88
+ throw new Error(`Cannot auto-reverse raw query. Please provide explicit 'down' function.`);
89
+ }
90
+ }
91
+ return reversed;
92
+ }
93
+ /**
94
+ * 执行反向操作
95
+ */
96
+ async function executeReverseOperations(context, operations) {
97
+ for (const op of operations) {
98
+ switch (op.type) {
99
+ case 'dropTable':
100
+ await context.dropTable(op.tableName);
101
+ break;
102
+ case 'dropColumn':
103
+ await context.dropColumn(op.tableName, op.columnName);
104
+ break;
105
+ case 'dropIndex':
106
+ await context.dropIndex(op.tableName, op.indexName);
107
+ break;
108
+ case 'renameColumn':
109
+ await context.renameColumn(op.tableName, op.oldName, op.newName);
110
+ break;
111
+ }
112
+ }
113
+ }
114
+ /**
115
+ * 迁移运行器
116
+ * 管理数据库迁移的执行、回滚和状态跟踪
117
+ *
118
+ * @example
119
+ * ```ts
120
+ * const runner = new MigrationRunner(db);
121
+ *
122
+ * // 添加迁移
123
+ * runner.add({
124
+ * name: '001_create_users',
125
+ * up: async (ctx) => {
126
+ * await ctx.createTable('users', {
127
+ * id: { type: 'integer', primary: true, autoIncrement: true },
128
+ * name: { type: 'text', nullable: false }
129
+ * });
130
+ * },
131
+ * down: async (ctx) => {
132
+ * await ctx.dropTable('users');
133
+ * }
134
+ * });
135
+ *
136
+ * // 运行所有待执行的迁移
137
+ * await runner.migrate();
138
+ *
139
+ * // 回滚最后一批迁移
140
+ * await runner.rollback();
141
+ * ```
142
+ */
143
+ export class MigrationRunner {
144
+ database;
145
+ migrations = [];
146
+ tableName;
147
+ currentBatch = 0;
148
+ constructor(database, config) {
149
+ this.database = database;
150
+ this.tableName = config?.tableName || '_migrations';
151
+ }
152
+ /**
153
+ * 添加迁移
154
+ */
155
+ add(migration) {
156
+ this.migrations.push(migration);
157
+ return this;
158
+ }
159
+ /**
160
+ * 批量添加迁移
161
+ */
162
+ addAll(migrations) {
163
+ this.migrations.push(...migrations);
164
+ return this;
165
+ }
166
+ /**
167
+ * 初始化迁移表
168
+ */
169
+ async ensureMigrationTable() {
170
+ const sql = `
171
+ CREATE TABLE IF NOT EXISTS "${this.tableName}" (
172
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
173
+ name TEXT NOT NULL UNIQUE,
174
+ batch INTEGER NOT NULL,
175
+ operations TEXT,
176
+ executed_at DATETIME DEFAULT CURRENT_TIMESTAMP
177
+ )
178
+ `;
179
+ await this.database.query(sql);
180
+ }
181
+ /**
182
+ * 获取已执行的迁移
183
+ */
184
+ async getExecutedMigrations() {
185
+ const sql = `SELECT id, name, batch, executed_at as executedAt FROM "${this.tableName}" ORDER BY id ASC`;
186
+ return this.database.query(sql);
187
+ }
188
+ /**
189
+ * 获取当前批次号
190
+ */
191
+ async getCurrentBatch() {
192
+ const sql = `SELECT MAX(batch) as maxBatch FROM "${this.tableName}"`;
193
+ const result = await this.database.query(sql);
194
+ return result[0]?.maxBatch || 0;
195
+ }
196
+ /**
197
+ * 记录迁移执行
198
+ */
199
+ async recordMigration(name, batch, operations) {
200
+ const operationsJson = operations ? JSON.stringify(operations) : null;
201
+ const sql = `INSERT INTO "${this.tableName}" (name, batch, operations) VALUES (?, ?, ?)`;
202
+ await this.database.query(sql, [name, batch, operationsJson]);
203
+ }
204
+ /**
205
+ * 获取迁移记录的操作
206
+ */
207
+ async getMigrationOperations(name) {
208
+ const sql = `SELECT operations FROM "${this.tableName}" WHERE name = ?`;
209
+ const result = await this.database.query(sql, [name]);
210
+ if (result.length === 0 || !result[0].operations) {
211
+ return null;
212
+ }
213
+ return JSON.parse(result[0].operations);
214
+ }
215
+ /**
216
+ * 删除迁移记录
217
+ */
218
+ async removeMigrationRecord(name) {
219
+ const sql = `DELETE FROM "${this.tableName}" WHERE name = ?`;
220
+ await this.database.query(sql, [name]);
221
+ }
222
+ /**
223
+ * 创建迁移上下文
224
+ */
225
+ createContext() {
226
+ const db = this.database;
227
+ return {
228
+ async createTable(tableName, columns) {
229
+ const columnDefs = Object.entries(columns).map(([name, col]) => {
230
+ let def = `"${name}" ${mapColumnType(col.type)}`;
231
+ if (col.primary)
232
+ def += ' PRIMARY KEY';
233
+ if (col.autoIncrement)
234
+ def += ' AUTOINCREMENT';
235
+ if (col.unique)
236
+ def += ' UNIQUE';
237
+ if (!col.nullable)
238
+ def += ' NOT NULL';
239
+ if (col.default !== undefined)
240
+ def += ` DEFAULT ${formatDefault(col.default)}`;
241
+ return def;
242
+ }).join(', ');
243
+ const sql = `CREATE TABLE IF NOT EXISTS "${tableName}" (${columnDefs})`;
244
+ await db.query(sql);
245
+ },
246
+ async dropTable(tableName) {
247
+ const sql = `DROP TABLE IF EXISTS "${tableName}"`;
248
+ await db.query(sql);
249
+ },
250
+ async addColumn(tableName, columnName, column) {
251
+ let def = `"${columnName}" ${mapColumnType(column.type)}`;
252
+ if (column.unique)
253
+ def += ' UNIQUE';
254
+ if (!column.nullable)
255
+ def += ' NOT NULL';
256
+ if (column.default !== undefined)
257
+ def += ` DEFAULT ${formatDefault(column.default)}`;
258
+ const sql = `ALTER TABLE "${tableName}" ADD COLUMN ${def}`;
259
+ await db.query(sql);
260
+ },
261
+ async dropColumn(tableName, columnName) {
262
+ const sql = `ALTER TABLE "${tableName}" DROP COLUMN "${columnName}"`;
263
+ await db.query(sql);
264
+ },
265
+ async modifyColumn(tableName, columnName, column) {
266
+ // 注意:SQLite 不支持直接 MODIFY COLUMN,需要重建表
267
+ // 这里提供一个简化的实现,完整实现需要更复杂的逻辑
268
+ throw new Error('modifyColumn is not supported in SQLite. Consider recreating the table.');
269
+ },
270
+ async renameColumn(tableName, oldName, newName) {
271
+ const sql = `ALTER TABLE "${tableName}" RENAME COLUMN "${oldName}" TO "${newName}"`;
272
+ await db.query(sql);
273
+ },
274
+ async addIndex(tableName, indexName, columns, unique = false) {
275
+ const uniqueStr = unique ? 'UNIQUE ' : '';
276
+ const colStr = columns.map(c => `"${c}"`).join(', ');
277
+ const sql = `CREATE ${uniqueStr}INDEX IF NOT EXISTS "${indexName}" ON "${tableName}" (${colStr})`;
278
+ await db.query(sql);
279
+ },
280
+ async dropIndex(tableName, indexName) {
281
+ const sql = `DROP INDEX IF EXISTS "${indexName}"`;
282
+ await db.query(sql);
283
+ },
284
+ async query(sql, params) {
285
+ return db.query(sql, params);
286
+ }
287
+ };
288
+ }
289
+ /**
290
+ * 获取迁移状态
291
+ */
292
+ async status() {
293
+ await this.ensureMigrationTable();
294
+ const executed = await this.getExecutedMigrations();
295
+ const executedNames = new Set(executed.map(m => m.name));
296
+ const result = [];
297
+ // 已执行的迁移
298
+ for (const record of executed) {
299
+ result.push({
300
+ name: record.name,
301
+ status: 'executed',
302
+ batch: record.batch,
303
+ executedAt: record.executedAt
304
+ });
305
+ }
306
+ // 待执行的迁移
307
+ for (const migration of this.migrations) {
308
+ if (!executedNames.has(migration.name)) {
309
+ result.push({
310
+ name: migration.name,
311
+ status: 'pending'
312
+ });
313
+ }
314
+ }
315
+ return result;
316
+ }
317
+ /**
318
+ * 运行所有待执行的迁移
319
+ */
320
+ async migrate() {
321
+ await this.ensureMigrationTable();
322
+ const executed = await this.getExecutedMigrations();
323
+ const executedNames = new Set(executed.map(m => m.name));
324
+ const pending = this.migrations.filter(m => !executedNames.has(m.name));
325
+ if (pending.length === 0) {
326
+ return [];
327
+ }
328
+ const batch = (await this.getCurrentBatch()) + 1;
329
+ const baseContext = this.createContext();
330
+ const migrated = [];
331
+ for (const migration of pending) {
332
+ try {
333
+ // 如果没有显式的 down,使用记录型上下文来记录操作
334
+ if (!migration.down) {
335
+ const recordingContext = new RecordingMigrationContext(baseContext);
336
+ await migration.up(recordingContext);
337
+ // 验证操作可以反向(提前检查)
338
+ generateReverseOperations(recordingContext.operations);
339
+ await this.recordMigration(migration.name, batch, recordingContext.operations);
340
+ }
341
+ else {
342
+ await migration.up(baseContext);
343
+ await this.recordMigration(migration.name, batch);
344
+ }
345
+ migrated.push(migration.name);
346
+ }
347
+ catch (error) {
348
+ // 迁移失败,抛出错误
349
+ throw new Error(`Migration "${migration.name}" failed: ${error.message}`);
350
+ }
351
+ }
352
+ return migrated;
353
+ }
354
+ /**
355
+ * 回滚最后一批迁移
356
+ */
357
+ async rollback() {
358
+ await this.ensureMigrationTable();
359
+ const currentBatch = await this.getCurrentBatch();
360
+ if (currentBatch === 0) {
361
+ return [];
362
+ }
363
+ // 获取最后一批的迁移
364
+ const sql = `SELECT name FROM "${this.tableName}" WHERE batch = ? ORDER BY id DESC`;
365
+ const lastBatch = await this.database.query(sql, [currentBatch]);
366
+ const context = this.createContext();
367
+ const rolledBack = [];
368
+ for (const record of lastBatch) {
369
+ const migration = this.migrations.find(m => m.name === record.name);
370
+ if (!migration) {
371
+ throw new Error(`Migration "${record.name}" not found in registered migrations`);
372
+ }
373
+ try {
374
+ if (migration.down) {
375
+ // 使用显式的 down 函数
376
+ await migration.down(context);
377
+ }
378
+ else {
379
+ // 自动生成并执行反向操作
380
+ const operations = await this.getMigrationOperations(record.name);
381
+ if (!operations) {
382
+ throw new Error(`No recorded operations found for migration "${record.name}". Cannot auto-rollback.`);
383
+ }
384
+ const reverseOps = generateReverseOperations(operations);
385
+ await executeReverseOperations(context, reverseOps);
386
+ }
387
+ await this.removeMigrationRecord(record.name);
388
+ rolledBack.push(record.name);
389
+ }
390
+ catch (error) {
391
+ throw new Error(`Rollback "${record.name}" failed: ${error.message}`);
392
+ }
393
+ }
394
+ return rolledBack;
395
+ }
396
+ /**
397
+ * 回滚所有迁移
398
+ */
399
+ async reset() {
400
+ const allRolledBack = [];
401
+ let batch = await this.getCurrentBatch();
402
+ while (batch > 0) {
403
+ const rolledBack = await this.rollback();
404
+ allRolledBack.push(...rolledBack);
405
+ batch = await this.getCurrentBatch();
406
+ }
407
+ return allRolledBack;
408
+ }
409
+ /**
410
+ * 重新运行所有迁移(reset + migrate)
411
+ */
412
+ async refresh() {
413
+ const rolledBack = await this.reset();
414
+ const migrated = await this.migrate();
415
+ return { rolledBack, migrated };
416
+ }
417
+ }
418
+ /**
419
+ * 映射列类型到 SQL 类型
420
+ */
421
+ function mapColumnType(type) {
422
+ const typeMap = {
423
+ 'text': 'TEXT',
424
+ 'integer': 'INTEGER',
425
+ 'float': 'REAL',
426
+ 'boolean': 'INTEGER',
427
+ 'date': 'DATETIME',
428
+ 'json': 'TEXT'
429
+ };
430
+ return typeMap[type] || type.toUpperCase();
431
+ }
432
+ /**
433
+ * 格式化默认值
434
+ */
435
+ function formatDefault(value) {
436
+ if (value === null)
437
+ return 'NULL';
438
+ if (typeof value === 'string')
439
+ return `'${value}'`;
440
+ if (typeof value === 'boolean')
441
+ return value ? '1' : '0';
442
+ return String(value);
443
+ }
444
+ /**
445
+ * 创建迁移辅助函数
446
+ *
447
+ * @example
448
+ * // 只需要定义 up,down 会自动生成
449
+ * defineMigration({
450
+ * name: '001_create_users',
451
+ * up: async (ctx) => {
452
+ * await ctx.createTable('users', {
453
+ * id: { type: 'integer', primary: true, autoIncrement: true },
454
+ * name: { type: 'text', nullable: false }
455
+ * });
456
+ * await ctx.addIndex('users', 'idx_name', ['name']);
457
+ * }
458
+ * // down 自动生成: dropIndex + dropTable
459
+ * });
460
+ *
461
+ * // 如果需要自定义 down,可以显式提供
462
+ * defineMigration({
463
+ * name: '002_custom_migration',
464
+ * up: async (ctx) => {
465
+ * await ctx.query('INSERT INTO settings VALUES (?, ?)', ['key', 'value']);
466
+ * },
467
+ * down: async (ctx) => {
468
+ * await ctx.query('DELETE FROM settings WHERE key = ?', ['key']);
469
+ * }
470
+ * });
471
+ */
472
+ export function defineMigration(config) {
473
+ return config;
474
+ }
475
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"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"}
package/lib/registry.d.ts CHANGED
@@ -1,37 +1,40 @@
1
1
  import { Database } from './base/database.js';
2
- import type { MongoDBDialectConfig } from './dialects/mongodb.js';
3
- import { RelatedDatabase } from "./type/related/database.js";
4
- import { MemoryConfig } from "./types.js";
5
- import { DocumentDatabase } from "./type/document/database.js";
6
- import { MySQLDialectConfig } from "./dialects/mysql.js";
7
- import { PostgreSQLDialectConfig } from "./dialects/pg.js";
8
- import { RedisDialectConfig } from "./dialects/redis.js";
9
- import { SQLiteDialectConfig } from "./dialects/sqlite.js";
10
- import { KeyValueDatabase } from "./type/keyvalue/database.js";
2
+ import { Memory } from './dialects/memory.js';
3
+ import { MongoDB } from './dialects/mongodb.js';
4
+ import { MySQL } from "./dialects/mysql.js";
5
+ import { PG } from "./dialects/pg.js";
6
+ import { Redis } from "./dialects/redis.js";
7
+ import { Sqlite } from "./dialects/sqlite.js";
11
8
  /**
12
9
  * 数据库注册表接口
13
10
  * 支持模块声明扩展
14
11
  */
15
12
  export interface Databases<S extends Record<string, object> = Record<string, object>> {
16
- memory: RelatedDatabase<MemoryConfig, S>;
17
- mongodb: DocumentDatabase<MongoDBDialectConfig, S>;
18
- mysql: RelatedDatabase<MySQLDialectConfig, S>;
19
- pg: RelatedDatabase<PostgreSQLDialectConfig, S>;
20
- redis: KeyValueDatabase<RedisDialectConfig, S>;
21
- sqlite: RelatedDatabase<SQLiteDialectConfig>;
13
+ memory: Memory<S>;
14
+ mongodb: MongoDB<S>;
15
+ mysql: MySQL<S>;
16
+ pg: PG<S>;
17
+ redis: Redis<S>;
18
+ sqlite: Sqlite<S>;
22
19
  }
23
20
  /**
24
21
  * 数据库注册表命名空间
25
22
  */
26
- export type Creator<D, S extends Record<string, object>> = (config: D, definitions?: Database.Definitions<S>) => Database<any, S, any>;
27
- export type Constructor<D, S extends Record<string, object>> = new (config: D, definitions?: Database.Definitions<S>) => Database<any, S, any>;
28
- export type Factory<D, S extends Record<string, object>> = Creator<any, S> | Constructor<any, S>;
23
+ export type Factory<D, S extends Record<string, object>, R extends Database<D, S, any>> = {
24
+ new (config: D, definitions?: Database.DefinitionObj<S>): R;
25
+ };
29
26
  export declare namespace Registry {
30
- const factories: Map<any, any>;
31
- type Config<T extends Database<any, any, any>> = T extends Database<infer D, any, any> ? D : any;
27
+ const factories: Map<string, Factory<any, any, any>>;
28
+ interface Config {
29
+ memory: import('./dialects/memory.js').MemoryConfig;
30
+ mongodb: import('./dialects/mongodb.js').MongoDBDialectConfig;
31
+ mysql: import('./dialects/mysql.js').MySQLDialectConfig;
32
+ pg: import('./dialects/pg.js').PostgreSQLDialectConfig;
33
+ redis: import('./dialects/redis.js').RedisDialectConfig;
34
+ sqlite: import('./dialects/sqlite.js').SQLiteDialectConfig;
35
+ }
32
36
  type DatabaseType = 'related' | 'document' | 'keyvalue';
33
- function register<D extends string, S extends Record<string, object>>(dialect: D, factory: Factory<any, S>): void;
34
- function create<D extends string, S extends Record<string, object>>(dialect: D, config: any, definitions?: Database.Definitions<S>): any;
35
- function isConstructor<D, S extends Record<string, object>>(fn: Factory<D, S>): fn is Constructor<D, S>;
37
+ function register<S extends Record<string, object>, D extends keyof Databases<S>>(dialect: D, factory: Factory<Config[D], S, any>): void;
38
+ function create<S extends Record<string, object>, D extends keyof Databases<S>>(dialect: D, config: Config[D], definitions?: Database.DefinitionObj<S>): Databases<S>[D];
36
39
  }
37
40
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAC,EAAE,EAAC,MAAM,kBAAkB,CAAC;AACpC,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAClF,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAChB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAG;IACtF,KAAK,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAC7D,CAAA;AAED,yBAAiB,QAAQ,CAAC;IACjB,MAAM,SAAS,qCAAyC,CAAC;IAChE,UAAiB,MAAM;QACrB,MAAM,EAAC,OAAO,sBAAsB,EAAE,YAAY,CAAA;QAClD,OAAO,EAAC,OAAO,uBAAuB,EAAE,oBAAoB,CAAA;QAC5D,KAAK,EAAC,OAAO,qBAAqB,EAAE,kBAAkB,CAAA;QACtD,EAAE,EAAC,OAAO,kBAAkB,EAAE,uBAAuB,CAAA;QACrD,KAAK,EAAC,OAAO,qBAAqB,EAAE,kBAAkB,CAAA;QACtD,MAAM,EAAC,OAAO,sBAAsB,EAAE,mBAAmB,CAAA;KAC1D;IACD,KAAY,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAE/D,SAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAC,CAAC,SAAS,MAAM,SAAS,CAAC,CAAC,CAAC,EACpF,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,GAAG,CAAC,GACjC,IAAI,CAEN;IAED,SAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,MAAM,SAAS,CAAC,CAAC,CAAC,EACnF,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,WAAW,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,GACtC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAMjB;CACF"}
package/lib/registry.js CHANGED
@@ -10,12 +10,8 @@ export var Registry;
10
10
  if (!factory) {
11
11
  throw new Error(`database dialect ${dialect} not registered`);
12
12
  }
13
- return (isConstructor(factory) ? new factory(config, definitions) : factory(config, definitions));
13
+ return new factory(config, definitions);
14
14
  }
15
15
  Registry.create = create;
16
- function isConstructor(fn) {
17
- return fn.prototype && fn.prototype.constructor === fn;
18
- }
19
- Registry.isConstructor = isConstructor;
20
16
  })(Registry || (Registry = {}));
21
17
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AA+BA,MAAM,KAAW,QAAQ,CA2BxB;AA3BD,WAAiB,QAAQ;IACV,kBAAS,GAAC,IAAI,GAAG,EAAE,CAAC;IAIjC,SAAgB,QAAQ,CACtB,OAAU,EACV,OAAwB;QAExB,SAAA,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,OAA0B,CAAC,CAAC;IACrD,CAAC;IALe,iBAAQ,WAKvB,CAAA;IAED,SAAgB,MAAM,CACpB,OAAU,EACV,MAAW,EACX,WAAqC;QAErC,MAAM,OAAO,GAAG,SAAA,SAAS,CAAC,GAAG,CAAC,OAAO,CAAgC,CAAC;QACtE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,iBAAiB,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAQ,CAAC;IAC3G,CAAC;IAVe,eAAM,SAUrB,CAAA;IAED,SAAgB,aAAa,CAAsC,EAAiB;QAClF,OAAO,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,EAAE,CAAC;IACzD,CAAC;IAFe,sBAAa,gBAE5B,CAAA;AACH,CAAC,EA3BgB,QAAQ,KAAR,QAAQ,QA2BxB"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AA4BA,MAAM,KAAW,QAAQ,CA8BxB;AA9BD,WAAiB,QAAQ;IACV,kBAAS,GAAC,IAAI,GAAG,EAAiC,CAAC;IAWhE,SAAgB,QAAQ,CACtB,OAAU,EACV,OAAkC;QAElC,SAAA,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,OAAoC,CAAC,CAAC;IAC/D,CAAC;IALe,iBAAQ,WAKvB,CAAA;IAED,SAAgB,MAAM,CACpB,OAAU,EACV,MAAiB,EACjB,WAAuC;QAEvC,MAAM,OAAO,GAAG,SAAA,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,iBAAiB,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,WAAW,CAAoB,CAAC;IAC7D,CAAC;IAVe,eAAM,SAUrB,CAAA;AACH,CAAC,EA9BgB,QAAQ,KAAR,QAAQ,QA8BxB"}