@cheetah.js/cli 0.1.29 → 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.
@@ -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
+ }