@carno.js/cli 0.3.7 → 0.4.0

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.
@@ -0,0 +1,547 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DiffCalculator = void 0;
4
+ const orm_1 = require("@carno.js/orm");
5
+ class DiffCalculator {
6
+ constructor(entities, driver) {
7
+ this.driver = driver;
8
+ this.entities = entities;
9
+ }
10
+ diff(snapshotBd, snapshotEntities) {
11
+ const diffs = [];
12
+ const bdTablesMap = new Map(snapshotBd.map((table) => [table.tableName, table]));
13
+ const entityTablesMap = new Map(snapshotEntities.map((table) => [table.tableName, table]));
14
+ const allTableNames = new Set([
15
+ ...bdTablesMap.keys(),
16
+ ...entityTablesMap.keys(),
17
+ ]);
18
+ allTableNames.forEach((tableName) => {
19
+ const bdTable = bdTablesMap.get(tableName);
20
+ const entityTable = entityTablesMap.get(tableName);
21
+ if (!entityTable) {
22
+ diffs.push({
23
+ tableName,
24
+ colDiffs: [{ actionType: 'DELETE', colName: '*' }],
25
+ });
26
+ }
27
+ else if (!bdTable) {
28
+ const colDiffs = entityTable.columns.flatMap((c) => {
29
+ return this.createNewColumn(c, []);
30
+ });
31
+ diffs.push({
32
+ tableName,
33
+ newTable: true,
34
+ schema: entityTable.schema ?? 'public',
35
+ colDiffs,
36
+ });
37
+ this.checkIndexes(bdTable, entityTable, colDiffs);
38
+ this.checkUniques(bdTable, entityTable, colDiffs);
39
+ }
40
+ else {
41
+ const colDiffs = [];
42
+ const bdColumnsMap = new Map(bdTable.columns.map((col) => [col.name, col]));
43
+ const entityColumnsMap = new Map(entityTable.columns.map((col) => [col.name, col]));
44
+ const allColumnNames = new Set([
45
+ ...bdColumnsMap.keys(),
46
+ ...entityColumnsMap.keys(),
47
+ ]);
48
+ allColumnNames.forEach((colName) => {
49
+ const bdCol = bdColumnsMap.get(colName);
50
+ const entityCol = entityColumnsMap.get(colName);
51
+ if (!entityCol) {
52
+ if (bdCol && !bdCol.type) {
53
+ console.warn(`Skipping deletion of column ${colName} in table ${tableName}: missing type information in snapshot`);
54
+ return;
55
+ }
56
+ colDiffs.push({
57
+ actionType: 'DELETE',
58
+ colName: bdCol.name,
59
+ });
60
+ }
61
+ else if (!bdCol) {
62
+ this.createNewColumn(entityCol, colDiffs);
63
+ }
64
+ else {
65
+ if (!bdCol.type) {
66
+ console.warn(`Skipping diff for column ${colName} in table ${tableName}: missing type information in snapshot`);
67
+ return;
68
+ }
69
+ this.diffColumnSql(bdCol, entityCol, colDiffs);
70
+ }
71
+ });
72
+ this.checkIndexes(bdTable, entityTable, colDiffs);
73
+ this.checkUniques(bdTable, entityTable, colDiffs);
74
+ if (colDiffs.length > 0) {
75
+ diffs.push({
76
+ tableName: tableName,
77
+ schema: entityTable.schema ?? 'public',
78
+ colDiffs,
79
+ });
80
+ }
81
+ }
82
+ });
83
+ return diffs;
84
+ }
85
+ checkIndexes(bdTable, entityTable, colDiffs) {
86
+ if ((bdTable && bdTable.indexes) || (entityTable && entityTable.indexes)) {
87
+ if (!bdTable || !bdTable.indexes) {
88
+ colDiffs.push({
89
+ actionType: 'INDEX',
90
+ colName: '*',
91
+ indexTables: entityTable.indexes.map((index) => this.buildIndexTable(entityTable.tableName, index)),
92
+ });
93
+ }
94
+ if (!entityTable || !entityTable.indexes) {
95
+ colDiffs.push({
96
+ actionType: 'INDEX',
97
+ colName: '*',
98
+ indexTables: bdTable.indexes.map((index) => ({ name: index.indexName })),
99
+ });
100
+ }
101
+ }
102
+ if (bdTable && bdTable.indexes && entityTable && entityTable.indexes) {
103
+ const bdIndexesMap = new Map(bdTable.indexes.map((index) => [
104
+ this.formatIndexName(bdTable.tableName, index.indexName),
105
+ index,
106
+ ]));
107
+ const entityIndexesMap = new Map(entityTable.indexes.map((index) => [
108
+ this.formatIndexName(entityTable.tableName, index.indexName),
109
+ index,
110
+ ]));
111
+ const allIndexes = new Set([
112
+ ...bdIndexesMap.keys(),
113
+ ...entityIndexesMap.keys(),
114
+ ]);
115
+ allIndexes.forEach((indexName) => {
116
+ const bdIndex = bdIndexesMap.get(indexName);
117
+ const entityIndex = entityIndexesMap.get(indexName);
118
+ if (!entityIndex) {
119
+ colDiffs.push({
120
+ actionType: 'INDEX',
121
+ colName: bdIndex.columnName,
122
+ indexTables: [{ name: indexName }],
123
+ });
124
+ }
125
+ else if (!bdIndex) {
126
+ colDiffs.push({
127
+ actionType: 'INDEX',
128
+ colName: entityIndex.columnName,
129
+ indexTables: [this.buildIndexTable(entityTable.tableName, entityIndex)],
130
+ });
131
+ }
132
+ else if (this.indexChanged(bdIndex, entityIndex)) {
133
+ colDiffs.push(this.buildIndexChangeDiff(entityTable.tableName, indexName, entityIndex));
134
+ }
135
+ });
136
+ }
137
+ }
138
+ checkUniques(bdTable, entityTable, colDiffs) {
139
+ const bdUniques = bdTable?.uniques || [];
140
+ const entityUniques = entityTable?.uniques || [];
141
+ if (bdUniques.length === 0 && entityUniques.length === 0) {
142
+ return;
143
+ }
144
+ const bdUniquesMap = new Map(bdUniques.map((unique) => [
145
+ this.formatUniqueName(bdTable.tableName, unique.uniqueName),
146
+ unique,
147
+ ]));
148
+ const entityUniquesMap = new Map(entityUniques.map((unique) => [
149
+ this.formatUniqueName(entityTable.tableName, unique.uniqueName),
150
+ unique,
151
+ ]));
152
+ const allUniques = new Set([...bdUniquesMap.keys(), ...entityUniquesMap.keys()]);
153
+ allUniques.forEach((uniqueName) => {
154
+ const bdUnique = bdUniquesMap.get(uniqueName);
155
+ const entityUnique = entityUniquesMap.get(uniqueName);
156
+ if (!entityUnique && bdUnique) {
157
+ colDiffs.push({
158
+ actionType: 'ALTER',
159
+ colName: bdUnique.columnName,
160
+ uniqueTables: [{ name: uniqueName }],
161
+ });
162
+ }
163
+ else if (!bdUnique && entityUnique) {
164
+ colDiffs.push({
165
+ actionType: 'ALTER',
166
+ colName: entityUnique.columnName,
167
+ uniqueTables: [
168
+ this.buildUniqueTable(entityTable.tableName, entityUnique),
169
+ ],
170
+ });
171
+ }
172
+ else if (bdUnique &&
173
+ entityUnique &&
174
+ this.uniqueChanged(bdUnique, entityUnique)) {
175
+ colDiffs.push({
176
+ actionType: 'ALTER',
177
+ colName: entityUnique.columnName,
178
+ uniqueTables: [
179
+ { name: uniqueName },
180
+ this.buildUniqueTable(entityTable.tableName, entityUnique),
181
+ ],
182
+ });
183
+ }
184
+ });
185
+ }
186
+ buildUniqueTable(tableName, unique) {
187
+ return {
188
+ name: this.formatUniqueName(tableName, unique.uniqueName),
189
+ properties: this.normalizeUniqueColumns(unique.columnName),
190
+ };
191
+ }
192
+ uniqueChanged(bdUnique, entityUnique) {
193
+ const bdColumns = this.normalizeUniqueColumns(bdUnique.columnName).join(',');
194
+ const entityColumns = this.normalizeUniqueColumns(entityUnique.columnName).join(',');
195
+ return bdColumns !== entityColumns;
196
+ }
197
+ normalizeUniqueColumns(columnName) {
198
+ const tokens = columnName.split(',');
199
+ return tokens.map((token) => this.cleanIndexToken(token));
200
+ }
201
+ formatUniqueName(tableName, uniqueName) {
202
+ const lower = uniqueName.toLowerCase();
203
+ if (lower.includes(tableName.toLowerCase())) {
204
+ return uniqueName;
205
+ }
206
+ return `${tableName}_${uniqueName}`;
207
+ }
208
+ buildIndexTable(tableName, index) {
209
+ return {
210
+ name: this.formatIndexName(tableName, index.indexName),
211
+ properties: this.normalizeIndexColumns(index.columnName),
212
+ where: this.normalizeIndexWhere(index.where),
213
+ };
214
+ }
215
+ buildIndexChangeDiff(tableName, indexName, index) {
216
+ return {
217
+ actionType: 'INDEX',
218
+ colName: index.columnName,
219
+ indexTables: [{ name: indexName }, this.buildIndexTable(tableName, index)],
220
+ };
221
+ }
222
+ indexChanged(bdIndex, entityIndex) {
223
+ const bdColumns = this.normalizeIndexColumns(bdIndex.columnName).join(',');
224
+ const entityColumns = this.normalizeIndexColumns(entityIndex.columnName).join(',');
225
+ if (bdColumns !== entityColumns) {
226
+ return true;
227
+ }
228
+ const bdWhere = this.normalizeIndexWhere(bdIndex.where);
229
+ const entityWhere = this.normalizeIndexWhere(entityIndex.where);
230
+ return bdWhere !== entityWhere;
231
+ }
232
+ normalizeIndexColumns(columnName) {
233
+ const tokens = columnName.split(',');
234
+ return tokens.map((token) => this.cleanIndexToken(token));
235
+ }
236
+ normalizeIndexWhere(where) {
237
+ if (!where) {
238
+ return undefined;
239
+ }
240
+ const trimmed = where.trim();
241
+ return trimmed.replace(/\s+/g, ' ');
242
+ }
243
+ cleanIndexToken(token) {
244
+ const trimmed = token.trim();
245
+ return trimmed.replace(/"/g, '');
246
+ }
247
+ formatIndexName(tableName, indexName) {
248
+ const lower = indexName.toLowerCase();
249
+ if (lower.includes(tableName.toLowerCase()) || lower.includes('pkey')) {
250
+ return indexName;
251
+ }
252
+ return `${tableName}_${indexName}`;
253
+ }
254
+ createNewColumn(entityCol, colDiffs) {
255
+ const colType = this.convertEntityTypeToSqlType(entityCol.type, entityCol);
256
+ colDiffs.push({
257
+ actionType: 'CREATE',
258
+ colName: entityCol.name,
259
+ colType: colType.type,
260
+ colLength: entityCol.length ?? colType.len,
261
+ colChanges: {
262
+ autoIncrement: entityCol.autoIncrement,
263
+ default: entityCol.default,
264
+ primary: entityCol.primary,
265
+ unique: entityCol.unique,
266
+ nullable: entityCol.nullable,
267
+ enumItems: entityCol.enumItems,
268
+ foreignKeys: entityCol.foreignKeys ?? undefined,
269
+ precision: entityCol.precision ?? undefined,
270
+ scale: entityCol.scale ?? undefined,
271
+ },
272
+ });
273
+ return colDiffs;
274
+ }
275
+ diffColumnType(bdCol, entityCol, colDiffs) {
276
+ const isPostgres = this.driver instanceof orm_1.BunPgDriver;
277
+ if (!bdCol.type || !entityCol.type) {
278
+ console.warn(`Skipping column type diff for ${entityCol.name || bdCol.name}: missing type information`);
279
+ return;
280
+ }
281
+ if (bdCol.type === 'USER-DEFINED') {
282
+ bdCol.type = 'enum';
283
+ }
284
+ const colT = this.convertEntityTypeToSqlType(entityCol.type, entityCol);
285
+ const colType = colT.type;
286
+ let length = entityCol.length ?? colT.len;
287
+ if (colType === 'integer' && isPostgres) {
288
+ length = 32;
289
+ }
290
+ if (bdCol.isDecimal && isPostgres) {
291
+ bdCol.type = 'decimal';
292
+ length = bdCol.precision ?? 0;
293
+ }
294
+ const normalizedBdType = this.normalizeType(bdCol.type);
295
+ const normalizedEntityType = this.normalizeType(colType);
296
+ const typesDiffer = !normalizedBdType.includes(normalizedEntityType) &&
297
+ !normalizedEntityType.includes(normalizedBdType);
298
+ const lengthsDiffer = bdCol.length != null && length != null && bdCol.length !== length;
299
+ if (typesDiffer || lengthsDiffer) {
300
+ colDiffs.push({
301
+ actionType: 'ALTER',
302
+ colName: entityCol.name,
303
+ colType: colType,
304
+ colLength: length,
305
+ colChanges: {
306
+ enumItems: entityCol.enumItems || undefined,
307
+ precision: entityCol.precision ?? undefined,
308
+ scale: entityCol.scale ?? undefined,
309
+ },
310
+ });
311
+ }
312
+ }
313
+ normalizeType(type) {
314
+ const typeMap = {
315
+ 'character varying': 'varchar',
316
+ varchar: 'varchar',
317
+ numeric: 'decimal',
318
+ 'timestamp without time zone': 'timestamp',
319
+ 'timestamp with time zone': 'timestamptz',
320
+ int: 'integer',
321
+ int4: 'integer',
322
+ int8: 'bigint',
323
+ bool: 'boolean',
324
+ number: 'integer',
325
+ string: 'varchar',
326
+ boolean: 'boolean',
327
+ date: 'timestamp',
328
+ object: 'json',
329
+ };
330
+ const lowerType = type.toLowerCase().trim();
331
+ if (lowerType.startsWith('decimal') || lowerType.startsWith('numeric')) {
332
+ return 'decimal';
333
+ }
334
+ if (lowerType === 'double precision' ||
335
+ lowerType === 'double' ||
336
+ lowerType === 'real' ||
337
+ lowerType.startsWith('float')) {
338
+ return 'float';
339
+ }
340
+ return typeMap[lowerType] || lowerType;
341
+ }
342
+ diffColumnDefault(bdCol, entityCol, colDiffs) {
343
+ const bdDefault = bdCol.default ?? null;
344
+ const entityDefault = entityCol.default ?? null;
345
+ if (bdDefault !== entityDefault) {
346
+ colDiffs.push({
347
+ actionType: 'ALTER',
348
+ colName: entityCol.name,
349
+ colChanges: { default: entityCol.default },
350
+ colLength: entityCol.length,
351
+ });
352
+ }
353
+ }
354
+ diffColumnPrimary(bdCol, entityCol, colDiffs) {
355
+ if (bdCol.primary === undefined) {
356
+ return;
357
+ }
358
+ if (bdCol.primary !== (entityCol.primary ?? false)) {
359
+ colDiffs.push({
360
+ actionType: 'ALTER',
361
+ colName: entityCol.name,
362
+ colChanges: { primary: entityCol.primary },
363
+ colLength: entityCol.length,
364
+ });
365
+ }
366
+ }
367
+ diffColumnUnique(bdCol, entityCol, colDiffs) {
368
+ if (bdCol.unique === undefined) {
369
+ return;
370
+ }
371
+ if (bdCol.unique !== (entityCol.unique ?? false)) {
372
+ if (bdCol.unique === false && entityCol.unique === undefined) {
373
+ return;
374
+ }
375
+ if (entityCol.primary) {
376
+ return;
377
+ }
378
+ colDiffs.push({
379
+ actionType: 'ALTER',
380
+ colName: entityCol.name,
381
+ colChanges: { unique: entityCol.unique || false },
382
+ colLength: entityCol.length,
383
+ });
384
+ }
385
+ }
386
+ diffForeignKey(bdCol, entityCol, colDiffs) {
387
+ if (bdCol.foreignKeys || entityCol.foreignKeys) {
388
+ const bdFKMap = new Map((bdCol.foreignKeys || []).map((fk) => [
389
+ `${fk.referencedTableName}.${fk.referencedColumnName}`,
390
+ fk,
391
+ ]));
392
+ const entityFKMap = new Map((entityCol.foreignKeys || []).map((fk) => [
393
+ `${fk.referencedTableName}.${fk.referencedColumnName}`,
394
+ fk,
395
+ ]));
396
+ const allFKs = new Set([...bdFKMap.keys(), ...entityFKMap.keys()]);
397
+ allFKs.forEach((fkName) => {
398
+ const bdFK = bdFKMap.get(fkName);
399
+ const entityFK = entityFKMap.get(fkName);
400
+ if (!entityFK) {
401
+ const fks = bdCol.foreignKeys?.filter((fk) => fk !== bdFK);
402
+ colDiffs.push({
403
+ actionType: 'ALTER',
404
+ colName: bdCol.name,
405
+ colChanges: {
406
+ foreignKeys: fks.length > 0 ? fks : [],
407
+ },
408
+ });
409
+ }
410
+ });
411
+ }
412
+ }
413
+ diffColumnSql(bdCol, entityCol, colDiffs) {
414
+ this.diffForeignKey(bdCol, entityCol, colDiffs);
415
+ this.diffEnum(bdCol, entityCol, colDiffs);
416
+ this.diffColumnType(bdCol, entityCol, colDiffs);
417
+ this.diffColumnDefault(bdCol, entityCol, colDiffs);
418
+ this.diffColumnPrimary(bdCol, entityCol, colDiffs);
419
+ this.diffColumnUnique(bdCol, entityCol, colDiffs);
420
+ this.diffColumnNullable(bdCol, entityCol, colDiffs);
421
+ this.diffColumnPrecisionAndScale(bdCol, entityCol, colDiffs);
422
+ return colDiffs;
423
+ }
424
+ diffColumnPrecisionAndScale(bdCol, entityCol, colDiffs) {
425
+ const bdPrecision = bdCol.precision ?? 0;
426
+ const entityPrecision = entityCol.precision ?? 0;
427
+ const bdScale = bdCol.scale ?? 0;
428
+ const entityScale = entityCol.scale ?? 0;
429
+ if (bdCol.isDecimal &&
430
+ (bdPrecision !== entityPrecision || bdScale !== entityScale)) {
431
+ colDiffs.push({
432
+ actionType: 'ALTER',
433
+ colType: 'decimal',
434
+ colName: entityCol.name,
435
+ colChanges: {
436
+ precision: entityCol.precision ?? 0,
437
+ scale: entityCol.scale ?? 0,
438
+ },
439
+ colLength: entityCol.length,
440
+ });
441
+ }
442
+ }
443
+ diffColumnNullable(bdCol, entityCol, colDiffs) {
444
+ const bdNullable = bdCol.nullable ?? false;
445
+ const entityNullable = entityCol.nullable ?? false;
446
+ if (bdNullable !== entityNullable) {
447
+ colDiffs.push({
448
+ actionType: 'ALTER',
449
+ colName: entityCol.name,
450
+ colChanges: { nullable: entityNullable },
451
+ colLength: entityCol.length,
452
+ });
453
+ }
454
+ }
455
+ convertEntityTypeToSqlType(entityType, entityCol) {
456
+ const isPostgres = this.driver instanceof orm_1.BunPgDriver;
457
+ switch (entityType) {
458
+ case 'Number':
459
+ case 'number':
460
+ case 'int':
461
+ case 'integer':
462
+ return { type: 'integer', len: 32 };
463
+ case 'bigint':
464
+ case 'BigInt':
465
+ return { type: 'bigint' };
466
+ case 'float':
467
+ case 'Float':
468
+ if (entityCol?.precision || entityCol?.scale) {
469
+ return { type: 'decimal' };
470
+ }
471
+ return { type: isPostgres ? 'double precision' : 'float' };
472
+ case 'double':
473
+ case 'Double':
474
+ if (entityCol?.precision || entityCol?.scale) {
475
+ return { type: 'decimal' };
476
+ }
477
+ return { type: isPostgres ? 'double precision' : 'double' };
478
+ case 'decimal':
479
+ case 'Decimal':
480
+ case 'numeric':
481
+ case 'Numeric':
482
+ return { type: 'decimal' };
483
+ case 'String':
484
+ case 'string':
485
+ case 'varchar':
486
+ case 'character varying':
487
+ return { type: 'character varying', len: 255 };
488
+ case 'Boolean':
489
+ case 'boolean':
490
+ return { type: 'boolean', len: null };
491
+ case 'Date':
492
+ case 'date':
493
+ case 'timestamp':
494
+ return { type: 'timestamp' };
495
+ case 'Object':
496
+ case 'object':
497
+ case 'json':
498
+ case 'jsonb':
499
+ case 'Jsonb':
500
+ case 'JSONB':
501
+ return { type: 'json', len: null };
502
+ case 'uuid':
503
+ case 'UUID':
504
+ return { type: 'uuid', len: null };
505
+ case 'text':
506
+ case 'Text':
507
+ return { type: 'text' };
508
+ case 'enum':
509
+ case 'Enum':
510
+ return { type: 'enum', len: null };
511
+ default:
512
+ return { type: 'character varying', len: 255 };
513
+ }
514
+ }
515
+ diffEnum(bdCol, entityCol, colDiffs) {
516
+ if (bdCol.enumItems || entityCol.enumItems) {
517
+ if (bdCol.enumItems && entityCol.enumItems) {
518
+ const allEnums = new Set([...bdCol.enumItems, ...entityCol.enumItems]);
519
+ const differences = [...allEnums].filter((x) => !bdCol.enumItems?.includes(x) || !entityCol.enumItems?.includes(x));
520
+ if (differences.length === 0) {
521
+ return;
522
+ }
523
+ colDiffs.push({
524
+ actionType: 'ALTER',
525
+ colName: entityCol.name,
526
+ colType: 'enum',
527
+ colChanges: {
528
+ enumItems: entityCol.enumItems,
529
+ },
530
+ });
531
+ }
532
+ if (!entityCol.enumItems) {
533
+ }
534
+ else if (!bdCol.enumItems) {
535
+ colDiffs.push({
536
+ actionType: 'CREATE',
537
+ colName: entityCol.name,
538
+ colChanges: {
539
+ enumItems: entityCol.enumItems,
540
+ },
541
+ });
542
+ }
543
+ }
544
+ }
545
+ }
546
+ exports.DiffCalculator = DiffCalculator;
547
+ //# sourceMappingURL=diff-calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-calculator.js","sourceRoot":"","sources":["../../../src/migrator/diff-calculator.ts"],"names":[],"mappings":"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"}