fragment-ts 1.0.45 → 1.0.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -91
- package/dist/cli/commands/build.command.d.ts.map +1 -1
- package/dist/cli/commands/build.command.js +12 -19
- package/dist/cli/commands/build.command.js.map +1 -1
- package/dist/cli/commands/diagnostics.command.d.ts.map +1 -1
- package/dist/cli/commands/diagnostics.command.js +68 -14
- package/dist/cli/commands/diagnostics.command.js.map +1 -1
- package/dist/cli/commands/env.config.d.ts +10 -0
- package/dist/cli/commands/env.config.d.ts.map +1 -0
- package/dist/cli/commands/env.config.js +202 -0
- package/dist/cli/commands/env.config.js.map +1 -0
- package/dist/cli/commands/generate.command.js +9 -9
- package/dist/cli/commands/init.command.d.ts.map +1 -1
- package/dist/cli/commands/init.command.js +16 -59
- package/dist/cli/commands/init.command.js.map +1 -1
- package/dist/cli/commands/migrate.command.d.ts +5 -4
- package/dist/cli/commands/migrate.command.d.ts.map +1 -1
- package/dist/cli/commands/migrate.command.js +34 -9
- package/dist/cli/commands/migrate.command.js.map +1 -1
- package/dist/cli/commands/serve.command.d.ts.map +1 -1
- package/dist/cli/commands/serve.command.js +74 -38
- package/dist/cli/commands/serve.command.js.map +1 -1
- package/dist/cli/commands/test.command.d.ts.map +1 -1
- package/dist/cli/commands/test.command.js +21 -9
- package/dist/cli/commands/test.command.js.map +1 -1
- package/dist/cli/index.js +3 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/core/scanner/component-scanner.d.ts +4 -0
- package/dist/core/scanner/component-scanner.d.ts.map +1 -1
- package/dist/core/scanner/component-scanner.js +15 -0
- package/dist/core/scanner/component-scanner.js.map +1 -1
- package/dist/shared/config.utils.d.ts +2 -3
- package/dist/shared/config.utils.d.ts.map +1 -1
- package/dist/shared/config.utils.js +2 -3
- package/dist/shared/config.utils.js.map +1 -1
- package/dist/shared/env.utils.d.ts +6 -6
- package/dist/shared/env.utils.d.ts.map +1 -1
- package/dist/shared/env.utils.js +25 -84
- package/dist/shared/env.utils.js.map +1 -1
- package/dist/testing/runner.d.ts.map +1 -1
- package/dist/testing/runner.js +12 -2
- package/dist/testing/runner.js.map +1 -1
- package/dist/typeorm/typeorm-module.d.ts.map +1 -1
- package/dist/typeorm/typeorm-module.js +3 -6
- package/dist/typeorm/typeorm-module.js.map +1 -1
- package/dist/web/application.d.ts.map +1 -1
- package/dist/web/application.js +20 -1
- package/dist/web/application.js.map +1 -1
- package/examples/blog-api/package-lock.json +0 -38
- package/package.json +3 -3
- package/src/cli/commands/build.command.ts +13 -29
- package/src/cli/commands/diagnostics.command.ts +74 -13
- package/src/cli/commands/{env.command.ts → env.config.ts} +9 -32
- package/src/cli/commands/generate.command.ts +9 -9
- package/src/cli/commands/init.command.ts +17 -63
- package/src/cli/commands/migrate.command.ts +37 -9
- package/src/cli/commands/serve.command.ts +205 -170
- package/src/cli/commands/test.command.ts +30 -8
- package/src/cli/index.ts +3 -12
- package/src/core/scanner/component-scanner.ts +15 -0
- package/src/shared/config.utils.ts +5 -6
- package/src/shared/env.utils.ts +27 -55
- package/src/testing/runner.ts +11 -2
- package/src/typeorm/typeorm-module.ts +4 -18
- package/src/web/application.ts +21 -1
|
@@ -0,0 +1,202 @@
|
|
|
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.EnvCommand = void 0;
|
|
40
|
+
const fs = __importStar(require("fs-extra"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const diff_1 = require("diff");
|
|
44
|
+
class EnvCommand {
|
|
45
|
+
static register(program) {
|
|
46
|
+
const envCmd = program
|
|
47
|
+
.command("env")
|
|
48
|
+
.description("Manage environment configuration files");
|
|
49
|
+
envCmd
|
|
50
|
+
.command("env:use <envFile>")
|
|
51
|
+
.description("Activate an environment by copying it to .env")
|
|
52
|
+
.action((envFile) => {
|
|
53
|
+
this.useEnv(envFile);
|
|
54
|
+
});
|
|
55
|
+
envCmd
|
|
56
|
+
.command("env:list")
|
|
57
|
+
.description("List all available .env files")
|
|
58
|
+
.action(() => {
|
|
59
|
+
this.listEnvs();
|
|
60
|
+
});
|
|
61
|
+
envCmd
|
|
62
|
+
.command("env:current")
|
|
63
|
+
.description("Show the currently active environment")
|
|
64
|
+
.action(() => {
|
|
65
|
+
this.currentEnv();
|
|
66
|
+
});
|
|
67
|
+
envCmd
|
|
68
|
+
.command("env:diff [envFile]")
|
|
69
|
+
.description("Compare .env with another env file (default: .env.example)")
|
|
70
|
+
.action((envFile = ".env.example") => {
|
|
71
|
+
this.diffEnv(envFile);
|
|
72
|
+
});
|
|
73
|
+
envCmd
|
|
74
|
+
.command("env:init")
|
|
75
|
+
.description("Initialize .env from .env.example if missing")
|
|
76
|
+
.action(() => {
|
|
77
|
+
this.initEnv();
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
static useEnv(envFile) {
|
|
81
|
+
const cwd = process.cwd();
|
|
82
|
+
const sourcePath = path.join(cwd, envFile);
|
|
83
|
+
const targetPath = path.join(cwd, ".env");
|
|
84
|
+
if (!fs.existsSync(sourcePath)) {
|
|
85
|
+
console.error(chalk_1.default.red(`❌ Source file not found: ${envFile}`));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
// Backup current .env if it exists and differs
|
|
89
|
+
if (fs.existsSync(targetPath)) {
|
|
90
|
+
const sourceContent = fs.readFileSync(sourcePath, "utf8");
|
|
91
|
+
const targetContent = fs.readFileSync(targetPath, "utf8");
|
|
92
|
+
if (sourceContent !== targetContent) {
|
|
93
|
+
fs.copyFileSync(targetPath, path.join(cwd, ".env.backup"));
|
|
94
|
+
console.log(chalk_1.default.gray("📎 Backed up current .env to .env.backup"));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
fs.copyFileSync(sourcePath, targetPath);
|
|
98
|
+
console.log(chalk_1.default.green(`✅ Environment activated: ${chalk_1.default.bold(envFile)}`));
|
|
99
|
+
console.log(chalk_1.default.gray(` → Copied to .env`));
|
|
100
|
+
}
|
|
101
|
+
static listEnvs() {
|
|
102
|
+
const cwd = process.cwd();
|
|
103
|
+
try {
|
|
104
|
+
const files = fs.readdirSync(cwd);
|
|
105
|
+
const envFiles = files
|
|
106
|
+
.filter((file) => /^\.env(\..*)?$/.test(file))
|
|
107
|
+
.sort();
|
|
108
|
+
if (envFiles.length === 0) {
|
|
109
|
+
console.log(chalk_1.default.yellow("No .env files found in project root."));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
console.log(chalk_1.default.blue("\nAvailable environment files:"));
|
|
113
|
+
envFiles.forEach((file) => {
|
|
114
|
+
const isActive = file === ".env" ? " ← active" : "";
|
|
115
|
+
console.log(` ${chalk_1.default.cyan(file)}${isActive}`);
|
|
116
|
+
});
|
|
117
|
+
console.log();
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
console.error(chalk_1.default.red("Failed to read directory"));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
static currentEnv() {
|
|
124
|
+
const cwd = process.cwd();
|
|
125
|
+
const envPath = path.join(cwd, ".env");
|
|
126
|
+
if (!fs.existsSync(envPath)) {
|
|
127
|
+
console.log(chalk_1.default.yellow("No .env file found. Run `fragment env:init` to create one."));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const envContent = fs.readFileSync(envPath, "utf8");
|
|
131
|
+
const files = fs.readdirSync(cwd).filter((f) => /^\.env\..+$/.test(f));
|
|
132
|
+
for (const file of files) {
|
|
133
|
+
const fullPath = path.join(cwd, file);
|
|
134
|
+
try {
|
|
135
|
+
const content = fs.readFileSync(fullPath, "utf8");
|
|
136
|
+
if (content === envContent) {
|
|
137
|
+
const name = file.replace(/\.env\./, "");
|
|
138
|
+
console.log(chalk_1.default.green(`Active environment: ${chalk_1.default.bold(name)}`));
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// skip
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
console.log(chalk_1.default.gray("Active environment: custom/local (modified)"));
|
|
147
|
+
}
|
|
148
|
+
static diffEnv(envFile) {
|
|
149
|
+
const cwd = process.cwd();
|
|
150
|
+
const currentPath = path.join(cwd, ".env");
|
|
151
|
+
const comparePath = path.join(cwd, envFile);
|
|
152
|
+
if (!fs.existsSync(currentPath)) {
|
|
153
|
+
console.error(chalk_1.default.red("❌ No .env file found. Run `fragment env:init` first."));
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
if (!fs.existsSync(comparePath)) {
|
|
157
|
+
console.error(chalk_1.default.red(`❌ Comparison file not found: ${envFile}`));
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
const currentContent = fs.readFileSync(currentPath, "utf8");
|
|
161
|
+
const compareContent = fs.readFileSync(comparePath, "utf8");
|
|
162
|
+
const diffs = (0, diff_1.diffLines)(compareContent, currentContent);
|
|
163
|
+
if (diffs.length === 1 && !diffs[0].added && !diffs[0].removed) {
|
|
164
|
+
console.log(chalk_1.default.green(`✅ .env matches ${envFile} exactly.`));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
console.log(chalk_1.default.blue(`\nChanges between ${chalk_1.default.bold(envFile)} → .env:\n`));
|
|
168
|
+
diffs.forEach((part) => {
|
|
169
|
+
const color = part.added
|
|
170
|
+
? chalk_1.default.green
|
|
171
|
+
: part.removed
|
|
172
|
+
? chalk_1.default.red
|
|
173
|
+
: chalk_1.default.gray;
|
|
174
|
+
const prefix = part.added ? "+ " : part.removed ? "- " : " ";
|
|
175
|
+
const lines = part.value.split("\n").slice(0, -1);
|
|
176
|
+
lines.forEach((line) => {
|
|
177
|
+
console.log(color(prefix + line));
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
console.log();
|
|
181
|
+
}
|
|
182
|
+
static initEnv() {
|
|
183
|
+
const cwd = process.cwd();
|
|
184
|
+
const examplePath = path.join(cwd, ".env.example");
|
|
185
|
+
const envPath = path.join(cwd, ".env");
|
|
186
|
+
if (fs.existsSync(envPath)) {
|
|
187
|
+
console.log(chalk_1.default.yellow("⚠️ .env already exists. Skipping initialization."));
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (!fs.existsSync(examplePath)) {
|
|
191
|
+
console.log(chalk_1.default.gray("📝 Creating empty .env (no .env.example found)"));
|
|
192
|
+
fs.writeFileSync(envPath, "# Environment variables\n", "utf8");
|
|
193
|
+
console.log(chalk_1.default.green("✅ Created empty .env"));
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
fs.copyFileSync(examplePath, envPath);
|
|
197
|
+
console.log(chalk_1.default.green("✅ Initialized .env from .env.example"));
|
|
198
|
+
console.log(chalk_1.default.gray(" Edit .env with your local settings."));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
exports.EnvCommand = EnvCommand;
|
|
202
|
+
//# sourceMappingURL=env.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.config.js","sourceRoot":"","sources":["../../../src/cli/commands/env.config.ts"],"names":[],"mappings":"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"}
|
|
@@ -195,21 +195,21 @@ export class ${className} {${repositoryProp}
|
|
|
195
195
|
const fileName = this.kebabCase(name) + ".entity.ts";
|
|
196
196
|
const srcDir = tsconfig_utils_1.TsConfigUtils.getRootDir();
|
|
197
197
|
const filePath = path.join(srcDir, "entities", fileName);
|
|
198
|
-
const content = `import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from '
|
|
198
|
+
const content = `import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';
|
|
199
199
|
|
|
200
200
|
@Entity()
|
|
201
201
|
export class ${className} {
|
|
202
202
|
@PrimaryGeneratedColumn()
|
|
203
|
-
id
|
|
203
|
+
id: number;
|
|
204
204
|
|
|
205
|
-
@Column(
|
|
206
|
-
name
|
|
205
|
+
@Column()
|
|
206
|
+
name: string;
|
|
207
207
|
|
|
208
|
-
@CreateDateColumn(
|
|
209
|
-
createdAt
|
|
208
|
+
@CreateDateColumn()
|
|
209
|
+
createdAt: Date;
|
|
210
210
|
|
|
211
|
-
@UpdateDateColumn(
|
|
212
|
-
updatedAt
|
|
211
|
+
@UpdateDateColumn()
|
|
212
|
+
updatedAt: Date;
|
|
213
213
|
}
|
|
214
214
|
`;
|
|
215
215
|
await fs.ensureDir(path.dirname(filePath));
|
|
@@ -235,7 +235,7 @@ export class ${className} {
|
|
|
235
235
|
const filePath = path.join(srcDir, "repositories", fileName);
|
|
236
236
|
const content = `import { Repository, InjectRepository } from 'fragment-ts';
|
|
237
237
|
import { ${entityName} } from '../entities/${this.kebabCase(name)}.entity';
|
|
238
|
-
import { Repository as TypeOrmRepository } from '
|
|
238
|
+
import { Repository as TypeOrmRepository } from 'typeorm';
|
|
239
239
|
|
|
240
240
|
@Repository()
|
|
241
241
|
export class ${className} {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,qBAAa,WAAW;IACtB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;WAe1B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"init.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,qBAAa,WAAW;IACtB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;WAe1B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;mBAsF/C,wBAAwB;mBAgDxB,iBAAiB;mBA+FjB,gBAAgB;mBA+BhB,yBAAyB;mBA6BzB,sBAAsB;mBAmBtB,qBAAqB;mBA8BrB,iBAAiB;mBAgDjB,mBAAmB;CA4BzC"}
|
|
@@ -121,7 +121,6 @@ class InitCommand {
|
|
|
121
121
|
if (options.skipInstall) {
|
|
122
122
|
console.log(chalk_1.default.cyan(" npm install"));
|
|
123
123
|
}
|
|
124
|
-
console.log(chalk_1.default.cyan(" fragment env:init"));
|
|
125
124
|
console.log(chalk_1.default.cyan(" fragment serve"));
|
|
126
125
|
console.log("");
|
|
127
126
|
}
|
|
@@ -184,7 +183,7 @@ class InitCommand {
|
|
|
184
183
|
"migrate:revert": "fragment migrate:revert",
|
|
185
184
|
},
|
|
186
185
|
dependencies: {
|
|
187
|
-
"fragment-ts": "^1.0.
|
|
186
|
+
"fragment-ts": "^1.0.47",
|
|
188
187
|
"reflect-metadata": "^0.1.13",
|
|
189
188
|
},
|
|
190
189
|
devDependencies: {
|
|
@@ -217,7 +216,7 @@ class InitCommand {
|
|
|
217
216
|
await fs.writeJSON(path.join(projectPath, "tsconfig.json"), tsConfig, {
|
|
218
217
|
spaces: 2,
|
|
219
218
|
});
|
|
220
|
-
//
|
|
219
|
+
// In InitCommand.createConfigFiles()
|
|
221
220
|
const fragmentConfig = {};
|
|
222
221
|
if (features.includes("database")) {
|
|
223
222
|
fragmentConfig.database = {
|
|
@@ -227,63 +226,21 @@ class InitCommand {
|
|
|
227
226
|
logging: false,
|
|
228
227
|
entities: ["src/**/*.entity.ts"],
|
|
229
228
|
migrations: ["src/migrations/**/*.ts"],
|
|
230
|
-
subscribers: [],
|
|
231
229
|
};
|
|
232
230
|
}
|
|
233
|
-
await fs.writeJSON(path.join(projectPath, "fragment.json"), fragmentConfig, {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
# Build output
|
|
247
|
-
dist/
|
|
248
|
-
build/
|
|
249
|
-
.out/
|
|
250
|
-
|
|
251
|
-
# Environment files
|
|
252
|
-
.env
|
|
253
|
-
.env.local
|
|
254
|
-
.env.backup
|
|
255
|
-
.env.mode
|
|
256
|
-
.env.production
|
|
257
|
-
|
|
258
|
-
# Database
|
|
259
|
-
*.sqlite
|
|
260
|
-
*.db
|
|
261
|
-
*.mdb
|
|
262
|
-
|
|
263
|
-
# Logs
|
|
264
|
-
logs
|
|
265
|
-
*.log
|
|
266
|
-
|
|
267
|
-
# Testing
|
|
268
|
-
coverage/
|
|
269
|
-
.nyc_output/
|
|
270
|
-
|
|
271
|
-
# IDE / Editors
|
|
272
|
-
.vscode/
|
|
273
|
-
.idea/
|
|
274
|
-
*.swp
|
|
275
|
-
*.swo
|
|
276
|
-
.DS_Store
|
|
277
|
-
|
|
278
|
-
# Fragment CLI temp files
|
|
279
|
-
.fragment-diagnostic-temp.js
|
|
280
|
-
.fragment-test-runner.js
|
|
281
|
-
|
|
282
|
-
# Misc
|
|
283
|
-
npm-debug.log*
|
|
284
|
-
yarn-debug.log*
|
|
285
|
-
yarn-error.log*
|
|
286
|
-
`);
|
|
231
|
+
await fs.writeJSON(path.join(projectPath, "fragment.json"), fragmentConfig, { spaces: 2 });
|
|
232
|
+
const envContent = `NODE_ENV=development
|
|
233
|
+
PORT=3000
|
|
234
|
+
JWT_SECRET=${process.env.JWT_SECRET ?? "your-secret-key-change-this"}
|
|
235
|
+
${features.includes("database") ? "DATABASE_FILE=database.sqlite" : ""}
|
|
236
|
+
`;
|
|
237
|
+
await fs.writeFile(path.join(projectPath, ".env"), envContent);
|
|
238
|
+
await fs.writeFile(path.join(projectPath, ".gitignore"), `node_modules/
|
|
239
|
+
dist/
|
|
240
|
+
.env
|
|
241
|
+
*.sqlite
|
|
242
|
+
coverage/
|
|
243
|
+
`);
|
|
287
244
|
}
|
|
288
245
|
static async generateMainFile(projectPath, config) {
|
|
289
246
|
const content = `import 'reflect-metadata';
|
|
@@ -346,7 +303,7 @@ export class AppService {
|
|
|
346
303
|
await fs.writeFile(path.join(projectPath, "src", "services", "app.service.ts"), content);
|
|
347
304
|
}
|
|
348
305
|
static async generateExampleEntity(projectPath) {
|
|
349
|
-
const content = `import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn } from '
|
|
306
|
+
const content = `import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn } from 'typeorm';
|
|
350
307
|
|
|
351
308
|
@Entity()
|
|
352
309
|
export class User {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAA+B;AAC/B,2CAA6B;AAC7B,wDAAgC;AAChC,8CAAsB;AACtB,kDAA0B;AAC1B,iDAAyC;AAEzC,MAAa,WAAW;IACtB,MAAM,CAAC,QAAQ,CAAC,OAAgB;QAC9B,OAAO;aACJ,OAAO,CAAC,kBAAkB,CAAC;aAC3B,WAAW,CAAC,mCAAmC,CAAC;aAChD,MAAM,CAAC,2BAA2B,EAAE,kBAAkB,EAAE,KAAK,CAAC;aAC9D,MAAM,CACL,2BAA2B,EAC3B,uCAAuC,CACxC;aACA,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;aAC5C,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;YACnC,MAAM,WAAW,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,OAAY;QAClD,MAAM,OAAO,GAAG,IAAA,aAAG,GAAE,CAAC;QAEtB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAE/C,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAChC,OAAO,CAAC,OAAO,EAAE,CAAC;YAElB,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACpC;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,eAAe;oBACxB,OAAO,EAAE,WAAW;iBACrB;gBACD;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,sBAAsB;oBAC/B,OAAO,EAAE,8BAA8B;iBACxC;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,kBAAkB;oBAC3B,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;wBACzD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE;wBAChE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;wBACvD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;qBACrD;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;gBAC/B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1D,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YAErB,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;gBAC/C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ;aACT,CAAC,CAAC;YACH,OAAO,CAAC,OAAO,EAAE,CAAC;YAElB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAClE,OAAO,CAAC,OAAO,EAAE,CAAC;YAElB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAC5C,IAAI,CAAC;oBACH,IAAA,wBAAQ,EAAC,aAAa,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC/D,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CACV,uDAAuD,CACxD,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,SAAS,EAAE,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,11 @@ export declare class MigrateCommand {
|
|
|
7
7
|
*/
|
|
8
8
|
private static setupEnvironment;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
10
|
+
* Use TypeScript only if:
|
|
11
|
+
* - NODE_ENV !== 'production'
|
|
12
|
+
* - tsconfig.json exists with decorators enabled
|
|
13
|
+
* - ts-node is available
|
|
14
|
+
* - TypeScript files exist
|
|
14
15
|
*/
|
|
15
16
|
private static shouldUseTypeScript;
|
|
16
17
|
private static isTsNodeAvailable;
|
|
@@ -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;
|
|
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;AAYpC,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,eAAe,CAAwB;IAEtD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAgFvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAyClC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAehC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAWrC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IAuDvB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;mBAwBnB,iBAAiB;mBAgGjB,aAAa;mBA8Bb,eAAe;mBAgCf,eAAe;mBA8Bf,iBAAiB;mBA+BjB,UAAU;mBA2EV,UAAU;mBA4BV,UAAU;mBA4BV,QAAQ;mBAsCR,UAAU;IA2B/B,OAAO,CAAC,MAAM,CAAC,cAAc;IAY7B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAoBlC,OAAO,CAAC,MAAM,CAAC,sBAAsB;CA2BtC"}
|
|
@@ -43,6 +43,7 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
43
43
|
const ora_1 = __importDefault(require("ora"));
|
|
44
44
|
const typeorm_module_1 = require("../../typeorm/typeorm-module");
|
|
45
45
|
const config_utils_1 = require("../../shared/config.utils");
|
|
46
|
+
const env_utils_1 = require("../../shared/env.utils");
|
|
46
47
|
const tsconfig_utils_1 = require("../../shared/tsconfig.utils");
|
|
47
48
|
const glob_1 = require("glob");
|
|
48
49
|
class MigrateCommand {
|
|
@@ -122,12 +123,17 @@ class MigrateCommand {
|
|
|
122
123
|
return this.shouldUseTypeScript();
|
|
123
124
|
}
|
|
124
125
|
/**
|
|
125
|
-
*
|
|
126
|
-
* -
|
|
127
|
-
* -
|
|
128
|
-
* -
|
|
126
|
+
* Use TypeScript only if:
|
|
127
|
+
* - NODE_ENV !== 'production'
|
|
128
|
+
* - tsconfig.json exists with decorators enabled
|
|
129
|
+
* - ts-node is available
|
|
130
|
+
* - TypeScript files exist
|
|
129
131
|
*/
|
|
130
132
|
static shouldUseTypeScript() {
|
|
133
|
+
// Never use TS in production
|
|
134
|
+
if (env_utils_1.EnvUtils.getEnvironmentMode() === "production") {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
131
137
|
if (!tsconfig_utils_1.TsConfigUtils.exists()) {
|
|
132
138
|
return false;
|
|
133
139
|
}
|
|
@@ -141,7 +147,9 @@ class MigrateCommand {
|
|
|
141
147
|
const cwd = process.cwd();
|
|
142
148
|
for (const pattern of includePatterns) {
|
|
143
149
|
try {
|
|
144
|
-
|
|
150
|
+
// Normalize pattern to forward slashes for Windows compatibility
|
|
151
|
+
const normalizedPattern = pattern.replace(/\\/g, "/");
|
|
152
|
+
const files = (0, glob_1.globSync)(normalizedPattern, { cwd });
|
|
145
153
|
if (files.some((file) => file.endsWith(".ts") && !file.endsWith(".d.ts"))) {
|
|
146
154
|
return true;
|
|
147
155
|
}
|
|
@@ -181,11 +189,13 @@ class MigrateCommand {
|
|
|
181
189
|
*/
|
|
182
190
|
static getPaths(useTypeScript) {
|
|
183
191
|
const dbConfig = config_utils_1.ConfigUtils.getDatabaseConfig();
|
|
192
|
+
// Helper to resolve extension based on mode
|
|
184
193
|
const resolveExtension = (pattern) => {
|
|
185
194
|
return useTypeScript
|
|
186
195
|
? pattern.replace(/\.js$/, ".ts")
|
|
187
196
|
: pattern.replace(/\.ts$/, ".js");
|
|
188
197
|
};
|
|
198
|
+
// If fragment.json has explicit paths, use them
|
|
189
199
|
if (dbConfig.entities || dbConfig.migrations) {
|
|
190
200
|
const entities = dbConfig.entities
|
|
191
201
|
? dbConfig.entities.map(resolveExtension)
|
|
@@ -197,10 +207,12 @@ class MigrateCommand {
|
|
|
197
207
|
? "src/migrations/**/*.ts"
|
|
198
208
|
: "dist/migrations/**/*.js",
|
|
199
209
|
];
|
|
210
|
+
// Extract migration directory for file creation
|
|
200
211
|
const migrationDir = this.extractMigrationDirectory(migrations[0], useTypeScript);
|
|
201
212
|
const seedsDir = path.join(migrationDir, "..", "seeds");
|
|
202
213
|
return { entities, migrations, seeds: seedsDir };
|
|
203
214
|
}
|
|
215
|
+
// No fragment.json config - infer from tsconfig
|
|
204
216
|
const rootDir = tsconfig_utils_1.TsConfigUtils.getRootDir();
|
|
205
217
|
const outDir = tsconfig_utils_1.TsConfigUtils.getOutDir();
|
|
206
218
|
const entities = [
|
|
@@ -218,15 +230,20 @@ class MigrateCommand {
|
|
|
218
230
|
* Extract the actual directory path from a glob pattern for file creation
|
|
219
231
|
*/
|
|
220
232
|
static extractMigrationDirectory(pattern, useTypeScript) {
|
|
233
|
+
// Handle common patterns
|
|
221
234
|
if (pattern.includes("/**/*")) {
|
|
235
|
+
// Pattern like "src/migrations/**/*.ts" → "src/migrations"
|
|
222
236
|
return pattern.split("/**/*")[0];
|
|
223
237
|
}
|
|
224
238
|
if (pattern.includes("/*.")) {
|
|
239
|
+
// Pattern like "src/migrations/*.ts" → "src/migrations"
|
|
225
240
|
return pattern.split("/*")[0];
|
|
226
241
|
}
|
|
242
|
+
// Fallback: assume it's a directory path
|
|
227
243
|
if (pattern.endsWith(".ts") || pattern.endsWith(".js")) {
|
|
228
244
|
return path.dirname(pattern);
|
|
229
245
|
}
|
|
246
|
+
// Default fallback
|
|
230
247
|
return useTypeScript ? "src/migrations" : "dist/migrations";
|
|
231
248
|
}
|
|
232
249
|
static async generateMigration(nameOrPath, options) {
|
|
@@ -242,6 +259,7 @@ class MigrateCommand {
|
|
|
242
259
|
throw new Error("Failed to initialize DataSource");
|
|
243
260
|
}
|
|
244
261
|
this.verifyEntities(dataSource);
|
|
262
|
+
// Setup migrations directory - FIXED: Proper directory extraction
|
|
245
263
|
const migrationsPattern = migrations[0];
|
|
246
264
|
const migrationsDir = this.extractMigrationDirectory(migrationsPattern, useTypeScript);
|
|
247
265
|
await fs.ensureDir(migrationsDir);
|
|
@@ -252,6 +270,7 @@ class MigrateCommand {
|
|
|
252
270
|
!f.endsWith(".d.ts"))
|
|
253
271
|
: [];
|
|
254
272
|
const isFirstMigration = existingMigrations.length === 0;
|
|
273
|
+
// Generate schema changes
|
|
255
274
|
spinner.text = "Analyzing schema changes...";
|
|
256
275
|
const sqlInMemory = await dataSource.driver.createSchemaBuilder().log();
|
|
257
276
|
const upQueries = sqlInMemory.upQueries || [];
|
|
@@ -261,6 +280,7 @@ class MigrateCommand {
|
|
|
261
280
|
spinner.info("No schema changes detected. Migration not generated.");
|
|
262
281
|
return;
|
|
263
282
|
}
|
|
283
|
+
// Create migration
|
|
264
284
|
const migrationName = options.name ||
|
|
265
285
|
(nameOrPath ? path.basename(nameOrPath).replace(/\.ts$/, "") : null) ||
|
|
266
286
|
(isFirstMigration ? "InitialMigration" : "Migration");
|
|
@@ -313,10 +333,11 @@ class MigrateCommand {
|
|
|
313
333
|
}
|
|
314
334
|
}
|
|
315
335
|
static async createMigration(name) {
|
|
316
|
-
|
|
336
|
+
// Always create TypeScript migrations (user can compile if needed)
|
|
337
|
+
const useTypeScript = true; // Force TS for creation
|
|
317
338
|
const spinner = (0, ora_1.default)("Creating TypeScript migration...").start();
|
|
318
339
|
try {
|
|
319
|
-
const { migrations } = this.getPaths(true);
|
|
340
|
+
const { migrations } = this.getPaths(true); // Always use TS for creation
|
|
320
341
|
const migrationsDir = this.extractMigrationDirectory(migrations[0], true);
|
|
321
342
|
const timestamp = Date.now();
|
|
322
343
|
const fileName = `${timestamp}-${name}.ts`;
|
|
@@ -406,6 +427,7 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
406
427
|
console.log(` ${chalk_1.default.cyan(m.name)} - ${new Date(m.timestamp).toLocaleString()}`);
|
|
407
428
|
});
|
|
408
429
|
}
|
|
430
|
+
// Show migration directory from config
|
|
409
431
|
const migrationsPattern = migrations[0];
|
|
410
432
|
const migrationsDir = this.extractMigrationDirectory(migrationsPattern, useTypeScript);
|
|
411
433
|
const fileExt = useTypeScript ? ".ts" : ".js";
|
|
@@ -415,7 +437,9 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
415
437
|
.filter((f) => f.endsWith(fileExt));
|
|
416
438
|
console.log(chalk_1.default.blue(`\n Available ${mode.toLowerCase()} migration files: ${files.length}`));
|
|
417
439
|
}
|
|
440
|
+
// Show detection info
|
|
418
441
|
console.log(chalk_1.default.gray(`\n Configuration:`));
|
|
442
|
+
console.log(chalk_1.default.gray(` - Environment mode: ${env_utils_1.EnvUtils.getEnvironmentMode()}`));
|
|
419
443
|
console.log(chalk_1.default.gray(` - ts-node available: ${this.isTsNodeAvailable()}`));
|
|
420
444
|
console.log(chalk_1.default.gray(` - Using: ${useTypeScript ? "TypeScript" : "JavaScript"}`));
|
|
421
445
|
}
|
|
@@ -507,10 +531,10 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
507
531
|
}
|
|
508
532
|
}
|
|
509
533
|
static async createSeed(name) {
|
|
510
|
-
const useTypeScript =
|
|
534
|
+
const useTypeScript = true; // Always create TS seeds
|
|
511
535
|
const spinner = (0, ora_1.default)("Creating TypeScript seed...").start();
|
|
512
536
|
try {
|
|
513
|
-
const { seeds: seedsDir } = this.getPaths(true);
|
|
537
|
+
const { seeds: seedsDir } = this.getPaths(true); // Always create TS seeds
|
|
514
538
|
const fileName = `${name}.seed.ts`;
|
|
515
539
|
const filePath = path.join(seedsDir, fileName);
|
|
516
540
|
const content = `export default class ${name}Seed {
|
|
@@ -528,6 +552,7 @@ export class ${name}${timestamp} implements MigrationInterface {
|
|
|
528
552
|
process.exit(1);
|
|
529
553
|
}
|
|
530
554
|
}
|
|
555
|
+
// Helper methods remain the same
|
|
531
556
|
static verifyEntities(dataSource) {
|
|
532
557
|
const entities = dataSource.entityMetadatas;
|
|
533
558
|
if (entities.length === 0) {
|