@cheetah.js/cli 0.1.18 → 0.1.20

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/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import 'reflect-metadata';
package/dist/cli.js ADDED
@@ -0,0 +1,28 @@
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
+ migrator.useTsNode();
15
+ await migrator.generateMigration();
16
+ process.exit(0);
17
+ });
18
+ program
19
+ .command('migration:run')
20
+ .description('run all pending migrations')
21
+ .action(async (str, options) => {
22
+ const migrator = new migrator_1.Migrator();
23
+ migrator.useTsNode();
24
+ await migrator.migrate();
25
+ process.exit(0);
26
+ });
27
+ program.parse();
28
+ //# 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,QAAQ,CAAC,SAAS,EAAE,CAAC;IACrB,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,QAAQ,CAAC,SAAS,EAAE,CAAC;IACrB,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,2 @@
1
+ import 'reflect-metadata';
2
+ export * from './migrator/migrator';
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4BAA0B;AAE1B,sDAAoC"}
@@ -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.PgDriver;
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
+ 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
+ }
@@ -0,0 +1,418 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Migrator = void 0;
30
+ const core_1 = require("@cheetah.js/core");
31
+ const orm_1 = require("@cheetah.js/orm");
32
+ const orm_2 = require("@cheetah.js/orm");
33
+ const globby_1 = __importDefault(require("globby"));
34
+ const knex = __importStar(require("knex"));
35
+ const diff_calculator_1 = require("./diff-calculator");
36
+ const tsNode = __importStar(require("ts-node"));
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs"));
39
+ class Migrator {
40
+ constructor() {
41
+ this.entities = new orm_2.EntityStorage();
42
+ this.orm = orm_1.Orm.getInstance();
43
+ if (this.orm === undefined)
44
+ this.orm = new orm_1.Orm(new core_1.LoggerService(new core_1.InjectorService()));
45
+ this.entities = orm_2.EntityStorage.getInstance();
46
+ if (this.entities === undefined)
47
+ this.entities = new orm_2.EntityStorage();
48
+ }
49
+ async startConnection(basePath = process.cwd()) {
50
+ await this.initConfigFile(basePath);
51
+ await this.initKnex();
52
+ }
53
+ useTsNode() {
54
+ tsNode.register({
55
+ compilerOptions: {
56
+ module: 'CommonJS',
57
+ },
58
+ });
59
+ }
60
+ async initConfigFile(basePath) {
61
+ const paths = await (0, globby_1.default)(['cheetah.config.ts'], {
62
+ absolute: true,
63
+ cwd: basePath,
64
+ });
65
+ if (paths.length === 0) {
66
+ throw new Error('Config file not found');
67
+ }
68
+ const config = await Promise.resolve(`${paths[0]}`).then(s => __importStar(require(s)));
69
+ this.config = config.default;
70
+ if (typeof this.config.entities === 'string') {
71
+ const paths = await (0, globby_1.default)(this.config.entities, {
72
+ absolute: true,
73
+ cwd: basePath,
74
+ });
75
+ for (const path of paths) {
76
+ console.log(`Importing entity from: ${path}`);
77
+ await Promise.resolve(`${path}`).then(s => __importStar(require(s)));
78
+ }
79
+ }
80
+ await this.initOrm();
81
+ }
82
+ async initOrm() {
83
+ const serv = new orm_1.OrmService(this.orm, this.entities);
84
+ await serv.onInit(this.config);
85
+ }
86
+ initKnex() {
87
+ this.knex = knex.default({
88
+ client: this.config.driver === orm_1.PgDriver ? 'pg' : 'mysql',
89
+ connection: {
90
+ host: this.config.host,
91
+ user: this.config.username,
92
+ password: this.config.password,
93
+ database: this.config.database,
94
+ uri: this.config.connectionString,
95
+ },
96
+ debug: true,
97
+ });
98
+ }
99
+ async run(diff) {
100
+ const sql = [];
101
+ for (const tableDiff of diff) {
102
+ let query;
103
+ if (tableDiff.newTable) {
104
+ query = await this.createTable(tableDiff);
105
+ }
106
+ else {
107
+ query = this.knex.schema
108
+ .withSchema(tableDiff.schema)
109
+ .table(tableDiff.tableName, (builder) => {
110
+ for (const colDiff of tableDiff.colDiffs) {
111
+ if (colDiff.actionType === 'INDEX') {
112
+ colDiff.indexTables.forEach((indexTable) => {
113
+ if (typeof indexTable.properties === 'undefined') {
114
+ builder.dropIndex([], indexTable.name);
115
+ }
116
+ else {
117
+ builder.index(indexTable.properties, indexTable.name);
118
+ }
119
+ });
120
+ }
121
+ if (colDiff.actionType === 'DELETE') {
122
+ builder.dropColumn(colDiff.colName);
123
+ continue;
124
+ }
125
+ if (colDiff.actionType === 'ALTER' &&
126
+ !colDiff.colType &&
127
+ typeof colDiff.colChanges === 'undefined')
128
+ continue;
129
+ if (typeof colDiff.colChanges?.unique !== 'undefined') {
130
+ if (colDiff.colChanges?.unique) {
131
+ builder.unique([colDiff.colName], `${tableDiff.tableName}_${colDiff.colName}_key`);
132
+ }
133
+ else {
134
+ builder.dropUnique([colDiff.colName], `${tableDiff.tableName}_${colDiff.colName}_key`);
135
+ }
136
+ }
137
+ if (typeof colDiff.colChanges?.foreignKeys !== 'undefined') {
138
+ if (colDiff.colChanges.foreignKeys.length !== 0) {
139
+ colDiff.colChanges.foreignKeys.forEach((fk) => {
140
+ builder
141
+ .foreign(colDiff.colName, `${tableDiff.tableName}_${colDiff.colName}_fk`)
142
+ .references(`${fk.referencedTableName}.${fk.referencedColumnName}`);
143
+ });
144
+ }
145
+ else {
146
+ builder.dropForeign(colDiff.colName, `${tableDiff.tableName}_${colDiff.colName}_fk`);
147
+ }
148
+ }
149
+ const columnBuilder = this.assignType(builder, colDiff, tableDiff);
150
+ if (!columnBuilder)
151
+ continue;
152
+ if (colDiff.actionType === 'ALTER') {
153
+ columnBuilder.alter({ alterNullable: false });
154
+ continue;
155
+ }
156
+ }
157
+ })
158
+ .toSQL();
159
+ }
160
+ sql.push(...query.flatMap((q) => q.sql.concat(';')));
161
+ }
162
+ return sql;
163
+ }
164
+ async createTable(tableDiff) {
165
+ return await this.knex.schema
166
+ .withSchema(tableDiff.schema)
167
+ .createTable(tableDiff.tableName, (builder) => {
168
+ for (const diff of tableDiff.colDiffs) {
169
+ if (diff.actionType === 'INDEX') {
170
+ diff.indexTables.forEach((indexTable) => {
171
+ if (typeof indexTable.properties === 'undefined') {
172
+ builder.dropIndex([], indexTable.name);
173
+ }
174
+ else {
175
+ if (indexTable.name.includes('pkey')) {
176
+ return;
177
+ }
178
+ builder.index(indexTable.properties, indexTable.name);
179
+ }
180
+ });
181
+ }
182
+ if (typeof diff.colChanges?.foreignKeys !== 'undefined') {
183
+ if (diff.colChanges.foreignKeys.length !== 0) {
184
+ diff.colChanges.foreignKeys.forEach((fk) => {
185
+ builder
186
+ .foreign(diff.colName, `${tableDiff.tableName}_${diff.colName}_fk`)
187
+ .references(`${fk.referencedTableName}.${fk.referencedColumnName}`);
188
+ });
189
+ }
190
+ else {
191
+ builder.dropForeign(diff.colName, `${tableDiff.tableName}_${diff.colName}_fk`);
192
+ }
193
+ }
194
+ this.assignType(builder, diff, tableDiff);
195
+ if (typeof diff.colChanges?.unique !== 'undefined') {
196
+ if (diff.colChanges?.unique) {
197
+ builder.unique([diff.colName], `${tableDiff.tableName}_${diff.colName}_key`);
198
+ }
199
+ else {
200
+ builder.dropUnique([diff.colName], `${tableDiff.tableName}_${diff.colName}_key`);
201
+ }
202
+ }
203
+ }
204
+ })
205
+ .toSQL();
206
+ }
207
+ assignType(builder, diff, tableDiff) {
208
+ if (diff.actionType === 'ALTER') {
209
+ if (diff.colChanges?.nullable !== undefined) {
210
+ if (diff.colChanges?.nullable) {
211
+ builder.setNullable(diff.colName);
212
+ }
213
+ }
214
+ }
215
+ if (!diff.colType)
216
+ return;
217
+ const columnName = diff.colName;
218
+ const columnType = diff.colType;
219
+ let columnBuilder;
220
+ if (diff.colChanges?.autoIncrement !== undefined) {
221
+ if (diff.colChanges?.autoIncrement) {
222
+ columnBuilder = builder.increments(diff.colName, {
223
+ primaryKey: diff.colChanges?.primary,
224
+ });
225
+ }
226
+ }
227
+ else {
228
+ switch (columnType) {
229
+ case 'varchar':
230
+ columnBuilder = builder.string(columnName, diff.colLength);
231
+ break;
232
+ case 'text':
233
+ columnBuilder = builder.text(columnName);
234
+ break;
235
+ case 'int':
236
+ case 'numeric':
237
+ case 'integer':
238
+ columnBuilder = builder.integer(columnName, diff.colLength);
239
+ break;
240
+ case 'bigint':
241
+ columnBuilder = builder.bigInteger(columnName);
242
+ break;
243
+ case 'double':
244
+ case 'float4':
245
+ case 'float':
246
+ case 'decimal':
247
+ columnBuilder = builder.decimal(columnName, diff.colChanges?.precision, diff.colChanges?.scale);
248
+ break;
249
+ case 'date':
250
+ columnBuilder = builder.date(columnName);
251
+ break;
252
+ case 'datetime':
253
+ columnBuilder = builder.datetime(columnName);
254
+ break;
255
+ case 'time':
256
+ columnBuilder = builder.time(columnName);
257
+ break;
258
+ case 'timestamp':
259
+ columnBuilder = builder.timestamp(columnName, {
260
+ precision: diff.colLength,
261
+ });
262
+ break;
263
+ case 'boolean':
264
+ columnBuilder = builder.boolean(columnName);
265
+ break;
266
+ case 'json':
267
+ columnBuilder = builder.json(columnName);
268
+ break;
269
+ case 'jsonb':
270
+ columnBuilder = builder.jsonb(columnName);
271
+ break;
272
+ case 'enum':
273
+ if (diff.actionType === 'ALTER' && diff.colChanges?.enumItems) {
274
+ columnBuilder = builder
275
+ .text(columnName)
276
+ .checkIn(diff.colChanges.enumItems ?? [], `${columnName}_check`);
277
+ }
278
+ else {
279
+ columnBuilder = builder.enum(columnName, diff.colChanges.enumItems ?? []);
280
+ }
281
+ break;
282
+ case 'array':
283
+ columnBuilder = builder.specificType(columnName, 'text[]');
284
+ break;
285
+ case 'uuid':
286
+ columnBuilder = builder.uuid(columnName);
287
+ break;
288
+ default:
289
+ columnBuilder = builder.string(columnName, diff.colLength);
290
+ break;
291
+ }
292
+ }
293
+ columnBuilder.notNullable();
294
+ if (diff.colChanges?.nullable !== undefined) {
295
+ if (diff.colChanges?.nullable) {
296
+ columnBuilder.nullable();
297
+ }
298
+ }
299
+ if (diff.colChanges?.default) {
300
+ columnBuilder.defaultTo(diff.colChanges?.default);
301
+ }
302
+ if (typeof diff.colChanges?.primary !== 'undefined') {
303
+ if (diff.colChanges?.primary) {
304
+ columnBuilder.primary();
305
+ }
306
+ else {
307
+ builder.dropPrimary();
308
+ }
309
+ }
310
+ return columnBuilder;
311
+ }
312
+ async migrate() {
313
+ await this.startConnection();
314
+ const migrationTable = 'cheetah_migrations';
315
+ const migrationDirectory = path.join(process.cwd(), this.config.migrationPath ?? 'database/migrations');
316
+ const migrationFiles = fs
317
+ .readdirSync(migrationDirectory)
318
+ .filter((file) => file.endsWith('.sql'))
319
+ .sort();
320
+ if (migrationFiles.length === 0) {
321
+ this.orm.logger.info('No migration files found');
322
+ return;
323
+ }
324
+ this.orm.driverInstance.executeSql(`CREATE TABLE IF NOT EXISTS "${migrationTable}" ("migration_file" character varying(255) NOT NULL PRIMARY KEY UNIQUE);`);
325
+ const migrated = await this.orm.driverInstance.executeSql(`SELECT * FROM "${migrationTable}" ORDER BY "migration_file" ASC;`);
326
+ const lastMigration = migrated.rows[migrated.rows.length - 1];
327
+ const lastMigrationIndex = migrationFiles.indexOf(lastMigration?.migration_file ?? '');
328
+ const migrationsToExecute = migrationFiles.slice(lastMigrationIndex + 1);
329
+ if (migrationsToExecute.length === 0) {
330
+ this.orm.logger.info('Database is up to date');
331
+ return;
332
+ }
333
+ for (const migrationFile of migrationsToExecute) {
334
+ const migrationFilePath = path.join(migrationDirectory, migrationFile);
335
+ const migrationContent = fs.readFileSync(migrationFilePath, {
336
+ encoding: 'utf-8',
337
+ });
338
+ const sqlInstructions = migrationContent
339
+ .split(';')
340
+ .filter((sql) => sql.trim().length > 0);
341
+ for (const sqlInstruction of sqlInstructions) {
342
+ await this.orm.driverInstance.executeSql(sqlInstruction);
343
+ }
344
+ await this.orm.driverInstance.executeSql(`INSERT INTO "${migrationTable}" ("migration_file") VALUES ('${migrationFile}');`);
345
+ this.orm.logger.info(`Migration executed: ${migrationFile}`);
346
+ }
347
+ }
348
+ async generateMigration(configFile = process.cwd(), onlySql = false) {
349
+ await this.startConnection(configFile);
350
+ const snapshotBd = await this.snapshotBd();
351
+ const snapshotEntities = await this.snapshotEntities();
352
+ const calculator = new diff_calculator_1.DiffCalculator(this.entities, this.orm.driverInstance);
353
+ const diff = calculator.diff(snapshotBd, snapshotEntities);
354
+ const sql = this.lastTreatment(await this.run(diff));
355
+ if (onlySql) {
356
+ return sql;
357
+ }
358
+ const fs = await Promise.resolve().then(() => __importStar(require('fs')));
359
+ const path = await Promise.resolve().then(() => __importStar(require('path')));
360
+ const directory = path.join(process.cwd(), this.config.migrationPath ?? 'database/migrations');
361
+ const fileName = `migration_${new Date().toISOString().replace(/[^\d]/g, '')}` + `.sql`;
362
+ const migrationFilePath = path.join(directory, fileName);
363
+ if (!fs.existsSync(directory)) {
364
+ fs.mkdirSync(directory, { recursive: true });
365
+ }
366
+ const migrationContent = sql.join('\n');
367
+ if (migrationContent.length === 0) {
368
+ this.orm.logger.info('No changes detected');
369
+ return;
370
+ }
371
+ else {
372
+ fs.writeFileSync(migrationFilePath, migrationContent);
373
+ this.orm.logger.info(`Migration file created: ${migrationFilePath}`);
374
+ }
375
+ }
376
+ lastTreatment(sql) {
377
+ const getDropIndexes = sql.filter((s) => s.startsWith('drop index'));
378
+ const getDropColumns = sql.filter((s) => s.includes('drop column'));
379
+ const dropIndexes = [];
380
+ for (const dropIndex of getDropIndexes) {
381
+ const indexName = dropIndex.split(' ')[2].split('_');
382
+ let colName;
383
+ if (indexName.length === 3) {
384
+ colName = indexName[1];
385
+ }
386
+ else {
387
+ colName = indexName[0];
388
+ }
389
+ colName = colName.split('.')[1].replace(/"/g, '');
390
+ const dropColumn = getDropColumns.find((s) => s.includes(colName));
391
+ if (dropColumn) {
392
+ dropIndexes.push(dropIndex);
393
+ }
394
+ }
395
+ const sqlFiltered = sql.filter((s) => !dropIndexes.includes(s));
396
+ return sqlFiltered;
397
+ }
398
+ async snapshotBd() {
399
+ const snapshot = [];
400
+ for (const [_, values] of this.entities.entries()) {
401
+ const bd = await this.orm.driverInstance.snapshot(values.tableName);
402
+ if (!bd) {
403
+ continue;
404
+ }
405
+ snapshot.push(bd);
406
+ }
407
+ return snapshot;
408
+ }
409
+ async snapshotEntities() {
410
+ const snapshot = [];
411
+ for (const [_, values] of this.entities.entries()) {
412
+ snapshot.push(await this.entities.snapshot(values));
413
+ }
414
+ return snapshot;
415
+ }
416
+ }
417
+ exports.Migrator = Migrator;
418
+ //# sourceMappingURL=migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../src/migrator/migrator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkE;AAClE,yCAAgF;AAChF,yCAAgD;AAChD,oDAA4B;AAC5B,2CAA6B;AAM7B,uDAAmD;AACnD,gDAAkC;AAClC,2CAA6B;AAC7B,uCAAyB;AAmEzB,MAAa,QAAQ;IAMnB;QAHA,aAAQ,GAAkB,IAAI,mBAAa,EAAE,CAAC;QAI5C,IAAI,CAAC,GAAG,GAAG,SAAG,CAAC,WAAW,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;YACxB,IAAI,CAAC,GAAG,GAAG,IAAI,SAAG,CAAC,IAAI,oBAAa,CAAC,IAAI,sBAAe,EAAE,CAAC,CAAC,CAAC;QAE/D,IAAI,CAAC,QAAQ,GAAG,mBAAa,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAa,EAAE,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;QACpD,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,SAAS;QACP,MAAM,CAAC,QAAQ,CAAC;YACd,eAAe,EAAE;gBACf,MAAM,EAAE,UAAU;aACnB;SACF,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAgB;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAM,EAAC,CAAC,mBAAmB,CAAC,EAAE;YAChD,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,QAAQ;SACd,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,MAAM,GAAG,yBAAa,KAAK,CAAC,CAAC,CAAC,uCAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAE7B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAM,EAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC/C,QAAQ,EAAE,IAAI;gBACd,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;gBAC9C,yBAAa,IAAI,uCAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,MAAM,IAAI,GAAG,IAAI,gBAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,cAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;YACxD,UAAU,EAAE;gBACV,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAuB;aACzC;YACD,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,GAAG,CAAC,IAAiB;QACjC,MAAM,GAAG,GAAG,EAAE,CAAC;QAEf,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC;YAEV,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACvB,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;qBACrB,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC;qBAC5B,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;oBACtC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;wBACzC,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;4BACnC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gCACzC,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;oCACjD,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;gCACzC,CAAC;qCAAM,CAAC;oCACN,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;gCACxD,CAAC;4BACH,CAAC,CAAC,CAAC;wBACL,CAAC;wBAED,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;4BACpC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;4BACpC,SAAS;wBACX,CAAC;wBAED,IACE,OAAO,CAAC,UAAU,KAAK,OAAO;4BAC9B,CAAC,OAAO,CAAC,OAAO;4BAChB,OAAO,OAAO,CAAC,UAAU,KAAK,WAAW;4BAEzC,SAAS;wBAMX,IAAI,OAAO,OAAO,CAAC,UAAU,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;4BACtD,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;gCAC/B,OAAO,CAAC,MAAM,CACZ,CAAC,OAAO,CAAC,OAAO,CAAC,EACjB,GAAG,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,MAAM,CAChD,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,OAAO,CAAC,UAAU,CAChB,CAAC,OAAO,CAAC,OAAO,CAAC,EACjB,GAAG,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,MAAM,CAChD,CAAC;4BACJ,CAAC;wBACH,CAAC;wBAMD,IAAI,OAAO,OAAO,CAAC,UAAU,EAAE,WAAW,KAAK,WAAW,EAAE,CAAC;4BAC3D,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gCAChD,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oCAC5C,OAAO;yCACJ,OAAO,CACN,OAAO,CAAC,OAAO,EACf,GAAG,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,CAC/C;yCACA,UAAU,CACT,GAAG,EAAE,CAAC,mBAAmB,IAAI,EAAE,CAAC,oBAAoB,EAAE,CACvD,CAAC;gCACN,CAAC,CAAC,CAAC;4BACL,CAAC;iCAAM,CAAC;gCACN,OAAO,CAAC,WAAW,CACjB,OAAO,CAAC,OAAO,EACf,GAAG,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,CAC/C,CAAC;4BACJ,CAAC;wBACH,CAAC;wBAED,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;wBAEnE,IAAI,CAAC,aAAa;4BAAE,SAAS;wBAE7B,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;4BACnC,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;4BAC9C,SAAS;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;qBACD,KAAK,EAAE,CAAC;YACb,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,SAAoB;QAC5C,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;aAC1B,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC;aAC5B,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YAC5C,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACtC,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;oBAChC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;wBACtC,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;4BACjD,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;wBACzC,CAAC;6BAAM,CAAC;4BACN,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gCACrC,OAAO;4BACT,CAAC;4BACD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;wBACxD,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBAMD,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,WAAW,KAAK,WAAW,EAAE,CAAC;oBACxD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC7C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;4BACzC,OAAO;iCACJ,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC;iCAClE,UAAU,CACT,GAAG,EAAE,CAAC,mBAAmB,IAAI,EAAE,CAAC,oBAAoB,EAAE,CACvD,CAAC;wBACN,CAAC,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,WAAW,CACjB,IAAI,CAAC,OAAO,EACZ,GAAG,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,CAC5C,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBAE1C,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;oBACnD,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;wBAC5B,OAAO,CAAC,MAAM,CACZ,CAAC,IAAI,CAAC,OAAO,CAAC,EACd,GAAG,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,MAAM,CAC7C,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,UAAU,CAChB,CAAC,IAAI,CAAC,OAAO,CAAC,EACd,GAAG,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,MAAM,CAC7C,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC;aACD,KAAK,EAAE,CAAC;IACb,CAAC;IAED,UAAU,CACR,OAAoC,EACpC,IAAa,EACb,SAAoB;QAEpB,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;oBAC9B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,IAAI,aAAsC,CAAC;QAE3C,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,KAAK,SAAS,EAAE,CAAC;YACjD,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC;gBACnC,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;oBAC/C,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO;iBACrC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,UAAU,EAAE,CAAC;gBACnB,KAAK,SAAS;oBACZ,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,MAAM;oBACT,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACzC,MAAM;gBACR,KAAK,KAAK,CAAC;gBACX,KAAK,SAAS,CAAC;gBACf,KAAK,SAAS;oBACZ,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5D,MAAM;gBACR,KAAK,QAAQ;oBACX,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAC/C,MAAM;gBACR,KAAK,QAAQ,CAAC;gBACd,KAAK,QAAQ,CAAC;gBACd,KAAK,OAAO,CAAC;gBACb,KAAK,SAAS;oBACZ,aAAa,GAAG,OAAO,CAAC,OAAO,CAC7B,UAAU,EACV,IAAI,CAAC,UAAU,EAAE,SAAS,EAC1B,IAAI,CAAC,UAAU,EAAE,KAAK,CACvB,CAAC;oBACF,MAAM;gBACR,KAAK,MAAM;oBACT,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACzC,MAAM;gBACR,KAAK,UAAU;oBACb,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBAC7C,MAAM;gBACR,KAAK,MAAM;oBACT,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACzC,MAAM;gBACR,KAAK,WAAW;oBACd,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE;wBAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;qBAC1B,CAAC,CAAC;oBACH,MAAM;gBACR,KAAK,SAAS;oBACZ,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAC5C,MAAM;gBACR,KAAK,MAAM;oBACT,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACzC,MAAM;gBACR,KAAK,OAAO;oBACV,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAC1C,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;wBAC9D,aAAa,GAAG,OAAO;6BACpB,IAAI,CAAC,UAAU,CAAC;6BAGhB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,UAAU,QAAQ,CAAC,CAAC;oBACrE,CAAC;yBAAM,CAAC;wBACN,aAAa,GAAG,OAAO,CAAC,IAAI,CAC1B,UAAU,EACV,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,EAAE,CAChC,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,KAAK,OAAO;oBACV,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,MAAM;oBACT,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACzC,MAAM;gBACR;oBACE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC3D,MAAM;YACV,CAAC;QACH,CAAC;QAED,aAAa,CAAC,WAAW,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;gBAC9B,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YAC7B,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;gBAC7B,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,oBAAoB,CAAC;QAC5C,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAClC,OAAO,CAAC,GAAG,EAAE,EACb,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,qBAAqB,CACnD,CAAC;QACF,MAAM,cAAc,GAAG,EAAE;aACtB,WAAW,CAAC,kBAAkB,CAAC;aAC/B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACvC,IAAI,EAAE,CAAC;QAEV,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAChC,+BAA+B,cAAc,0EAA0E,CACxH,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CACvD,kBAAkB,cAAc,kCAAkC,CACnE,CAAC;QACF,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9D,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,CAC/C,aAAa,EAAE,cAAc,IAAI,EAAE,CACpC,CAAC;QACF,MAAM,mBAAmB,GAAG,cAAc,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;QAEzE,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,KAAK,MAAM,aAAa,IAAI,mBAAmB,EAAE,CAAC;YAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;YACvE,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE;gBAC1D,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YACH,MAAM,eAAe,GAAG,gBAAgB;iBACrC,KAAK,CAAC,GAAG,CAAC;iBACV,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAE1C,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;gBAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CACtC,gBAAgB,cAAc,iCAAiC,aAAa,KAAK,CAClF,CAAC;YAEF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,aAAa,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,aAAqB,OAAO,CAAC,GAAG,EAAE,EAClC,UAAmB,KAAK;QAExB,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAE3D,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAErD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC;QACb,CAAC;QAGD,MAAM,EAAE,GAAG,wDAAa,IAAI,GAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,wDAAa,MAAM,GAAC,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,OAAO,CAAC,GAAG,EAAE,EACb,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,qBAAqB,CACnD,CAAC;QACF,MAAM,QAAQ,GACZ,aAAa,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC;QACzE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,iBAAiB,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,GAAU;QAC9B,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QAGrE,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC;YAEZ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAElD,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAEnE,IAAI,UAAU,EAAE,CAAC;gBACf,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhE,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpE,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA/eD,4BA+eC"}
@@ -0,0 +1,2 @@
1
+ #!/bin/bash
2
+ node --experimental-modules ./node_modules/@cheetah.js/cli/dist/cli.js "$@"
package/package.json CHANGED
@@ -1,11 +1,13 @@
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.18",
4
+ "version": "0.1.20",
5
5
  "module": "dist/index.js",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "scripts": {
9
+ "build": "tsc && copy src\\run-cli.sh dist\\run-cli.sh",
10
+ "prepublishOnly": "npm run build",
9
11
  "lint": "eslint \"{src,apps,libs,test}/**/*.ts\""
10
12
  },
11
13
  "dependencies": {
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="WEB_MODULE" version="4">
3
- <component name="NewModuleRootManager">
4
- <content url="file://$MODULE_DIR$" />
5
- <orderEntry type="inheritedJdk" />
6
- <orderEntry type="sourceFolder" forTests="false" />
7
- </component>
8
- </module>
@@ -1,59 +0,0 @@
1
- <component name="ProjectCodeStyleConfiguration">
2
- <code_scheme name="Project" version="173">
3
- <HTMLCodeStyleSettings>
4
- <option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
5
- </HTMLCodeStyleSettings>
6
- <JSCodeStyleSettings version="0">
7
- <option name="FORCE_SEMICOLON_STYLE" value="true" />
8
- <option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
9
- <option name="USE_DOUBLE_QUOTES" value="false" />
10
- <option name="FORCE_QUOTE_STYlE" value="true" />
11
- <option name="ENFORCE_TRAILING_COMMA" value="WhenMultiline" />
12
- <option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
13
- <option name="SPACES_WITHIN_IMPORTS" value="true" />
14
- </JSCodeStyleSettings>
15
- <TypeScriptCodeStyleSettings version="0">
16
- <option name="FORCE_SEMICOLON_STYLE" value="true" />
17
- <option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
18
- <option name="USE_DOUBLE_QUOTES" value="false" />
19
- <option name="FORCE_QUOTE_STYlE" value="true" />
20
- <option name="ENFORCE_TRAILING_COMMA" value="WhenMultiline" />
21
- <option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
22
- <option name="SPACES_WITHIN_IMPORTS" value="true" />
23
- </TypeScriptCodeStyleSettings>
24
- <VueCodeStyleSettings>
25
- <option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" />
26
- <option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" />
27
- </VueCodeStyleSettings>
28
- <codeStyleSettings language="HTML">
29
- <option name="SOFT_MARGINS" value="85" />
30
- <indentOptions>
31
- <option name="INDENT_SIZE" value="2" />
32
- <option name="CONTINUATION_INDENT_SIZE" value="2" />
33
- <option name="TAB_SIZE" value="2" />
34
- </indentOptions>
35
- </codeStyleSettings>
36
- <codeStyleSettings language="JavaScript">
37
- <option name="SOFT_MARGINS" value="85" />
38
- <indentOptions>
39
- <option name="INDENT_SIZE" value="2" />
40
- <option name="CONTINUATION_INDENT_SIZE" value="2" />
41
- <option name="TAB_SIZE" value="2" />
42
- </indentOptions>
43
- </codeStyleSettings>
44
- <codeStyleSettings language="TypeScript">
45
- <option name="SOFT_MARGINS" value="85" />
46
- <indentOptions>
47
- <option name="INDENT_SIZE" value="2" />
48
- <option name="CONTINUATION_INDENT_SIZE" value="2" />
49
- <option name="TAB_SIZE" value="2" />
50
- </indentOptions>
51
- </codeStyleSettings>
52
- <codeStyleSettings language="Vue">
53
- <option name="SOFT_MARGINS" value="85" />
54
- <indentOptions>
55
- <option name="CONTINUATION_INDENT_SIZE" value="2" />
56
- </indentOptions>
57
- </codeStyleSettings>
58
- </code_scheme>
59
- </component>
@@ -1,5 +0,0 @@
1
- <component name="ProjectCodeStyleConfiguration">
2
- <state>
3
- <option name="USE_PER_PROJECT_SETTINGS" value="true" />
4
- </state>
5
- </component>
@@ -1,6 +0,0 @@
1
- <component name="InspectionProjectProfileManager">
2
- <profile version="1.0">
3
- <option name="myName" value="Project Default" />
4
- <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
5
- </profile>
6
- </component>
package/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/cheetah-cli.iml" filepath="$PROJECT_DIR$/.idea/cheetah-cli.iml" />
6
- </modules>
7
- </component>
8
- </project>
package/.idea/php.xml DELETED
@@ -1,19 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="MessDetectorOptionsConfiguration">
4
- <option name="transferred" value="true" />
5
- </component>
6
- <component name="PHPCSFixerOptionsConfiguration">
7
- <option name="transferred" value="true" />
8
- </component>
9
- <component name="PHPCodeSnifferOptionsConfiguration">
10
- <option name="highlightLevel" value="WARNING" />
11
- <option name="transferred" value="true" />
12
- </component>
13
- <component name="PhpStanOptionsConfiguration">
14
- <option name="transferred" value="true" />
15
- </component>
16
- <component name="PsalmOptionsConfiguration">
17
- <option name="transferred" value="true" />
18
- </component>
19
- </project>
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="PrettierConfiguration">
4
- <option name="myConfigurationMode" value="AUTOMATIC" />
5
- </component>
6
- </project>
package/.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="" vcs="Git" />
5
- </component>
6
- </project>