katax-cli 1.0.0 → 1.1.0

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.
Files changed (137) hide show
  1. package/README.md +241 -29
  2. package/dist/commands/add-endpoint.d.ts +1 -0
  3. package/dist/commands/add-endpoint.d.ts.map +1 -0
  4. package/dist/commands/add-endpoint.js +18 -39
  5. package/dist/commands/add-endpoint.js.map +1 -0
  6. package/dist/commands/deploy.d.ts +14 -0
  7. package/dist/commands/deploy.d.ts.map +1 -0
  8. package/dist/commands/deploy.js +416 -0
  9. package/dist/commands/deploy.js.map +1 -0
  10. package/dist/commands/generate-crud.d.ts +1 -0
  11. package/dist/commands/generate-crud.d.ts.map +1 -0
  12. package/dist/commands/generate-crud.js +1 -8
  13. package/dist/commands/generate-crud.js.map +1 -0
  14. package/dist/commands/generate-crud.refactored.d.ts +6 -0
  15. package/dist/commands/generate-crud.refactored.d.ts.map +1 -0
  16. package/dist/commands/generate-crud.refactored.js +139 -0
  17. package/dist/commands/generate-crud.refactored.js.map +1 -0
  18. package/dist/commands/info.d.ts +1 -0
  19. package/dist/commands/info.d.ts.map +1 -0
  20. package/dist/commands/info.js +1 -5
  21. package/dist/commands/info.js.map +1 -0
  22. package/dist/commands/init.d.ts +1 -0
  23. package/dist/commands/init.d.ts.map +1 -0
  24. package/dist/commands/init.js +9 -40
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/init.refactored.d.ts +6 -0
  27. package/dist/commands/init.refactored.d.ts.map +1 -0
  28. package/dist/commands/init.refactored.js +224 -0
  29. package/dist/commands/init.refactored.js.map +1 -0
  30. package/dist/core/errors.d.ts +77 -0
  31. package/dist/core/errors.d.ts.map +1 -0
  32. package/dist/core/errors.js +130 -0
  33. package/dist/core/errors.js.map +1 -0
  34. package/dist/core/index.d.ts +3 -0
  35. package/dist/core/index.d.ts.map +1 -0
  36. package/dist/core/index.js +3 -0
  37. package/dist/core/index.js.map +1 -0
  38. package/dist/core/result.d.ts +26 -0
  39. package/dist/core/result.d.ts.map +1 -0
  40. package/dist/core/result.js +76 -0
  41. package/dist/core/result.js.map +1 -0
  42. package/dist/generators/controller-generator.d.ts +1 -0
  43. package/dist/generators/controller-generator.d.ts.map +1 -0
  44. package/dist/generators/controller-generator.js +1 -2
  45. package/dist/generators/controller-generator.js.map +1 -0
  46. package/dist/generators/handler-generator.d.ts +1 -0
  47. package/dist/generators/handler-generator.d.ts.map +1 -0
  48. package/dist/generators/handler-generator.js +35 -22
  49. package/dist/generators/handler-generator.js.map +1 -0
  50. package/dist/generators/route-generator.d.ts +1 -0
  51. package/dist/generators/route-generator.d.ts.map +1 -0
  52. package/dist/generators/route-generator.js +1 -2
  53. package/dist/generators/route-generator.js.map +1 -0
  54. package/dist/generators/router-updater.d.ts +1 -0
  55. package/dist/generators/router-updater.d.ts.map +1 -0
  56. package/dist/generators/router-updater.js +1 -6
  57. package/dist/generators/router-updater.js.map +1 -0
  58. package/dist/generators/validator-generator.d.ts +1 -0
  59. package/dist/generators/validator-generator.d.ts.map +1 -0
  60. package/dist/generators/validator-generator.improved.d.ts +3 -0
  61. package/dist/generators/validator-generator.improved.d.ts.map +1 -0
  62. package/dist/generators/validator-generator.improved.js +184 -0
  63. package/dist/generators/validator-generator.improved.js.map +1 -0
  64. package/dist/generators/validator-generator.js +1 -10
  65. package/dist/generators/validator-generator.js.map +1 -0
  66. package/dist/index.d.ts +1 -6
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +37 -19
  69. package/dist/index.js.map +1 -0
  70. package/dist/services/ast-router-updater.d.ts +16 -0
  71. package/dist/services/ast-router-updater.d.ts.map +1 -0
  72. package/dist/services/ast-router-updater.js +130 -0
  73. package/dist/services/ast-router-updater.js.map +1 -0
  74. package/dist/services/code-generation.service.d.ts +15 -0
  75. package/dist/services/code-generation.service.d.ts.map +1 -0
  76. package/dist/services/code-generation.service.js +110 -0
  77. package/dist/services/code-generation.service.js.map +1 -0
  78. package/dist/services/index.d.ts +4 -0
  79. package/dist/services/index.d.ts.map +1 -0
  80. package/dist/services/index.js +4 -0
  81. package/dist/services/index.js.map +1 -0
  82. package/dist/services/project-structure-generator.d.ts +30 -0
  83. package/dist/services/project-structure-generator.d.ts.map +1 -0
  84. package/dist/services/project-structure-generator.js +884 -0
  85. package/dist/services/project-structure-generator.js.map +1 -0
  86. package/dist/templates/base/code-builder.d.ts +34 -0
  87. package/dist/templates/base/code-builder.d.ts.map +1 -0
  88. package/dist/templates/base/code-builder.js +154 -0
  89. package/dist/templates/base/code-builder.js.map +1 -0
  90. package/dist/templates/base/template-engine.d.ts +28 -0
  91. package/dist/templates/base/template-engine.d.ts.map +1 -0
  92. package/dist/templates/base/template-engine.js +47 -0
  93. package/dist/templates/base/template-engine.js.map +1 -0
  94. package/dist/templates/generators/controller-template.d.ts +15 -0
  95. package/dist/templates/generators/controller-template.d.ts.map +1 -0
  96. package/dist/templates/generators/controller-template.js +185 -0
  97. package/dist/templates/generators/controller-template.js.map +1 -0
  98. package/dist/templates/generators/di-container.d.ts +6 -0
  99. package/dist/templates/generators/di-container.d.ts.map +1 -0
  100. package/dist/templates/generators/di-container.js +121 -0
  101. package/dist/templates/generators/di-container.js.map +1 -0
  102. package/dist/templates/generators/handler-template.d.ts +15 -0
  103. package/dist/templates/generators/handler-template.d.ts.map +1 -0
  104. package/dist/templates/generators/handler-template.js +208 -0
  105. package/dist/templates/generators/handler-template.js.map +1 -0
  106. package/dist/templates/generators/repository-template.d.ts +23 -0
  107. package/dist/templates/generators/repository-template.d.ts.map +1 -0
  108. package/dist/templates/generators/repository-template.js +237 -0
  109. package/dist/templates/generators/repository-template.js.map +1 -0
  110. package/dist/templates/generators/response-utils-template.d.ts +2 -0
  111. package/dist/templates/generators/response-utils-template.d.ts.map +1 -0
  112. package/dist/templates/generators/response-utils-template.js +112 -0
  113. package/dist/templates/generators/response-utils-template.js.map +1 -0
  114. package/dist/templates/generators/test-generator.d.ts +11 -0
  115. package/dist/templates/generators/test-generator.d.ts.map +1 -0
  116. package/dist/templates/generators/test-generator.js +206 -0
  117. package/dist/templates/generators/test-generator.js.map +1 -0
  118. package/dist/templates/index.d.ts +8 -0
  119. package/dist/templates/index.d.ts.map +1 -0
  120. package/dist/templates/index.js +8 -0
  121. package/dist/templates/index.js.map +1 -0
  122. package/dist/types/index.d.ts +1 -0
  123. package/dist/types/index.d.ts.map +1 -0
  124. package/dist/types/index.js +1 -0
  125. package/dist/types/index.js.map +1 -0
  126. package/dist/utils/file-utils.d.ts +1 -30
  127. package/dist/utils/file-utils.d.ts.map +1 -0
  128. package/dist/utils/file-utils.js +1 -32
  129. package/dist/utils/file-utils.js.map +1 -0
  130. package/dist/utils/logger.d.ts +1 -0
  131. package/dist/utils/logger.d.ts.map +1 -0
  132. package/dist/utils/logger.js +1 -0
  133. package/dist/utils/logger.js.map +1 -0
  134. package/package.json +1 -1
  135. package/dist/database/mongodb.ts +0 -46
  136. package/dist/database/mysql.ts +0 -26
  137. package/dist/database/postgresql.ts +0 -52
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-crud.refactored.js","sourceRoot":"","sources":["../../src/commands/generate-crud.refactored.ts"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
1
  export declare function infoCommand(): Promise<void>;
2
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,kBAyChC"}
@@ -3,26 +3,22 @@ import { title, info, gray, error, warning } from '../utils/logger.js';
3
3
  import { fileExists } from '../utils/file-utils.js';
4
4
  export async function infoCommand() {
5
5
  title('šŸ“Š Project Information');
6
- // Check if in project
7
6
  const packageJsonPath = path.join(process.cwd(), 'package.json');
8
7
  if (!fileExists(packageJsonPath)) {
9
8
  error('Not in a project directory!');
10
9
  process.exit(1);
11
10
  }
12
- // Read package.json
13
11
  const fs = await import('fs');
14
12
  const packageJson = JSON.parse(await fs.promises.readFile(packageJsonPath, 'utf-8'));
15
13
  info('Project Details:');
16
14
  gray(` Name: ${packageJson.name}`);
17
15
  gray(` Version: ${packageJson.version}`);
18
16
  gray(` Description: ${packageJson.description || 'N/A'}\n`);
19
- // Check for katax-core
20
17
  const hasKataxCore = packageJson.dependencies?.['katax-core'];
21
18
  info('Dependencies:');
22
19
  gray(` katax-core: ${hasKataxCore ? 'āœ… Installed' : 'āŒ Not installed'}`);
23
20
  gray(` express: ${packageJson.dependencies?.express ? 'āœ… Installed' : 'āŒ Not installed'}`);
24
21
  gray(` TypeScript: ${packageJson.devDependencies?.typescript ? 'āœ… Installed' : 'āŒ Not installed'}\n`);
25
- // Scan for API routes
26
22
  const apiPath = path.join(process.cwd(), 'src', 'api');
27
23
  if (await dirExists(apiPath)) {
28
24
  info('API Routes:');
@@ -64,7 +60,6 @@ async function scanRoutes(apiPath) {
64
60
  }
65
61
  }
66
62
  catch (err) {
67
- // Ignore errors
68
63
  }
69
64
  return routes;
70
65
  }
@@ -78,3 +73,4 @@ async function fileExistsAsync(filePath) {
78
73
  return false;
79
74
  }
80
75
  }
76
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
@@ -3,3 +3,4 @@ interface InitOptions {
3
3
  }
4
4
  export declare function initCommand(projectName?: string, options?: InitOptions): Promise<void>;
5
5
  export {};
6
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAsBA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,iBA4OhF"}
@@ -7,7 +7,6 @@ import { success, error, gray, title, info } from '../utils/logger.js';
7
7
  import { directoryExists, ensureDir, writeFile } from '../utils/file-utils.js';
8
8
  export async function initCommand(projectName, options = {}) {
9
9
  title('šŸš€ Katax CLI - Initialize API Project');
10
- // Determine project name
11
10
  let finalProjectName = projectName || '';
12
11
  if (!finalProjectName) {
13
12
  const answer = await inquirer.prompt([
@@ -27,13 +26,11 @@ export async function initCommand(projectName, options = {}) {
27
26
  finalProjectName = answer.projectName;
28
27
  }
29
28
  const projectPath = path.join(process.cwd(), finalProjectName);
30
- // Check if directory exists
31
29
  if (directoryExists(projectPath) && !options.force) {
32
30
  error(`Directory "${finalProjectName}" already exists!`);
33
31
  gray('Use --force to overwrite\n');
34
32
  process.exit(1);
35
33
  }
36
- // Interactive configuration
37
34
  const answers = await inquirer.prompt([
38
35
  {
39
36
  type: 'input',
@@ -83,7 +80,6 @@ export async function initCommand(projectName, options = {}) {
83
80
  }
84
81
  }
85
82
  ]);
86
- // Ask for database credentials if database is selected
87
83
  let dbConfig = {};
88
84
  if (answers.database !== 'none') {
89
85
  const dbQuestions = [];
@@ -139,7 +135,6 @@ export async function initCommand(projectName, options = {}) {
139
135
  });
140
136
  }
141
137
  dbConfig = await inquirer.prompt(dbQuestions);
142
- // Ask for MongoDB credentials if authentication is enabled
143
138
  if (answers.database === 'mongodb' && dbConfig.useAuth) {
144
139
  const authConfig = await inquirer.prompt([
145
140
  {
@@ -171,7 +166,6 @@ export async function initCommand(projectName, options = {}) {
171
166
  port: parseInt(answers.port),
172
167
  dbConfig
173
168
  };
174
- // Ask for JWT secret generation if JWT is enabled
175
169
  let generateJwtSecrets = false;
176
170
  if (config.authentication === 'jwt') {
177
171
  const jwtAnswer = await inquirer.prompt([
@@ -184,7 +178,6 @@ export async function initCommand(projectName, options = {}) {
184
178
  ]);
185
179
  generateJwtSecrets = jwtAnswer.generate;
186
180
  }
187
- // Display configuration
188
181
  gray('\nšŸ“‹ Project Configuration:');
189
182
  gray(` Name: ${config.name}`);
190
183
  gray(` Database: ${config.database}`);
@@ -193,10 +186,8 @@ export async function initCommand(projectName, options = {}) {
193
186
  gray(` Port: ${config.port}\n`);
194
187
  const spinner = ora('Creating project structure...').start();
195
188
  try {
196
- // Create project structure
197
189
  await createProjectStructure(projectPath, config, generateJwtSecrets);
198
190
  spinner.succeed('Project structure created');
199
- // Install dependencies
200
191
  spinner.start('Installing dependencies...');
201
192
  await installDependencies(projectPath);
202
193
  spinner.succeed('Dependencies installed');
@@ -359,7 +350,6 @@ async function createDatabaseConnection(projectPath, config) {
359
350
  await writeFile(destPath, content);
360
351
  }
361
352
  async function createProjectStructure(projectPath, config, generateJwtSecrets) {
362
- // Create directories
363
353
  const dirs = [
364
354
  'src',
365
355
  'src/api',
@@ -371,12 +361,10 @@ async function createProjectStructure(projectPath, config, generateJwtSecrets) {
371
361
  if (config.database !== 'none') {
372
362
  dirs.push('src/database');
373
363
  }
374
- // Add default hello endpoint
375
364
  dirs.push('src/api/hello');
376
365
  for (const dir of dirs) {
377
366
  await ensureDir(path.join(projectPath, dir));
378
367
  }
379
- // Create package.json
380
368
  const packageJson = {
381
369
  name: config.name,
382
370
  version: '1.0.0',
@@ -427,28 +415,29 @@ async function createProjectStructure(projectPath, config, generateJwtSecrets) {
427
415
  }
428
416
  };
429
417
  await writeFile(path.join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2));
430
- // Create tsconfig.json - ESM optimized for Linux/Ubuntu deployment
431
418
  const tsConfig = {
432
419
  compilerOptions: {
433
420
  target: 'ES2022',
434
- module: 'ES2022',
421
+ module: 'ESNext',
435
422
  lib: ['ES2022'],
436
423
  moduleResolution: 'node',
437
- sourceMap: true,
438
- outDir: './dist',
439
- rootDir: './src',
440
424
  esModuleInterop: true,
425
+ allowSyntheticDefaultImports: true,
441
426
  forceConsistentCasingInFileNames: true,
442
427
  strict: true,
443
428
  skipLibCheck: true,
444
429
  resolveJsonModule: true,
445
- declaration: true
430
+ declaration: true,
431
+ declarationMap: true,
432
+ sourceMap: true,
433
+ removeComments: true,
434
+ outDir: './dist',
435
+ rootDir: './src'
446
436
  },
447
437
  include: ['src/**/*'],
448
438
  exclude: ['node_modules', 'dist']
449
439
  };
450
440
  await writeFile(path.join(projectPath, 'tsconfig.json'), JSON.stringify(tsConfig, null, 2));
451
- // Create .env.example and .env
452
441
  let databaseUrl = '';
453
442
  let dbEnvVars = '';
454
443
  if (config.database === 'postgresql' && config.dbConfig) {
@@ -486,7 +475,6 @@ DB_PORT=${port}
486
475
  DB_NAME=${database}`;
487
476
  }
488
477
  }
489
- // Generate JWT secrets if needed
490
478
  let jwtConfig = '';
491
479
  if (config.authentication === 'jwt') {
492
480
  if (generateJwtSecrets) {
@@ -521,7 +509,6 @@ ${jwtConfig}
521
509
  `;
522
510
  await writeFile(path.join(projectPath, '.env.example'), envContent);
523
511
  await writeFile(path.join(projectPath, '.env'), envContent);
524
- // Create .gitignore
525
512
  const gitignoreContent = `node_modules/
526
513
  dist/
527
514
  .env
@@ -531,7 +518,6 @@ coverage/
531
518
  .vscode/
532
519
  `;
533
520
  await writeFile(path.join(projectPath, '.gitignore'), gitignoreContent);
534
- // Create .gitattributes for consistent line endings across Windows/Linux
535
521
  const gitattributesContent = `# Auto normalize line endings to LF on checkout (critical for Ubuntu deployment)
536
522
  * text=auto eol=lf
537
523
 
@@ -552,7 +538,6 @@ coverage/
552
538
  *.pdf binary
553
539
  `;
554
540
  await writeFile(path.join(projectPath, '.gitattributes'), gitattributesContent);
555
- // Create index.ts
556
541
  const indexContent = `import app from './app.js';
557
542
  import dotenv from 'dotenv';
558
543
  import { logger } from './shared/logger.utils.js';
@@ -572,7 +557,6 @@ app.listen(PORT, () => {
572
557
  });
573
558
  `;
574
559
  await writeFile(path.join(projectPath, 'src/index.ts'), indexContent);
575
- // Create app.ts
576
560
  const appContent = `import express from 'express';
577
561
  import cors from 'cors';
578
562
  import router from './api/routes.js';
@@ -606,7 +590,6 @@ app.use(errorMiddleware);
606
590
  export default app;
607
591
  `;
608
592
  await writeFile(path.join(projectPath, 'src/app.ts'), appContent);
609
- // Create routes.ts
610
593
  const routesContent = `import { Router } from 'express';
611
594
  import helloRouter from './hello/hello.routes.js';
612
595
  import { healthCheckHandler } from './health/health.handler.js';
@@ -622,7 +605,6 @@ router.use('/hello', helloRouter);
622
605
  export default router;
623
606
  `;
624
607
  await writeFile(path.join(projectPath, 'src/api/routes.ts'), routesContent);
625
- // Create error middleware
626
608
  const errorMiddlewareContent = `import { Request, Response, NextFunction } from 'express';
627
609
  import { logger } from '../shared/logger.utils.js';
628
610
 
@@ -657,11 +639,9 @@ export function errorMiddleware(
657
639
  }
658
640
  `;
659
641
  await writeFile(path.join(projectPath, 'src/middleware/error.middleware.ts'), errorMiddlewareContent);
660
- // Create database connection if database is selected
661
642
  if (config.database !== 'none') {
662
643
  await createDatabaseConnection(projectPath, config);
663
644
  }
664
- // Create shared utilities
665
645
  if (config.validation === 'katax-core') {
666
646
  const apiUtilsContent = `import { Request, Response } from 'express';
667
647
  import { logger } from './logger.utils.js';
@@ -763,7 +743,6 @@ export async function sendResponse<TValidation = any, TResponse = any>(
763
743
  `;
764
744
  await writeFile(path.join(projectPath, 'src/shared/api.utils.ts'), apiUtilsContent);
765
745
  }
766
- // Create JWT utilities if JWT authentication is selected
767
746
  if (config.authentication === 'jwt') {
768
747
  const jwtUtilsContent = `import jwt from 'jsonwebtoken';
769
748
  import { Request, Response, NextFunction } from 'express';
@@ -920,7 +899,6 @@ export function requireRole(...roles: string[]) {
920
899
  `;
921
900
  await writeFile(path.join(projectPath, 'src/shared/jwt.utils.ts'), jwtUtilsContent);
922
901
  }
923
- // Create logger utility with pino
924
902
  const loggerUtilsContent = `import pino from 'pino';
925
903
 
926
904
  const isDevelopment = process.env.NODE_ENV !== 'production';
@@ -993,7 +971,6 @@ export function logDebug(message: string, data?: Record<string, any>): void {
993
971
  }
994
972
  `;
995
973
  await writeFile(path.join(projectPath, 'src/shared/logger.utils.ts'), loggerUtilsContent);
996
- // Create logger middleware
997
974
  const loggerMiddlewareContent = `import { Request, Response, NextFunction } from 'express';
998
975
  import { logRequest } from '../shared/logger.utils.js';
999
976
 
@@ -1013,7 +990,6 @@ export function requestLogger(req: Request, res: Response, next: NextFunction):
1013
990
  }
1014
991
  `;
1015
992
  await writeFile(path.join(projectPath, 'src/middleware/logger.middleware.ts'), loggerMiddlewareContent);
1016
- // Create CORS configuration
1017
993
  const corsConfigContent = `import { CorsOptions } from 'cors';
1018
994
 
1019
995
  const allowedOrigins = process.env.ALLOWED_ORIGINS
@@ -1038,7 +1014,6 @@ export const corsOptions: CorsOptions = {
1038
1014
  };
1039
1015
  `;
1040
1016
  await writeFile(path.join(projectPath, 'src/config/cors.config.ts'), corsConfigContent);
1041
- // Create environment validator
1042
1017
  const envValidatorContent = `import { logger } from '../shared/logger.utils.js';
1043
1018
 
1044
1019
  interface RequiredEnvVars {
@@ -1073,7 +1048,6 @@ ${config.database !== 'none' ? ` // Database variables\n required.DATABASE_URL
1073
1048
  }
1074
1049
  `;
1075
1050
  await writeFile(path.join(projectPath, 'src/config/env.validator.ts'), envValidatorContent);
1076
- // Create health check handler
1077
1051
  const healthHandlerContent = `import { Request, Response } from 'express';
1078
1052
  import os from 'os';
1079
1053
 
@@ -1148,7 +1122,6 @@ function formatBytes(bytes: number): string {
1148
1122
  `;
1149
1123
  await ensureDir(path.join(projectPath, 'src/api/health'));
1150
1124
  await writeFile(path.join(projectPath, 'src/api/health/health.handler.ts'), healthHandlerContent);
1151
- // Create README.md
1152
1125
  const readmeContent = `# ${config.name}
1153
1126
 
1154
1127
  ${config.description}
@@ -1211,12 +1184,10 @@ katax generate crud products
1211
1184
  MIT
1212
1185
  `;
1213
1186
  await writeFile(path.join(projectPath, 'README.md'), readmeContent);
1214
- // Create default hello endpoint
1215
1187
  await createHelloEndpoint(projectPath, config);
1216
1188
  }
1217
1189
  async function createHelloEndpoint(projectPath, config) {
1218
1190
  const helloPath = path.join(projectPath, 'src/api/hello');
1219
- // hello.controller.ts
1220
1191
  const controllerContent = [
1221
1192
  "import { ControllerResult, createSuccessResult, createErrorResult } from '../../shared/api.utils.js';",
1222
1193
  "import { HelloQuery } from './hello.validator.js';",
@@ -1248,7 +1219,6 @@ async function createHelloEndpoint(projectPath, config) {
1248
1219
  "}"
1249
1220
  ].join('\n');
1250
1221
  await writeFile(path.join(helloPath, 'hello.controller.ts'), controllerContent);
1251
- // hello.handler.ts
1252
1222
  const handlerContent = [
1253
1223
  "import { Request, Response } from 'express';",
1254
1224
  "import { getHello } from './hello.controller.js';",
@@ -1273,7 +1243,6 @@ async function createHelloEndpoint(projectPath, config) {
1273
1243
  "}"
1274
1244
  ].join('\n');
1275
1245
  await writeFile(path.join(helloPath, 'hello.handler.ts'), handlerContent);
1276
- // hello.routes.ts
1277
1246
  const routesContent = [
1278
1247
  "import { Router } from 'express';",
1279
1248
  "import { getHelloHandler } from './hello.handler.js';",
@@ -1291,7 +1260,6 @@ async function createHelloEndpoint(projectPath, config) {
1291
1260
  "export default router;"
1292
1261
  ].join('\n');
1293
1262
  await writeFile(path.join(helloPath, 'hello.routes.ts'), routesContent);
1294
- // Only create validator if katax-core is enabled
1295
1263
  if (config.validation === 'katax-core') {
1296
1264
  const validatorContent = [
1297
1265
  "import { k, kataxInfer } from 'katax-core';",
@@ -1338,3 +1306,4 @@ async function createHelloEndpoint(projectPath, config) {
1338
1306
  await writeFile(path.join(helloPath, 'hello.validator.ts'), validatorContent);
1339
1307
  }
1340
1308
  }
1309
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface InitOptions {
2
+ force?: boolean;
3
+ }
4
+ export declare function initCommand(projectName?: string, options?: InitOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=init.refactored.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.refactored.d.ts","sourceRoot":"","sources":["../../src/commands/init.refactored.ts"],"names":[],"mappings":"AAwBA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,iBAkIhF"}
@@ -0,0 +1,224 @@
1
+ import inquirer from 'inquirer';
2
+ import ora from 'ora';
3
+ import path from 'path';
4
+ import { execa } from 'execa';
5
+ import { success, error, gray, title, info } from '../utils/logger.js';
6
+ import { directoryExists } from '../utils/file-utils.js';
7
+ import { ProjectStructureGenerator } from '../services/project-structure-generator.js';
8
+ export async function initCommand(projectName, options = {}) {
9
+ title('šŸš€ Katax CLI - Initialize API Project');
10
+ let finalProjectName = projectName || '';
11
+ if (!finalProjectName) {
12
+ const answer = await inquirer.prompt([
13
+ {
14
+ type: 'input',
15
+ name: 'projectName',
16
+ message: 'Project name:',
17
+ default: 'my-api',
18
+ validate: (input) => {
19
+ if (!/^[a-z0-9-_]+$/i.test(input)) {
20
+ return 'Project name can only contain letters, numbers, hyphens, and underscores';
21
+ }
22
+ return true;
23
+ }
24
+ }
25
+ ]);
26
+ finalProjectName = answer.projectName;
27
+ }
28
+ const projectPath = path.join(process.cwd(), finalProjectName);
29
+ if (directoryExists(projectPath) && !options.force) {
30
+ error(`Directory "${finalProjectName}" already exists!`);
31
+ gray('Use --force to overwrite\n');
32
+ process.exit(1);
33
+ }
34
+ const answers = await inquirer.prompt([
35
+ {
36
+ type: 'input',
37
+ name: 'description',
38
+ message: 'Project description:',
39
+ default: 'REST API built with Express and TypeScript'
40
+ },
41
+ {
42
+ type: 'list',
43
+ name: 'database',
44
+ message: 'Select database:',
45
+ choices: [
46
+ { name: 'PostgreSQL', value: 'postgresql' },
47
+ { name: 'MySQL', value: 'mysql' },
48
+ { name: 'MongoDB', value: 'mongodb' },
49
+ { name: 'None (no database)', value: 'none' }
50
+ ],
51
+ default: 'postgresql'
52
+ },
53
+ {
54
+ type: 'list',
55
+ name: 'authentication',
56
+ message: 'Add authentication?',
57
+ choices: [
58
+ { name: 'JWT Authentication', value: 'jwt' },
59
+ { name: 'None', value: 'none' }
60
+ ],
61
+ default: 'jwt'
62
+ },
63
+ {
64
+ type: 'confirm',
65
+ name: 'validation',
66
+ message: 'Use katax-core for validation?',
67
+ default: true
68
+ },
69
+ {
70
+ type: 'input',
71
+ name: 'port',
72
+ message: 'Server port:',
73
+ default: '3000',
74
+ validate: (input) => {
75
+ const port = parseInt(input);
76
+ if (isNaN(port) || port < 1 || port > 65535) {
77
+ return 'Port must be a number between 1 and 65535';
78
+ }
79
+ return true;
80
+ }
81
+ }
82
+ ]);
83
+ let dbConfig = {};
84
+ if (answers.database !== 'none') {
85
+ dbConfig = await collectDatabaseConfig(answers.database, finalProjectName);
86
+ }
87
+ const config = {
88
+ name: finalProjectName,
89
+ description: answers.description,
90
+ type: 'rest-api',
91
+ typescript: true,
92
+ database: answers.database,
93
+ authentication: answers.authentication,
94
+ validation: answers.validation ? 'katax-core' : 'none',
95
+ orm: 'none',
96
+ port: parseInt(answers.port),
97
+ dbConfig
98
+ };
99
+ displayConfiguration(config);
100
+ const spinner = ora('Creating project structure...').start();
101
+ try {
102
+ const generator = new ProjectStructureGenerator(projectPath, config);
103
+ await generator.generate();
104
+ spinner.succeed('Project structure created');
105
+ spinner.start('Installing dependencies...');
106
+ await installDependencies(projectPath);
107
+ spinner.succeed('Dependencies installed');
108
+ success(`\n✨ Project "${finalProjectName}" created successfully!\n`);
109
+ displayNextSteps(finalProjectName);
110
+ }
111
+ catch (err) {
112
+ spinner.fail('Failed to create project');
113
+ error(err instanceof Error ? err.message : 'Unknown error');
114
+ if (err instanceof Error && err.stack) {
115
+ gray(err.stack);
116
+ }
117
+ process.exit(1);
118
+ }
119
+ }
120
+ async function collectDatabaseConfig(database, projectName) {
121
+ const dbQuestions = [];
122
+ if (database === 'postgresql' || database === 'mysql') {
123
+ dbQuestions.push({
124
+ type: 'input',
125
+ name: 'host',
126
+ message: `${database === 'postgresql' ? 'PostgreSQL' : 'MySQL'} host:`,
127
+ default: 'localhost'
128
+ }, {
129
+ type: 'input',
130
+ name: 'port',
131
+ message: `${database === 'postgresql' ? 'PostgreSQL' : 'MySQL'} port:`,
132
+ default: database === 'postgresql' ? '5432' : '3306'
133
+ }, {
134
+ type: 'input',
135
+ name: 'user',
136
+ message: 'Database user:',
137
+ default: database === 'postgresql' ? 'postgres' : 'root'
138
+ }, {
139
+ type: 'password',
140
+ name: 'password',
141
+ message: 'Database password:',
142
+ default: 'password'
143
+ }, {
144
+ type: 'input',
145
+ name: 'database',
146
+ message: 'Database name:',
147
+ default: projectName.toLowerCase().replace(/-/g, '_')
148
+ });
149
+ }
150
+ else if (database === 'mongodb') {
151
+ dbQuestions.push({
152
+ type: 'input',
153
+ name: 'host',
154
+ message: 'MongoDB host:',
155
+ default: 'localhost'
156
+ }, {
157
+ type: 'input',
158
+ name: 'port',
159
+ message: 'MongoDB port:',
160
+ default: '27017'
161
+ }, {
162
+ type: 'input',
163
+ name: 'database',
164
+ message: 'Database name:',
165
+ default: projectName.toLowerCase().replace(/-/g, '_')
166
+ }, {
167
+ type: 'confirm',
168
+ name: 'useAuth',
169
+ message: 'Use authentication?',
170
+ default: false
171
+ });
172
+ }
173
+ const config = await inquirer.prompt(dbQuestions);
174
+ if (database === 'mongodb' && config.useAuth) {
175
+ const authConfig = await inquirer.prompt([
176
+ {
177
+ type: 'input',
178
+ name: 'user',
179
+ message: 'MongoDB user:',
180
+ default: 'admin'
181
+ },
182
+ {
183
+ type: 'password',
184
+ name: 'password',
185
+ message: 'MongoDB password:',
186
+ default: 'password'
187
+ }
188
+ ]);
189
+ config.user = authConfig.user;
190
+ config.password = authConfig.password;
191
+ }
192
+ return config;
193
+ }
194
+ function displayConfiguration(config) {
195
+ gray('\nšŸ“‹ Project Configuration:');
196
+ gray(` Name: ${config.name}`);
197
+ gray(` Database: ${config.database}`);
198
+ gray(` Auth: ${config.authentication}`);
199
+ gray(` Validation: ${config.validation}`);
200
+ gray(` Port: ${config.port}\n`);
201
+ }
202
+ function displayNextSteps(projectName) {
203
+ info('Next steps:');
204
+ gray(` cd ${projectName}`);
205
+ gray(` npm run dev\n`);
206
+ info('Available commands:');
207
+ gray(` katax add endpoint <name> - Add a new endpoint`);
208
+ gray(` katax generate crud <name> - Generate CRUD resource`);
209
+ gray(` katax info - Show project structure\n`);
210
+ info('Generated with:');
211
+ gray(` āœ… Result pattern for type-safe error handling`);
212
+ gray(` āœ… Repository pattern for database abstraction`);
213
+ gray(` āœ… Dependency injection ready`);
214
+ gray(` āœ… Structured logging with Pino`);
215
+ gray(` āœ… Health check endpoint`);
216
+ gray(` āœ… Hello example endpoint\n`);
217
+ }
218
+ async function installDependencies(projectPath) {
219
+ await execa('npm', ['install'], {
220
+ cwd: projectPath,
221
+ stdio: 'ignore'
222
+ });
223
+ }
224
+ //# sourceMappingURL=init.refactored.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.refactored.js","sourceRoot":"","sources":["../../src/commands/init.refactored.ts"],"names":[],"mappings":"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"}