@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,356 @@
1
+ /**
2
+ * Migration Code Generator
3
+ *
4
+ * Generates TypeScript migration code from SchemaDiff.
5
+ * This enables auto-generating migrations from entity changes.
6
+ */
7
+ /**
8
+ * Generates TypeScript migration code from schema diffs.
9
+ */
10
+ export class MigrationCodeGenerator {
11
+ indent;
12
+ includeComments;
13
+ constructor(options = {}) {
14
+ this.indent = options.indent ?? ' ';
15
+ this.includeComments = options.includeComments ?? true;
16
+ }
17
+ /**
18
+ * Generate migration code from a single SchemaDiff.
19
+ */
20
+ generate(diff) {
21
+ const description = this.generateDescription(diff);
22
+ if (diff.type === 'create') {
23
+ return {
24
+ up: this.generateCreateTable(diff),
25
+ down: this.generateDropTable(diff.tableName),
26
+ description,
27
+ };
28
+ }
29
+ if (diff.type === 'drop') {
30
+ return {
31
+ up: this.generateDropTable(diff.tableName),
32
+ down: '// Cannot auto-generate: original table structure unknown',
33
+ description,
34
+ };
35
+ }
36
+ // alter
37
+ return {
38
+ up: this.generateAlterUp(diff),
39
+ down: this.generateAlterDown(diff),
40
+ description,
41
+ };
42
+ }
43
+ /**
44
+ * Generate migration code from multiple diffs.
45
+ */
46
+ generateAll(diffs) {
47
+ const ups = [];
48
+ const downs = [];
49
+ const descriptions = [];
50
+ for (const diff of diffs) {
51
+ const result = this.generate(diff);
52
+ ups.push(result.up);
53
+ downs.push(result.down);
54
+ descriptions.push(result.description);
55
+ }
56
+ return {
57
+ up: ups.join('\n\n'),
58
+ down: downs.reverse().join('\n\n'), // Reverse for correct rollback order
59
+ description: descriptions.join('; '),
60
+ };
61
+ }
62
+ /**
63
+ * Generate a complete migration file template.
64
+ */
65
+ generateFile(diffs, name) {
66
+ const { up, down, description } = this.generateAll(diffs);
67
+ const timestamp = new Date()
68
+ .toISOString()
69
+ .replace(/[-:T.Z]/g, '')
70
+ .slice(0, 14);
71
+ const migrationName = name ?? `migration_${timestamp}`;
72
+ return `/**
73
+ * Migration: ${migrationName}
74
+ * ${description}
75
+ *
76
+ * Generated at: ${new Date().toISOString()}
77
+ */
78
+
79
+ import type { IMigrationBuilder } from '@uql/core';
80
+
81
+ export async function up(builder: IMigrationBuilder): Promise<void> {
82
+ ${this.indentBlock(up, 1)}
83
+ }
84
+
85
+ export async function down(builder: IMigrationBuilder): Promise<void> {
86
+ ${this.indentBlock(down, 1)}
87
+ }
88
+ `;
89
+ }
90
+ // ===========================================================================
91
+ // Private: Code Generation
92
+ // ===========================================================================
93
+ generateCreateTable(diff) {
94
+ const columns = diff.columnsToAdd ?? [];
95
+ const lines = [];
96
+ lines.push(`await builder.createTable('${diff.tableName}', (table) => {`);
97
+ for (const col of columns) {
98
+ lines.push(`${this.indent}${this.generateColumnCall(col)};`);
99
+ }
100
+ // Add indexes if any
101
+ for (const idx of diff.indexesToAdd ?? []) {
102
+ lines.push(`${this.indent}${this.generateIndexCall(idx)};`);
103
+ }
104
+ lines.push('});');
105
+ return lines.join('\n');
106
+ }
107
+ generateDropTable(tableName) {
108
+ return `await builder.dropTable('${tableName}');`;
109
+ }
110
+ generateAlterUp(diff) {
111
+ const lines = [];
112
+ // Add columns
113
+ for (const col of diff.columnsToAdd ?? []) {
114
+ lines.push(this.generateAddColumn(diff.tableName, col));
115
+ }
116
+ // Alter columns
117
+ for (const { to } of diff.columnsToAlter ?? []) {
118
+ lines.push(this.generateAlterColumn(diff.tableName, to));
119
+ }
120
+ // Drop columns
121
+ for (const colName of diff.columnsToDrop ?? []) {
122
+ lines.push(`await builder.dropColumn('${diff.tableName}', '${colName}');`);
123
+ }
124
+ // Add indexes
125
+ for (const idx of diff.indexesToAdd ?? []) {
126
+ lines.push(this.generateCreateIndex(diff.tableName, idx));
127
+ }
128
+ // Drop indexes
129
+ for (const idxName of diff.indexesToDrop ?? []) {
130
+ lines.push(`await builder.dropIndex('${diff.tableName}', '${idxName}');`);
131
+ }
132
+ // Add foreign keys
133
+ for (const fk of diff.foreignKeysToAdd ?? []) {
134
+ lines.push(this.generateAddForeignKey(diff.tableName, fk));
135
+ }
136
+ // Drop foreign keys
137
+ for (const fkName of diff.foreignKeysToDrop ?? []) {
138
+ lines.push(`await builder.dropForeignKey('${diff.tableName}', '${fkName}');`);
139
+ }
140
+ return lines.join('\n');
141
+ }
142
+ generateAlterDown(diff) {
143
+ const lines = [];
144
+ // Reverse: drop added columns
145
+ for (const col of diff.columnsToAdd ?? []) {
146
+ lines.push(`await builder.dropColumn('${diff.tableName}', '${col.name}');`);
147
+ }
148
+ // Reverse: restore altered columns
149
+ for (const { from } of diff.columnsToAlter ?? []) {
150
+ lines.push(this.generateAlterColumn(diff.tableName, from));
151
+ }
152
+ // Reverse: re-add dropped columns (if we have the schema)
153
+ // Note: This requires the original column definition
154
+ if (diff.columnsToDrop?.length) {
155
+ lines.push(`// TODO: Re-add dropped columns: ${diff.columnsToDrop.join(', ')}`);
156
+ }
157
+ // Reverse: drop added indexes
158
+ for (const idx of diff.indexesToAdd ?? []) {
159
+ lines.push(`await builder.dropIndex('${diff.tableName}', '${idx.name}');`);
160
+ }
161
+ // Reverse: re-add dropped indexes
162
+ if (diff.indexesToDrop?.length) {
163
+ lines.push(`// TODO: Re-add dropped indexes: ${diff.indexesToDrop.join(', ')}`);
164
+ }
165
+ // Reverse: drop added foreign keys
166
+ for (const fk of diff.foreignKeysToAdd ?? []) {
167
+ if (fk.name) {
168
+ lines.push(`await builder.dropForeignKey('${diff.tableName}', '${fk.name}');`);
169
+ }
170
+ }
171
+ // Reverse: re-add dropped foreign keys
172
+ if (diff.foreignKeysToDrop?.length) {
173
+ lines.push(`// TODO: Re-add dropped foreign keys: ${diff.foreignKeysToDrop.join(', ')}`);
174
+ }
175
+ return lines.join('\n');
176
+ }
177
+ generateAddColumn(tableName, col) {
178
+ const options = this.generateColumnOptions(col);
179
+ return `await builder.addColumn('${tableName}', '${col.name}', (col) => col${options});`;
180
+ }
181
+ generateAlterColumn(tableName, col) {
182
+ const options = this.generateColumnOptions(col);
183
+ return `await builder.alterColumn('${tableName}', '${col.name}', (col) => col${options});`;
184
+ }
185
+ generateCreateIndex(tableName, idx) {
186
+ const cols = idx.columns.map((c) => `'${c}'`).join(', ');
187
+ const opts = [];
188
+ if (idx.name)
189
+ opts.push(`name: '${idx.name}'`);
190
+ if (idx.unique)
191
+ opts.push('unique: true');
192
+ const optsStr = opts.length ? `, { ${opts.join(', ')} }` : '';
193
+ return `await builder.createIndex('${tableName}', [${cols}]${optsStr});`;
194
+ }
195
+ generateAddForeignKey(tableName, fk) {
196
+ const cols = fk.columns.map((c) => `'${c}'`).join(', ');
197
+ const refCols = fk.referencedColumns.map((c) => `'${c}'`).join(', ');
198
+ const opts = [];
199
+ if (fk.name)
200
+ opts.push(`name: '${fk.name}'`);
201
+ if (fk.onDelete && fk.onDelete !== 'NO ACTION')
202
+ opts.push(`onDelete: '${fk.onDelete}'`);
203
+ if (fk.onUpdate && fk.onUpdate !== 'NO ACTION')
204
+ opts.push(`onUpdate: '${fk.onUpdate}'`);
205
+ const optsStr = opts.length ? `, { ${opts.join(', ')} }` : '';
206
+ return `await builder.addForeignKey('${tableName}', [${cols}], { table: '${fk.referencedTable}', columns: [${refCols}] }${optsStr});`;
207
+ }
208
+ // ===========================================================================
209
+ // Private: Column Call Generation
210
+ // ===========================================================================
211
+ generateColumnCall(col) {
212
+ const method = this.getColumnMethod(col);
213
+ const options = this.generateColumnOptionsObject(col);
214
+ return `table.${method}('${col.name}'${options})`;
215
+ }
216
+ generateIndexCall(idx) {
217
+ const cols = idx.columns.map((c) => `'${c}'`).join(', ');
218
+ if (idx.unique) {
219
+ return `table.unique([${cols}], '${idx.name}')`;
220
+ }
221
+ return `table.index([${cols}], '${idx.name}')`;
222
+ }
223
+ getColumnMethod(col) {
224
+ const type = col.type;
225
+ // Check for auto-increment primary key → id()
226
+ if (col.isPrimaryKey && col.isAutoIncrement) {
227
+ return 'id';
228
+ }
229
+ // Map type string to method name
230
+ const typeMap = {
231
+ integer: 'integer',
232
+ int: 'integer',
233
+ bigint: 'bigint',
234
+ smallint: 'smallint',
235
+ float: 'float',
236
+ double: 'double',
237
+ decimal: 'decimal',
238
+ numeric: 'decimal',
239
+ varchar: 'string',
240
+ char: 'char',
241
+ text: 'text',
242
+ boolean: 'boolean',
243
+ bool: 'boolean',
244
+ date: 'date',
245
+ time: 'time',
246
+ timestamp: 'timestamp',
247
+ timestamptz: 'timestamptz',
248
+ json: 'json',
249
+ jsonb: 'jsonb',
250
+ uuid: 'uuid',
251
+ blob: 'blob',
252
+ bytea: 'blob',
253
+ vector: 'vector',
254
+ };
255
+ const lowerType = type.toLowerCase().replace(/\(.*\)/, ''); // Remove (255) etc
256
+ return typeMap[lowerType] ?? 'string';
257
+ }
258
+ generateColumnOptionsObject(col) {
259
+ const opts = [];
260
+ // Type-specific options
261
+ if (col.length !== undefined && col.length !== 255) {
262
+ opts.push(`length: ${col.length}`);
263
+ }
264
+ if (col.precision !== undefined) {
265
+ opts.push(`precision: ${col.precision}`);
266
+ }
267
+ if (col.scale !== undefined) {
268
+ opts.push(`scale: ${col.scale}`);
269
+ }
270
+ // Common options (only include non-defaults)
271
+ if (col.nullable) {
272
+ opts.push('nullable: true');
273
+ }
274
+ if (col.isUnique && !col.isPrimaryKey) {
275
+ opts.push('unique: true');
276
+ }
277
+ if (col.isPrimaryKey && !col.isAutoIncrement) {
278
+ opts.push('primaryKey: true');
279
+ }
280
+ if (col.defaultValue !== undefined) {
281
+ opts.push(`defaultValue: ${this.formatValue(col.defaultValue)}`);
282
+ }
283
+ if (opts.length === 0)
284
+ return '';
285
+ return `, { ${opts.join(', ')} }`;
286
+ }
287
+ generateColumnOptions(col) {
288
+ const parts = [];
289
+ if (!col.nullable) {
290
+ parts.push('.notNullable()');
291
+ }
292
+ if (col.isUnique) {
293
+ parts.push('.unique()');
294
+ }
295
+ if (col.defaultValue !== undefined) {
296
+ parts.push(`.defaultValue(${this.formatValue(col.defaultValue)})`);
297
+ }
298
+ return parts.join('');
299
+ }
300
+ formatValue(value) {
301
+ if (value === null)
302
+ return 'null';
303
+ if (typeof value === 'string') {
304
+ // Check for SQL expressions
305
+ if (value.toUpperCase().includes('CURRENT_TIMESTAMP') ||
306
+ value.includes('()') ||
307
+ value.toUpperCase().includes('NOW')) {
308
+ return `t.raw('${value}')`;
309
+ }
310
+ return `'${value.replace(/'/g, "\\'")}'`;
311
+ }
312
+ if (typeof value === 'boolean')
313
+ return String(value);
314
+ if (typeof value === 'number')
315
+ return String(value);
316
+ return JSON.stringify(value);
317
+ }
318
+ // ===========================================================================
319
+ // Private: Utilities
320
+ // ===========================================================================
321
+ generateDescription(diff) {
322
+ const parts = [];
323
+ if (diff.type === 'create') {
324
+ parts.push(`Create table '${diff.tableName}'`);
325
+ }
326
+ else if (diff.type === 'drop') {
327
+ parts.push(`Drop table '${diff.tableName}'`);
328
+ }
329
+ else {
330
+ if (diff.columnsToAdd?.length) {
331
+ parts.push(`Add ${diff.columnsToAdd.length} column(s)`);
332
+ }
333
+ if (diff.columnsToAlter?.length) {
334
+ parts.push(`Alter ${diff.columnsToAlter.length} column(s)`);
335
+ }
336
+ if (diff.columnsToDrop?.length) {
337
+ parts.push(`Drop ${diff.columnsToDrop.length} column(s)`);
338
+ }
339
+ }
340
+ return parts.join(', ') || `Alter table '${diff.tableName}'`;
341
+ }
342
+ indentBlock(code, level) {
343
+ const prefix = this.indent.repeat(level);
344
+ return code
345
+ .split('\n')
346
+ .map((line) => (line.trim() ? prefix + line : line))
347
+ .join('\n');
348
+ }
349
+ }
350
+ /**
351
+ * Factory function to create a MigrationCodeGenerator.
352
+ */
353
+ export function createMigrationCodeGenerator(options) {
354
+ return new MigrationCodeGenerator(options);
355
+ }
356
+ //# sourceMappingURL=migrationCodeGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrationCodeGenerator.js","sourceRoot":"","sources":["../../../src/migrate/codegen/migrationCodeGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Smart Relation Detector
3
+ *
4
+ * Uses heuristics and schema analysis to detect relationships between tables:
5
+ * - Explicit foreign keys (highest confidence)
6
+ * - Junction tables for ManyToMany
7
+ * - Unique FK columns for OneToOne
8
+ */
9
+ import type { SchemaAST } from '../../schema/schemaAST.js';
10
+ import type { DetectedRelation } from '../../schema/types.js';
11
+ /**
12
+ * Configuration for relation detection.
13
+ */
14
+ export interface RelationDetectorOptions {
15
+ /** Minimum confidence threshold (0-1) to include in results */
16
+ minConfidence?: number;
17
+ /** Custom singularize function */
18
+ singularize?: (name: string) => string;
19
+ }
20
+ /**
21
+ * Detects relationships in a SchemaAST using multiple heuristics.
22
+ */
23
+ export declare class SmartRelationDetector {
24
+ private readonly ast;
25
+ private readonly options;
26
+ constructor(ast: SchemaAST, options?: RelationDetectorOptions);
27
+ /**
28
+ * Detect all relationships in the schema.
29
+ */
30
+ detectAll(): DetectedRelation[];
31
+ /**
32
+ * Detect junction tables that represent ManyToMany relationships.
33
+ */
34
+ private detectJunctionTables;
35
+ /**
36
+ * Detect relations where unique FK should upgrade to OneToOne.
37
+ */
38
+ private detectOneToOneRelations;
39
+ /**
40
+ * Default singularize function (delegates to shared utility).
41
+ */
42
+ private defaultSingularize;
43
+ }
44
+ /**
45
+ * Create a SmartRelationDetector for the given AST.
46
+ */
47
+ export declare function createRelationDetector(ast: SchemaAST, options?: RelationDetectorOptions): SmartRelationDetector;
48
+ //# sourceMappingURL=smartRelationDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smartRelationDetector.d.ts","sourceRoot":"","sources":["../../../src/migrate/codegen/smartRelationDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;gBAGzC,GAAG,EAAE,SAAS,EAC/B,OAAO,GAAE,uBAA4B;IAQvC;;OAEG;IACH,SAAS,IAAI,gBAAgB,EAAE;IAiC/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+C5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuB/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAG3B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,qBAAqB,CAE/G"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Smart Relation Detector
3
+ *
4
+ * Uses heuristics and schema analysis to detect relationships between tables:
5
+ * - Explicit foreign keys (highest confidence)
6
+ * - Junction tables for ManyToMany
7
+ * - Unique FK columns for OneToOne
8
+ */
9
+ import { singularize } from '../../util/string.util.js';
10
+ /**
11
+ * Detects relationships in a SchemaAST using multiple heuristics.
12
+ */
13
+ export class SmartRelationDetector {
14
+ ast;
15
+ options;
16
+ constructor(ast, options = {}) {
17
+ this.ast = ast;
18
+ this.options = {
19
+ minConfidence: options.minConfidence ?? 0.5,
20
+ singularize: options.singularize ?? this.defaultSingularize.bind(this),
21
+ };
22
+ }
23
+ /**
24
+ * Detect all relationships in the schema.
25
+ */
26
+ detectAll() {
27
+ const relations = [];
28
+ // 1. Add explicit FK relationships (confidence: 1.0)
29
+ for (const rel of this.ast.relationships) {
30
+ relations.push({
31
+ type: rel.type,
32
+ from: {
33
+ table: rel.from.table,
34
+ columns: rel.from.columns,
35
+ },
36
+ to: {
37
+ table: rel.to.table,
38
+ columns: rel.to.columns,
39
+ },
40
+ through: rel.through,
41
+ confidence: 1.0,
42
+ source: 'explicit_fk',
43
+ });
44
+ }
45
+ // 2. Detect junction tables (ManyToMany)
46
+ const junctionRelations = this.detectJunctionTables();
47
+ relations.push(...junctionRelations);
48
+ // 3. Detect unique FK -> OneToOne upgrades
49
+ const oneToOneUpgrades = this.detectOneToOneRelations(relations);
50
+ relations.push(...oneToOneUpgrades);
51
+ // Filter by confidence
52
+ return relations.filter((r) => r.confidence >= this.options.minConfidence);
53
+ }
54
+ /**
55
+ * Detect junction tables that represent ManyToMany relationships.
56
+ */
57
+ detectJunctionTables() {
58
+ const relations = [];
59
+ for (const table of this.ast.tables.values()) {
60
+ if (!this.ast.isJunctionTable(table))
61
+ continue;
62
+ const outgoingRels = table.outgoingRelations;
63
+ if (outgoingRels.length !== 2)
64
+ continue;
65
+ const [rel1, rel2] = outgoingRels;
66
+ // Create ManyToMany relation
67
+ relations.push({
68
+ type: 'ManyToMany',
69
+ from: {
70
+ table: rel1.to.table,
71
+ columns: rel1.to.columns,
72
+ },
73
+ to: {
74
+ table: rel2.to.table,
75
+ columns: rel2.to.columns,
76
+ },
77
+ through: table,
78
+ confidence: 0.95,
79
+ source: 'junction_table',
80
+ });
81
+ // Also create inverse relation
82
+ relations.push({
83
+ type: 'ManyToMany',
84
+ from: {
85
+ table: rel2.to.table,
86
+ columns: rel2.to.columns,
87
+ },
88
+ to: {
89
+ table: rel1.to.table,
90
+ columns: rel1.to.columns,
91
+ },
92
+ through: table,
93
+ confidence: 0.95,
94
+ source: 'junction_table',
95
+ });
96
+ }
97
+ return relations;
98
+ }
99
+ /**
100
+ * Detect relations where unique FK should upgrade to OneToOne.
101
+ */
102
+ detectOneToOneRelations(existingRelations) {
103
+ const upgrades = [];
104
+ for (const rel of existingRelations) {
105
+ if (rel.source !== 'explicit_fk')
106
+ continue;
107
+ const fromCol = rel.from.columns[0];
108
+ if (fromCol?.isUnique && rel.type === 'ManyToOne') {
109
+ // Upgrade to OneToOne
110
+ upgrades.push({
111
+ type: 'OneToOne',
112
+ from: rel.from,
113
+ to: rel.to,
114
+ through: rel.through,
115
+ confidence: 0.9,
116
+ source: 'unique_fk',
117
+ });
118
+ }
119
+ }
120
+ return upgrades;
121
+ }
122
+ /**
123
+ * Default singularize function (delegates to shared utility).
124
+ */
125
+ defaultSingularize(name) {
126
+ return singularize(name);
127
+ }
128
+ }
129
+ /**
130
+ * Create a SmartRelationDetector for the given AST.
131
+ */
132
+ export function createRelationDetector(ast, options) {
133
+ return new SmartRelationDetector(ast, options);
134
+ }
135
+ //# sourceMappingURL=smartRelationDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smartRelationDetector.js","sourceRoot":"","sources":["../../../src/migrate/codegen/smartRelationDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Drift Detector
3
+ *
4
+ * Detects schema drift between expected schema (from entities) and
5
+ * actual database schema.
6
+ */
7
+ import type { SchemaAST } from '../../schema/schemaAST.js';
8
+ import type { DriftReport } from '../../schema/types.js';
9
+ import type { Dialect } from '../../type/index.js';
10
+ /**
11
+ * Options for drift detection.
12
+ */
13
+ export interface DriftDetectorOptions {
14
+ /** Include column type mismatches */
15
+ checkTypes?: boolean;
16
+ /** Include nullable mismatches */
17
+ checkNullable?: boolean;
18
+ /** Include index differences */
19
+ checkIndexes?: boolean;
20
+ /** Include foreign key differences */
21
+ checkForeignKeys?: boolean;
22
+ /** Include default value differences */
23
+ checkDefaults?: boolean;
24
+ /** SQL dialect for type formatting */
25
+ dialect?: Dialect;
26
+ }
27
+ /**
28
+ * Detects drift between expected and actual database schemas.
29
+ */
30
+ export declare class DriftDetector {
31
+ private readonly expectedAST;
32
+ private readonly actualAST;
33
+ private readonly options;
34
+ private readonly dialect;
35
+ constructor(expectedAST: SchemaAST, actualAST: SchemaAST, options?: DriftDetectorOptions);
36
+ /**
37
+ * Detect all schema drift.
38
+ */
39
+ detect(): DriftReport;
40
+ /**
41
+ * Detect table-level drifts (missing/unexpected tables).
42
+ */
43
+ private detectTableDrifts;
44
+ /**
45
+ * Detect column-level drifts.
46
+ */
47
+ private detectColumnDrifts;
48
+ /**
49
+ * Add drifts for column alterations (type/nullable mismatches).
50
+ */
51
+ private addAlterColumnDrifts;
52
+ /**
53
+ * Detect index drifts.
54
+ */
55
+ private detectIndexDrifts;
56
+ /**
57
+ * Detect relationship/FK drifts.
58
+ */
59
+ private detectRelationshipDrifts;
60
+ /**
61
+ * Calculate overall status based on drifts.
62
+ */
63
+ private calculateStatus;
64
+ /**
65
+ * Create a summary of drifts by severity.
66
+ */
67
+ private createSummary;
68
+ /**
69
+ * Format type for display.
70
+ */
71
+ private formatType;
72
+ }
73
+ /**
74
+ * Create a DriftDetector for comparing expected vs actual schemas.
75
+ */
76
+ export declare function createDriftDetector(expectedAST: SchemaAST, actualAST: SchemaAST, options?: DriftDetectorOptions): DriftDetector;
77
+ /**
78
+ * Quick check for schema drift.
79
+ */
80
+ export declare function detectDrift(expectedAST: SchemaAST, actualAST: SchemaAST, options?: DriftDetectorOptions): DriftReport;
81
+ //# sourceMappingURL=driftDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driftDetector.d.ts","sourceRoot":"","sources":["../../../src/migrate/drift/driftDetector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,KAAK,EAAwB,WAAW,EAAe,MAAM,uBAAuB,CAAC;AAC5F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kCAAkC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gCAAgC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wCAAwC;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAGf,WAAW,EAAE,SAAS,EACtB,SAAS,EAAE,SAAS,EACrC,OAAO,GAAE,oBAAyB;IAapC;;OAEG;IACH,MAAM,IAAI,WAAW;IAmBrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6C5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,UAAU;CAInB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,SAAS,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,aAAa,CAEf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,WAAW,CAGrH"}