@uql/core 3.7.13 → 3.8.1

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 (210) hide show
  1. package/CHANGELOG.md +11 -2
  2. package/README.md +16 -8
  3. package/dist/browser/uql-browser.min.js +16 -15
  4. package/dist/browser/uql-browser.min.js.map +1 -1
  5. package/dist/dialect/abstractDialect.d.ts +7 -2
  6. package/dist/dialect/abstractDialect.d.ts.map +1 -1
  7. package/dist/dialect/abstractDialect.js +9 -1
  8. package/dist/dialect/abstractDialect.js.map +1 -1
  9. package/dist/dialect/abstractSqlDialect.d.ts +5 -6
  10. package/dist/dialect/abstractSqlDialect.d.ts.map +1 -1
  11. package/dist/dialect/abstractSqlDialect.js +14 -13
  12. package/dist/dialect/abstractSqlDialect.js.map +1 -1
  13. package/dist/dialect/dialectConfig.d.ts +17 -0
  14. package/dist/dialect/dialectConfig.d.ts.map +1 -0
  15. package/dist/dialect/dialectConfig.js +71 -0
  16. package/dist/dialect/dialectConfig.js.map +1 -0
  17. package/dist/dialect/index.d.ts +1 -0
  18. package/dist/dialect/index.d.ts.map +1 -1
  19. package/dist/dialect/index.js +1 -0
  20. package/dist/dialect/index.js.map +1 -1
  21. package/dist/entity/decorator/definition.d.ts.map +1 -1
  22. package/dist/entity/decorator/definition.js +2 -1
  23. package/dist/entity/decorator/definition.js.map +1 -1
  24. package/dist/entity/decorator/index-decorator.d.ts +36 -0
  25. package/dist/entity/decorator/index-decorator.d.ts.map +1 -0
  26. package/dist/entity/decorator/index-decorator.js +51 -0
  27. package/dist/entity/decorator/index-decorator.js.map +1 -0
  28. package/dist/entity/decorator/index.d.ts +1 -0
  29. package/dist/entity/decorator/index.d.ts.map +1 -1
  30. package/dist/entity/decorator/index.js +1 -0
  31. package/dist/entity/decorator/index.js.map +1 -1
  32. package/dist/maria/mariaDialect.d.ts +2 -1
  33. package/dist/maria/mariaDialect.d.ts.map +1 -1
  34. package/dist/maria/mariaDialect.js +3 -0
  35. package/dist/maria/mariaDialect.js.map +1 -1
  36. package/dist/migrate/builder/columnBuilder.d.ts +75 -0
  37. package/dist/migrate/builder/columnBuilder.d.ts.map +1 -0
  38. package/dist/migrate/builder/columnBuilder.js +149 -0
  39. package/dist/migrate/builder/columnBuilder.js.map +1 -0
  40. package/dist/migrate/builder/expressions.d.ts +87 -0
  41. package/dist/migrate/builder/expressions.d.ts.map +1 -0
  42. package/dist/migrate/builder/expressions.js +150 -0
  43. package/dist/migrate/builder/expressions.js.map +1 -0
  44. package/dist/migrate/builder/index.d.ts +6 -0
  45. package/dist/migrate/builder/index.d.ts.map +1 -0
  46. package/dist/migrate/builder/index.js +6 -0
  47. package/dist/migrate/builder/index.js.map +1 -0
  48. package/dist/migrate/builder/migrationBuilder.d.ts +73 -0
  49. package/dist/migrate/builder/migrationBuilder.d.ts.map +1 -0
  50. package/dist/migrate/builder/migrationBuilder.js +326 -0
  51. package/dist/migrate/builder/migrationBuilder.js.map +1 -0
  52. package/dist/migrate/builder/tableBuilder.d.ts +51 -0
  53. package/dist/migrate/builder/tableBuilder.d.ts.map +1 -0
  54. package/dist/migrate/builder/tableBuilder.js +278 -0
  55. package/dist/migrate/builder/tableBuilder.js.map +1 -0
  56. package/dist/migrate/builder/types.d.ts +462 -0
  57. package/dist/migrate/builder/types.d.ts.map +1 -0
  58. package/dist/migrate/builder/types.js +8 -0
  59. package/dist/migrate/builder/types.js.map +1 -0
  60. package/dist/migrate/cli.d.ts +4 -6
  61. package/dist/migrate/cli.d.ts.map +1 -1
  62. package/dist/migrate/cli.js +166 -23
  63. package/dist/migrate/cli.js.map +1 -1
  64. package/dist/migrate/codegen/entityCodeGenerator.d.ts +137 -0
  65. package/dist/migrate/codegen/entityCodeGenerator.d.ts.map +1 -0
  66. package/dist/migrate/codegen/entityCodeGenerator.js +401 -0
  67. package/dist/migrate/codegen/entityCodeGenerator.js.map +1 -0
  68. package/dist/migrate/codegen/entityMerger.d.ts +111 -0
  69. package/dist/migrate/codegen/entityMerger.d.ts.map +1 -0
  70. package/dist/migrate/codegen/entityMerger.js +291 -0
  71. package/dist/migrate/codegen/entityMerger.js.map +1 -0
  72. package/dist/migrate/codegen/index.d.ts +10 -0
  73. package/dist/migrate/codegen/index.d.ts.map +1 -0
  74. package/dist/migrate/codegen/index.js +14 -0
  75. package/dist/migrate/codegen/index.js.map +1 -0
  76. package/dist/migrate/codegen/migrationCodeGenerator.d.ts +62 -0
  77. package/dist/migrate/codegen/migrationCodeGenerator.d.ts.map +1 -0
  78. package/dist/migrate/codegen/migrationCodeGenerator.js +356 -0
  79. package/dist/migrate/codegen/migrationCodeGenerator.js.map +1 -0
  80. package/dist/migrate/codegen/smartRelationDetector.d.ts +48 -0
  81. package/dist/migrate/codegen/smartRelationDetector.d.ts.map +1 -0
  82. package/dist/migrate/codegen/smartRelationDetector.js +135 -0
  83. package/dist/migrate/codegen/smartRelationDetector.js.map +1 -0
  84. package/dist/migrate/drift/driftDetector.d.ts +81 -0
  85. package/dist/migrate/drift/driftDetector.d.ts.map +1 -0
  86. package/dist/migrate/drift/driftDetector.js +248 -0
  87. package/dist/migrate/drift/driftDetector.js.map +1 -0
  88. package/dist/migrate/drift/index.d.ts +7 -0
  89. package/dist/migrate/drift/index.d.ts.map +1 -0
  90. package/dist/migrate/drift/index.js +7 -0
  91. package/dist/migrate/drift/index.js.map +1 -0
  92. package/dist/migrate/generator/index.d.ts +1 -3
  93. package/dist/migrate/generator/index.d.ts.map +1 -1
  94. package/dist/migrate/generator/index.js +1 -3
  95. package/dist/migrate/generator/index.js.map +1 -1
  96. package/dist/migrate/generator/mongoSchemaGenerator.d.ts +29 -3
  97. package/dist/migrate/generator/mongoSchemaGenerator.d.ts.map +1 -1
  98. package/dist/migrate/generator/mongoSchemaGenerator.js +86 -4
  99. package/dist/migrate/generator/mongoSchemaGenerator.js.map +1 -1
  100. package/dist/migrate/index.d.ts +7 -8
  101. package/dist/migrate/index.d.ts.map +1 -1
  102. package/dist/migrate/index.js +11 -9
  103. package/dist/migrate/index.js.map +1 -1
  104. package/dist/migrate/introspection/baseSqlIntrospector.d.ts +28 -0
  105. package/dist/migrate/introspection/baseSqlIntrospector.d.ts.map +1 -0
  106. package/dist/migrate/introspection/baseSqlIntrospector.js +135 -0
  107. package/dist/migrate/introspection/baseSqlIntrospector.js.map +1 -0
  108. package/dist/migrate/introspection/mongoIntrospector.d.ts +6 -0
  109. package/dist/migrate/introspection/mongoIntrospector.d.ts.map +1 -1
  110. package/dist/migrate/introspection/mongoIntrospector.js +54 -0
  111. package/dist/migrate/introspection/mongoIntrospector.js.map +1 -1
  112. package/dist/migrate/introspection/mysqlIntrospector.d.ts +2 -1
  113. package/dist/migrate/introspection/mysqlIntrospector.d.ts.map +1 -1
  114. package/dist/migrate/introspection/mysqlIntrospector.js +8 -6
  115. package/dist/migrate/introspection/mysqlIntrospector.js.map +1 -1
  116. package/dist/migrate/introspection/postgresIntrospector.d.ts +2 -1
  117. package/dist/migrate/introspection/postgresIntrospector.d.ts.map +1 -1
  118. package/dist/migrate/introspection/postgresIntrospector.js +3 -1
  119. package/dist/migrate/introspection/postgresIntrospector.js.map +1 -1
  120. package/dist/migrate/introspection/sqliteIntrospector.d.ts +2 -2
  121. package/dist/migrate/introspection/sqliteIntrospector.d.ts.map +1 -1
  122. package/dist/migrate/introspection/sqliteIntrospector.js +3 -4
  123. package/dist/migrate/introspection/sqliteIntrospector.js.map +1 -1
  124. package/dist/migrate/migrator.d.ts +29 -0
  125. package/dist/migrate/migrator.d.ts.map +1 -1
  126. package/dist/migrate/migrator.js +31 -23
  127. package/dist/migrate/migrator.js.map +1 -1
  128. package/dist/migrate/schemaGenerator.d.ts +72 -22
  129. package/dist/migrate/schemaGenerator.d.ts.map +1 -1
  130. package/dist/migrate/schemaGenerator.js +385 -153
  131. package/dist/migrate/schemaGenerator.js.map +1 -1
  132. package/dist/migrate/sync/index.d.ts +7 -0
  133. package/dist/migrate/sync/index.d.ts.map +1 -0
  134. package/dist/migrate/sync/index.js +7 -0
  135. package/dist/migrate/sync/index.js.map +1 -0
  136. package/dist/migrate/sync/schemaSync.d.ts +132 -0
  137. package/dist/migrate/sync/schemaSync.d.ts.map +1 -0
  138. package/dist/migrate/sync/schemaSync.js +260 -0
  139. package/dist/migrate/sync/schemaSync.js.map +1 -0
  140. package/dist/mongo/mongoDialect.d.ts +2 -1
  141. package/dist/mongo/mongoDialect.d.ts.map +1 -1
  142. package/dist/mongo/mongoDialect.js +3 -0
  143. package/dist/mongo/mongoDialect.js.map +1 -1
  144. package/dist/mysql/mysqlDialect.d.ts +2 -0
  145. package/dist/mysql/mysqlDialect.d.ts.map +1 -1
  146. package/dist/mysql/mysqlDialect.js +3 -0
  147. package/dist/mysql/mysqlDialect.js.map +1 -1
  148. package/dist/postgres/postgresDialect.js +1 -1
  149. package/dist/postgres/postgresDialect.js.map +1 -1
  150. package/dist/schema/canonicalType.d.ts +42 -0
  151. package/dist/schema/canonicalType.d.ts.map +1 -0
  152. package/dist/schema/canonicalType.js +524 -0
  153. package/dist/schema/canonicalType.js.map +1 -0
  154. package/dist/schema/index.d.ts +28 -0
  155. package/dist/schema/index.d.ts.map +1 -0
  156. package/dist/schema/index.js +29 -0
  157. package/dist/schema/index.js.map +1 -0
  158. package/dist/schema/schemaAST.d.ts +155 -0
  159. package/dist/schema/schemaAST.d.ts.map +1 -0
  160. package/dist/schema/schemaAST.js +496 -0
  161. package/dist/schema/schemaAST.js.map +1 -0
  162. package/dist/schema/schemaASTBuilder.d.ts +58 -0
  163. package/dist/schema/schemaASTBuilder.d.ts.map +1 -0
  164. package/dist/schema/schemaASTBuilder.js +193 -0
  165. package/dist/schema/schemaASTBuilder.js.map +1 -0
  166. package/dist/schema/schemaASTDiffer.d.ts +84 -0
  167. package/dist/schema/schemaASTDiffer.d.ts.map +1 -0
  168. package/dist/schema/schemaASTDiffer.js +431 -0
  169. package/dist/schema/schemaASTDiffer.js.map +1 -0
  170. package/dist/schema/types.d.ts +347 -0
  171. package/dist/schema/types.d.ts.map +1 -0
  172. package/dist/schema/types.js +11 -0
  173. package/dist/schema/types.js.map +1 -0
  174. package/dist/sqlite/sqliteDialect.js +1 -1
  175. package/dist/sqlite/sqliteDialect.js.map +1 -1
  176. package/dist/sqlite/sqliteQuerierPool.js.map +1 -1
  177. package/dist/type/config.d.ts +6 -0
  178. package/dist/type/config.d.ts.map +1 -1
  179. package/dist/type/entity.d.ts +24 -0
  180. package/dist/type/entity.d.ts.map +1 -1
  181. package/dist/type/migration.d.ts +50 -4
  182. package/dist/type/migration.d.ts.map +1 -1
  183. package/dist/util/field.util.d.ts +0 -1
  184. package/dist/util/field.util.d.ts.map +1 -1
  185. package/dist/util/field.util.js +8 -2
  186. package/dist/util/field.util.js.map +1 -1
  187. package/dist/util/logger.d.ts.map +1 -1
  188. package/dist/util/logger.js +2 -1
  189. package/dist/util/logger.js.map +1 -1
  190. package/dist/util/string.util.d.ts +24 -0
  191. package/dist/util/string.util.d.ts.map +1 -1
  192. package/dist/util/string.util.js +57 -0
  193. package/dist/util/string.util.js.map +1 -1
  194. package/package.json +2 -2
  195. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts +0 -15
  196. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts.map +0 -1
  197. package/dist/migrate/generator/mysqlSchemaGenerator.js +0 -88
  198. package/dist/migrate/generator/mysqlSchemaGenerator.js.map +0 -1
  199. package/dist/migrate/generator/postgresSchemaGenerator.d.ts +0 -19
  200. package/dist/migrate/generator/postgresSchemaGenerator.d.ts.map +0 -1
  201. package/dist/migrate/generator/postgresSchemaGenerator.js +0 -115
  202. package/dist/migrate/generator/postgresSchemaGenerator.js.map +0 -1
  203. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts +0 -16
  204. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts.map +0 -1
  205. package/dist/migrate/generator/sqliteSchemaGenerator.js +0 -74
  206. package/dist/migrate/generator/sqliteSchemaGenerator.js.map +0 -1
  207. package/dist/migrate/type.d.ts +0 -2
  208. package/dist/migrate/type.d.ts.map +0 -1
  209. package/dist/migrate/type.js +0 -2
  210. package/dist/migrate/type.js.map +0 -1
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Migration Builder
3
+ *
4
+ * The main builder class for defining type-safe migrations.
5
+ * Records operations and generates SQL via the SchemaGenerator.
6
+ */
7
+ import { ColumnBuilder } from './columnBuilder.js';
8
+ import { TableBuilder } from './tableBuilder.js';
9
+ /**
10
+ * Builder for altering a table.
11
+ * Delegates to MigrationBuilder methods.
12
+ */
13
+ class AlterTableBuilder {
14
+ tableName;
15
+ migrationBuilder;
16
+ constructor(tableName, migrationBuilder) {
17
+ this.tableName = tableName;
18
+ this.migrationBuilder = migrationBuilder;
19
+ }
20
+ addColumn(name, callback) {
21
+ const builder = new ColumnBuilder(name, { category: 'string' });
22
+ callback(builder);
23
+ this.migrationBuilder.recordOperationSync({
24
+ type: 'addColumn',
25
+ tableName: this.tableName,
26
+ column: builder.build(),
27
+ });
28
+ return this;
29
+ }
30
+ dropColumn(name) {
31
+ this.migrationBuilder.recordOperationSync({
32
+ type: 'dropColumn',
33
+ tableName: this.tableName,
34
+ columnName: name,
35
+ });
36
+ return this;
37
+ }
38
+ renameColumn(oldName, newName) {
39
+ this.migrationBuilder.recordOperationSync({
40
+ type: 'renameColumn',
41
+ tableName: this.tableName,
42
+ oldName,
43
+ newName,
44
+ });
45
+ return this;
46
+ }
47
+ alterColumn(name, callback) {
48
+ const builder = new ColumnBuilder(name, { category: 'string' });
49
+ callback(builder);
50
+ this.migrationBuilder.recordOperationSync({
51
+ type: 'alterColumn',
52
+ tableName: this.tableName,
53
+ columnName: name,
54
+ changes: builder.build(),
55
+ });
56
+ return this;
57
+ }
58
+ addIndex(columns, options) {
59
+ const indexName = options?.name ?? `idx_${this.tableName}_${columns.join('_')}`;
60
+ this.migrationBuilder.recordOperationSync({
61
+ type: 'createIndex',
62
+ tableName: this.tableName,
63
+ index: {
64
+ name: indexName,
65
+ columns,
66
+ unique: options?.unique ?? false,
67
+ },
68
+ });
69
+ return this;
70
+ }
71
+ dropIndex(name) {
72
+ this.migrationBuilder.recordOperationSync({
73
+ type: 'dropIndex',
74
+ tableName: this.tableName,
75
+ indexName: name,
76
+ });
77
+ return this;
78
+ }
79
+ addForeignKey(columns, target, options) {
80
+ this.migrationBuilder.recordOperationSync({
81
+ type: 'addForeignKey',
82
+ tableName: this.tableName,
83
+ foreignKey: {
84
+ name: options?.name,
85
+ columns,
86
+ referencesTable: target.table,
87
+ referencesColumns: target.columns,
88
+ onDelete: options?.onDelete ?? 'NO ACTION',
89
+ onUpdate: options?.onUpdate ?? 'NO ACTION',
90
+ },
91
+ });
92
+ return this;
93
+ }
94
+ dropForeignKey(name) {
95
+ this.migrationBuilder.recordOperationSync({
96
+ type: 'dropForeignKey',
97
+ tableName: this.tableName,
98
+ constraintName: name,
99
+ });
100
+ return this;
101
+ }
102
+ }
103
+ /**
104
+ * Main migration builder with fluent API.
105
+ * Records operations and optionally executes them via a querier.
106
+ */
107
+ export class MigrationBuilder {
108
+ operations = [];
109
+ querier;
110
+ sqlGenerator;
111
+ dryRun;
112
+ constructor(querier, sqlGenerator, options = {}) {
113
+ this.querier = querier;
114
+ this.sqlGenerator = sqlGenerator;
115
+ this.dryRun = options.dryRun ?? false;
116
+ }
117
+ // ============================================================================
118
+ // Table Operations
119
+ // ============================================================================
120
+ async createTable(name, callback) {
121
+ const builder = new TableBuilder(name);
122
+ callback(builder);
123
+ await this.recordOperation({
124
+ type: 'createTable',
125
+ table: builder.build(),
126
+ });
127
+ }
128
+ async dropTable(name, options = {}) {
129
+ await this.recordOperation({
130
+ type: 'dropTable',
131
+ tableName: name,
132
+ ifExists: options.ifExists,
133
+ cascade: options.cascade,
134
+ });
135
+ }
136
+ async renameTable(oldName, newName) {
137
+ await this.recordOperation({
138
+ type: 'renameTable',
139
+ oldName,
140
+ newName,
141
+ });
142
+ }
143
+ async alterTable(name, callback) {
144
+ const builder = new AlterTableBuilder(name, this);
145
+ callback(builder);
146
+ // AlterTableBuilder calls migrationBuilder methods directly, so we don't need to do anything else here
147
+ }
148
+ // ============================================================================
149
+ // Column Operations
150
+ // ============================================================================
151
+ async addColumn(tableName, columnName, callback) {
152
+ // Create a generic column builder, the callback will configure the type
153
+ const builder = new ColumnBuilder(columnName, { category: 'string' });
154
+ callback(builder);
155
+ await this.recordOperation({
156
+ type: 'addColumn',
157
+ tableName,
158
+ column: builder.build(),
159
+ });
160
+ }
161
+ async dropColumn(tableName, columnName) {
162
+ await this.recordOperation({
163
+ type: 'dropColumn',
164
+ tableName,
165
+ columnName,
166
+ });
167
+ }
168
+ async alterColumn(tableName, columnName, callback) {
169
+ const builder = new ColumnBuilder(columnName, { category: 'string' });
170
+ callback(builder);
171
+ await this.recordOperation({
172
+ type: 'alterColumn',
173
+ tableName,
174
+ columnName,
175
+ changes: builder.build(),
176
+ });
177
+ }
178
+ async renameColumn(tableName, oldName, newName) {
179
+ await this.recordOperation({
180
+ type: 'renameColumn',
181
+ tableName,
182
+ oldName,
183
+ newName,
184
+ });
185
+ }
186
+ // ============================================================================
187
+ // Index Operations
188
+ // ============================================================================
189
+ async createIndex(tableName, columns, options = {}) {
190
+ const indexName = options.name ?? `idx_${tableName}_${columns.join('_')}`;
191
+ await this.recordOperation({
192
+ type: 'createIndex',
193
+ tableName,
194
+ index: {
195
+ name: indexName,
196
+ columns,
197
+ unique: options.unique ?? false,
198
+ where: options.where,
199
+ },
200
+ });
201
+ }
202
+ async dropIndex(tableName, indexName) {
203
+ await this.recordOperation({
204
+ type: 'dropIndex',
205
+ tableName,
206
+ indexName,
207
+ });
208
+ }
209
+ // ============================================================================
210
+ // Foreign Key Operations
211
+ // ============================================================================
212
+ async addForeignKey(tableName, columns, target, options = {}) {
213
+ await this.recordOperation({
214
+ type: 'addForeignKey',
215
+ tableName,
216
+ foreignKey: {
217
+ name: options.name,
218
+ columns,
219
+ referencesTable: target.table,
220
+ referencesColumns: target.columns,
221
+ onDelete: options.onDelete ?? 'NO ACTION',
222
+ onUpdate: options.onUpdate ?? 'NO ACTION',
223
+ },
224
+ });
225
+ }
226
+ async dropForeignKey(tableName, constraintName) {
227
+ await this.recordOperation({
228
+ type: 'dropForeignKey',
229
+ tableName,
230
+ constraintName,
231
+ });
232
+ }
233
+ // ============================================================================
234
+ // Raw SQL
235
+ // ============================================================================
236
+ async raw(sql) {
237
+ const operation = {
238
+ type: 'raw',
239
+ sql,
240
+ };
241
+ this.operations.push(operation);
242
+ if (!this.dryRun && this.querier) {
243
+ await this.querier.run(sql);
244
+ }
245
+ }
246
+ // ============================================================================
247
+ // Operation Access
248
+ // ============================================================================
249
+ getOperations() {
250
+ return [...this.operations];
251
+ }
252
+ /**
253
+ * Internal method to record an operation and optionally execute it.
254
+ * @internal
255
+ */
256
+ async recordOperation(operation) {
257
+ this.operations.push(operation);
258
+ await this.execute(operation);
259
+ }
260
+ /**
261
+ * Internal method to record an operation synchronously (for builders).
262
+ * @internal
263
+ */
264
+ recordOperationSync(operation) {
265
+ this.operations.push(operation);
266
+ // We can't await execution here, but typically builders are used in dry-run or
267
+ // the execution is handled separately. For now, we fire and forget the execute
268
+ // or just don't execute if it's from a sync builder.
269
+ // In our case, createDryRunBuilder sets dryRun: true, so execute does nothing.
270
+ void this.execute(operation);
271
+ }
272
+ // ============================================================================
273
+ // Private Methods
274
+ // ============================================================================
275
+ async execute(operation) {
276
+ if (this.dryRun || !this.querier || !this.sqlGenerator) {
277
+ return;
278
+ }
279
+ const sql = this.operationToSql(operation);
280
+ if (sql) {
281
+ await this.querier.run(sql);
282
+ }
283
+ }
284
+ operationToSql(operation) {
285
+ if (!this.sqlGenerator)
286
+ return undefined;
287
+ switch (operation.type) {
288
+ case 'createTable':
289
+ return this.sqlGenerator.generateCreateTableFromDefinition(operation.table);
290
+ case 'dropTable':
291
+ return this.sqlGenerator.generateDropTableSql(operation.tableName, {
292
+ ifExists: operation.ifExists,
293
+ cascade: operation.cascade,
294
+ });
295
+ case 'renameTable':
296
+ return this.sqlGenerator.generateRenameTableSql(operation.oldName, operation.newName);
297
+ case 'addColumn':
298
+ return this.sqlGenerator.generateAddColumnSql(operation.tableName, operation.column);
299
+ case 'dropColumn':
300
+ return this.sqlGenerator.generateDropColumnSql(operation.tableName, operation.columnName);
301
+ case 'renameColumn':
302
+ return this.sqlGenerator.generateRenameColumnSql(operation.tableName, operation.oldName, operation.newName);
303
+ case 'alterColumn':
304
+ return this.sqlGenerator.generateAlterColumnSql(operation.tableName, operation.columnName, operation.changes);
305
+ case 'createIndex':
306
+ return this.sqlGenerator.generateCreateIndexSql(operation.tableName, operation.index);
307
+ case 'dropIndex':
308
+ return this.sqlGenerator.generateDropIndexSql(operation.tableName, operation.indexName);
309
+ case 'addForeignKey':
310
+ return this.sqlGenerator.generateAddForeignKeySql(operation.tableName, operation.foreignKey);
311
+ case 'dropForeignKey':
312
+ return this.sqlGenerator.generateDropForeignKeySql(operation.tableName, operation.constraintName);
313
+ case 'raw':
314
+ return operation.sql;
315
+ default:
316
+ return undefined;
317
+ }
318
+ }
319
+ }
320
+ /**
321
+ * Create a migration builder for dry-run (recording only).
322
+ */
323
+ export function createDryRunBuilder() {
324
+ return new MigrationBuilder(undefined, undefined, { dryRun: true });
325
+ }
326
+ //# sourceMappingURL=migrationBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrationBuilder.js","sourceRoot":"","sources":["../../../src/migrate/builder/migrationBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Table Builder
3
+ *
4
+ * Fluent API for defining tables in migrations.
5
+ */
6
+ import type { BaseColumnOptions, DecimalColumnOptions, IColumnBuilder, ITableBuilder, ITableForeignKeyBuilder, StringColumnOptions, TableDefinition, VectorColumnOptions } from './types.js';
7
+ /**
8
+ * Builder for table definitions with a fluent API.
9
+ */
10
+ export declare class TableBuilder implements ITableBuilder {
11
+ private _name;
12
+ private _columnBuilders;
13
+ private _primaryKey?;
14
+ private _indexes;
15
+ private _foreignKeyBuilders;
16
+ private _comment?;
17
+ constructor(name: string);
18
+ id(name?: string, options?: BaseColumnOptions): IColumnBuilder;
19
+ integer(name: string, options?: BaseColumnOptions): IColumnBuilder;
20
+ smallint(name: string, options?: BaseColumnOptions): IColumnBuilder;
21
+ bigint(name: string, options?: BaseColumnOptions): IColumnBuilder;
22
+ float(name: string, options?: BaseColumnOptions): IColumnBuilder;
23
+ double(name: string, options?: BaseColumnOptions): IColumnBuilder;
24
+ decimal(name: string, options?: DecimalColumnOptions): IColumnBuilder;
25
+ string(name: string, options?: StringColumnOptions): IColumnBuilder;
26
+ char(name: string, options?: StringColumnOptions): IColumnBuilder;
27
+ text(name: string, options?: BaseColumnOptions): IColumnBuilder;
28
+ boolean(name: string, options?: BaseColumnOptions): IColumnBuilder;
29
+ date(name: string, options?: BaseColumnOptions): IColumnBuilder;
30
+ time(name: string, options?: BaseColumnOptions): IColumnBuilder;
31
+ timestamp(name: string, options?: BaseColumnOptions): IColumnBuilder;
32
+ timestamptz(name: string, options?: BaseColumnOptions): IColumnBuilder;
33
+ json(name: string, options?: BaseColumnOptions): IColumnBuilder;
34
+ jsonb(name: string, options?: BaseColumnOptions): IColumnBuilder;
35
+ uuid(name: string, options?: BaseColumnOptions): IColumnBuilder;
36
+ blob(name: string, options?: BaseColumnOptions): IColumnBuilder;
37
+ vector(name: string, options?: VectorColumnOptions): IColumnBuilder;
38
+ createdAt(): IColumnBuilder;
39
+ updatedAt(): IColumnBuilder;
40
+ timestamps(): void;
41
+ primaryKey(columns: string[]): this;
42
+ unique(columns: string[], name?: string): this;
43
+ index(columns: string[], name?: string): this;
44
+ foreignKey(columns: string[]): ITableForeignKeyBuilder;
45
+ comment(text: string): this;
46
+ /**
47
+ * Build the table definition.
48
+ */
49
+ build(): TableDefinition;
50
+ }
51
+ //# sourceMappingURL=tableBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableBuilder.d.ts","sourceRoot":"","sources":["../../../src/migrate/builder/tableBuilder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EAEd,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EAEf,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAuDpB;;GAEG;AACH,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAC,CAAW;IAC/B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,IAAI,EAAE,MAAM;IAQxB,EAAE,CAAC,IAAI,SAAO,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMhE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMtE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMvE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMrE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMpE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMrE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,cAAc;IAWzE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,cAAc;IAOvE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,cAAc;IAOrE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAUnE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAUtE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMnE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMnE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMxE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAU1E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMnE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAWpE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMnE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc;IAMnE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,cAAc;IAWvE,SAAS,IAAI,cAAc;IAM3B,SAAS,IAAI,cAAc;IAM3B,UAAU,IAAI,IAAI;IASlB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAU9C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAU7C,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,uBAAuB;IAUtD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B;;OAEG;IACH,KAAK,IAAI,eAAe;CAkCzB"}
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Table Builder
3
+ *
4
+ * Fluent API for defining tables in migrations.
5
+ */
6
+ import { ColumnBuilder } from './columnBuilder.js';
7
+ import { t } from './expressions.js';
8
+ /**
9
+ * Builder for table-level foreign keys.
10
+ */
11
+ class TableForeignKeyBuilder {
12
+ _columns;
13
+ _referencesTable;
14
+ _referencesColumns = [];
15
+ _onDelete = 'NO ACTION';
16
+ _onUpdate = 'NO ACTION';
17
+ _name;
18
+ constructor(columns, _parent) {
19
+ this._columns = columns;
20
+ }
21
+ references(table, columns) {
22
+ this._referencesTable = table;
23
+ this._referencesColumns = columns;
24
+ return this;
25
+ }
26
+ onDelete(action) {
27
+ this._onDelete = action;
28
+ return this;
29
+ }
30
+ onUpdate(action) {
31
+ this._onUpdate = action;
32
+ return this;
33
+ }
34
+ name(name) {
35
+ this._name = name;
36
+ return this;
37
+ }
38
+ /**
39
+ * Build the foreign key definition.
40
+ */
41
+ build() {
42
+ if (!this._referencesTable)
43
+ return undefined;
44
+ return {
45
+ name: this._name,
46
+ columns: this._columns,
47
+ referencesTable: this._referencesTable,
48
+ referencesColumns: this._referencesColumns,
49
+ onDelete: this._onDelete,
50
+ onUpdate: this._onUpdate,
51
+ };
52
+ }
53
+ }
54
+ /**
55
+ * Builder for table definitions with a fluent API.
56
+ */
57
+ export class TableBuilder {
58
+ _name;
59
+ _columnBuilders = [];
60
+ _primaryKey;
61
+ _indexes = [];
62
+ _foreignKeyBuilders = [];
63
+ _comment;
64
+ constructor(name) {
65
+ this._name = name;
66
+ }
67
+ // ============================================================================
68
+ // Numeric Types
69
+ // ============================================================================
70
+ id(name = 'id', options = {}) {
71
+ const col = new ColumnBuilder(name, { category: 'integer' }, { ...options, primaryKey: true, autoIncrement: true });
72
+ this._columnBuilders.push(col);
73
+ return col;
74
+ }
75
+ integer(name, options = {}) {
76
+ const col = new ColumnBuilder(name, { category: 'integer' }, options);
77
+ this._columnBuilders.push(col);
78
+ return col;
79
+ }
80
+ smallint(name, options = {}) {
81
+ const col = new ColumnBuilder(name, { category: 'integer', size: 'small' }, options);
82
+ this._columnBuilders.push(col);
83
+ return col;
84
+ }
85
+ bigint(name, options = {}) {
86
+ const col = new ColumnBuilder(name, { category: 'integer', size: 'big' }, options);
87
+ this._columnBuilders.push(col);
88
+ return col;
89
+ }
90
+ float(name, options = {}) {
91
+ const col = new ColumnBuilder(name, { category: 'float' }, options);
92
+ this._columnBuilders.push(col);
93
+ return col;
94
+ }
95
+ double(name, options = {}) {
96
+ const col = new ColumnBuilder(name, { category: 'float', size: 'big' }, options);
97
+ this._columnBuilders.push(col);
98
+ return col;
99
+ }
100
+ decimal(name, options = {}) {
101
+ const { precision, scale, ...rest } = options;
102
+ const col = new ColumnBuilder(name, { category: 'decimal', precision, scale }, rest);
103
+ this._columnBuilders.push(col);
104
+ return col;
105
+ }
106
+ // ============================================================================
107
+ // String Types
108
+ // ============================================================================
109
+ string(name, options = {}) {
110
+ const { length = 255, ...rest } = options;
111
+ const col = new ColumnBuilder(name, { category: 'string', length }, rest);
112
+ this._columnBuilders.push(col);
113
+ return col;
114
+ }
115
+ char(name, options = {}) {
116
+ const { length = 1, ...rest } = options;
117
+ const col = new ColumnBuilder(name, { category: 'string', length }, rest);
118
+ this._columnBuilders.push(col);
119
+ return col;
120
+ }
121
+ text(name, options = {}) {
122
+ const col = new ColumnBuilder(name, { category: 'string' }, options);
123
+ this._columnBuilders.push(col);
124
+ return col;
125
+ }
126
+ // ============================================================================
127
+ // Boolean
128
+ // ============================================================================
129
+ boolean(name, options = {}) {
130
+ const col = new ColumnBuilder(name, { category: 'boolean' }, options);
131
+ this._columnBuilders.push(col);
132
+ return col;
133
+ }
134
+ // ============================================================================
135
+ // Date/Time Types
136
+ // ============================================================================
137
+ date(name, options = {}) {
138
+ const col = new ColumnBuilder(name, { category: 'date' }, options);
139
+ this._columnBuilders.push(col);
140
+ return col;
141
+ }
142
+ time(name, options = {}) {
143
+ const col = new ColumnBuilder(name, { category: 'time' }, options);
144
+ this._columnBuilders.push(col);
145
+ return col;
146
+ }
147
+ timestamp(name, options = {}) {
148
+ const col = new ColumnBuilder(name, { category: 'timestamp' }, options);
149
+ this._columnBuilders.push(col);
150
+ return col;
151
+ }
152
+ timestamptz(name, options = {}) {
153
+ const col = new ColumnBuilder(name, { category: 'timestamp', withTimezone: true }, options);
154
+ this._columnBuilders.push(col);
155
+ return col;
156
+ }
157
+ // ============================================================================
158
+ // JSON Types
159
+ // ============================================================================
160
+ json(name, options = {}) {
161
+ const col = new ColumnBuilder(name, { category: 'json' }, options);
162
+ this._columnBuilders.push(col);
163
+ return col;
164
+ }
165
+ jsonb(name, options = {}) {
166
+ // JSONB is the same category, dialect handles the difference
167
+ const col = new ColumnBuilder(name, { category: 'json' }, options);
168
+ this._columnBuilders.push(col);
169
+ return col;
170
+ }
171
+ // ============================================================================
172
+ // Other Types
173
+ // ============================================================================
174
+ uuid(name, options = {}) {
175
+ const col = new ColumnBuilder(name, { category: 'uuid' }, options);
176
+ this._columnBuilders.push(col);
177
+ return col;
178
+ }
179
+ blob(name, options = {}) {
180
+ const col = new ColumnBuilder(name, { category: 'blob' }, options);
181
+ this._columnBuilders.push(col);
182
+ return col;
183
+ }
184
+ vector(name, options = {}) {
185
+ const { dimensions, ...rest } = options;
186
+ const col = new ColumnBuilder(name, { category: 'vector', length: dimensions }, rest);
187
+ this._columnBuilders.push(col);
188
+ return col;
189
+ }
190
+ // ============================================================================
191
+ // Convenience Methods
192
+ // ============================================================================
193
+ createdAt() {
194
+ const col = new ColumnBuilder('createdAt', { category: 'timestamp' }, { defaultValue: t.now() });
195
+ this._columnBuilders.push(col);
196
+ return col;
197
+ }
198
+ updatedAt() {
199
+ const col = new ColumnBuilder('updatedAt', { category: 'timestamp' }, { defaultValue: t.now() });
200
+ this._columnBuilders.push(col);
201
+ return col;
202
+ }
203
+ timestamps() {
204
+ this.createdAt();
205
+ this.updatedAt();
206
+ }
207
+ // ============================================================================
208
+ // Indexes & Constraints
209
+ // ============================================================================
210
+ primaryKey(columns) {
211
+ this._primaryKey = columns;
212
+ return this;
213
+ }
214
+ unique(columns, name) {
215
+ const indexName = name ?? `uq_${this._name}_${columns.join('_')}`;
216
+ this._indexes.push({
217
+ name: indexName,
218
+ columns,
219
+ unique: true,
220
+ });
221
+ return this;
222
+ }
223
+ index(columns, name) {
224
+ const indexName = name ?? `idx_${this._name}_${columns.join('_')}`;
225
+ this._indexes.push({
226
+ name: indexName,
227
+ columns,
228
+ unique: false,
229
+ });
230
+ return this;
231
+ }
232
+ foreignKey(columns) {
233
+ const fk = new TableForeignKeyBuilder(columns, this);
234
+ this._foreignKeyBuilders.push(fk);
235
+ return fk;
236
+ }
237
+ // ============================================================================
238
+ // Utilities
239
+ // ============================================================================
240
+ comment(text) {
241
+ this._comment = text;
242
+ return this;
243
+ }
244
+ /**
245
+ * Build the table definition.
246
+ */
247
+ build() {
248
+ // Build all columns from builders
249
+ const columns = this._columnBuilders.map((cb) => cb.build());
250
+ // Collect column-level indexes
251
+ for (const col of columns) {
252
+ if (col.index) {
253
+ const indexName = typeof col.index === 'string' ? col.index : `idx_${this._name}_${col.name}`;
254
+ // Only add if not already in table-level indexes
255
+ if (!this._indexes.some((idx) => idx.name === indexName)) {
256
+ this._indexes.push({
257
+ name: indexName,
258
+ columns: [col.name],
259
+ unique: col.unique,
260
+ });
261
+ }
262
+ }
263
+ }
264
+ // Build foreign keys
265
+ const foreignKeys = this._foreignKeyBuilders
266
+ .map((fk) => fk.build())
267
+ .filter((fk) => fk !== undefined);
268
+ return {
269
+ name: this._name,
270
+ columns,
271
+ primaryKey: this._primaryKey,
272
+ indexes: this._indexes,
273
+ foreignKeys,
274
+ comment: this._comment,
275
+ };
276
+ }
277
+ }
278
+ //# sourceMappingURL=tableBuilder.js.map