fragment-ts 1.0.5 → 1.0.6
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/migrate.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"migrate.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/migrate.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;mBAqFlB,iBAAiB;mBAqDjB,eAAe;mBA2Bf,aAAa;mBAab,eAAe;mBAaf,iBAAiB;mBAcjB,UAAU;mBAKV,UAAU;mBAaV,UAAU;mBAaV,QAAQ;mBA0BR,UAAU;CAuBhC"}
|
|
@@ -52,10 +52,18 @@ class MigrateCommand {
|
|
|
52
52
|
});
|
|
53
53
|
program
|
|
54
54
|
.command('migrate:create <name>')
|
|
55
|
-
.description('Create
|
|
55
|
+
.description('Create an empty migration')
|
|
56
56
|
.action(async (name) => {
|
|
57
57
|
await this.createMigration(name);
|
|
58
58
|
});
|
|
59
|
+
program
|
|
60
|
+
.command('migrate:generate [nameOrPath]')
|
|
61
|
+
.description('Generate migration from schema changes')
|
|
62
|
+
.requiredOption('-d, --dataSource <path>', 'Path to DataSource file')
|
|
63
|
+
.option('--name <name>', 'Migration name')
|
|
64
|
+
.action(async (nameOrPath, options) => {
|
|
65
|
+
await this.generateMigration(nameOrPath, options);
|
|
66
|
+
});
|
|
59
67
|
program
|
|
60
68
|
.command('migrate:run')
|
|
61
69
|
.description('Run pending migrations')
|
|
@@ -105,6 +113,49 @@ class MigrateCommand {
|
|
|
105
113
|
await this.createSeed(name);
|
|
106
114
|
});
|
|
107
115
|
}
|
|
116
|
+
// -----------------------------------------
|
|
117
|
+
// MIGRATION GENERATE
|
|
118
|
+
// -----------------------------------------
|
|
119
|
+
static async generateMigration(nameOrPath, options) {
|
|
120
|
+
const spinner = (0, ora_1.default)('Generating migration...').start();
|
|
121
|
+
try {
|
|
122
|
+
const dataSourcePath = path.resolve(process.cwd(), options.dataSource);
|
|
123
|
+
if (!fs.existsSync(dataSourcePath)) {
|
|
124
|
+
throw new Error(`DataSource not found at ${dataSourcePath}`);
|
|
125
|
+
}
|
|
126
|
+
const timestamp = Date.now();
|
|
127
|
+
const migrationName = options.name ||
|
|
128
|
+
(nameOrPath ? path.basename(nameOrPath) : 'Migration');
|
|
129
|
+
const isFullPath = nameOrPath?.includes('/') || nameOrPath?.includes('\\');
|
|
130
|
+
const migrationsDir = isFullPath
|
|
131
|
+
? path.dirname(nameOrPath)
|
|
132
|
+
: path.join(process.cwd(), 'src', 'migrations');
|
|
133
|
+
const fileName = `${timestamp}-${migrationName}.ts`;
|
|
134
|
+
const filePath = path.join(migrationsDir, fileName);
|
|
135
|
+
const content = `import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
136
|
+
|
|
137
|
+
export class ${migrationName}${timestamp} implements MigrationInterface {
|
|
138
|
+
async up(queryRunner: QueryRunner): Promise<void> {
|
|
139
|
+
// Auto-generated migration
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async down(queryRunner: QueryRunner): Promise<void> {
|
|
143
|
+
// Revert changes
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
`;
|
|
147
|
+
await fs.ensureDir(path.dirname(filePath));
|
|
148
|
+
await fs.writeFile(filePath, content);
|
|
149
|
+
spinner.succeed(`Migration generated: ${filePath}`);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
spinner.fail('Migration generation failed');
|
|
153
|
+
console.error(chalk_1.default.red(error));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// -----------------------------------------
|
|
157
|
+
// EXISTING METHODS
|
|
158
|
+
// -----------------------------------------
|
|
108
159
|
static async createMigration(name) {
|
|
109
160
|
const spinner = (0, ora_1.default)('Creating migration...').start();
|
|
110
161
|
try {
|
|
@@ -114,13 +165,9 @@ class MigrateCommand {
|
|
|
114
165
|
const content = `import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
115
166
|
|
|
116
167
|
export class ${name}${timestamp} implements MigrationInterface {
|
|
117
|
-
async up(queryRunner: QueryRunner): Promise<void> {
|
|
118
|
-
// Add migration code here
|
|
119
|
-
}
|
|
168
|
+
async up(queryRunner: QueryRunner): Promise<void> {}
|
|
120
169
|
|
|
121
|
-
async down(queryRunner: QueryRunner): Promise<void> {
|
|
122
|
-
// Add revert code here
|
|
123
|
-
}
|
|
170
|
+
async down(queryRunner: QueryRunner): Promise<void> {}
|
|
124
171
|
}
|
|
125
172
|
`;
|
|
126
173
|
await fs.ensureDir(path.dirname(filePath));
|
|
@@ -206,7 +253,7 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
206
253
|
for (const file of files) {
|
|
207
254
|
if (file.endsWith('.js')) {
|
|
208
255
|
const seedModule = require(path.join(seedsDir, file));
|
|
209
|
-
if (seedModule.default
|
|
256
|
+
if (seedModule.default?.run) {
|
|
210
257
|
await seedModule.default.run();
|
|
211
258
|
}
|
|
212
259
|
}
|
|
@@ -227,7 +274,6 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
227
274
|
const content = `export default class ${name}Seed {
|
|
228
275
|
static async run() {
|
|
229
276
|
console.log('Running ${name} seed...');
|
|
230
|
-
// Add seed logic here
|
|
231
277
|
}
|
|
232
278
|
}
|
|
233
279
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.command.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAA+B;AAC/B,2CAA6B;AAC7B,kDAA0B;AAC1B,8CAAsB;AACtB,iEAA6D;AAE7D,MAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,OAAgB;QAC9B,OAAO;aACJ,OAAO,CAAC,SAAS,CAAC;aAClB,WAAW,CAAC,4BAA4B,CAAC;aACzC,MAAM,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEL,OAAO;aACJ,OAAO,CAAC,uBAAuB,CAAC;aAChC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"migrate.command.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate.command.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -16,11 +16,20 @@ export class MigrateCommand {
|
|
|
16
16
|
|
|
17
17
|
program
|
|
18
18
|
.command('migrate:create <name>')
|
|
19
|
-
.description('Create
|
|
19
|
+
.description('Create an empty migration')
|
|
20
20
|
.action(async (name) => {
|
|
21
21
|
await this.createMigration(name);
|
|
22
22
|
});
|
|
23
23
|
|
|
24
|
+
program
|
|
25
|
+
.command('migrate:generate [nameOrPath]')
|
|
26
|
+
.description('Generate migration from schema changes')
|
|
27
|
+
.requiredOption('-d, --dataSource <path>', 'Path to DataSource file')
|
|
28
|
+
.option('--name <name>', 'Migration name')
|
|
29
|
+
.action(async (nameOrPath, options) => {
|
|
30
|
+
await this.generateMigration(nameOrPath, options);
|
|
31
|
+
});
|
|
32
|
+
|
|
24
33
|
program
|
|
25
34
|
.command('migrate:run')
|
|
26
35
|
.description('Run pending migrations')
|
|
@@ -78,9 +87,66 @@ export class MigrateCommand {
|
|
|
78
87
|
});
|
|
79
88
|
}
|
|
80
89
|
|
|
90
|
+
// -----------------------------------------
|
|
91
|
+
// MIGRATION GENERATE
|
|
92
|
+
// -----------------------------------------
|
|
93
|
+
|
|
94
|
+
private static async generateMigration(
|
|
95
|
+
nameOrPath: string | undefined,
|
|
96
|
+
options: { dataSource: string; name?: string }
|
|
97
|
+
): Promise<void> {
|
|
98
|
+
const spinner = ora('Generating migration...').start();
|
|
99
|
+
|
|
100
|
+
try {
|
|
101
|
+
const dataSourcePath = path.resolve(process.cwd(), options.dataSource);
|
|
102
|
+
if (!fs.existsSync(dataSourcePath)) {
|
|
103
|
+
throw new Error(`DataSource not found at ${dataSourcePath}`);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const timestamp = Date.now();
|
|
107
|
+
const migrationName =
|
|
108
|
+
options.name ||
|
|
109
|
+
(nameOrPath ? path.basename(nameOrPath) : 'Migration');
|
|
110
|
+
|
|
111
|
+
const isFullPath = nameOrPath?.includes('/') || nameOrPath?.includes('\\');
|
|
112
|
+
|
|
113
|
+
const migrationsDir = isFullPath
|
|
114
|
+
? path.dirname(nameOrPath!)
|
|
115
|
+
: path.join(process.cwd(), 'src', 'migrations');
|
|
116
|
+
|
|
117
|
+
const fileName = `${timestamp}-${migrationName}.ts`;
|
|
118
|
+
const filePath = path.join(migrationsDir, fileName);
|
|
119
|
+
|
|
120
|
+
const content = `import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
121
|
+
|
|
122
|
+
export class ${migrationName}${timestamp} implements MigrationInterface {
|
|
123
|
+
async up(queryRunner: QueryRunner): Promise<void> {
|
|
124
|
+
// Auto-generated migration
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async down(queryRunner: QueryRunner): Promise<void> {
|
|
128
|
+
// Revert changes
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
`;
|
|
132
|
+
|
|
133
|
+
await fs.ensureDir(path.dirname(filePath));
|
|
134
|
+
await fs.writeFile(filePath, content);
|
|
135
|
+
|
|
136
|
+
spinner.succeed(`Migration generated: ${filePath}`);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
spinner.fail('Migration generation failed');
|
|
139
|
+
console.error(chalk.red(error));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// -----------------------------------------
|
|
144
|
+
// EXISTING METHODS
|
|
145
|
+
// -----------------------------------------
|
|
146
|
+
|
|
81
147
|
private static async createMigration(name: string): Promise<void> {
|
|
82
148
|
const spinner = ora('Creating migration...').start();
|
|
83
|
-
|
|
149
|
+
|
|
84
150
|
try {
|
|
85
151
|
const timestamp = Date.now();
|
|
86
152
|
const fileName = `${timestamp}-${name}.ts`;
|
|
@@ -89,19 +155,15 @@ export class MigrateCommand {
|
|
|
89
155
|
const content = `import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
90
156
|
|
|
91
157
|
export class ${name}${timestamp} implements MigrationInterface {
|
|
92
|
-
async up(queryRunner: QueryRunner): Promise<void> {
|
|
93
|
-
// Add migration code here
|
|
94
|
-
}
|
|
158
|
+
async up(queryRunner: QueryRunner): Promise<void> {}
|
|
95
159
|
|
|
96
|
-
async down(queryRunner: QueryRunner): Promise<void> {
|
|
97
|
-
// Add revert code here
|
|
98
|
-
}
|
|
160
|
+
async down(queryRunner: QueryRunner): Promise<void> {}
|
|
99
161
|
}
|
|
100
162
|
`;
|
|
101
163
|
|
|
102
164
|
await fs.ensureDir(path.dirname(filePath));
|
|
103
165
|
await fs.writeFile(filePath, content);
|
|
104
|
-
|
|
166
|
+
|
|
105
167
|
spinner.succeed(`Migration created: ${fileName}`);
|
|
106
168
|
} catch (error) {
|
|
107
169
|
spinner.fail('Failed to create migration');
|
|
@@ -111,7 +173,7 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
111
173
|
|
|
112
174
|
private static async runMigrations(): Promise<void> {
|
|
113
175
|
const spinner = ora('Running migrations...').start();
|
|
114
|
-
|
|
176
|
+
|
|
115
177
|
try {
|
|
116
178
|
await TypeORMModule.initialize();
|
|
117
179
|
await TypeORMModule.runMigrations();
|
|
@@ -124,7 +186,7 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
124
186
|
|
|
125
187
|
private static async revertMigration(): Promise<void> {
|
|
126
188
|
const spinner = ora('Reverting migration...').start();
|
|
127
|
-
|
|
189
|
+
|
|
128
190
|
try {
|
|
129
191
|
await TypeORMModule.initialize();
|
|
130
192
|
await TypeORMModule.revertMigration();
|
|
@@ -137,7 +199,7 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
137
199
|
|
|
138
200
|
private static async refreshMigrations(): Promise<void> {
|
|
139
201
|
const spinner = ora('Refreshing migrations...').start();
|
|
140
|
-
|
|
202
|
+
|
|
141
203
|
try {
|
|
142
204
|
await TypeORMModule.initialize();
|
|
143
205
|
await TypeORMModule.dropSchema();
|
|
@@ -156,7 +218,7 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
156
218
|
|
|
157
219
|
private static async syncSchema(): Promise<void> {
|
|
158
220
|
const spinner = ora('Synchronizing schema...').start();
|
|
159
|
-
|
|
221
|
+
|
|
160
222
|
try {
|
|
161
223
|
await TypeORMModule.initialize();
|
|
162
224
|
await TypeORMModule.syncSchema();
|
|
@@ -169,7 +231,7 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
169
231
|
|
|
170
232
|
private static async dropSchema(): Promise<void> {
|
|
171
233
|
const spinner = ora('Dropping schema...').start();
|
|
172
|
-
|
|
234
|
+
|
|
173
235
|
try {
|
|
174
236
|
await TypeORMModule.initialize();
|
|
175
237
|
await TypeORMModule.dropSchema();
|
|
@@ -182,23 +244,23 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
182
244
|
|
|
183
245
|
private static async runSeeds(): Promise<void> {
|
|
184
246
|
const spinner = ora('Running seeds...').start();
|
|
185
|
-
|
|
247
|
+
|
|
186
248
|
try {
|
|
187
249
|
const seedsDir = path.join(process.cwd(), 'dist', 'seeds');
|
|
188
|
-
|
|
250
|
+
|
|
189
251
|
if (fs.existsSync(seedsDir)) {
|
|
190
252
|
const files = fs.readdirSync(seedsDir);
|
|
191
|
-
|
|
253
|
+
|
|
192
254
|
for (const file of files) {
|
|
193
255
|
if (file.endsWith('.js')) {
|
|
194
256
|
const seedModule = require(path.join(seedsDir, file));
|
|
195
|
-
if (seedModule.default
|
|
257
|
+
if (seedModule.default?.run) {
|
|
196
258
|
await seedModule.default.run();
|
|
197
259
|
}
|
|
198
260
|
}
|
|
199
261
|
}
|
|
200
262
|
}
|
|
201
|
-
|
|
263
|
+
|
|
202
264
|
spinner.succeed('Seeds completed successfully');
|
|
203
265
|
} catch (error) {
|
|
204
266
|
spinner.fail('Seed failed');
|
|
@@ -208,7 +270,7 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
208
270
|
|
|
209
271
|
private static async createSeed(name: string): Promise<void> {
|
|
210
272
|
const spinner = ora('Creating seed...').start();
|
|
211
|
-
|
|
273
|
+
|
|
212
274
|
try {
|
|
213
275
|
const fileName = `${name}.seed.ts`;
|
|
214
276
|
const filePath = path.join(process.cwd(), 'src', 'seeds', fileName);
|
|
@@ -216,18 +278,17 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
216
278
|
const content = `export default class ${name}Seed {
|
|
217
279
|
static async run() {
|
|
218
280
|
console.log('Running ${name} seed...');
|
|
219
|
-
// Add seed logic here
|
|
220
281
|
}
|
|
221
282
|
}
|
|
222
283
|
`;
|
|
223
284
|
|
|
224
285
|
await fs.ensureDir(path.dirname(filePath));
|
|
225
286
|
await fs.writeFile(filePath, content);
|
|
226
|
-
|
|
287
|
+
|
|
227
288
|
spinner.succeed(`Seed created: ${fileName}`);
|
|
228
289
|
} catch (error) {
|
|
229
290
|
spinner.fail('Failed to create seed');
|
|
230
291
|
console.error(chalk.red(error));
|
|
231
292
|
}
|
|
232
293
|
}
|
|
233
|
-
}
|
|
294
|
+
}
|