fragment-ts 1.0.20 → 1.0.22

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.
@@ -9,5 +9,6 @@ export declare class InitCommand {
9
9
  private static generateExampleService;
10
10
  private static generateExampleEntity;
11
11
  private static generateAuthFiles;
12
+ private static generateDefaultTest;
12
13
  }
13
14
  //# sourceMappingURL=init.command.d.ts.map
@@ -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;mBAsF/C,wBAAwB;mBAyCxB,iBAAiB;mBAmGjB,gBAAgB;mBA+BhB,yBAAyB;mBAoBzB,sBAAsB;mBAmBtB,qBAAqB;mBA2BrB,iBAAiB;CA8CvC"}
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;mBA6CxB,iBAAiB;mBA8FjB,gBAAgB;mBA+BhB,yBAAyB;mBAoBzB,sBAAsB;mBAmBtB,qBAAqB;mBA2BrB,iBAAiB;mBA+CjB,mBAAmB;CA8BzC"}
@@ -81,7 +81,7 @@ class InitCommand {
81
81
  name: "features",
82
82
  message: "Select features:",
83
83
  choices: [
84
- { name: "Authentication", value: "auth", checked: true },
84
+ { name: "Authentication", value: "auth", checked: false },
85
85
  { name: "Database (TypeORM)", value: "database", checked: true },
86
86
  { name: "AI Integration", value: "ai", checked: false },
87
87
  { name: "Testing", value: "testing", checked: true },
@@ -146,7 +146,7 @@ class InitCommand {
146
146
  dirs.push("src/seeds");
147
147
  }
148
148
  if (config.features.includes("testing")) {
149
- dirs.push("test");
149
+ dirs.push("src/test"); // moved test inside src
150
150
  }
151
151
  for (const dir of dirs) {
152
152
  await fs.ensureDir(path.join(projectPath, dir));
@@ -160,6 +160,9 @@ class InitCommand {
160
160
  if (config.features.includes("auth")) {
161
161
  await this.generateAuthFiles(projectPath);
162
162
  }
163
+ if (config.features.includes("testing")) {
164
+ await this.generateDefaultTest(projectPath);
165
+ }
163
166
  }
164
167
  static async createConfigFiles(projectPath, projectName, features) {
165
168
  const packageJson = {
@@ -177,7 +180,7 @@ class InitCommand {
177
180
  "migrate:revert": "fragment migrate:revert",
178
181
  },
179
182
  dependencies: {
180
- "fragment-ts": "^1.0.20",
183
+ "fragment-ts": "^1.0.22",
181
184
  "reflect-metadata": "^0.1.13",
182
185
  },
183
186
  devDependencies: {
@@ -211,7 +214,6 @@ class InitCommand {
211
214
  });
212
215
  const fragmentConfig = {};
213
216
  if (features.includes("database")) {
214
- // Default SQLite config with env interpolation
215
217
  const isProd = process.env.NODE_ENV === "production";
216
218
  fragmentConfig.database = {
217
219
  type: "sqlite",
@@ -225,43 +227,39 @@ class InitCommand {
225
227
  subscribers: [],
226
228
  };
227
229
  }
228
- // Write fragment.json
229
230
  await fs.writeJSON(path.join(projectPath, "fragment.json"), fragmentConfig, { spaces: 2 });
230
- // .env file with defaults
231
231
  const envContent = `NODE_ENV=development
232
- PORT=3000
233
- JWT_SECRET=${process.env.JWT_SECRET ?? "your-secret-key-change-this"}
234
- ${features.includes("database") ? "DATABASE_FILE=database.sqlite" : ""}
235
- `;
232
+ PORT=3000
233
+ JWT_SECRET=${process.env.JWT_SECRET ?? "your-secret-key-change-this"}
234
+ ${features.includes("database") ? "DATABASE_FILE=database.sqlite" : ""}
235
+ `;
236
236
  await fs.writeFile(path.join(projectPath, ".env"), envContent);
237
- // .gitignore
238
237
  await fs.writeFile(path.join(projectPath, ".gitignore"), "node_modules/\ndist/\n.env\n*.sqlite\n");
239
238
  }
240
- // In the generateMainFile method, update to:
241
239
  static async generateMainFile(projectPath, config) {
242
240
  const content = `import 'reflect-metadata';
243
- import { FragmentApplication } from 'fragment-ts';
244
- import { FragmentWebApplication } from 'fragment-ts';
245
- import { AppController } from './controllers/app.controller';
241
+ import { FragmentApplication } from 'fragment-ts';
242
+ import { FragmentWebApplication } from 'fragment-ts';
243
+ import { AppController } from './controllers/app.controller';
246
244
 
247
- @FragmentApplication({
248
- port: 3000,
249
- autoScan: true
250
- })
251
- class Application {
252
- constructor() {
253
- console.log('Fragment application initialized');
254
- }
245
+ @FragmentApplication({
246
+ port: 3000,
247
+ autoScan: true
248
+ })
249
+ class Application {
250
+ constructor() {
251
+ console.log('Fragment application initialized');
255
252
  }
253
+ }
256
254
 
257
- async function bootstrap() {
258
- console.log('Starting Fragment application...');
259
- const app = new FragmentWebApplication();
260
- await app.bootstrap(Application);
261
- }
255
+ async function bootstrap() {
256
+ console.log('Starting Fragment application...');
257
+ const app = new FragmentWebApplication();
258
+ await app.bootstrap(Application);
259
+ }
262
260
 
263
- bootstrap().catch(console.error);
264
- `;
261
+ bootstrap().catch(console.error);
262
+ `;
265
263
  await fs.writeFile(path.join(projectPath, "src", "main.ts"), content);
266
264
  }
267
265
  static async generateExampleController(projectPath) {
@@ -347,6 +345,34 @@ export class AuthService {
347
345
  await fs.writeFile(path.join(projectPath, "src", "controllers", "auth.controller.ts"), controllerContent);
348
346
  await fs.writeFile(path.join(projectPath, "src", "services", "auth.service.ts"), serviceContent);
349
347
  }
348
+ static async generateDefaultTest(projectPath) {
349
+ const testContent = `import { AppService } from '../services/app.service';
350
+ import { DIContainer } from 'fragment-ts';
351
+
352
+ describe('AppService', () => {
353
+ let service: AppService;
354
+ let container: DIContainer;
355
+
356
+ beforeEach(() => {
357
+ container = DIContainer.getInstance();
358
+ container.reset();
359
+ service = container.resolve(AppService);
360
+ });
361
+
362
+ it('should return welcome message', () => {
363
+ const message = service.getMessage();
364
+
365
+ expect(message).toBe('Welcome to Fragment Framework!');
366
+ expect(message).toBeTruthy();
367
+ expect(message).toContain('Fragment');
368
+ // expect(message).toHaveLength(28);
369
+ });
370
+ });
371
+ `;
372
+ const testDir = path.join(projectPath, "src", "test");
373
+ await fs.ensureDir(testDir);
374
+ await fs.writeFile(path.join(testDir, "app.spec.ts"), testContent);
375
+ }
350
376
  }
351
377
  exports.InitCommand = InitCommand;
352
378
  //# sourceMappingURL=init.command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/test.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,qBAAa,WAAW;IACtB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;mBAkBlB,QAAQ;IA8I7B,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAwIpC"}
1
+ {"version":3,"file":"test.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/test.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,qBAAa,WAAW;IACtB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;mBAkBlB,QAAQ;IAkJ7B,OAAO,CAAC,MAAM,CAAC,oBAAoB;CA6GpC"}
@@ -41,6 +41,7 @@ const chalk_1 = __importDefault(require("chalk"));
41
41
  const path = __importStar(require("path"));
42
42
  const child_process_1 = require("child_process");
43
43
  const fs = __importStar(require("fs"));
44
+ const chokidar_1 = __importDefault(require("chokidar"));
44
45
  class TestCommand {
45
46
  static register(program) {
46
47
  program
@@ -122,52 +123,45 @@ class TestCommand {
122
123
  const scriptPath = path.join(cwd, ".fragment-test-runner.js");
123
124
  try {
124
125
  fs.writeFileSync(scriptPath, scriptContent);
125
- // Make the script executable
126
126
  fs.chmodSync(scriptPath, "755");
127
- const nodeArgs = [scriptPath];
128
- const env = {
129
- ...process.env,
130
- TS_NODE_TRANSPILE_ONLY: "true",
131
- NODE_ENV: "test",
132
- // Only set TS_NODE_PROJECT if tsconfig exists
133
- ...(hasTsConfig && useTypeScript
134
- ? { TS_NODE_PROJECT: tsConfigPath }
135
- : {}),
136
- // Handle color output
137
- FORCE_COLOR: options.color === false ? "0" : "1",
138
- };
139
- // Add --watch support
127
+ // -----------------------
128
+ // Watch / Coverage / Single Run
129
+ // -----------------------
140
130
  if (options.watch) {
141
- console.log(chalk_1.default.yellow("\nāš ļø Watch mode is not yet implemented. Running once.\n"));
131
+ console.log(chalk_1.default.green("\nšŸ‘€ Watch mode enabled. Listening for changes...\n"));
132
+ const watcher = chokidar_1.default.watch(`${basePath}/**/*.spec.${useTypeScript ? "ts" : "js"}`, {
133
+ ignoreInitial: true,
134
+ });
135
+ const runTests = () => {
136
+ const proc = (0, child_process_1.spawn)("node", [scriptPath], { stdio: "inherit" });
137
+ proc.on("close", (code) => {
138
+ if (code !== 0)
139
+ console.log(chalk_1.default.red(`Test run exited with code ${code}`));
140
+ });
141
+ };
142
+ runTests(); // Initial run
143
+ watcher.on("all", (event, pathChanged) => {
144
+ console.log(chalk_1.default.blue(`\nšŸ”„ File changed (${event}): ${pathChanged}`));
145
+ runTests();
146
+ });
142
147
  }
143
- // Add --coverage support
144
- if (options.coverage) {
145
- console.log(chalk_1.default.yellow("\nāš ļø Coverage reporting is not yet implemented.\n"));
148
+ else if (options.coverage) {
149
+ console.log(chalk_1.default.green("\nšŸ“Š Coverage enabled. Running tests with coverage...\n"));
150
+ const proc = (0, child_process_1.spawn)("npx", ["c8", "--reporter=lcov", "--reporter=text", "node", scriptPath], { stdio: "inherit" });
151
+ proc.on("close", (code) => process.exit(code || 0));
152
+ proc.on("error", (err) => {
153
+ console.error(chalk_1.default.red("Failed to run coverage:"), err);
154
+ process.exit(1);
155
+ });
156
+ }
157
+ else {
158
+ const proc = (0, child_process_1.spawn)("node", [scriptPath], { stdio: "inherit" });
159
+ proc.on("close", (code) => process.exit(code || 0));
160
+ proc.on("error", (err) => {
161
+ console.error(chalk_1.default.red("Failed to run tests:"), err);
162
+ process.exit(1);
163
+ });
146
164
  }
147
- const proc = (0, child_process_1.spawn)("node", nodeArgs, {
148
- cwd,
149
- stdio: "inherit",
150
- env,
151
- });
152
- proc.on("close", (code) => {
153
- try {
154
- fs.unlinkSync(scriptPath);
155
- }
156
- catch (e) {
157
- // Ignore cleanup errors
158
- }
159
- process.exit(code || 0);
160
- });
161
- proc.on("error", (error) => {
162
- console.error(chalk_1.default.red("Failed to run tests:"), error);
163
- try {
164
- fs.unlinkSync(scriptPath);
165
- }
166
- catch (e) {
167
- // Ignore cleanup errors
168
- }
169
- process.exit(1);
170
- });
171
165
  }
172
166
  catch (error) {
173
167
  console.error(chalk_1.default.red("Failed to create test runner:"), error.message);
@@ -176,14 +170,11 @@ class TestCommand {
176
170
  }
177
171
  static generateRunnerScript(options) {
178
172
  const { useTypeScript, basePath, pattern, hasTsConfig, tsConfigPath, noColor, } = options;
179
- // Determine the runner path - try to find the actual test runner
180
- // This assumes the test runner is installed as a dependency
181
- let runnerImportPath = "fragment-ts/testing";
182
- // Try to find the local test runner first for development
173
+ let runnerImportPath = "fragment-ts";
183
174
  const possiblePaths = [
184
175
  path.join(process.cwd(), "node_modules", "fragment-ts", "testing"),
185
176
  path.join(process.cwd(), "node_modules", "fragment-ts", "dist", "testing"),
186
- path.join(__dirname, "..", "..", "testing"), // If we're in the fragment-ts package itself
177
+ path.join(__dirname, "..", "..", "testing"),
187
178
  ];
188
179
  let resolvedRunnerPath = runnerImportPath;
189
180
  for (const testPath of possiblePaths) {
@@ -198,11 +189,9 @@ class TestCommand {
198
189
  ${useTypeScript ? "require('ts-node/register/transpile-only');" : ""}
199
190
  require('reflect-metadata');
200
191
 
201
- // Set environment
202
192
  process.env.NODE_ENV = 'test';
203
193
  ${noColor ? "process.env.FORCE_COLOR = '0';" : "process.env.FORCE_COLOR = '1';"}
204
194
 
205
- // Set up TypeScript config if available
206
195
  ${hasTsConfig && useTypeScript
207
196
  ? `
208
197
  try {
@@ -217,17 +206,13 @@ try {
217
206
  skipLibCheck: true
218
207
  }
219
208
  });
220
- } catch (error) {
221
- // Ignore, ts-node might not be available
222
- }`
209
+ } catch (error) {}`
223
210
  : ""}
224
211
 
225
212
  let testRunner;
226
213
  try {
227
- // Try to import the test runner
228
214
  const testModule = require('${resolvedRunnerPath}');
229
215
 
230
- // Handle different export patterns
231
216
  if (testModule.getTestRunner) {
232
217
  testRunner = testModule.getTestRunner();
233
218
  } else if (testModule.TestRunner) {
@@ -235,7 +220,6 @@ try {
235
220
  } else if (testModule.default && testModule.default.getTestRunner) {
236
221
  testRunner = testModule.default.getTestRunner();
237
222
  } else {
238
- // Fallback to creating a new instance
239
223
  testRunner = testModule;
240
224
  }
241
225
  } catch (error) {
@@ -247,35 +231,18 @@ try {
247
231
  async function runTests() {
248
232
  try {
249
233
  console.log('Looking for test files...');
250
-
251
- // Load test files with the runner
252
234
  await testRunner.loadTestFiles('${basePath}/${pattern}');
253
-
254
- // Run tests
255
235
  await testRunner.run();
256
236
  } catch (error) {
257
237
  console.error('\\nāŒ Error running tests:', error.message);
258
-
259
- if (error.stack && process.env.DEBUG) {
260
- console.error(error.stack);
261
- }
262
-
238
+ if (error.stack && process.env.DEBUG) console.error(error.stack);
263
239
  process.exit(1);
264
240
  }
265
241
  }
266
242
 
267
- // Handle process termination
268
- process.on('SIGINT', () => {
269
- console.log('\\n\\nTest run interrupted');
270
- process.exit(130);
271
- });
272
-
273
- process.on('SIGTERM', () => {
274
- console.log('\\n\\nTest run terminated');
275
- process.exit(143);
276
- });
243
+ process.on('SIGINT', () => { console.log('\\n\\nTest run interrupted'); process.exit(130); });
244
+ process.on('SIGTERM', () => { console.log('\\n\\nTest run terminated'); process.exit(143); });
277
245
 
278
- // Run the tests
279
246
  runTests().catch(error => {
280
247
  console.error('Unhandled error:', error);
281
248
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"test.command.js","sourceRoot":"","sources":["../../../src/cli/commands/test.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.command.js","sourceRoot":"","sources":["../../../src/cli/commands/test.command.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,14 @@
8
8
  "name": "blog-api",
9
9
  "version": "1.0.0",
10
10
  "dependencies": {
11
- "fragment-ts": "^1.0.1",
11
+ "fragment-ts": "^1.0.21",
12
+ "mysql2": "^3.16.0",
12
13
  "reflect-metadata": "^0.1.13"
13
14
  },
14
15
  "devDependencies": {
15
16
  "@types/node": "^20.10.5",
17
+ "ts-node": "^10.9.2",
18
+ "tsconfig-paths": "^4.2.0",
16
19
  "typescript": "^5.3.3"
17
20
  }
18
21
  },
@@ -20,6 +23,7 @@
20
23
  "version": "0.8.1",
21
24
  "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
22
25
  "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
26
+ "devOptional": true,
23
27
  "license": "MIT",
24
28
  "dependencies": {
25
29
  "@jridgewell/trace-mapping": "0.3.9"
@@ -174,6 +178,7 @@
174
178
  "version": "3.1.2",
175
179
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
176
180
  "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
181
+ "devOptional": true,
177
182
  "license": "MIT",
178
183
  "engines": {
179
184
  "node": ">=6.0.0"
@@ -183,12 +188,14 @@
183
188
  "version": "1.5.5",
184
189
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
185
190
  "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
191
+ "devOptional": true,
186
192
  "license": "MIT"
187
193
  },
188
194
  "node_modules/@jridgewell/trace-mapping": {
189
195
  "version": "0.3.9",
190
196
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
191
197
  "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
198
+ "devOptional": true,
192
199
  "license": "MIT",
193
200
  "dependencies": {
194
201
  "@jridgewell/resolve-uri": "^3.0.3",
@@ -215,24 +222,28 @@
215
222
  "version": "1.0.12",
216
223
  "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz",
217
224
  "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==",
225
+ "devOptional": true,
218
226
  "license": "MIT"
219
227
  },
220
228
  "node_modules/@tsconfig/node12": {
221
229
  "version": "1.0.11",
222
230
  "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
223
231
  "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
232
+ "devOptional": true,
224
233
  "license": "MIT"
225
234
  },
226
235
  "node_modules/@tsconfig/node14": {
227
236
  "version": "1.0.3",
228
237
  "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
229
238
  "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
239
+ "devOptional": true,
230
240
  "license": "MIT"
231
241
  },
232
242
  "node_modules/@tsconfig/node16": {
233
243
  "version": "1.0.4",
234
244
  "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
235
245
  "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
246
+ "devOptional": true,
236
247
  "license": "MIT"
237
248
  },
238
249
  "node_modules/@types/node": {
@@ -298,6 +309,7 @@
298
309
  "version": "8.15.0",
299
310
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
300
311
  "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
312
+ "devOptional": true,
301
313
  "license": "MIT",
302
314
  "bin": {
303
315
  "acorn": "bin/acorn"
@@ -310,6 +322,7 @@
310
322
  "version": "8.3.4",
311
323
  "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
312
324
  "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
325
+ "devOptional": true,
313
326
  "license": "MIT",
314
327
  "dependencies": {
315
328
  "acorn": "^8.11.0"
@@ -404,6 +417,7 @@
404
417
  "version": "4.1.3",
405
418
  "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
406
419
  "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
420
+ "devOptional": true,
407
421
  "license": "MIT"
408
422
  },
409
423
  "node_modules/array-flatten": {
@@ -439,6 +453,15 @@
439
453
  "url": "https://github.com/sponsors/ljharb"
440
454
  }
441
455
  },
456
+ "node_modules/aws-ssl-profiles": {
457
+ "version": "1.1.2",
458
+ "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
459
+ "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==",
460
+ "license": "MIT",
461
+ "engines": {
462
+ "node": ">= 6.0.0"
463
+ }
464
+ },
442
465
  "node_modules/axios": {
443
466
  "version": "1.13.2",
444
467
  "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
@@ -894,6 +917,7 @@
894
917
  "version": "1.1.1",
895
918
  "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
896
919
  "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
920
+ "devOptional": true,
897
921
  "license": "MIT"
898
922
  },
899
923
  "node_modules/cross-spawn": {
@@ -977,6 +1001,15 @@
977
1001
  "node": ">=0.4.0"
978
1002
  }
979
1003
  },
1004
+ "node_modules/denque": {
1005
+ "version": "2.1.0",
1006
+ "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
1007
+ "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
1008
+ "license": "Apache-2.0",
1009
+ "engines": {
1010
+ "node": ">=0.10"
1011
+ }
1012
+ },
980
1013
  "node_modules/depd": {
981
1014
  "version": "2.0.0",
982
1015
  "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -1000,6 +1033,7 @@
1000
1033
  "version": "4.0.2",
1001
1034
  "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
1002
1035
  "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
1036
+ "devOptional": true,
1003
1037
  "license": "BSD-3-Clause",
1004
1038
  "engines": {
1005
1039
  "node": ">=0.3.1"
@@ -1392,9 +1426,9 @@
1392
1426
  }
1393
1427
  },
1394
1428
  "node_modules/fragment-ts": {
1395
- "version": "1.0.1",
1396
- "resolved": "https://registry.npmjs.org/fragment-ts/-/fragment-ts-1.0.1.tgz",
1397
- "integrity": "sha512-s1dc7vYySQboS5Pq+wmuTpXDe8y8Pj1CDPXy2xdTZSKTi9Dau2Ql3XBIyo4u9ReEFDKB53jTdet2qTS16uDg8Q==",
1429
+ "version": "1.0.21",
1430
+ "resolved": "https://registry.npmjs.org/fragment-ts/-/fragment-ts-1.0.21.tgz",
1431
+ "integrity": "sha512-RrKnnwCYmNzc0Ihp7Ik8sswAXbJvcZSEtLWl+RW/rXBW856Xj88blNP6OsB93bD9v4EeMz8a680e5lZZOwG25g==",
1398
1432
  "license": "MIT",
1399
1433
  "dependencies": {
1400
1434
  "axios": "^1.6.2",
@@ -1406,7 +1440,7 @@
1406
1440
  "commander": "^11.1.0",
1407
1441
  "compression": "^1.7.4",
1408
1442
  "cors": "^2.8.5",
1409
- "dotenv": "^16.3.1",
1443
+ "dotenv": "^16.6.1",
1410
1444
  "ejs": "^3.1.9",
1411
1445
  "express": "^4.18.2",
1412
1446
  "express-rate-limit": "^7.1.5",
@@ -1419,7 +1453,6 @@
1419
1453
  "openai": "^4.20.1",
1420
1454
  "ora": "^5.4.1",
1421
1455
  "reflect-metadata": "^0.1.13",
1422
- "ts-node": "^10.9.2",
1423
1456
  "typeorm": "^0.3.17"
1424
1457
  },
1425
1458
  "bin": {
@@ -1476,6 +1509,15 @@
1476
1509
  "url": "https://github.com/sponsors/ljharb"
1477
1510
  }
1478
1511
  },
1512
+ "node_modules/generate-function": {
1513
+ "version": "2.3.1",
1514
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
1515
+ "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
1516
+ "license": "MIT",
1517
+ "dependencies": {
1518
+ "is-property": "^1.0.2"
1519
+ }
1520
+ },
1479
1521
  "node_modules/get-caller-file": {
1480
1522
  "version": "2.0.5",
1481
1523
  "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -1812,6 +1854,12 @@
1812
1854
  "node": ">=0.12.0"
1813
1855
  }
1814
1856
  },
1857
+ "node_modules/is-property": {
1858
+ "version": "1.0.2",
1859
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
1860
+ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==",
1861
+ "license": "MIT"
1862
+ },
1815
1863
  "node_modules/is-typed-array": {
1816
1864
  "version": "1.1.15",
1817
1865
  "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
@@ -1883,6 +1931,19 @@
1883
1931
  "node": ">=10"
1884
1932
  }
1885
1933
  },
1934
+ "node_modules/json5": {
1935
+ "version": "2.2.3",
1936
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
1937
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1938
+ "dev": true,
1939
+ "license": "MIT",
1940
+ "bin": {
1941
+ "json5": "lib/cli.js"
1942
+ },
1943
+ "engines": {
1944
+ "node": ">=6"
1945
+ }
1946
+ },
1886
1947
  "node_modules/jsonfile": {
1887
1948
  "version": "6.2.0",
1888
1949
  "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
@@ -2008,16 +2069,38 @@
2008
2069
  "url": "https://github.com/sponsors/sindresorhus"
2009
2070
  }
2010
2071
  },
2072
+ "node_modules/long": {
2073
+ "version": "5.3.2",
2074
+ "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
2075
+ "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
2076
+ "license": "Apache-2.0"
2077
+ },
2011
2078
  "node_modules/lru-cache": {
2012
2079
  "version": "10.4.3",
2013
2080
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
2014
2081
  "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
2015
2082
  "license": "ISC"
2016
2083
  },
2084
+ "node_modules/lru.min": {
2085
+ "version": "1.1.3",
2086
+ "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.3.tgz",
2087
+ "integrity": "sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==",
2088
+ "license": "MIT",
2089
+ "engines": {
2090
+ "bun": ">=1.0.0",
2091
+ "deno": ">=1.30.0",
2092
+ "node": ">=8.0.0"
2093
+ },
2094
+ "funding": {
2095
+ "type": "github",
2096
+ "url": "https://github.com/sponsors/wellwelwel"
2097
+ }
2098
+ },
2017
2099
  "node_modules/make-error": {
2018
2100
  "version": "1.3.6",
2019
2101
  "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
2020
2102
  "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
2103
+ "devOptional": true,
2021
2104
  "license": "ISC"
2022
2105
  },
2023
2106
  "node_modules/math-intrinsics": {
@@ -2122,6 +2205,16 @@
2122
2205
  "url": "https://github.com/sponsors/isaacs"
2123
2206
  }
2124
2207
  },
2208
+ "node_modules/minimist": {
2209
+ "version": "1.2.8",
2210
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
2211
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
2212
+ "dev": true,
2213
+ "license": "MIT",
2214
+ "funding": {
2215
+ "url": "https://github.com/sponsors/ljharb"
2216
+ }
2217
+ },
2125
2218
  "node_modules/minipass": {
2126
2219
  "version": "7.1.2",
2127
2220
  "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
@@ -2146,6 +2239,54 @@
2146
2239
  "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
2147
2240
  }
2148
2241
  },
2242
+ "node_modules/mysql2": {
2243
+ "version": "3.16.0",
2244
+ "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.16.0.tgz",
2245
+ "integrity": "sha512-AEGW7QLLSuSnjCS4pk3EIqOmogegmze9h8EyrndavUQnIUcfkVal/sK7QznE+a3bc6rzPbAiui9Jcb+96tPwYA==",
2246
+ "license": "MIT",
2247
+ "dependencies": {
2248
+ "aws-ssl-profiles": "^1.1.1",
2249
+ "denque": "^2.1.0",
2250
+ "generate-function": "^2.3.1",
2251
+ "iconv-lite": "^0.7.0",
2252
+ "long": "^5.2.1",
2253
+ "lru.min": "^1.0.0",
2254
+ "named-placeholders": "^1.1.3",
2255
+ "seq-queue": "^0.0.5",
2256
+ "sqlstring": "^2.3.2"
2257
+ },
2258
+ "engines": {
2259
+ "node": ">= 8.0"
2260
+ }
2261
+ },
2262
+ "node_modules/mysql2/node_modules/iconv-lite": {
2263
+ "version": "0.7.1",
2264
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz",
2265
+ "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==",
2266
+ "license": "MIT",
2267
+ "dependencies": {
2268
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
2269
+ },
2270
+ "engines": {
2271
+ "node": ">=0.10.0"
2272
+ },
2273
+ "funding": {
2274
+ "type": "opencollective",
2275
+ "url": "https://opencollective.com/express"
2276
+ }
2277
+ },
2278
+ "node_modules/named-placeholders": {
2279
+ "version": "1.1.6",
2280
+ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz",
2281
+ "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==",
2282
+ "license": "MIT",
2283
+ "dependencies": {
2284
+ "lru.min": "^1.1.0"
2285
+ },
2286
+ "engines": {
2287
+ "node": ">=8.0.0"
2288
+ }
2289
+ },
2149
2290
  "node_modules/negotiator": {
2150
2291
  "version": "0.6.4",
2151
2292
  "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
@@ -2606,6 +2747,11 @@
2606
2747
  "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
2607
2748
  "license": "MIT"
2608
2749
  },
2750
+ "node_modules/seq-queue": {
2751
+ "version": "0.0.5",
2752
+ "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
2753
+ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
2754
+ },
2609
2755
  "node_modules/serve-static": {
2610
2756
  "version": "1.16.3",
2611
2757
  "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
@@ -2785,6 +2931,15 @@
2785
2931
  "node": ">=14"
2786
2932
  }
2787
2933
  },
2934
+ "node_modules/sqlstring": {
2935
+ "version": "2.3.3",
2936
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
2937
+ "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
2938
+ "license": "MIT",
2939
+ "engines": {
2940
+ "node": ">= 0.6"
2941
+ }
2942
+ },
2788
2943
  "node_modules/statuses": {
2789
2944
  "version": "2.0.2",
2790
2945
  "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
@@ -2857,6 +3012,16 @@
2857
3012
  "node": ">=8"
2858
3013
  }
2859
3014
  },
3015
+ "node_modules/strip-bom": {
3016
+ "version": "3.0.0",
3017
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
3018
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
3019
+ "dev": true,
3020
+ "license": "MIT",
3021
+ "engines": {
3022
+ "node": ">=4"
3023
+ }
3024
+ },
2860
3025
  "node_modules/supports-color": {
2861
3026
  "version": "7.2.0",
2862
3027
  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -2914,6 +3079,7 @@
2914
3079
  "version": "10.9.2",
2915
3080
  "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
2916
3081
  "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
3082
+ "devOptional": true,
2917
3083
  "license": "MIT",
2918
3084
  "dependencies": {
2919
3085
  "@cspotcode/source-map-support": "^0.8.0",
@@ -2953,6 +3119,21 @@
2953
3119
  }
2954
3120
  }
2955
3121
  },
3122
+ "node_modules/tsconfig-paths": {
3123
+ "version": "4.2.0",
3124
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
3125
+ "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
3126
+ "dev": true,
3127
+ "license": "MIT",
3128
+ "dependencies": {
3129
+ "json5": "^2.2.2",
3130
+ "minimist": "^1.2.6",
3131
+ "strip-bom": "^3.0.0"
3132
+ },
3133
+ "engines": {
3134
+ "node": ">=6"
3135
+ }
3136
+ },
2956
3137
  "node_modules/tslib": {
2957
3138
  "version": "2.8.1",
2958
3139
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -3157,6 +3338,7 @@
3157
3338
  "version": "5.9.3",
3158
3339
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
3159
3340
  "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
3341
+ "devOptional": true,
3160
3342
  "license": "Apache-2.0",
3161
3343
  "bin": {
3162
3344
  "tsc": "bin/tsc",
@@ -3222,6 +3404,7 @@
3222
3404
  "version": "3.0.1",
3223
3405
  "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
3224
3406
  "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
3407
+ "devOptional": true,
3225
3408
  "license": "MIT"
3226
3409
  },
3227
3410
  "node_modules/validator": {
@@ -3384,6 +3567,7 @@
3384
3567
  "version": "3.1.1",
3385
3568
  "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
3386
3569
  "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
3570
+ "devOptional": true,
3387
3571
  "license": "MIT",
3388
3572
  "engines": {
3389
3573
  "node": ">=6"
@@ -9,11 +9,14 @@
9
9
  "test": "fragment test"
10
10
  },
11
11
  "dependencies": {
12
- "fragment-ts": "^1.0.1",
12
+ "fragment-ts": "^1.0.21",
13
+ "mysql2": "^3.16.0",
13
14
  "reflect-metadata": "^0.1.13"
14
15
  },
15
16
  "devDependencies": {
16
- "typescript": "^5.3.3",
17
- "@types/node": "^20.10.5"
17
+ "@types/node": "^20.10.5",
18
+ "ts-node": "^10.9.2",
19
+ "tsconfig-paths": "^4.2.0",
20
+ "typescript": "^5.3.3"
18
21
  }
19
22
  }
@@ -1,8 +1,8 @@
1
- import { Service } from 'fragment-ts';
1
+ import { Service } from "fragment-ts";
2
2
 
3
3
  @Service()
4
4
  export class AppService {
5
5
  getMessage(): string {
6
- return 'Welcome to Fragment Framework!';
6
+ return "Welcome to Fragment Framework!";
7
7
  }
8
8
  }
@@ -0,0 +1,23 @@
1
+ import "reflect-metadata";
2
+ import { describe, it, beforeEach, expect, DIContainer } from "fragment-ts";
3
+ import { AppService } from "../services/app.service";
4
+
5
+ describe("AppService", () => {
6
+ let service: AppService;
7
+ let container: DIContainer;
8
+
9
+ beforeEach(() => {
10
+ container = DIContainer.getInstance();
11
+ container.reset();
12
+ service = container.resolve(AppService);
13
+ });
14
+
15
+ it("should return welcome message", () => {
16
+ const message = service.getMessage();
17
+
18
+ expect(message).toBe("Welcome to Fragment Framework!");
19
+ expect(message).toBeTruthy();
20
+ expect(message).toContain("Fragment");
21
+ // expect(message).toHaveLength(28);
22
+ });
23
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fragment-ts",
3
- "version": "1.0.20",
3
+ "version": "1.0.22",
4
4
  "description": "Spring Boot-style framework for TypeScript with Express and TypeORM",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -51,7 +51,7 @@ export class InitCommand {
51
51
  name: "features",
52
52
  message: "Select features:",
53
53
  choices: [
54
- { name: "Authentication", value: "auth", checked: true },
54
+ { name: "Authentication", value: "auth", checked: false },
55
55
  { name: "Database (TypeORM)", value: "database", checked: true },
56
56
  { name: "AI Integration", value: "ai", checked: false },
57
57
  { name: "Testing", value: "testing", checked: true },
@@ -129,7 +129,7 @@ export class InitCommand {
129
129
  }
130
130
 
131
131
  if (config.features.includes("testing")) {
132
- dirs.push("test");
132
+ dirs.push("src/test"); // moved test inside src
133
133
  }
134
134
 
135
135
  for (const dir of dirs) {
@@ -147,6 +147,10 @@ export class InitCommand {
147
147
  if (config.features.includes("auth")) {
148
148
  await this.generateAuthFiles(projectPath);
149
149
  }
150
+
151
+ if (config.features.includes("testing")) {
152
+ await this.generateDefaultTest(projectPath);
153
+ }
150
154
  }
151
155
 
152
156
  private static async createConfigFiles(
@@ -169,7 +173,7 @@ export class InitCommand {
169
173
  "migrate:revert": "fragment migrate:revert",
170
174
  },
171
175
  dependencies: {
172
- "fragment-ts": "^1.0.20",
176
+ "fragment-ts": "^1.0.22",
173
177
  "reflect-metadata": "^0.1.13",
174
178
  },
175
179
  devDependencies: {
@@ -208,7 +212,6 @@ export class InitCommand {
208
212
  const fragmentConfig: any = {};
209
213
 
210
214
  if (features.includes("database")) {
211
- // Default SQLite config with env interpolation
212
215
  const isProd = process.env.NODE_ENV === "production";
213
216
 
214
217
  fragmentConfig.database = {
@@ -224,57 +227,53 @@ export class InitCommand {
224
227
  };
225
228
  }
226
229
 
227
- // Write fragment.json
228
230
  await fs.writeJSON(
229
231
  path.join(projectPath, "fragment.json"),
230
232
  fragmentConfig,
231
233
  { spaces: 2 },
232
234
  );
233
235
 
234
- // .env file with defaults
235
236
  const envContent = `NODE_ENV=development
236
- PORT=3000
237
- JWT_SECRET=${process.env.JWT_SECRET ?? "your-secret-key-change-this"}
238
- ${features.includes("database") ? "DATABASE_FILE=database.sqlite" : ""}
239
- `;
237
+ PORT=3000
238
+ JWT_SECRET=${process.env.JWT_SECRET ?? "your-secret-key-change-this"}
239
+ ${features.includes("database") ? "DATABASE_FILE=database.sqlite" : ""}
240
+ `;
240
241
 
241
242
  await fs.writeFile(path.join(projectPath, ".env"), envContent);
242
243
 
243
- // .gitignore
244
244
  await fs.writeFile(
245
245
  path.join(projectPath, ".gitignore"),
246
246
  "node_modules/\ndist/\n.env\n*.sqlite\n",
247
247
  );
248
248
  }
249
249
 
250
- // In the generateMainFile method, update to:
251
250
  private static async generateMainFile(
252
251
  projectPath: string,
253
252
  config: any,
254
253
  ): Promise<void> {
255
254
  const content = `import 'reflect-metadata';
256
- import { FragmentApplication } from 'fragment-ts';
257
- import { FragmentWebApplication } from 'fragment-ts';
258
- import { AppController } from './controllers/app.controller';
259
-
260
- @FragmentApplication({
261
- port: 3000,
262
- autoScan: true
263
- })
264
- class Application {
265
- constructor() {
266
- console.log('Fragment application initialized');
267
- }
255
+ import { FragmentApplication } from 'fragment-ts';
256
+ import { FragmentWebApplication } from 'fragment-ts';
257
+ import { AppController } from './controllers/app.controller';
258
+
259
+ @FragmentApplication({
260
+ port: 3000,
261
+ autoScan: true
262
+ })
263
+ class Application {
264
+ constructor() {
265
+ console.log('Fragment application initialized');
268
266
  }
267
+ }
269
268
 
270
- async function bootstrap() {
271
- console.log('Starting Fragment application...');
272
- const app = new FragmentWebApplication();
273
- await app.bootstrap(Application);
274
- }
269
+ async function bootstrap() {
270
+ console.log('Starting Fragment application...');
271
+ const app = new FragmentWebApplication();
272
+ await app.bootstrap(Application);
273
+ }
275
274
 
276
- bootstrap().catch(console.error);
277
- `;
275
+ bootstrap().catch(console.error);
276
+ `;
278
277
 
279
278
  await fs.writeFile(path.join(projectPath, "src", "main.ts"), content);
280
279
  }
@@ -391,4 +390,35 @@ export class AuthService {
391
390
  serviceContent,
392
391
  );
393
392
  }
393
+
394
+ private static async generateDefaultTest(projectPath: string) {
395
+ const testContent = `import { AppService } from '../services/app.service';
396
+ import { DIContainer } from 'fragment-ts';
397
+
398
+ describe('AppService', () => {
399
+ let service: AppService;
400
+ let container: DIContainer;
401
+
402
+ beforeEach(() => {
403
+ container = DIContainer.getInstance();
404
+ container.reset();
405
+ service = container.resolve(AppService);
406
+ });
407
+
408
+ it('should return welcome message', () => {
409
+ const message = service.getMessage();
410
+
411
+ expect(message).toBe('Welcome to Fragment Framework!');
412
+ expect(message).toBeTruthy();
413
+ expect(message).toContain('Fragment');
414
+ // expect(message).toHaveLength(28);
415
+ });
416
+ });
417
+ `;
418
+
419
+ const testDir = path.join(projectPath, "src", "test");
420
+ await fs.ensureDir(testDir);
421
+
422
+ await fs.writeFile(path.join(testDir, "app.spec.ts"), testContent);
423
+ }
394
424
  }
@@ -3,6 +3,7 @@ import chalk from "chalk";
3
3
  import * as path from "path";
4
4
  import { spawn } from "child_process";
5
5
  import * as fs from "fs";
6
+ import chokidar from "chokidar";
6
7
 
7
8
  export class TestCommand {
8
9
  static register(program: Command): void {
@@ -102,63 +103,67 @@ export class TestCommand {
102
103
 
103
104
  try {
104
105
  fs.writeFileSync(scriptPath, scriptContent);
105
-
106
- // Make the script executable
107
106
  fs.chmodSync(scriptPath, "755");
108
107
 
109
- const nodeArgs = [scriptPath];
110
- const env = {
111
- ...process.env,
112
- TS_NODE_TRANSPILE_ONLY: "true",
113
- NODE_ENV: "test",
114
- // Only set TS_NODE_PROJECT if tsconfig exists
115
- ...(hasTsConfig && useTypeScript
116
- ? { TS_NODE_PROJECT: tsConfigPath }
117
- : {}),
118
- // Handle color output
119
- FORCE_COLOR: options.color === false ? "0" : "1",
120
- };
121
-
122
- // Add --watch support
108
+ // -----------------------
109
+ // Watch / Coverage / Single Run
110
+ // -----------------------
123
111
  if (options.watch) {
124
112
  console.log(
125
- chalk.yellow(
126
- "\nāš ļø Watch mode is not yet implemented. Running once.\n",
127
- ),
113
+ chalk.green("\nšŸ‘€ Watch mode enabled. Listening for changes...\n"),
128
114
  );
129
- }
130
115
 
131
- // Add --coverage support
132
- if (options.coverage) {
116
+ const watcher = chokidar.watch(
117
+ `${basePath}/**/*.spec.${useTypeScript ? "ts" : "js"}`,
118
+ {
119
+ ignoreInitial: true,
120
+ },
121
+ );
122
+
123
+ const runTests = () => {
124
+ const proc = spawn("node", [scriptPath], { stdio: "inherit" });
125
+
126
+ proc.on("close", (code) => {
127
+ if (code !== 0)
128
+ console.log(chalk.red(`Test run exited with code ${code}`));
129
+ });
130
+ };
131
+
132
+ runTests(); // Initial run
133
+
134
+ watcher.on("all", (event, pathChanged) => {
135
+ console.log(
136
+ chalk.blue(`\nšŸ”„ File changed (${event}): ${pathChanged}`),
137
+ );
138
+ runTests();
139
+ });
140
+ } else if (options.coverage) {
133
141
  console.log(
134
- chalk.yellow("\nāš ļø Coverage reporting is not yet implemented.\n"),
142
+ chalk.green(
143
+ "\nšŸ“Š Coverage enabled. Running tests with coverage...\n",
144
+ ),
135
145
  );
136
- }
137
146
 
138
- const proc = spawn("node", nodeArgs, {
139
- cwd,
140
- stdio: "inherit",
141
- env,
142
- });
147
+ const proc = spawn(
148
+ "npx",
149
+ ["c8", "--reporter=lcov", "--reporter=text", "node", scriptPath],
150
+ { stdio: "inherit" },
151
+ );
143
152
 
144
- proc.on("close", (code) => {
145
- try {
146
- fs.unlinkSync(scriptPath);
147
- } catch (e) {
148
- // Ignore cleanup errors
149
- }
150
- process.exit(code || 0);
151
- });
153
+ proc.on("close", (code) => process.exit(code || 0));
154
+ proc.on("error", (err) => {
155
+ console.error(chalk.red("Failed to run coverage:"), err);
156
+ process.exit(1);
157
+ });
158
+ } else {
159
+ const proc = spawn("node", [scriptPath], { stdio: "inherit" });
152
160
 
153
- proc.on("error", (error) => {
154
- console.error(chalk.red("Failed to run tests:"), error);
155
- try {
156
- fs.unlinkSync(scriptPath);
157
- } catch (e) {
158
- // Ignore cleanup errors
159
- }
160
- process.exit(1);
161
- });
161
+ proc.on("close", (code) => process.exit(code || 0));
162
+ proc.on("error", (err) => {
163
+ console.error(chalk.red("Failed to run tests:"), err);
164
+ process.exit(1);
165
+ });
166
+ }
162
167
  } catch (error: any) {
163
168
  console.error(chalk.red("Failed to create test runner:"), error.message);
164
169
  process.exit(1);
@@ -184,11 +189,8 @@ export class TestCommand {
184
189
  noColor,
185
190
  } = options;
186
191
 
187
- // Determine the runner path - try to find the actual test runner
188
- // This assumes the test runner is installed as a dependency
189
- let runnerImportPath = "fragment-ts/testing";
192
+ let runnerImportPath = "fragment-ts";
190
193
 
191
- // Try to find the local test runner first for development
192
194
  const possiblePaths = [
193
195
  path.join(process.cwd(), "node_modules", "fragment-ts", "testing"),
194
196
  path.join(
@@ -198,7 +200,7 @@ export class TestCommand {
198
200
  "dist",
199
201
  "testing",
200
202
  ),
201
- path.join(__dirname, "..", "..", "testing"), // If we're in the fragment-ts package itself
203
+ path.join(__dirname, "..", "..", "testing"),
202
204
  ];
203
205
 
204
206
  let resolvedRunnerPath = runnerImportPath;
@@ -215,11 +217,9 @@ export class TestCommand {
215
217
  ${useTypeScript ? "require('ts-node/register/transpile-only');" : ""}
216
218
  require('reflect-metadata');
217
219
 
218
- // Set environment
219
220
  process.env.NODE_ENV = 'test';
220
221
  ${noColor ? "process.env.FORCE_COLOR = '0';" : "process.env.FORCE_COLOR = '1';"}
221
222
 
222
- // Set up TypeScript config if available
223
223
  ${
224
224
  hasTsConfig && useTypeScript
225
225
  ? `
@@ -235,18 +235,14 @@ try {
235
235
  skipLibCheck: true
236
236
  }
237
237
  });
238
- } catch (error) {
239
- // Ignore, ts-node might not be available
240
- }`
238
+ } catch (error) {}`
241
239
  : ""
242
240
  }
243
241
 
244
242
  let testRunner;
245
243
  try {
246
- // Try to import the test runner
247
244
  const testModule = require('${resolvedRunnerPath}');
248
245
 
249
- // Handle different export patterns
250
246
  if (testModule.getTestRunner) {
251
247
  testRunner = testModule.getTestRunner();
252
248
  } else if (testModule.TestRunner) {
@@ -254,7 +250,6 @@ try {
254
250
  } else if (testModule.default && testModule.default.getTestRunner) {
255
251
  testRunner = testModule.default.getTestRunner();
256
252
  } else {
257
- // Fallback to creating a new instance
258
253
  testRunner = testModule;
259
254
  }
260
255
  } catch (error) {
@@ -266,35 +261,18 @@ try {
266
261
  async function runTests() {
267
262
  try {
268
263
  console.log('Looking for test files...');
269
-
270
- // Load test files with the runner
271
264
  await testRunner.loadTestFiles('${basePath}/${pattern}');
272
-
273
- // Run tests
274
265
  await testRunner.run();
275
266
  } catch (error) {
276
267
  console.error('\\nāŒ Error running tests:', error.message);
277
-
278
- if (error.stack && process.env.DEBUG) {
279
- console.error(error.stack);
280
- }
281
-
268
+ if (error.stack && process.env.DEBUG) console.error(error.stack);
282
269
  process.exit(1);
283
270
  }
284
271
  }
285
272
 
286
- // Handle process termination
287
- process.on('SIGINT', () => {
288
- console.log('\\n\\nTest run interrupted');
289
- process.exit(130);
290
- });
291
-
292
- process.on('SIGTERM', () => {
293
- console.log('\\n\\nTest run terminated');
294
- process.exit(143);
295
- });
273
+ process.on('SIGINT', () => { console.log('\\n\\nTest run interrupted'); process.exit(130); });
274
+ process.on('SIGTERM', () => { console.log('\\n\\nTest run terminated'); process.exit(143); });
296
275
 
297
- // Run the tests
298
276
  runTests().catch(error => {
299
277
  console.error('Unhandled error:', error);
300
278
  process.exit(1);