@cheetah.js/cli 0.1.32 → 0.1.33

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cheetah.js/cli",
3
3
  "description": "Cheetah.js CLI - Generate migrations, models, controllers and more. (In development)",
4
- "version": "0.1.32",
4
+ "version": "0.1.33",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
package/dist/cli.d.ts DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import 'reflect-metadata';
package/dist/cli.js DELETED
@@ -1,26 +0,0 @@
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
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
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"}
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import 'reflect-metadata';
2
- export * from './migrator/migrator';
package/dist/index.js DELETED
@@ -1,19 +0,0 @@
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
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4BAA0B;AAE1B,sDAAoC"}
@@ -1,20 +0,0 @@
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
- }
@@ -1,339 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff-calculator.js","sourceRoot":"","sources":["../../src/migrator/diff-calculator.ts"],"names":[],"mappings":"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"}
@@ -1,84 +0,0 @@
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
- useTsNode(): void;
73
- private initConfigFile;
74
- private initOrm;
75
- private initKnex;
76
- private run;
77
- private createTable;
78
- assignType(builder: knex.Knex.AlterTableBuilder, diff: ColDiff, tableDiff: TableDiff): knex.Knex.ColumnBuilder;
79
- migrate(): Promise<void>;
80
- generateMigration(configFile?: string, onlySql?: boolean): Promise<any[]>;
81
- private lastTreatment;
82
- private snapshotBd;
83
- private snapshotEntities;
84
- }
@@ -1,429 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.Migrator = void 0;
40
- const core_1 = require("@cheetah.js/core");
41
- const orm_1 = require("@cheetah.js/orm");
42
- const orm_2 = require("@cheetah.js/orm");
43
- const globby_1 = __importDefault(require("globby"));
44
- const knex = __importStar(require("knex"));
45
- const diff_calculator_1 = require("./diff-calculator");
46
- const tsNode = __importStar(require("ts-node"));
47
- const path = __importStar(require("path"));
48
- const fs = __importStar(require("fs"));
49
- class Migrator {
50
- constructor() {
51
- this.entities = new orm_2.EntityStorage();
52
- this.orm = orm_1.Orm.getInstance();
53
- if (this.orm === undefined)
54
- this.orm = new orm_1.Orm(new core_1.LoggerService(new core_1.InjectorService()));
55
- this.entities = orm_2.EntityStorage.getInstance();
56
- if (this.entities === undefined)
57
- this.entities = new orm_2.EntityStorage();
58
- }
59
- async startConnection(basePath = process.cwd()) {
60
- await this.initConfigFile(basePath);
61
- await this.initKnex();
62
- }
63
- useTsNode() {
64
- tsNode.register({
65
- compilerOptions: {
66
- module: 'CommonJS',
67
- },
68
- });
69
- }
70
- async initConfigFile(basePath) {
71
- const paths = await (0, globby_1.default)(['cheetah.config.ts'], {
72
- absolute: true,
73
- cwd: basePath,
74
- });
75
- if (paths.length === 0) {
76
- throw new Error('Config file not found');
77
- }
78
- const dynamicImport = new Function('specifier', 'return import(specifier)');
79
- const config = await dynamicImport(paths[0]);
80
- this.config = config.default;
81
- if (typeof this.config.entities === 'string') {
82
- const paths = await (0, globby_1.default)(this.config.entities, {
83
- absolute: true,
84
- cwd: basePath,
85
- });
86
- for (const path of paths) {
87
- console.log(`Importing entity from: ${path}`);
88
- await dynamicImport(path);
89
- }
90
- }
91
- await this.initOrm();
92
- }
93
- async initOrm() {
94
- const serv = new orm_1.OrmService(this.orm, this.entities);
95
- await serv.onInit(this.config);
96
- }
97
- initKnex() {
98
- this.knex = knex.default({
99
- client: this.config.driver === orm_1.BunPgDriver ? 'pg' : 'mysql',
100
- connection: {
101
- host: this.config.host,
102
- user: this.config.username,
103
- password: this.config.password,
104
- database: this.config.database,
105
- uri: this.config.connectionString,
106
- },
107
- debug: true,
108
- });
109
- }
110
- async run(diff) {
111
- const sql = [];
112
- for (const tableDiff of diff) {
113
- let query;
114
- if (tableDiff.newTable) {
115
- query = await this.createTable(tableDiff);
116
- }
117
- else {
118
- query = this.knex.schema
119
- .withSchema(tableDiff.schema)
120
- .table(tableDiff.tableName, (builder) => {
121
- for (const colDiff of tableDiff.colDiffs) {
122
- if (colDiff.actionType === 'INDEX') {
123
- colDiff.indexTables.forEach((indexTable) => {
124
- if (typeof indexTable.properties === 'undefined') {
125
- builder.dropIndex([], indexTable.name);
126
- }
127
- else {
128
- builder.index(indexTable.properties, indexTable.name);
129
- }
130
- });
131
- }
132
- if (colDiff.actionType === 'DELETE') {
133
- builder.dropColumn(colDiff.colName);
134
- continue;
135
- }
136
- if (colDiff.actionType === 'ALTER' &&
137
- !colDiff.colType &&
138
- typeof colDiff.colChanges === 'undefined')
139
- continue;
140
- if (typeof colDiff.colChanges?.unique !== 'undefined') {
141
- if (colDiff.colChanges?.unique) {
142
- builder.unique([colDiff.colName], `${tableDiff.tableName}_${colDiff.colName}_key`);
143
- }
144
- else {
145
- builder.dropUnique([colDiff.colName], `${tableDiff.tableName}_${colDiff.colName}_key`);
146
- }
147
- }
148
- if (typeof colDiff.colChanges?.foreignKeys !== 'undefined') {
149
- if (colDiff.colChanges.foreignKeys.length !== 0) {
150
- colDiff.colChanges.foreignKeys.forEach((fk) => {
151
- builder
152
- .foreign(colDiff.colName, `${tableDiff.tableName}_${colDiff.colName}_fk`)
153
- .references(`${fk.referencedTableName}.${fk.referencedColumnName}`);
154
- });
155
- }
156
- else {
157
- builder.dropForeign(colDiff.colName, `${tableDiff.tableName}_${colDiff.colName}_fk`);
158
- }
159
- }
160
- const columnBuilder = this.assignType(builder, colDiff, tableDiff);
161
- if (!columnBuilder)
162
- continue;
163
- if (colDiff.actionType === 'ALTER') {
164
- columnBuilder.alter({ alterNullable: false });
165
- continue;
166
- }
167
- }
168
- })
169
- .toSQL();
170
- }
171
- sql.push(...query.flatMap((q) => q.sql.concat(';')));
172
- }
173
- return sql;
174
- }
175
- async createTable(tableDiff) {
176
- return await this.knex.schema
177
- .withSchema(tableDiff.schema)
178
- .createTable(tableDiff.tableName, (builder) => {
179
- for (const diff of tableDiff.colDiffs) {
180
- if (diff.actionType === 'INDEX') {
181
- diff.indexTables.forEach((indexTable) => {
182
- if (typeof indexTable.properties === 'undefined') {
183
- builder.dropIndex([], indexTable.name);
184
- }
185
- else {
186
- if (indexTable.name.includes('pkey')) {
187
- return;
188
- }
189
- builder.index(indexTable.properties, indexTable.name);
190
- }
191
- });
192
- }
193
- if (typeof diff.colChanges?.foreignKeys !== 'undefined') {
194
- if (diff.colChanges.foreignKeys.length !== 0) {
195
- diff.colChanges.foreignKeys.forEach((fk) => {
196
- builder
197
- .foreign(diff.colName, `${tableDiff.tableName}_${diff.colName}_fk`)
198
- .references(`${fk.referencedTableName}.${fk.referencedColumnName}`);
199
- });
200
- }
201
- else {
202
- builder.dropForeign(diff.colName, `${tableDiff.tableName}_${diff.colName}_fk`);
203
- }
204
- }
205
- this.assignType(builder, diff, tableDiff);
206
- if (typeof diff.colChanges?.unique !== 'undefined') {
207
- if (diff.colChanges?.unique) {
208
- builder.unique([diff.colName], `${tableDiff.tableName}_${diff.colName}_key`);
209
- }
210
- else {
211
- builder.dropUnique([diff.colName], `${tableDiff.tableName}_${diff.colName}_key`);
212
- }
213
- }
214
- }
215
- })
216
- .toSQL();
217
- }
218
- assignType(builder, diff, tableDiff) {
219
- if (diff.actionType === 'ALTER') {
220
- if (diff.colChanges?.nullable !== undefined) {
221
- if (diff.colChanges?.nullable) {
222
- builder.setNullable(diff.colName);
223
- }
224
- }
225
- }
226
- if (!diff.colType)
227
- return;
228
- const columnName = diff.colName;
229
- const columnType = diff.colType;
230
- let columnBuilder;
231
- if (diff.colChanges?.autoIncrement !== undefined) {
232
- if (diff.colChanges?.autoIncrement) {
233
- columnBuilder = builder.increments(diff.colName, {
234
- primaryKey: diff.colChanges?.primary,
235
- });
236
- }
237
- }
238
- else {
239
- switch (columnType) {
240
- case 'varchar':
241
- columnBuilder = builder.string(columnName, diff.colLength);
242
- break;
243
- case 'text':
244
- columnBuilder = builder.text(columnName);
245
- break;
246
- case 'int':
247
- case 'numeric':
248
- case 'integer':
249
- columnBuilder = builder.integer(columnName, diff.colLength);
250
- break;
251
- case 'bigint':
252
- columnBuilder = builder.bigInteger(columnName);
253
- break;
254
- case 'double':
255
- case 'float4':
256
- case 'float':
257
- case 'decimal':
258
- columnBuilder = builder.decimal(columnName, diff.colChanges?.precision, diff.colChanges?.scale);
259
- break;
260
- case 'date':
261
- columnBuilder = builder.date(columnName);
262
- break;
263
- case 'datetime':
264
- columnBuilder = builder.datetime(columnName);
265
- break;
266
- case 'time':
267
- columnBuilder = builder.time(columnName);
268
- break;
269
- case 'timestamp':
270
- columnBuilder = builder.timestamp(columnName, {
271
- precision: diff.colLength,
272
- });
273
- break;
274
- case 'boolean':
275
- columnBuilder = builder.boolean(columnName);
276
- break;
277
- case 'json':
278
- columnBuilder = builder.json(columnName);
279
- break;
280
- case 'jsonb':
281
- columnBuilder = builder.jsonb(columnName);
282
- break;
283
- case 'enum':
284
- if (diff.actionType === 'ALTER' && diff.colChanges?.enumItems) {
285
- columnBuilder = builder
286
- .text(columnName)
287
- .checkIn(diff.colChanges.enumItems ?? [], `${columnName}_check`);
288
- }
289
- else {
290
- columnBuilder = builder.enum(columnName, diff.colChanges.enumItems ?? []);
291
- }
292
- break;
293
- case 'array':
294
- columnBuilder = builder.specificType(columnName, 'text[]');
295
- break;
296
- case 'uuid':
297
- columnBuilder = builder.uuid(columnName);
298
- break;
299
- default:
300
- columnBuilder = builder.string(columnName, diff.colLength);
301
- break;
302
- }
303
- }
304
- columnBuilder.notNullable();
305
- if (diff.colChanges?.nullable !== undefined) {
306
- if (diff.colChanges?.nullable) {
307
- columnBuilder.nullable();
308
- }
309
- }
310
- if (diff.colChanges?.default) {
311
- columnBuilder.defaultTo(diff.colChanges?.default);
312
- }
313
- if (typeof diff.colChanges?.primary !== 'undefined') {
314
- if (diff.colChanges?.primary) {
315
- columnBuilder.primary();
316
- }
317
- else {
318
- builder.dropPrimary();
319
- }
320
- }
321
- return columnBuilder;
322
- }
323
- async migrate() {
324
- await this.startConnection();
325
- const migrationTable = 'cheetah_migrations';
326
- const migrationDirectory = path.join(process.cwd(), this.config.migrationPath ?? 'database/migrations');
327
- const migrationFiles = fs
328
- .readdirSync(migrationDirectory)
329
- .filter((file) => file.endsWith('.sql'))
330
- .sort();
331
- if (migrationFiles.length === 0) {
332
- this.orm.logger.info('No migration files found');
333
- return;
334
- }
335
- this.orm.driverInstance.executeSql(`CREATE TABLE IF NOT EXISTS "${migrationTable}" ("migration_file" character varying(255) NOT NULL PRIMARY KEY UNIQUE);`);
336
- const migrated = await this.orm.driverInstance.executeSql(`SELECT * FROM "${migrationTable}" ORDER BY "migration_file" ASC;`);
337
- const lastMigration = migrated.rows[migrated.rows.length - 1];
338
- const lastMigrationIndex = migrationFiles.indexOf(lastMigration?.migration_file ?? '');
339
- const migrationsToExecute = migrationFiles.slice(lastMigrationIndex + 1);
340
- if (migrationsToExecute.length === 0) {
341
- this.orm.logger.info('Database is up to date');
342
- return;
343
- }
344
- for (const migrationFile of migrationsToExecute) {
345
- const migrationFilePath = path.join(migrationDirectory, migrationFile);
346
- const migrationContent = fs.readFileSync(migrationFilePath, {
347
- encoding: 'utf-8',
348
- });
349
- const sqlInstructions = migrationContent
350
- .split(';')
351
- .filter((sql) => sql.trim().length > 0);
352
- for (const sqlInstruction of sqlInstructions) {
353
- await this.orm.driverInstance.executeSql(sqlInstruction);
354
- }
355
- await this.orm.driverInstance.executeSql(`INSERT INTO "${migrationTable}" ("migration_file") VALUES ('${migrationFile}');`);
356
- this.orm.logger.info(`Migration executed: ${migrationFile}`);
357
- }
358
- }
359
- async generateMigration(configFile = process.cwd(), onlySql = false) {
360
- await this.startConnection(configFile);
361
- const snapshotBd = await this.snapshotBd();
362
- const snapshotEntities = await this.snapshotEntities();
363
- const calculator = new diff_calculator_1.DiffCalculator(this.entities, this.orm.driverInstance);
364
- const diff = calculator.diff(snapshotBd, snapshotEntities);
365
- const sql = this.lastTreatment(await this.run(diff));
366
- if (onlySql) {
367
- return sql;
368
- }
369
- const fs = await Promise.resolve().then(() => __importStar(require('fs')));
370
- const path = await Promise.resolve().then(() => __importStar(require('path')));
371
- const directory = path.join(process.cwd(), this.config.migrationPath ?? 'database/migrations');
372
- const fileName = `migration_${new Date().toISOString().replace(/[^\d]/g, '')}` + `.sql`;
373
- const migrationFilePath = path.join(directory, fileName);
374
- if (!fs.existsSync(directory)) {
375
- fs.mkdirSync(directory, { recursive: true });
376
- }
377
- const migrationContent = sql.join('\n');
378
- if (migrationContent.length === 0) {
379
- this.orm.logger.info('No changes detected');
380
- return;
381
- }
382
- else {
383
- fs.writeFileSync(migrationFilePath, migrationContent);
384
- this.orm.logger.info(`Migration file created: ${migrationFilePath}`);
385
- }
386
- }
387
- lastTreatment(sql) {
388
- const getDropIndexes = sql.filter((s) => s.startsWith('drop index'));
389
- const getDropColumns = sql.filter((s) => s.includes('drop column'));
390
- const dropIndexes = [];
391
- for (const dropIndex of getDropIndexes) {
392
- const indexName = dropIndex.split(' ')[2].split('_');
393
- let colName;
394
- if (indexName.length === 3) {
395
- colName = indexName[1];
396
- }
397
- else {
398
- colName = indexName[0];
399
- }
400
- colName = colName.split('.')[1].replace(/"/g, '');
401
- const dropColumn = getDropColumns.find((s) => s.includes(colName));
402
- if (dropColumn) {
403
- dropIndexes.push(dropIndex);
404
- }
405
- }
406
- const sqlFiltered = sql.filter((s) => !dropIndexes.includes(s));
407
- return sqlFiltered;
408
- }
409
- async snapshotBd() {
410
- const snapshot = [];
411
- for (const [_, values] of this.entities.entries()) {
412
- const bd = await this.orm.driverInstance.snapshot(values.tableName);
413
- if (!bd) {
414
- continue;
415
- }
416
- snapshot.push(bd);
417
- }
418
- return snapshot;
419
- }
420
- async snapshotEntities() {
421
- const snapshot = [];
422
- for (const [_, values] of this.entities.entries()) {
423
- snapshot.push(await this.entities.snapshot(values));
424
- }
425
- return snapshot;
426
- }
427
- }
428
- exports.Migrator = Migrator;
429
- //# sourceMappingURL=migrator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../src/migrator/migrator.ts"],"names":[],"mappings":"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"}