@hed-hog/cli 0.0.95 → 0.0.96

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,573 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DiffService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const chalk = require("chalk");
15
+ const path_1 = require("path");
16
+ const file_system_service_1 = require("./file-system.service");
17
+ // ── Service ───────────────────────────────────────────────────────────────────
18
+ let DiffService = class DiffService {
19
+ fileSystem;
20
+ constructor(fileSystem) {
21
+ this.fileSystem = fileSystem;
22
+ }
23
+ // ── Schema diff ─────────────────────────────────────────────────────────────
24
+ diffSchema(oldTables, newTables) {
25
+ const oldTableMap = new Map(oldTables.map((t) => [t.name, t]));
26
+ const newTableMap = new Map(newTables.map((t) => [t.name, t]));
27
+ const newTableDefs = [];
28
+ const removedTables = [];
29
+ const changedTables = [];
30
+ for (const [name, table] of newTableMap) {
31
+ if (!oldTableMap.has(name))
32
+ newTableDefs.push(table);
33
+ }
34
+ for (const [name, table] of oldTableMap) {
35
+ if (!newTableMap.has(name))
36
+ removedTables.push(table);
37
+ }
38
+ for (const [name, newTable] of newTableMap) {
39
+ const oldTable = oldTableMap.get(name);
40
+ if (!oldTable)
41
+ continue;
42
+ const changes = this.diffTableColumns(oldTable, newTable);
43
+ if (this.hasSchemaChanges(changes))
44
+ changedTables.push(changes);
45
+ }
46
+ return { newTables: newTableDefs, removedTables, changedTables };
47
+ }
48
+ diffTableColumns(oldTable, newTable) {
49
+ const oldColMap = new Map(oldTable.columns.map((c) => [c.name, c]));
50
+ const newColMap = new Map(newTable.columns.map((c) => [c.name, c]));
51
+ const addedColumns = [];
52
+ const removedColumns = [];
53
+ const changedColumns = [];
54
+ for (const [name, col] of newColMap) {
55
+ if (!oldColMap.has(name))
56
+ addedColumns.push(col);
57
+ }
58
+ for (const [name, col] of oldColMap) {
59
+ if (!newColMap.has(name))
60
+ removedColumns.push(col);
61
+ }
62
+ for (const [name, newCol] of newColMap) {
63
+ const oldCol = oldColMap.get(name);
64
+ if (!oldCol)
65
+ continue;
66
+ const change = this.detectColumnChange(oldCol, newCol);
67
+ if (change)
68
+ changedColumns.push(change);
69
+ }
70
+ const oldUniqueSet = new Set(oldTable.columns.filter((c) => c.isUnique).map((c) => c.name));
71
+ const newUniqueSet = new Set(newTable.columns.filter((c) => c.isUnique).map((c) => c.name));
72
+ const addedUniqueConstraints = [...newUniqueSet].filter((n) => !oldUniqueSet.has(n));
73
+ const removedUniqueConstraints = [...oldUniqueSet].filter((n) => !newUniqueSet.has(n));
74
+ const oldFkMap = new Map(oldTable.columns.filter((c) => c.type === 'fk').map((c) => [c.name, c]));
75
+ const newFkMap = new Map(newTable.columns.filter((c) => c.type === 'fk').map((c) => [c.name, c]));
76
+ const addedForeignKeys = [...newFkMap.values()].filter((c) => !oldFkMap.has(c.name));
77
+ const removedForeignKeys = [...oldFkMap.values()].filter((c) => !newFkMap.has(c.name));
78
+ const enumValueChanges = [];
79
+ for (const [name, newCol] of newColMap) {
80
+ const oldCol = oldColMap.get(name);
81
+ if (!oldCol || newCol.type !== 'enum')
82
+ continue;
83
+ const oldEnum = [...(oldCol.enum || oldCol.values || [])];
84
+ const newEnum = [...(newCol.enum || newCol.values || [])];
85
+ const addedValues = newEnum.filter((v) => !oldEnum.includes(v));
86
+ const removedValues = oldEnum.filter((v) => !newEnum.includes(v));
87
+ if (addedValues.length || removedValues.length) {
88
+ enumValueChanges.push({
89
+ columnName: name,
90
+ addedValues,
91
+ removedValues,
92
+ });
93
+ }
94
+ }
95
+ return {
96
+ tableName: newTable.name,
97
+ addedColumns,
98
+ removedColumns,
99
+ renamedColumns: [],
100
+ changedColumns,
101
+ addedUniqueConstraints,
102
+ removedUniqueConstraints,
103
+ addedForeignKeys,
104
+ removedForeignKeys,
105
+ enumValueChanges,
106
+ };
107
+ }
108
+ detectColumnChange(oldCol, newCol) {
109
+ const oldType = this.normalizeColType(oldCol);
110
+ const newType = this.normalizeColType(newCol);
111
+ const oldNullable = oldCol.isNullable ?? false;
112
+ const newNullable = newCol.isNullable ?? false;
113
+ const oldDefault = String(oldCol.default ?? '');
114
+ const newDefault = String(newCol.default ?? '');
115
+ const oldLength = oldCol.length;
116
+ const newLength = newCol.length;
117
+ if (oldType === newType &&
118
+ oldNullable === newNullable &&
119
+ oldDefault === newDefault &&
120
+ oldLength === newLength) {
121
+ return null;
122
+ }
123
+ return {
124
+ column: newCol,
125
+ oldType,
126
+ newType,
127
+ oldNullable,
128
+ newNullable,
129
+ oldDefault: oldCol.default,
130
+ newDefault: newCol.default,
131
+ oldLength,
132
+ newLength,
133
+ };
134
+ }
135
+ /** Normalize a processed TableColumn to its effective SQL type string for comparison */
136
+ normalizeColType(col) {
137
+ switch (col.type.toLowerCase()) {
138
+ case 'pk':
139
+ return 'SERIAL';
140
+ case 'fk':
141
+ return 'INTEGER';
142
+ case 'slug':
143
+ case 'varchar':
144
+ return `VARCHAR(${col.length || 255})`;
145
+ case 'order':
146
+ return 'INTEGER';
147
+ case 'created_at':
148
+ case 'updated_at':
149
+ return 'TIMESTAMPTZ';
150
+ case 'enum':
151
+ return 'enum';
152
+ case 'locale_varchar':
153
+ return `VARCHAR(${col.length || 255})`;
154
+ case 'locale_text':
155
+ return 'TEXT';
156
+ case 'char':
157
+ return `CHAR(${col.length || 1})`;
158
+ case 'int':
159
+ return 'INTEGER';
160
+ default:
161
+ return col.type.toUpperCase();
162
+ }
163
+ }
164
+ hasSchemaChanges(changes) {
165
+ return (changes.addedColumns.length > 0 ||
166
+ changes.removedColumns.length > 0 ||
167
+ changes.changedColumns.length > 0 ||
168
+ changes.addedUniqueConstraints.length > 0 ||
169
+ changes.removedUniqueConstraints.length > 0 ||
170
+ changes.addedForeignKeys.length > 0 ||
171
+ changes.removedForeignKeys.length > 0 ||
172
+ changes.enumValueChanges.length > 0);
173
+ }
174
+ // ── Data diff ───────────────────────────────────────────────────────────────
175
+ async diffData(oldLibraryPath, newLibraryPath, fallbackTableDefs) {
176
+ const changes = [];
177
+ const fileChanges = [];
178
+ const oldDataMap = await this.loadAllRawData(oldLibraryPath);
179
+ const newDataMap = await this.loadAllRawData(newLibraryPath);
180
+ const allTableNames = new Set([...oldDataMap.keys(), ...newDataMap.keys()]);
181
+ for (const tableName of allTableNames) {
182
+ const oldRows = oldDataMap.get(tableName) ?? [];
183
+ const newRows = newDataMap.get(tableName) ?? [];
184
+ if (oldRows.length === 0 && newRows.length > 0) {
185
+ fileChanges.push({
186
+ tableName,
187
+ isNew: true,
188
+ isRemoved: false,
189
+ allRows: newRows,
190
+ });
191
+ continue;
192
+ }
193
+ if (oldRows.length > 0 && newRows.length === 0) {
194
+ fileChanges.push({
195
+ tableName,
196
+ isNew: false,
197
+ isRemoved: true,
198
+ allRows: oldRows,
199
+ });
200
+ continue;
201
+ }
202
+ // Find identity key from the new YAML table definition, then old, then fallback
203
+ const tableDef = (await this.loadRawTableDef((0, path_1.join)(newLibraryPath, 'hedhog', 'table'), tableName)) ??
204
+ (await this.loadRawTableDef((0, path_1.join)(oldLibraryPath, 'hedhog', 'table'), tableName)) ??
205
+ fallbackTableDefs?.get(tableName) ??
206
+ null;
207
+ if (!tableDef) {
208
+ console.warn(chalk.yellow(`[update] Cannot diff data for table "${tableName}": table definition not found. Treating all rows as inserts.`));
209
+ fileChanges.push({
210
+ tableName,
211
+ isNew: true,
212
+ isRemoved: false,
213
+ allRows: newRows,
214
+ });
215
+ continue;
216
+ }
217
+ const keyColumn = this.findIdentityKey(tableDef);
218
+ if (!keyColumn) {
219
+ console.warn(chalk.yellow(`[update] Cannot diff data for table "${tableName}": no identity key (slug or unique column) found. Treating all rows as inserts.`));
220
+ fileChanges.push({
221
+ tableName,
222
+ isNew: true,
223
+ isRemoved: false,
224
+ allRows: newRows,
225
+ });
226
+ continue;
227
+ }
228
+ const oldRowIndex = new Map();
229
+ for (const row of oldRows) {
230
+ const keyVal = this.getRowKeyValue(row, keyColumn);
231
+ if (keyVal !== null)
232
+ oldRowIndex.set(keyVal, row);
233
+ }
234
+ const insertedRows = [];
235
+ const updatedRows = [];
236
+ const removedRows = [];
237
+ const relationChanges = [];
238
+ for (const newRow of newRows) {
239
+ const keyVal = this.getRowKeyValue(newRow, keyColumn);
240
+ if (keyVal === null) {
241
+ insertedRows.push(newRow);
242
+ continue;
243
+ }
244
+ const oldRow = oldRowIndex.get(keyVal);
245
+ if (!oldRow) {
246
+ insertedRows.push(newRow);
247
+ }
248
+ else {
249
+ if (this.rowScalarsChanged(oldRow, newRow))
250
+ updatedRows.push(newRow);
251
+ relationChanges.push(...this.diffRelations(oldRow, newRow, keyVal));
252
+ }
253
+ }
254
+ const newKeySet = new Set(newRows
255
+ .map((r) => this.getRowKeyValue(r, keyColumn))
256
+ .filter((v) => v !== null));
257
+ for (const oldRow of oldRows) {
258
+ const keyVal = this.getRowKeyValue(oldRow, keyColumn);
259
+ if (keyVal !== null && !newKeySet.has(keyVal))
260
+ removedRows.push(oldRow);
261
+ }
262
+ if (insertedRows.length ||
263
+ updatedRows.length ||
264
+ removedRows.length ||
265
+ relationChanges.length) {
266
+ changes.push({
267
+ tableName,
268
+ keyColumn,
269
+ insertedRows,
270
+ updatedRows,
271
+ removedRows,
272
+ relationChanges,
273
+ });
274
+ }
275
+ }
276
+ return { changes, fileChanges };
277
+ }
278
+ async loadAllRawData(libraryPath) {
279
+ const result = new Map();
280
+ const dataDir = (0, path_1.join)(libraryPath, 'hedhog', 'data');
281
+ try {
282
+ const files = await this.fileSystem.getYamlFiles(dataDir);
283
+ for (const file of files) {
284
+ const name = this.fileSystem.getFileNameWithoutExtension(file);
285
+ const rows = await this.fileSystem.readYamlFile((0, path_1.join)(dataDir, file));
286
+ if (Array.isArray(rows))
287
+ result.set(name, rows);
288
+ }
289
+ }
290
+ catch {
291
+ // directory may not exist for this library version
292
+ }
293
+ return result;
294
+ }
295
+ async loadRawTableDef(tablesPath, tableName) {
296
+ try {
297
+ const yamlPath = (0, path_1.join)(tablesPath, `${tableName}.yaml`);
298
+ const ymlPath = (0, path_1.join)(tablesPath, `${tableName}.yml`);
299
+ let filePath = null;
300
+ if (await this.fileSystem.exists(yamlPath))
301
+ filePath = yamlPath;
302
+ else if (await this.fileSystem.exists(ymlPath))
303
+ filePath = ymlPath;
304
+ if (!filePath)
305
+ return null;
306
+ const parsed = await this.fileSystem.readYamlFile(filePath);
307
+ if (!parsed?.columns)
308
+ return null;
309
+ // Minimal processing: only what we need for identity key detection
310
+ const mainCols = parsed.columns.filter((c) => !['locale_varchar', 'locale_text'].includes(c.type));
311
+ // Apply basic type normalizations so slug/unique detection works
312
+ for (const col of mainCols) {
313
+ if (col.type === 'pk') {
314
+ col.name = 'id';
315
+ col.isPrimaryKey = true;
316
+ }
317
+ else if (col.type === 'slug') {
318
+ col.name = col.name ?? 'slug';
319
+ col.isUnique = true;
320
+ }
321
+ }
322
+ // Parse table-level unique indices from indices: section
323
+ const uniqueIndices = [];
324
+ if (Array.isArray(parsed.indices)) {
325
+ for (const idx of parsed.indices) {
326
+ if (idx.isUnique &&
327
+ Array.isArray(idx.columns) &&
328
+ idx.columns.length > 0) {
329
+ uniqueIndices.push(idx.columns);
330
+ }
331
+ }
332
+ }
333
+ return {
334
+ name: tableName,
335
+ columns: mainCols,
336
+ data: [],
337
+ pk: mainCols.find((c) => c.isPrimaryKey || c.type === 'pk')?.name ||
338
+ 'id',
339
+ uniqueIndices: uniqueIndices.length > 0 ? uniqueIndices : undefined,
340
+ };
341
+ }
342
+ catch {
343
+ return null;
344
+ }
345
+ }
346
+ /** Returns the identity key column name(s) for a table, or null if none found.
347
+ * Priority: slug > column-level isUnique > table-level uniqueIndices > FK columns (junction fallback)
348
+ */
349
+ findIdentityKey(table) {
350
+ if (table.columns.some((c) => c.name === 'slug'))
351
+ return 'slug';
352
+ const uniqueCols = table.columns.filter((c) => c.isUnique);
353
+ if (uniqueCols.length === 1)
354
+ return uniqueCols[0].name;
355
+ if (uniqueCols.length > 1)
356
+ return uniqueCols.map((c) => c.name);
357
+ // Table-level composite unique index (e.g. from YAML indices: section)
358
+ if (table.uniqueIndices?.length)
359
+ return table.uniqueIndices[0];
360
+ // Junction-table fallback: use all FK columns as composite key
361
+ const fkCols = table.columns.filter((c) => c.type === 'fk');
362
+ if (fkCols.length > 0)
363
+ return fkCols.map((c) => c.name);
364
+ return null;
365
+ }
366
+ getRowKeyValue(row, keyColumn) {
367
+ if (Array.isArray(keyColumn)) {
368
+ const parts = keyColumn.map((k) => {
369
+ const val = row[k];
370
+ if (val === undefined || val === null)
371
+ return null;
372
+ if (typeof val === 'object' && 'where' in val)
373
+ return JSON.stringify(val.where);
374
+ return String(val);
375
+ });
376
+ if (parts.some((p) => p === null))
377
+ return null;
378
+ return parts.join('::');
379
+ }
380
+ const val = row[keyColumn];
381
+ if (val === undefined || val === null)
382
+ return null;
383
+ if (typeof val === 'object' && 'where' in val) {
384
+ return JSON.stringify(val.where);
385
+ }
386
+ return String(val);
387
+ }
388
+ rowScalarsChanged(oldRow, newRow) {
389
+ const extractScalars = (row) => {
390
+ const result = {};
391
+ for (const [key, value] of Object.entries(row)) {
392
+ if (key !== 'relations')
393
+ result[key] = value;
394
+ }
395
+ return result;
396
+ };
397
+ return (JSON.stringify(extractScalars(oldRow)) !==
398
+ JSON.stringify(extractScalars(newRow)));
399
+ }
400
+ diffRelations(oldRow, newRow, parentKeyValue) {
401
+ const changes = [];
402
+ const oldRels = oldRow.relations || {};
403
+ const newRels = newRow.relations || {};
404
+ const allTargets = new Set([
405
+ ...Object.keys(oldRels),
406
+ ...Object.keys(newRels),
407
+ ]);
408
+ for (const targetTable of allTargets) {
409
+ const oldRelList = (oldRels[targetTable] ?? []);
410
+ const newRelList = (newRels[targetTable] ?? []);
411
+ const oldRelSet = new Set(oldRelList.map((r) => JSON.stringify(r)));
412
+ const newRelSet = new Set(newRelList.map((r) => JSON.stringify(r)));
413
+ const addedRelations = newRelList.filter((r) => !oldRelSet.has(JSON.stringify(r)));
414
+ const removedRelations = oldRelList.filter((r) => !newRelSet.has(JSON.stringify(r)));
415
+ if (addedRelations.length || removedRelations.length) {
416
+ changes.push({
417
+ parentKeyValue,
418
+ targetTable,
419
+ addedRelations,
420
+ removedRelations,
421
+ });
422
+ }
423
+ }
424
+ return changes;
425
+ }
426
+ // ── Rename detection ────────────────────────────────────────────────────────
427
+ detectRenameCandidates(droppedColumns, addedColumns) {
428
+ const candidates = [];
429
+ for (const dropped of droppedColumns) {
430
+ const normalizedDropped = this.normalizeColType(dropped);
431
+ for (const added of addedColumns) {
432
+ if (normalizedDropped === this.normalizeColType(added)) {
433
+ candidates.push({ oldColumn: dropped, newColumn: added });
434
+ }
435
+ }
436
+ }
437
+ return candidates;
438
+ }
439
+ // ── Interactive prompts (inquirer v12 via dynamic import) ───────────────────
440
+ async prompt(questions) {
441
+ const { default: inquirer } = await Promise.resolve().then(() => require('inquirer'));
442
+ return inquirer.prompt(questions);
443
+ }
444
+ async promptRenames(tableName, candidates) {
445
+ const decisions = [];
446
+ for (const candidate of candidates) {
447
+ const type = this.normalizeColType(candidate.oldColumn);
448
+ const answers = await this.prompt([
449
+ {
450
+ type: 'confirm',
451
+ name: 'isRename',
452
+ message: chalk.yellow(`[Table "${tableName}"] Column "${candidate.oldColumn.name}" was removed and "${candidate.newColumn.name}" was added (same type: ${type}). Is this a RENAME?`) + chalk.gray(' (No = DROP + ADD)'),
453
+ default: false,
454
+ },
455
+ ]);
456
+ decisions.push({
457
+ oldName: candidate.oldColumn.name,
458
+ newName: candidate.newColumn.name,
459
+ oldColumn: candidate.oldColumn,
460
+ newColumn: candidate.newColumn,
461
+ isRename: answers.isRename,
462
+ });
463
+ }
464
+ return decisions;
465
+ }
466
+ async promptDropColumns(tableName, columns) {
467
+ const approved = [];
468
+ for (const col of columns) {
469
+ console.warn(chalk.red(`\n⚠️ WARNING: Dropping column "${col.name}" from table "${tableName}" will cause permanent DATA LOSS.\n`));
470
+ const answers = await this.prompt([
471
+ {
472
+ type: 'list',
473
+ name: 'action',
474
+ message: `Column "${col.name}" (${this.normalizeColType(col)}) was removed from the YAML. What should be done?`,
475
+ choices: [
476
+ {
477
+ name: `DROP COLUMN "${col.name}" (recommended — removes column and all its data)`,
478
+ value: 'drop',
479
+ },
480
+ {
481
+ name: `IGNORE (keep the column in the database as-is)`,
482
+ value: 'ignore',
483
+ },
484
+ ],
485
+ default: 'drop',
486
+ },
487
+ ]);
488
+ if (answers.action === 'drop')
489
+ approved.push(col);
490
+ }
491
+ return approved;
492
+ }
493
+ async promptDeleteRows(tableName, rows, keyColumn) {
494
+ const approved = [];
495
+ for (const row of rows) {
496
+ const keyVal = Array.isArray(keyColumn)
497
+ ? keyColumn.map((k) => row[k]).join('::')
498
+ : row[keyColumn];
499
+ const answers = await this.prompt([
500
+ {
501
+ type: 'list',
502
+ name: 'action',
503
+ message: `Row "${keyVal}" was removed from the data file for table "${tableName}". What should be done?`,
504
+ choices: [
505
+ {
506
+ name: `IGNORE (keep the row in the database)`,
507
+ value: 'ignore',
508
+ },
509
+ {
510
+ name: `DELETE "${keyVal}" from "${tableName}"`,
511
+ value: 'delete',
512
+ },
513
+ ],
514
+ default: 'ignore',
515
+ },
516
+ ]);
517
+ if (answers.action === 'delete')
518
+ approved.push(row);
519
+ }
520
+ return approved;
521
+ }
522
+ async promptDeleteEntireDataFile(tableName, rows) {
523
+ console.warn(chalk.red(`\n⚠️ The entire data file for table "${tableName}" was removed in the new version (${rows.length} rows).\n`));
524
+ const answers = await this.prompt([
525
+ {
526
+ type: 'list',
527
+ name: 'action',
528
+ message: `Generate DELETE for all ${rows.length} rows in "${tableName}", or ignore?`,
529
+ choices: [
530
+ {
531
+ name: `IGNORE (keep all existing rows in the database)`,
532
+ value: 'ignore',
533
+ },
534
+ {
535
+ name: `DELETE all ${rows.length} rows from "${tableName}"`,
536
+ value: 'delete',
537
+ },
538
+ ],
539
+ default: 'ignore',
540
+ },
541
+ ]);
542
+ return answers.action;
543
+ }
544
+ async promptDeleteRelations(parentTable, targetTable, pairs) {
545
+ const approved = [];
546
+ for (const pair of pairs) {
547
+ const answers = await this.prompt([
548
+ {
549
+ type: 'list',
550
+ name: 'action',
551
+ message: `Relation between "${parentTable}:${pair.parentKeyValue}" and "${targetTable}:${JSON.stringify(pair.relation)}" was removed. DELETE or IGNORE?`,
552
+ choices: [
553
+ {
554
+ name: `IGNORE (keep the relation in the database)`,
555
+ value: 'ignore',
556
+ },
557
+ { name: `DELETE the relation`, value: 'delete' },
558
+ ],
559
+ default: 'ignore',
560
+ },
561
+ ]);
562
+ if (answers.action === 'delete')
563
+ approved.push(pair);
564
+ }
565
+ return approved;
566
+ }
567
+ };
568
+ exports.DiffService = DiffService;
569
+ exports.DiffService = DiffService = __decorate([
570
+ (0, common_1.Injectable)(),
571
+ __metadata("design:paramtypes", [file_system_service_1.FileSystemService])
572
+ ], DiffService);
573
+ //# sourceMappingURL=diff.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.service.js","sourceRoot":"","sources":["../../../../../src/modules/hedhog/services/diff.service.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { DatabaseService } from '../../database/database.service';
2
2
  import { DeveloperService } from '../../developer/developer.service';
3
+ import { DiffService } from './diff.service';
3
4
  import { FileSystemService } from './file-system.service';
4
5
  import { TableColumn, TableService } from './table.service';
5
6
  export interface InsertQuery {
@@ -12,10 +13,11 @@ export declare class MigrationService {
12
13
  private readonly developer;
13
14
  private readonly fileSystem;
14
15
  private readonly tableService;
16
+ private readonly diffService;
15
17
  private indexWithClauseLocale;
16
18
  private touchUpdatedAtCreated;
17
19
  private verbose;
18
- constructor(database: DatabaseService, developer: DeveloperService, fileSystem: FileSystemService, tableService: TableService);
20
+ constructor(database: DatabaseService, developer: DeveloperService, fileSystem: FileSystemService, tableService: TableService, diffService: DiffService);
19
21
  private log;
20
22
  getDefaultValue(column: TableColumn): string;
21
23
  getWhereString(where: Record<string, any>): string;
@@ -34,6 +36,25 @@ export declare class MigrationService {
34
36
  private findColumnForVariable;
35
37
  private normalizeCustomSqlEnumDeclarations;
36
38
  private normalizeCustomSqlAgainstSchema;
39
+ /**
40
+ * Makes SQL statements idempotent using standard DDL (no DO blocks, which
41
+ * the sql-formatter breaks apart).
42
+ *
43
+ * Handles three cases for after-query SQL files:
44
+ *
45
+ * 1. ALTER COLUMN ... TYPE blocked by views:
46
+ * If the file contains ALTER COLUMN ... TYPE AND defines views with
47
+ * CREATE [OR REPLACE] VIEW, prepend DROP VIEW IF EXISTS for each view so
48
+ * the ALTER succeeds. The views are recreated by the CREATE OR REPLACE
49
+ * VIEW statements already in the same file.
50
+ *
51
+ * 2. ALTER TABLE … ADD CONSTRAINT <name> (bare, not inside a DO block):
52
+ * → prepend DROP CONSTRAINT IF EXISTS <name>
53
+ *
54
+ * 3. CREATE [UNIQUE] INDEX <name> without IF NOT EXISTS:
55
+ * → insert IF NOT EXISTS
56
+ */
57
+ private wrapIdempotentSql;
37
58
  private normalizeCustomSqlQuery;
38
59
  private hasSameEnumValues;
39
60
  private validateEnumColumn;
@@ -55,4 +76,17 @@ export declare class MigrationService {
55
76
  private orderQueriesByDependencies;
56
77
  private toSnackCase;
57
78
  createMigrations(name: string, cwd?: string, verbose?: boolean): Promise<void>;
79
+ /**
80
+ * Generate a differential migration (ALTER TABLE + upserts) for an existing
81
+ * library being updated. Reads old schema/data from `libraries/<name>/` and
82
+ * new schema/data from `libraries/<name>/.hedhog-update/`.
83
+ */
84
+ createUpdateMigrations(name: string, cwd?: string, verbose?: boolean): Promise<void>;
85
+ private generateAlterTableSQL;
86
+ private generateColumnAlterSQL;
87
+ private getColumnTypeDef;
88
+ private generateDataUpdateSQL;
89
+ private generateRowUpsertSQL;
90
+ private resolveRawValue;
91
+ private generateRelationUpdateSQL;
58
92
  }