@carno.js/cli 0.3.0 → 0.3.5

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.
@@ -1,547 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff-calculator.js","sourceRoot":"","sources":["../../../src/migrator/diff-calculator.ts"],"names":[],"mappings":"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"}