@cheetah.js/cli 0.1.31 → 0.1.32

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.
package/README.md CHANGED
@@ -15,7 +15,15 @@ Para gerar uma nova migração, use o comando
15
15
  ```bash
16
16
  bunx cli migration:generate
17
17
  ```
18
- Isso irá gerar um novo arquivo de migração com uma diferença.
18
+ Isso irá gerar um novo arquivo de migração com apenas as diferenças desde a última migration.
19
+
20
+ #### Sistema de Snapshot
21
+ O CLI mantém um arquivo `schema-snapshot.json` no diretório de migrations que armazena o estado atual do schema. Isso garante que:
22
+ - Apenas as mudanças desde a última migration sejam geradas
23
+ - Não há regeneração de queries já executadas
24
+ - O histórico de mudanças é mantido de forma incremental
25
+
26
+ O snapshot é atualizado automaticamente após cada migration gerada.
19
27
 
20
28
  ### Executar todas as migrações pendentes
21
29
  Para executar todas as migrações pendentes, use o comando
@@ -23,5 +31,50 @@ Para executar todas as migrações pendentes, use o comando
23
31
  bunx cli migration:run
24
32
  ```
25
33
 
34
+ ### Exemplo de Fluxo de Trabalho
35
+
36
+ ```bash
37
+ # 1. Defina suas entidades
38
+ # src/entities/user.entity.ts
39
+ @Entity()
40
+ class User extends BaseEntity {
41
+ @PrimaryKey()
42
+ id: number;
43
+
44
+ @Property()
45
+ email: string;
46
+ }
47
+
48
+ # 2. Gere a primeira migration
49
+ bunx cli migration:generate
50
+ # Cria: database/migrations/migration_20231021120000.sql
51
+ # Cria: database/migrations/schema-snapshot.json
52
+
53
+ # 3. Execute a migration
54
+ bunx cli migration:run
55
+
56
+ # 4. Adicione uma nova coluna
57
+ @Entity()
58
+ class User extends BaseEntity {
59
+ @PrimaryKey()
60
+ id: number;
61
+
62
+ @Property()
63
+ email: string;
64
+
65
+ @Property()
66
+ password: string; // Nova coluna
67
+ }
68
+
69
+ # 5. Gere apenas o diff
70
+ bunx cli migration:generate
71
+ # Cria: database/migrations/migration_20231021120100.sql
72
+ # Atualiza: database/migrations/schema-snapshot.json
73
+ # Contém apenas: ALTER TABLE user ADD COLUMN password...
74
+
75
+ # 6. Execute a nova migration
76
+ bunx cli migration:run
77
+ ```
78
+
26
79
  ### Contribuição
27
80
  Contribuições são bem-vindas. Por favor, abra um problema ou faça um pull request com suas mudanças.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import 'reflect-metadata';
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ require("reflect-metadata");
5
+ const commander_1 = require("commander");
6
+ const migrator_1 = require("./migrator/migrator");
7
+ const program = new commander_1.Command();
8
+ program.name('[npx|bunx] cli').description('CLI to Cheetah.js ORM ');
9
+ program
10
+ .command('migration:generate')
11
+ .description('generate a new migration file with a diff')
12
+ .action(async (str, options) => {
13
+ const migrator = new migrator_1.Migrator();
14
+ await migrator.generateMigration();
15
+ process.exit(0);
16
+ });
17
+ program
18
+ .command('migration:run')
19
+ .description('run all pending migrations')
20
+ .action(async (str, options) => {
21
+ const migrator = new migrator_1.Migrator();
22
+ await migrator.migrate();
23
+ process.exit(0);
24
+ });
25
+ program.parse();
26
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";;;AAEA,4BAA0B;AAC1B,yCAAoC;AACpC,kDAA+C;AAE/C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;AAErE,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;IAC7B,MAAM,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;IAChC,MAAM,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;IAC7B,MAAM,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;IAChC,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import 'reflect-metadata';
2
+ export * from './migrator/migrator';
3
+ export * from './migrator/snapshot-manager';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ require("reflect-metadata");
18
+ __exportStar(require("./migrator/migrator"), exports);
19
+ __exportStar(require("./migrator/snapshot-manager"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4BAA0B;AAE1B,sDAAoC;AACpC,8DAA4C"}
@@ -0,0 +1,20 @@
1
+ import { DriverInterface, EntityStorage } from '@cheetah.js/orm';
2
+ import { ColDiff, ColumnsInfo, SnapshotTable, TableDiff } from './migrator';
3
+ export declare class DiffCalculator {
4
+ private driver;
5
+ private entities;
6
+ constructor(entities: EntityStorage, driver: DriverInterface);
7
+ diff(snapshotBd: SnapshotTable[], snapshotEntities: SnapshotTable[]): TableDiff[];
8
+ private checkIndexes;
9
+ private createNewColumn;
10
+ private diffColumnType;
11
+ private diffColumnDefault;
12
+ private diffColumnPrimary;
13
+ private diffColumnUnique;
14
+ private diffForeignKey;
15
+ private diffColumnSql;
16
+ diffColumnPrecisionAndScale(bdCol: ColumnsInfo, entityCol: ColumnsInfo, colDiffs: ColDiff[]): void;
17
+ private diffColumnNullable;
18
+ private convertEntityTypeToSqlType;
19
+ private diffEnum;
20
+ }
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DiffCalculator = void 0;
4
+ const orm_1 = require("@cheetah.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
+ }
39
+ else {
40
+ const colDiffs = [];
41
+ const bdColumnsMap = new Map(bdTable.columns.map((col) => [col.name, col]));
42
+ const entityColumnsMap = new Map(entityTable.columns.map((col) => [col.name, col]));
43
+ const allColumnNames = new Set([
44
+ ...bdColumnsMap.keys(),
45
+ ...entityColumnsMap.keys(),
46
+ ]);
47
+ allColumnNames.forEach((colName) => {
48
+ const bdCol = bdColumnsMap.get(colName);
49
+ const entityCol = entityColumnsMap.get(colName);
50
+ if (!entityCol) {
51
+ colDiffs.push({
52
+ actionType: 'DELETE',
53
+ colName: bdCol.name,
54
+ });
55
+ }
56
+ else if (!bdCol) {
57
+ this.createNewColumn(entityCol, colDiffs);
58
+ }
59
+ else
60
+ this.diffColumnSql(bdCol, entityCol, colDiffs);
61
+ });
62
+ this.checkIndexes(bdTable, entityTable, colDiffs);
63
+ if (colDiffs.length > 0) {
64
+ diffs.push({
65
+ tableName: tableName,
66
+ schema: entityTable.schema ?? 'public',
67
+ colDiffs,
68
+ });
69
+ }
70
+ }
71
+ });
72
+ return diffs;
73
+ }
74
+ checkIndexes(bdTable, entityTable, colDiffs) {
75
+ if ((bdTable && bdTable.indexes) || (entityTable && entityTable.indexes)) {
76
+ if (!bdTable || !bdTable.indexes) {
77
+ colDiffs.push({
78
+ actionType: 'INDEX',
79
+ colName: '*',
80
+ indexTables: entityTable.indexes.map((index) => ({
81
+ name: index.indexName,
82
+ properties: index.columnName.split(','),
83
+ })),
84
+ });
85
+ }
86
+ if (!entityTable || !entityTable.indexes) {
87
+ colDiffs.push({
88
+ actionType: 'INDEX',
89
+ colName: '*',
90
+ indexTables: bdTable.indexes.map((index) => ({ name: index.indexName })),
91
+ });
92
+ }
93
+ }
94
+ if (bdTable && bdTable.indexes && entityTable && entityTable.indexes) {
95
+ const bdIndexesMap = new Map(bdTable.indexes.map((index) => [index.indexName, index]));
96
+ const entityIndexesMap = new Map(entityTable.indexes.map((index) => [index.indexName, index]));
97
+ const allIndexes = new Set([
98
+ ...bdIndexesMap.keys(),
99
+ ...entityIndexesMap.keys(),
100
+ ]);
101
+ allIndexes.forEach((indexName) => {
102
+ const bdIndex = bdIndexesMap.get(indexName);
103
+ const entityIndex = entityIndexesMap.get(indexName);
104
+ if (!entityIndex) {
105
+ colDiffs.push({
106
+ actionType: 'INDEX',
107
+ colName: bdIndex.columnName,
108
+ indexTables: [{ name: indexName }],
109
+ });
110
+ }
111
+ else if (!bdIndex) {
112
+ colDiffs.push({
113
+ actionType: 'INDEX',
114
+ colName: entityIndex.columnName,
115
+ indexTables: [
116
+ { name: indexName, properties: entityIndex.columnName.split(',') },
117
+ ],
118
+ });
119
+ }
120
+ });
121
+ }
122
+ }
123
+ createNewColumn(entityCol, colDiffs) {
124
+ const colType = this.convertEntityTypeToSqlType(entityCol.type);
125
+ colDiffs.push({
126
+ actionType: 'CREATE',
127
+ colName: entityCol.name,
128
+ colType: colType.type,
129
+ colLength: entityCol.length ?? colType.len,
130
+ colChanges: {
131
+ autoIncrement: entityCol.autoIncrement,
132
+ default: entityCol.default,
133
+ primary: entityCol.primary,
134
+ unique: entityCol.unique,
135
+ nullable: entityCol.nullable,
136
+ enumItems: entityCol.enumItems,
137
+ foreignKeys: entityCol.foreignKeys ?? undefined,
138
+ precision: entityCol.precision ?? undefined,
139
+ scale: entityCol.scale ?? undefined,
140
+ },
141
+ });
142
+ return colDiffs;
143
+ }
144
+ diffColumnType(bdCol, entityCol, colDiffs) {
145
+ const isPostgres = this.driver instanceof orm_1.BunPgDriver;
146
+ if (bdCol.type === 'USER-DEFINED') {
147
+ bdCol.type = 'enum';
148
+ }
149
+ const colT = this.convertEntityTypeToSqlType(entityCol.type);
150
+ const colType = colT.type;
151
+ let length = entityCol.length ?? colT.len;
152
+ if (colType === 'integer' && isPostgres) {
153
+ length = 32;
154
+ }
155
+ if (bdCol.isDecimal && isPostgres) {
156
+ bdCol.type = 'decimal';
157
+ length = bdCol.precision ?? 0;
158
+ }
159
+ if (!bdCol.type.includes(colType) || bdCol.length !== length) {
160
+ colDiffs.push({
161
+ actionType: 'ALTER',
162
+ colName: entityCol.name,
163
+ colType: colType,
164
+ colLength: length,
165
+ colChanges: {
166
+ enumItems: entityCol.enumItems || undefined,
167
+ precision: entityCol.precision ?? undefined,
168
+ scale: entityCol.scale ?? undefined,
169
+ },
170
+ });
171
+ }
172
+ }
173
+ diffColumnDefault(bdCol, entityCol, colDiffs) {
174
+ if (bdCol.default !== (entityCol.default ?? null)) {
175
+ colDiffs.push({
176
+ actionType: 'ALTER',
177
+ colName: entityCol.name,
178
+ colChanges: { default: entityCol.default },
179
+ colLength: entityCol.length,
180
+ });
181
+ }
182
+ }
183
+ diffColumnPrimary(bdCol, entityCol, colDiffs) {
184
+ if (bdCol.primary !== (entityCol.primary ?? false)) {
185
+ colDiffs.push({
186
+ actionType: 'ALTER',
187
+ colName: entityCol.name,
188
+ colChanges: { primary: entityCol.primary },
189
+ colLength: entityCol.length,
190
+ });
191
+ }
192
+ }
193
+ diffColumnUnique(bdCol, entityCol, colDiffs) {
194
+ if (bdCol.unique !== (entityCol.unique ?? false)) {
195
+ if (bdCol.unique === false && entityCol.unique === undefined) {
196
+ return;
197
+ }
198
+ if (entityCol.primary) {
199
+ return;
200
+ }
201
+ colDiffs.push({
202
+ actionType: 'ALTER',
203
+ colName: entityCol.name,
204
+ colChanges: { unique: entityCol.unique || false },
205
+ colLength: entityCol.length,
206
+ });
207
+ }
208
+ }
209
+ diffForeignKey(bdCol, entityCol, colDiffs) {
210
+ if (bdCol.foreignKeys || entityCol.foreignKeys) {
211
+ const bdFKMap = new Map((bdCol.foreignKeys || []).map((fk) => [
212
+ `${fk.referencedTableName}.${fk.referencedColumnName}`,
213
+ fk,
214
+ ]));
215
+ const entityFKMap = new Map((entityCol.foreignKeys || []).map((fk) => [
216
+ `${fk.referencedTableName}.${fk.referencedColumnName}`,
217
+ fk,
218
+ ]));
219
+ const allFKs = new Set([...bdFKMap.keys(), ...entityFKMap.keys()]);
220
+ allFKs.forEach((fkName) => {
221
+ const bdFK = bdFKMap.get(fkName);
222
+ const entityFK = entityFKMap.get(fkName);
223
+ if (!entityFK) {
224
+ const fks = bdCol.foreignKeys?.filter((fk) => fk !== bdFK);
225
+ colDiffs.push({
226
+ actionType: 'ALTER',
227
+ colName: bdCol.name,
228
+ colChanges: {
229
+ foreignKeys: fks.length > 0 ? fks : [],
230
+ },
231
+ });
232
+ }
233
+ });
234
+ }
235
+ }
236
+ diffColumnSql(bdCol, entityCol, colDiffs) {
237
+ this.diffForeignKey(bdCol, entityCol, colDiffs);
238
+ this.diffEnum(bdCol, entityCol, colDiffs);
239
+ this.diffColumnType(bdCol, entityCol, colDiffs);
240
+ this.diffColumnDefault(bdCol, entityCol, colDiffs);
241
+ this.diffColumnPrimary(bdCol, entityCol, colDiffs);
242
+ this.diffColumnUnique(bdCol, entityCol, colDiffs);
243
+ this.diffColumnNullable(bdCol, entityCol, colDiffs);
244
+ this.diffColumnPrecisionAndScale(bdCol, entityCol, colDiffs);
245
+ return colDiffs;
246
+ }
247
+ diffColumnPrecisionAndScale(bdCol, entityCol, colDiffs) {
248
+ const bdPrecision = bdCol.precision ?? 0;
249
+ const entityPrecision = entityCol.precision ?? bdPrecision;
250
+ const bdScale = bdCol.scale ?? 0;
251
+ const entityScale = entityCol.scale ?? bdCol.scale;
252
+ if (bdCol.isDecimal &&
253
+ (bdPrecision !== entityPrecision ||
254
+ (bdCol.isDecimal && bdScale !== entityScale))) {
255
+ colDiffs.push({
256
+ actionType: 'ALTER',
257
+ colType: 'decimal',
258
+ colName: entityCol.name,
259
+ colChanges: {
260
+ precision: entityCol.precision ?? 0,
261
+ scale: entityCol.scale ?? 0,
262
+ },
263
+ colLength: entityCol.length,
264
+ });
265
+ }
266
+ }
267
+ diffColumnNullable(bdCol, entityCol, colDiffs) {
268
+ if (bdCol.nullable !== (entityCol.nullable ?? false)) {
269
+ colDiffs.push({
270
+ actionType: 'ALTER',
271
+ colName: entityCol.name,
272
+ colChanges: { nullable: entityCol.nullable ?? false },
273
+ colLength: entityCol.length,
274
+ });
275
+ }
276
+ }
277
+ convertEntityTypeToSqlType(entityType) {
278
+ switch (entityType) {
279
+ case 'Number':
280
+ case 'int':
281
+ return { type: 'integer', len: 32 };
282
+ case 'bigint':
283
+ return { type: 'bigint' };
284
+ case 'float':
285
+ case 'double':
286
+ case 'decimal':
287
+ return { type: 'decimal' };
288
+ case 'String':
289
+ case 'varchar':
290
+ return { type: 'character varying', len: 255 };
291
+ case 'Boolean':
292
+ return { type: 'boolean', len: null };
293
+ case 'Date':
294
+ return { type: 'timestamp' };
295
+ case 'Object':
296
+ return { type: 'json', len: null };
297
+ case 'uuid':
298
+ return { type: 'uuid', len: null };
299
+ case 'text':
300
+ return { type: 'text' };
301
+ case 'enum':
302
+ return { type: 'enum', len: null };
303
+ default:
304
+ return { type: 'character varying', len: 255 };
305
+ }
306
+ }
307
+ diffEnum(bdCol, entityCol, colDiffs) {
308
+ if (bdCol.enumItems || entityCol.enumItems) {
309
+ if (bdCol.enumItems && entityCol.enumItems) {
310
+ const allEnums = new Set([...bdCol.enumItems, ...entityCol.enumItems]);
311
+ const differences = [...allEnums].filter((x) => !bdCol.enumItems?.includes(x) || !entityCol.enumItems?.includes(x));
312
+ if (differences.length === 0) {
313
+ return;
314
+ }
315
+ colDiffs.push({
316
+ actionType: 'ALTER',
317
+ colName: entityCol.name,
318
+ colType: 'enum',
319
+ colChanges: {
320
+ enumItems: entityCol.enumItems,
321
+ },
322
+ });
323
+ }
324
+ if (!entityCol.enumItems) {
325
+ }
326
+ else if (!bdCol.enumItems) {
327
+ colDiffs.push({
328
+ actionType: 'CREATE',
329
+ colName: entityCol.name,
330
+ colChanges: {
331
+ enumItems: entityCol.enumItems,
332
+ },
333
+ });
334
+ }
335
+ }
336
+ }
337
+ }
338
+ exports.DiffCalculator = DiffCalculator;
339
+ //# 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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"}
@@ -0,0 +1,84 @@
1
+ import { ConnectionSettings, Orm } from '@cheetah.js/orm';
2
+ import { EntityStorage } from '@cheetah.js/orm';
3
+ import * as knex from 'knex';
4
+ export type SnapshotTable = {
5
+ tableName: string;
6
+ schema?: string;
7
+ columns: ColumnsInfo[];
8
+ indexes: SnapshotIndexInfo[];
9
+ foreignKeys?: ForeignKeyInfo[];
10
+ };
11
+ export type SnapshotIndexInfo = {
12
+ table: string;
13
+ indexName: string;
14
+ columnName: string;
15
+ };
16
+ export type ForeignKeyInfo = {
17
+ referencedTableName: string;
18
+ referencedColumnName: string;
19
+ };
20
+ export type ColumnsInfo = {
21
+ name: string;
22
+ type: string;
23
+ nullable?: boolean;
24
+ default?: string | null;
25
+ primary?: boolean;
26
+ unique?: boolean;
27
+ autoIncrement?: boolean;
28
+ length?: number;
29
+ isEnum?: boolean;
30
+ precision?: number;
31
+ scale?: number;
32
+ isDecimal?: boolean;
33
+ enumItems?: string[] | number[];
34
+ foreignKeys?: ForeignKeyInfo[];
35
+ };
36
+ export type SqlActionType = 'CREATE' | 'DELETE' | 'ALTER' | 'INDEX';
37
+ export type ColDiff = {
38
+ actionType: SqlActionType;
39
+ colName: string;
40
+ colType?: string;
41
+ colLength?: number;
42
+ indexTables?: {
43
+ name: string;
44
+ properties?: string[];
45
+ }[];
46
+ colChanges?: {
47
+ default?: string | null;
48
+ primary?: boolean;
49
+ unique?: boolean;
50
+ nullable?: boolean;
51
+ autoIncrement?: boolean;
52
+ enumItems?: string[] | number[];
53
+ enumModified?: boolean;
54
+ precision?: number;
55
+ scale?: number;
56
+ foreignKeys?: ForeignKeyInfo[];
57
+ };
58
+ };
59
+ export type TableDiff = {
60
+ tableName: string;
61
+ schema?: string;
62
+ newTable?: boolean;
63
+ colDiffs: ColDiff[];
64
+ };
65
+ export declare class Migrator {
66
+ config: ConnectionSettings<any>;
67
+ orm: Orm<any>;
68
+ entities: EntityStorage;
69
+ knex: knex.Knex;
70
+ constructor();
71
+ startConnection(basePath?: string): Promise<void>;
72
+ private initConfigFile;
73
+ private initOrm;
74
+ private initKnex;
75
+ private run;
76
+ private createTable;
77
+ assignType(builder: knex.Knex.AlterTableBuilder, diff: ColDiff, tableDiff: TableDiff): knex.Knex.ColumnBuilder;
78
+ migrate(): Promise<void>;
79
+ generateMigration(configFile?: string, onlySql?: boolean): Promise<any[]>;
80
+ private lastTreatment;
81
+ private snapshotBd;
82
+ private snapshotEntities;
83
+ destroy(): Promise<void>;
84
+ }