express-project-builder 1.0.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 (181) hide show
  1. package/dist/bin/index.d.ts +3 -0
  2. package/dist/bin/index.d.ts.map +1 -0
  3. package/dist/bin/index.js +177 -0
  4. package/dist/bin/index.js.map +1 -0
  5. package/dist/lib/config/createEnvExample.d.ts +3 -0
  6. package/dist/lib/config/createEnvExample.d.ts.map +1 -0
  7. package/dist/lib/config/createEnvExample.js +39 -0
  8. package/dist/lib/config/createEnvExample.js.map +1 -0
  9. package/dist/lib/config/createEslintConfig.d.ts +2 -0
  10. package/dist/lib/config/createEslintConfig.d.ts.map +1 -0
  11. package/dist/lib/config/createEslintConfig.js +48 -0
  12. package/dist/lib/config/createEslintConfig.js.map +1 -0
  13. package/dist/lib/config/createGitignore.d.ts +3 -0
  14. package/dist/lib/config/createGitignore.d.ts.map +1 -0
  15. package/dist/lib/config/createGitignore.js +51 -0
  16. package/dist/lib/config/createGitignore.js.map +1 -0
  17. package/dist/lib/config/createPackageJson.d.ts +3 -0
  18. package/dist/lib/config/createPackageJson.d.ts.map +1 -0
  19. package/dist/lib/config/createPackageJson.js +74 -0
  20. package/dist/lib/config/createPackageJson.js.map +1 -0
  21. package/dist/lib/config/createPrettierConfig.d.ts +2 -0
  22. package/dist/lib/config/createPrettierConfig.d.ts.map +1 -0
  23. package/dist/lib/config/createPrettierConfig.js +30 -0
  24. package/dist/lib/config/createPrettierConfig.js.map +1 -0
  25. package/dist/lib/config/createTsConfig.d.ts +2 -0
  26. package/dist/lib/config/createTsConfig.d.ts.map +1 -0
  27. package/dist/lib/config/createTsConfig.js +133 -0
  28. package/dist/lib/config/createTsConfig.js.map +1 -0
  29. package/dist/lib/prisma/create_Schema.Prisma.d.ts +3 -0
  30. package/dist/lib/prisma/create_Schema.Prisma.d.ts.map +1 -0
  31. package/dist/lib/prisma/create_Schema.Prisma.js +36 -0
  32. package/dist/lib/prisma/create_Schema.Prisma.js.map +1 -0
  33. package/dist/lib/src/builders/create_QueryBuilder_Helpers.d.ts +3 -0
  34. package/dist/lib/src/builders/create_QueryBuilder_Helpers.d.ts.map +1 -0
  35. package/dist/lib/src/builders/create_QueryBuilder_Helpers.js +292 -0
  36. package/dist/lib/src/builders/create_QueryBuilder_Helpers.js.map +1 -0
  37. package/dist/lib/src/config/create_Config_Index.d.ts +9 -0
  38. package/dist/lib/src/config/create_Config_Index.d.ts.map +1 -0
  39. package/dist/lib/src/config/create_Config_Index.js +92 -0
  40. package/dist/lib/src/config/create_Config_Index.js.map +1 -0
  41. package/dist/lib/src/constants/create_UserRole_Constant.d.ts +7 -0
  42. package/dist/lib/src/constants/create_UserRole_Constant.d.ts.map +1 -0
  43. package/dist/lib/src/constants/create_UserRole_Constant.js +39 -0
  44. package/dist/lib/src/constants/create_UserRole_Constant.js.map +1 -0
  45. package/dist/lib/src/createAppFile.d.ts +2 -0
  46. package/dist/lib/src/createAppFile.d.ts.map +1 -0
  47. package/dist/lib/src/createAppFile.js +122 -0
  48. package/dist/lib/src/createAppFile.js.map +1 -0
  49. package/dist/lib/src/createServerFile.d.ts +3 -0
  50. package/dist/lib/src/createServerFile.d.ts.map +1 -0
  51. package/dist/lib/src/createServerFile.js +75 -0
  52. package/dist/lib/src/createServerFile.js.map +1 -0
  53. package/dist/lib/src/createSrcStructure.d.ts +2 -0
  54. package/dist/lib/src/createSrcStructure.d.ts.map +1 -0
  55. package/dist/lib/src/createSrcStructure.js +50 -0
  56. package/dist/lib/src/createSrcStructure.js.map +1 -0
  57. package/dist/lib/src/errors/create_AppError_Class.d.ts +7 -0
  58. package/dist/lib/src/errors/create_AppError_Class.d.ts.map +1 -0
  59. package/dist/lib/src/errors/create_AppError_Class.js +65 -0
  60. package/dist/lib/src/errors/create_AppError_Class.js.map +1 -0
  61. package/dist/lib/src/errors/create_HandleCastError.d.ts +9 -0
  62. package/dist/lib/src/errors/create_HandleCastError.d.ts.map +1 -0
  63. package/dist/lib/src/errors/create_HandleCastError.js +101 -0
  64. package/dist/lib/src/errors/create_HandleCastError.js.map +1 -0
  65. package/dist/lib/src/errors/create_HandleDB_ValidationError.d.ts +9 -0
  66. package/dist/lib/src/errors/create_HandleDB_ValidationError.d.ts.map +1 -0
  67. package/dist/lib/src/errors/create_HandleDB_ValidationError.js +119 -0
  68. package/dist/lib/src/errors/create_HandleDB_ValidationError.js.map +1 -0
  69. package/dist/lib/src/errors/create_HandleDuplicateError.d.ts +9 -0
  70. package/dist/lib/src/errors/create_HandleDuplicateError.d.ts.map +1 -0
  71. package/dist/lib/src/errors/create_HandleDuplicateError.js +99 -0
  72. package/dist/lib/src/errors/create_HandleDuplicateError.js.map +1 -0
  73. package/dist/lib/src/errors/create_HandleZodValidationError.d.ts +7 -0
  74. package/dist/lib/src/errors/create_HandleZodValidationError.d.ts.map +1 -0
  75. package/dist/lib/src/errors/create_HandleZodValidationError.js +50 -0
  76. package/dist/lib/src/errors/create_HandleZodValidationError.js.map +1 -0
  77. package/dist/lib/src/interfaces/create_EmailFomat_type.d.ts +7 -0
  78. package/dist/lib/src/interfaces/create_EmailFomat_type.d.ts.map +1 -0
  79. package/dist/lib/src/interfaces/create_EmailFomat_type.js +34 -0
  80. package/dist/lib/src/interfaces/create_EmailFomat_type.js.map +1 -0
  81. package/dist/lib/src/interfaces/create_Errors_type.d.ts +7 -0
  82. package/dist/lib/src/interfaces/create_Errors_type.d.ts.map +1 -0
  83. package/dist/lib/src/interfaces/create_Errors_type.js +43 -0
  84. package/dist/lib/src/interfaces/create_Errors_type.js.map +1 -0
  85. package/dist/lib/src/interfaces/create_Index_d_type.d.ts +9 -0
  86. package/dist/lib/src/interfaces/create_Index_d_type.d.ts.map +1 -0
  87. package/dist/lib/src/interfaces/create_Index_d_type.js +45 -0
  88. package/dist/lib/src/interfaces/create_Index_d_type.js.map +1 -0
  89. package/dist/lib/src/interfaces/create_JWT_Token_type.d.ts +9 -0
  90. package/dist/lib/src/interfaces/create_JWT_Token_type.d.ts.map +1 -0
  91. package/dist/lib/src/interfaces/create_JWT_Token_type.js +33 -0
  92. package/dist/lib/src/interfaces/create_JWT_Token_type.js.map +1 -0
  93. package/dist/lib/src/interfaces/create_UserRole_type.d.ts +7 -0
  94. package/dist/lib/src/interfaces/create_UserRole_type.d.ts.map +1 -0
  95. package/dist/lib/src/interfaces/create_UserRole_type.js +33 -0
  96. package/dist/lib/src/interfaces/create_UserRole_type.js.map +1 -0
  97. package/dist/lib/src/middlewares/create_Auth_Gurad.d.ts +9 -0
  98. package/dist/lib/src/middlewares/create_Auth_Gurad.d.ts.map +1 -0
  99. package/dist/lib/src/middlewares/create_Auth_Gurad.js +99 -0
  100. package/dist/lib/src/middlewares/create_Auth_Gurad.js.map +1 -0
  101. package/dist/lib/src/middlewares/create_BigIntSerializer_Guard.d.ts +7 -0
  102. package/dist/lib/src/middlewares/create_BigIntSerializer_Guard.d.ts.map +1 -0
  103. package/dist/lib/src/middlewares/create_BigIntSerializer_Guard.js +64 -0
  104. package/dist/lib/src/middlewares/create_BigIntSerializer_Guard.js.map +1 -0
  105. package/dist/lib/src/middlewares/create_FormDataToSetJSONformatData_Guard.d.ts +7 -0
  106. package/dist/lib/src/middlewares/create_FormDataToSetJSONformatData_Guard.d.ts.map +1 -0
  107. package/dist/lib/src/middlewares/create_FormDataToSetJSONformatData_Guard.js +63 -0
  108. package/dist/lib/src/middlewares/create_FormDataToSetJSONformatData_Guard.js.map +1 -0
  109. package/dist/lib/src/middlewares/create_Global_ErrorHandler_Guard.d.ts +12 -0
  110. package/dist/lib/src/middlewares/create_Global_ErrorHandler_Guard.d.ts.map +1 -0
  111. package/dist/lib/src/middlewares/create_Global_ErrorHandler_Guard.js +375 -0
  112. package/dist/lib/src/middlewares/create_Global_ErrorHandler_Guard.js.map +1 -0
  113. package/dist/lib/src/middlewares/create_Handle_File_Upload_Middleware.d.ts +7 -0
  114. package/dist/lib/src/middlewares/create_Handle_File_Upload_Middleware.d.ts.map +1 -0
  115. package/dist/lib/src/middlewares/create_Handle_File_Upload_Middleware.js +260 -0
  116. package/dist/lib/src/middlewares/create_Handle_File_Upload_Middleware.js.map +1 -0
  117. package/dist/lib/src/middlewares/create_NotFound_Guard.d.ts +7 -0
  118. package/dist/lib/src/middlewares/create_NotFound_Guard.d.ts.map +1 -0
  119. package/dist/lib/src/middlewares/create_NotFound_Guard.js +47 -0
  120. package/dist/lib/src/middlewares/create_NotFound_Guard.js.map +1 -0
  121. package/dist/lib/src/middlewares/create_RateLimiting_Handler_Guard.d.ts +7 -0
  122. package/dist/lib/src/middlewares/create_RateLimiting_Handler_Guard.d.ts.map +1 -0
  123. package/dist/lib/src/middlewares/create_RateLimiting_Handler_Guard.js +270 -0
  124. package/dist/lib/src/middlewares/create_RateLimiting_Handler_Guard.js.map +1 -0
  125. package/dist/lib/src/middlewares/create_ValidateRequest_Guard.d.ts +7 -0
  126. package/dist/lib/src/middlewares/create_ValidateRequest_Guard.d.ts.map +1 -0
  127. package/dist/lib/src/middlewares/create_ValidateRequest_Guard.js +104 -0
  128. package/dist/lib/src/middlewares/create_ValidateRequest_Guard.js.map +1 -0
  129. package/dist/lib/src/modules/create_DemoModules_SrcStructure.d.ts +7 -0
  130. package/dist/lib/src/modules/create_DemoModules_SrcStructure.d.ts.map +1 -0
  131. package/dist/lib/src/modules/create_DemoModules_SrcStructure.js +367 -0
  132. package/dist/lib/src/modules/create_DemoModules_SrcStructure.js.map +1 -0
  133. package/dist/lib/src/routers/create_Router_Index_Path.d.ts +7 -0
  134. package/dist/lib/src/routers/create_Router_Index_Path.d.ts.map +1 -0
  135. package/dist/lib/src/routers/create_Router_Index_Path.js +54 -0
  136. package/dist/lib/src/routers/create_Router_Index_Path.js.map +1 -0
  137. package/dist/lib/src/shared/create_Prisma_Shated.d.ts +9 -0
  138. package/dist/lib/src/shared/create_Prisma_Shated.d.ts.map +1 -0
  139. package/dist/lib/src/shared/create_Prisma_Shated.js +34 -0
  140. package/dist/lib/src/shared/create_Prisma_Shated.js.map +1 -0
  141. package/dist/lib/src/utils/createCatchAsync_Utils.d.ts +7 -0
  142. package/dist/lib/src/utils/createCatchAsync_Utils.d.ts.map +1 -0
  143. package/dist/lib/src/utils/createCatchAsync_Utils.js +59 -0
  144. package/dist/lib/src/utils/createCatchAsync_Utils.js.map +1 -0
  145. package/dist/lib/src/utils/createLoggerFile.d.ts +7 -0
  146. package/dist/lib/src/utils/createLoggerFile.d.ts.map +1 -0
  147. package/dist/lib/src/utils/createLoggerFile.js +35 -0
  148. package/dist/lib/src/utils/createLoggerFile.js.map +1 -0
  149. package/dist/lib/src/utils/create_Common_Utils.d.ts +9 -0
  150. package/dist/lib/src/utils/create_Common_Utils.d.ts.map +1 -0
  151. package/dist/lib/src/utils/create_Common_Utils.js +262 -0
  152. package/dist/lib/src/utils/create_Common_Utils.js.map +1 -0
  153. package/dist/lib/src/utils/create_Date_Time_Validation_Utils.d.ts +7 -0
  154. package/dist/lib/src/utils/create_Date_Time_Validation_Utils.d.ts.map +1 -0
  155. package/dist/lib/src/utils/create_Date_Time_Validation_Utils.js +181 -0
  156. package/dist/lib/src/utils/create_Date_Time_Validation_Utils.js.map +1 -0
  157. package/dist/lib/src/utils/create_Node_Cache_Utils.d.ts +7 -0
  158. package/dist/lib/src/utils/create_Node_Cache_Utils.d.ts.map +1 -0
  159. package/dist/lib/src/utils/create_Node_Cache_Utils.js +149 -0
  160. package/dist/lib/src/utils/create_Node_Cache_Utils.js.map +1 -0
  161. package/dist/lib/src/utils/create_Remove_Uploaded_Files_Utils.d.ts +7 -0
  162. package/dist/lib/src/utils/create_Remove_Uploaded_Files_Utils.d.ts.map +1 -0
  163. package/dist/lib/src/utils/create_Remove_Uploaded_Files_Utils.js +162 -0
  164. package/dist/lib/src/utils/create_Remove_Uploaded_Files_Utils.js.map +1 -0
  165. package/dist/lib/src/utils/create_SendEmail_Utils.d.ts +7 -0
  166. package/dist/lib/src/utils/create_SendEmail_Utils.d.ts.map +1 -0
  167. package/dist/lib/src/utils/create_SendEmail_Utils.js +140 -0
  168. package/dist/lib/src/utils/create_SendEmail_Utils.js.map +1 -0
  169. package/dist/lib/src/utils/create_sendResponse_Utils.d.ts +7 -0
  170. package/dist/lib/src/utils/create_sendResponse_Utils.d.ts.map +1 -0
  171. package/dist/lib/src/utils/create_sendResponse_Utils.js +95 -0
  172. package/dist/lib/src/utils/create_sendResponse_Utils.js.map +1 -0
  173. package/dist/lib/utils/helpers.d.ts +5 -0
  174. package/dist/lib/utils/helpers.d.ts.map +1 -0
  175. package/dist/lib/utils/helpers.js +31 -0
  176. package/dist/lib/utils/helpers.js.map +1 -0
  177. package/dist/lib/utils/types.d.ts +5 -0
  178. package/dist/lib/utils/types.d.ts.map +1 -0
  179. package/dist/lib/utils/types.js +2 -0
  180. package/dist/lib/utils/types.js.map +1 -0
  181. package/package.json +87 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,177 @@
1
+ #!/usr/bin/env node
2
+ import { program } from "commander";
3
+ import chalk from "chalk";
4
+ import inquirer from "inquirer";
5
+ import fs from "fs-extra";
6
+ import path from "path";
7
+ import { fileURLToPath } from "url";
8
+ // Fix __dirname in ES modules
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+ // Import all your helper functions with .js extensions
12
+ import { createProjectDirectory } from "../lib/utils/helpers.js";
13
+ import { createEnvExample } from "../lib/config/createEnvExample.js";
14
+ import { createEslintConfig } from "../lib/config/createEslintConfig.js";
15
+ import { createGitignore } from "../lib/config/createGitignore.js";
16
+ import { createPackageJson } from "../lib/config/createPackageJson.js";
17
+ import { createPrettierConfig } from "../lib/config/createPrettierConfig.js";
18
+ import { createTsConfig } from "../lib/config/createTsConfig.js";
19
+ import { createSrcStructure } from "../lib/src/createSrcStructure.js";
20
+ import { createAppFile } from "../lib/src/createAppFile.js";
21
+ import { createServerFile } from "../lib/src/createServerFile.js";
22
+ import { create_QueryBuilder_Helpers } from "../lib/src/builders/create_QueryBuilder_Helpers.js";
23
+ import { create_Config_Configuration_Index_File } from "../lib/src/config/create_Config_Index.js";
24
+ import { create_UserRole_Constant } from "../lib/src/constants/create_UserRole_Constant.js";
25
+ import { create_AppError_Class } from "../lib/src/errors/create_AppError_Class.js";
26
+ import { create_HandleCastError } from "../lib/src/errors/create_HandleCastError.js";
27
+ import { create_HandleDB_ValidationError } from "../lib/src/errors/create_HandleDB_ValidationError.js";
28
+ import { create_HandleDuplicateError } from "../lib/src/errors/create_HandleDuplicateError.js";
29
+ import { create_HandleZodValidationError } from "../lib/src/errors/create_HandleZodValidationError.js";
30
+ import { create_EmailFormat_type } from "../lib/src/interfaces/create_EmailFomat_type.js";
31
+ import { create_Errors_type } from "../lib/src/interfaces/create_Errors_type.js";
32
+ import { create_UserRole_type } from "../lib/src/interfaces/create_UserRole_type.js";
33
+ import { create_BigIntSerializer_Guard } from "../lib/src/middlewares/create_BigIntSerializer_Guard.js";
34
+ import { create_formDataToSetJSONformatData_Guard } from "../lib/src/middlewares/create_FormDataToSetJSONformatData_Guard.js";
35
+ import { create_Handle_File_Upload_Middleware } from "../lib/src/middlewares/create_Handle_File_Upload_Middleware.js";
36
+ import { create_NotFound_Guard } from "../lib/src/middlewares/create_NotFound_Guard.js";
37
+ import { create_RateLimiting_Handler_Guard } from "../lib/src/middlewares/create_RateLimiting_Handler_Guard.js";
38
+ import { create_ValidateRequest_Guard } from "../lib/src/middlewares/create_ValidateRequest_Guard.js";
39
+ import { createDemoModules_SrcStructure } from "../lib/src/modules/create_DemoModules_SrcStructure.js";
40
+ import { create_Router_index_Path } from "../lib/src/routers/create_Router_Index_Path.js";
41
+ import { create_Common_Utils } from "../lib/src/utils/create_Common_Utils.js";
42
+ import { create_Date_Time_Validation_Utils } from "../lib/src/utils/create_Date_Time_Validation_Utils.js";
43
+ import { create_Node_Cache_Utils } from "../lib/src/utils/create_Node_Cache_Utils.js";
44
+ import { create_Remove_Uploaded_Files_Utils } from "../lib/src/utils/create_Remove_Uploaded_Files_Utils.js";
45
+ import { create_SendEmail_Utils } from "../lib/src/utils/create_SendEmail_Utils.js";
46
+ import { create_SendResponse_Utils } from "../lib/src/utils/create_sendResponse_Utils.js";
47
+ import { createCatchAsync_Utils } from "../lib/src/utils/createCatchAsync_Utils.js";
48
+ import { createLoggerFile } from "../lib/src/utils/createLoggerFile.js";
49
+ import { create_Auth_Guard } from "../lib/src/middlewares/create_Auth_Gurad.js";
50
+ import { create_Global_Error_Handler_Guard } from "./../lib/src/middlewares/create_Global_ErrorHandler_Guard.js";
51
+ import { create_JWT_Token_type } from "../lib/src/interfaces/create_JWT_Token_type.js";
52
+ import { create_prisma_shared_file } from "../lib/src/shared/create_Prisma_Shated.js";
53
+ import { createSchemaPrisma } from "../lib/prisma/create_Schema.Prisma.js";
54
+ import { create_IndexD_type } from "../lib/src/interfaces/create_Index_d_type.js";
55
+ program
56
+ .version("1.0.0")
57
+ .description("A professional Express.js project generator CLI that scaffolds a production-ready backend in seconds. Supports MongoDB with Mongoose, PostgreSQL with Prisma, or no database, with optional authentication. Includes modular folder structure, built-in error handling (validation, cast, duplicate, Zod), middleware (auth guard, rate limiting, file upload, caching), and utility functions. Just provide your database URL and start building APIs instantly. Powered by the express-project-builder npm package, developed by Mozzammel Ridoy.")
58
+ .arguments("<project-name>")
59
+ .action(async (projectName) => {
60
+ let projectPath;
61
+ try {
62
+ console.log(chalk.blue(`Creating a new Express.js app in ${chalk.green(projectName)}`));
63
+ // Check if directory exists
64
+ if (fs.existsSync(projectName)) {
65
+ console.log(chalk.red(`Error: Directory ${projectName} already exists!`));
66
+ process.exit(1);
67
+ }
68
+ // Create project directory
69
+ await createProjectDirectory(projectName);
70
+ projectPath = path.resolve(projectName);
71
+ // Ask user for preferences
72
+ const answers = await inquirer.prompt([
73
+ {
74
+ type: "list",
75
+ name: "database",
76
+ message: "Which database would you like to use?",
77
+ choices: ["MongoDB with Mongoose", "PostgreSQL with Prisma", "None"],
78
+ default: "None",
79
+ },
80
+ {
81
+ type: "confirm",
82
+ name: "includeAuth",
83
+ message: "Would you like to include authentication?",
84
+ default: false,
85
+ },
86
+ ]);
87
+ // Create configuration files
88
+ await createEnvExample(projectPath, answers);
89
+ await createEslintConfig(projectPath);
90
+ await createGitignore(projectPath, answers);
91
+ await createPackageJson(projectPath, projectName, answers);
92
+ await createPrettierConfig(projectPath);
93
+ await createTsConfig(projectPath);
94
+ // Create prisma schema if PostgreSQL with Prisma is selected
95
+ await createSchemaPrisma(projectPath, answers);
96
+ // Create src directory and initial files
97
+ await createSrcStructure(projectPath);
98
+ await createAppFile(projectPath);
99
+ await createServerFile(projectPath, answers);
100
+ // Create app builder
101
+ await create_QueryBuilder_Helpers(projectPath, answers);
102
+ // Create app config index
103
+ await create_Config_Configuration_Index_File(projectPath, answers);
104
+ // Create app constants
105
+ await create_UserRole_Constant(projectPath);
106
+ // Create app errors
107
+ await create_AppError_Class(projectPath);
108
+ await create_HandleCastError(projectPath, answers);
109
+ await create_HandleDB_ValidationError(projectPath, answers);
110
+ await create_HandleDuplicateError(projectPath, answers);
111
+ await create_HandleZodValidationError(projectPath);
112
+ // Create app interfaces
113
+ await create_EmailFormat_type(projectPath);
114
+ await create_Errors_type(projectPath);
115
+ await create_IndexD_type(projectPath, answers);
116
+ await create_UserRole_type(projectPath);
117
+ await create_JWT_Token_type(projectPath, answers);
118
+ // Create app middlewares
119
+ await create_Auth_Guard(projectPath, answers);
120
+ await create_BigIntSerializer_Guard(projectPath);
121
+ await create_formDataToSetJSONformatData_Guard(projectPath);
122
+ await create_Global_Error_Handler_Guard(projectPath, answers);
123
+ await create_Handle_File_Upload_Middleware(projectPath);
124
+ await create_NotFound_Guard(projectPath);
125
+ await create_RateLimiting_Handler_Guard(projectPath);
126
+ await create_ValidateRequest_Guard(projectPath);
127
+ // Create app modules
128
+ await createDemoModules_SrcStructure(projectPath);
129
+ // Create app routes
130
+ await create_Router_index_Path(projectPath);
131
+ // Create app shared files
132
+ await create_prisma_shared_file(projectPath, answers);
133
+ // Create app utils
134
+ await create_Common_Utils(projectPath, answers);
135
+ await create_Date_Time_Validation_Utils(projectPath);
136
+ await create_Node_Cache_Utils(projectPath);
137
+ await create_Remove_Uploaded_Files_Utils(projectPath);
138
+ await create_SendEmail_Utils(projectPath);
139
+ await create_SendResponse_Utils(projectPath);
140
+ await createCatchAsync_Utils(projectPath);
141
+ await createLoggerFile(projectPath);
142
+ console.log(chalk.green(" \n✅ Project setup successfully!"));
143
+ // Show next steps
144
+ console.log(chalk.yellow(" \nNext steps:"));
145
+ console.log(chalk.cyan(` cd ${projectName}`));
146
+ console.log(chalk.cyan(" npm install"));
147
+ if (answers.database === "PostgreSQL with Prisma") {
148
+ console.log(chalk.yellow(" \n🚀 Prisma Setup Guide"));
149
+ console.log(chalk.cyan(" npm install prisma --save-dev"));
150
+ console.log(chalk.cyan(" npm install @prisma/client"));
151
+ console.log(chalk.cyan(" # Edit .env with your database (DATABASE_URL) credentials"));
152
+ console.log(chalk.cyan(" npx prisma generate"));
153
+ console.log(chalk.cyan(" npx prisma studio"));
154
+ }
155
+ console.log(chalk.cyan("\n npm run prettier"));
156
+ console.log(chalk.cyan(" npm run dev"));
157
+ }
158
+ catch (error) {
159
+ console.error(chalk.red(" \n❌ Error occurred during project setup:"));
160
+ console.error(error);
161
+ // Clean up created directory if it exists
162
+ if (projectPath && fs.existsSync(projectPath)) {
163
+ console.log(chalk.yellow(" \n🧹 Cleaning up created files..."));
164
+ try {
165
+ await fs.remove(projectPath);
166
+ console.log(chalk.green(" ✅ Successfully removed incomplete project"));
167
+ }
168
+ catch (cleanupError) {
169
+ console.error(chalk.red(" ❌ Failed to clean up project directory:"));
170
+ console.error(cleanupError);
171
+ }
172
+ }
173
+ process.exit(1);
174
+ }
175
+ });
176
+ program.parse(process.argv);
177
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { TAnswers } from "../utils/types.js";
2
+ export declare const createEnvExample: (projectPath: string, answers: TAnswers) => Promise<void>;
3
+ //# sourceMappingURL=createEnvExample.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createEnvExample.d.ts","sourceRoot":"","sources":["../../../src/lib/config/createEnvExample.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,eAAO,MAAM,gBAAgB,GAC3B,aAAa,MAAM,EACnB,SAAS,QAAQ,KAChB,OAAO,CAAC,IAAI,CA2Cd,CAAC"}
@@ -0,0 +1,39 @@
1
+ import path from "path";
2
+ import { createFile } from "../utils/helpers.js";
3
+ import chalk from "chalk";
4
+ export const createEnvExample = async (projectPath, answers) => {
5
+ try {
6
+ const envExample = `PORT=5000
7
+ NODE_ENV=development
8
+ ${answers.database === "MongoDB with Mongoose"
9
+ ? "MONGO_DATABASE_URL=mongodb://localhost:27017/myapp"
10
+ : ""}
11
+ ${answers.database === "PostgreSQL with Prisma"
12
+ ? 'DATABASE_URL="postgresql://username:password@localhost:5432/myapp"'
13
+ : ""}
14
+ ${answers.includeAuth
15
+ ? `JWT_ACCESS_TOKEN_SECRET=40051dc52aa534598646248e692db2d70224cf751507a782daee7742f45e92486ca3de2ce447ff10a2ca76032f07bd57624e7f12e38c1d6966438944f04fc4352
16
+ JWT_REFRESH_TOKEN_SECRET=037258be634643ed41ace736e5b3a1b4628e6d69889ef3275f4a3097307f3b522db381dda5e477d58f8519fc0e8e32c984497bf3adaa4d228a2e0459743
17
+ JWT_ACCESS_TOKEN_EXPIRES_IN=15m
18
+ JWT_REFRESH_TOKEN_EXPIRES_IN=30d
19
+ BCRYPT_SALT_ROUNDS=10
20
+ `
21
+ : ""}
22
+ EMAIL_HOST_PROVIDER_NAME = smtp.gmail.com
23
+ EMAIL_HOST_PROVIDER_PORT = 587
24
+ EMAIL_SENDER_EMAIL = example@gmail.com
25
+ EMAIL_SENDER_EMAIL_APP_PASS = your app password
26
+ CLIENT_SIDE_URL = http://localhost:5173 #for development
27
+ CLIENT_SIDE_URL = your.client.domain.com #for production
28
+ `;
29
+ await createFile(path.join(projectPath, ".env"), envExample);
30
+ await createFile(path.join(projectPath, ".env.example"), envExample);
31
+ // Use chalk for colored output with icons
32
+ console.log(chalk.green("✅ .env and .env.example file created successfully"));
33
+ }
34
+ catch (err) {
35
+ console.error(chalk.red("❌ Error creating .env.example file:"), err);
36
+ throw err;
37
+ }
38
+ };
39
+ //# sourceMappingURL=createEnvExample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createEnvExample.js","sourceRoot":"","sources":["../../../src/lib/config/createEnvExample.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,WAAmB,EACnB,OAAiB,EACF,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG;;EAGrB,OAAO,CAAC,QAAQ,KAAK,uBAAuB;YAC1C,CAAC,CAAC,oDAAoD;YACtD,CAAC,CAAC,EACN;EAEE,OAAO,CAAC,QAAQ,KAAK,wBAAwB;YAC3C,CAAC,CAAC,oEAAoE;YACtE,CAAC,CAAC,EACN;EAEE,OAAO,CAAC,WAAW;YACjB,CAAC,CAAC;;;;;CAKL;YACG,CAAC,CAAC,EACN;;;;;;;CAOC,CAAC;QAEE,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;QAErE,0CAA0C;QAC1C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,mDAAmD,CAAC,CACjE,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const createEslintConfig: (projectPath: string) => Promise<void>;
2
+ //# sourceMappingURL=createEslintConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createEslintConfig.d.ts","sourceRoot":"","sources":["../../../src/lib/config/createEslintConfig.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,GAC7B,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CA4Cd,CAAC"}
@@ -0,0 +1,48 @@
1
+ import path from "path";
2
+ import { createFile } from "../utils/helpers.js";
3
+ import chalk from "chalk";
4
+ export const createEslintConfig = async (projectPath) => {
5
+ try {
6
+ const eslintConfig = `import globals from 'globals'
7
+ import pluginJs from '@eslint/js'
8
+ import tseslint from 'typescript-eslint'
9
+ import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
10
+ /** @type {import('eslint').Linter.Config[]} */
11
+ export default [
12
+ { files: ['**/*.{js,mjs,cjs,ts}'] },
13
+ { languageOptions: { globals: globals.browser } },
14
+ {
15
+ rules: {
16
+ 'no-unused-vars': 'error',
17
+ 'no-unused-expressions': 'error',
18
+ 'no-console': 'warn',
19
+ 'no-undef': 'error',
20
+ 'prefer-const': 'error'
21
+ // 'typescript-eslint/no-explicit-any': 'warn'
22
+ }
23
+ },
24
+ {
25
+ languageOptions: {
26
+ globals: {
27
+ process: 'readonly'
28
+ }
29
+ }
30
+ },
31
+ {
32
+ ignores: ['.node_modules/*', 'dist']
33
+ },
34
+ pluginJs.configs.recommended,
35
+ ...tseslint.configs.recommended,
36
+ eslintPluginPrettierRecommended
37
+ ]`;
38
+ await createFile(path.join(projectPath, "eslint.config.mjs"), eslintConfig);
39
+ // Success message with green checkmark and text
40
+ console.log(chalk.green("✅ ESLint config file created successfully"));
41
+ }
42
+ catch (err) {
43
+ // Error message with red cross and text
44
+ console.error(chalk.red("❌ Error creating ESLint config file:"), err);
45
+ throw err;
46
+ }
47
+ };
48
+ //# sourceMappingURL=createEslintConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createEslintConfig.js","sourceRoot":"","sources":["../../../src/lib/config/createEslintConfig.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,WAAmB,EACJ,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BvB,CAAC;QAEC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,EAAE,YAAY,CAAC,CAAC;QAE5E,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wCAAwC;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { TAnswers } from "../utils/types.js";
2
+ export declare const createGitignore: (projectPath: string, answers: TAnswers) => Promise<void>;
3
+ //# sourceMappingURL=createGitignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createGitignore.d.ts","sourceRoot":"","sources":["../../../src/lib/config/createGitignore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,eAAO,MAAM,eAAe,GAC1B,aAAa,MAAM,EACnB,SAAS,QAAQ,KAChB,OAAO,CAAC,IAAI,CAiDd,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { createFile } from "../utils/helpers.js";
2
+ import path from "path";
3
+ import chalk from "chalk";
4
+ export const createGitignore = async (projectPath, answers) => {
5
+ try {
6
+ const gitignore = `# Dependencies
7
+ node_modules/
8
+ # Build outputs
9
+ dist/
10
+ build/
11
+ # Environment variables
12
+ .env
13
+ .env.local
14
+ .env.development.local
15
+ .env.test.local
16
+ .env.production.local
17
+ # Logs
18
+ npm-debug.log*
19
+ yarn-debug.log*
20
+ yarn-error.log*
21
+ logs/
22
+ *.log
23
+ # Runtime data
24
+ pids
25
+ *.pid
26
+ *.seed
27
+ *.pid.lock
28
+ # Coverage directory used by tools like istanbul
29
+ coverage/
30
+ .nyc_output
31
+ # IDE
32
+ .vscode/
33
+ .idea/
34
+ *.swp
35
+ *.swo
36
+ *~
37
+ ${answers.database === "PostgreSQL with Prisma"
38
+ ? `# Prisma
39
+ prisma/migrations`
40
+ : ""}`;
41
+ await createFile(path.join(projectPath, ".gitignore"), gitignore);
42
+ // Success message with green checkmark and text
43
+ console.log(chalk.green("✅ .gitignore file created successfully"));
44
+ }
45
+ catch (err) {
46
+ // Error message with red cross and text
47
+ console.error(chalk.red("❌ Error creating .gitignore file:"), err);
48
+ throw err;
49
+ }
50
+ };
51
+ //# sourceMappingURL=createGitignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createGitignore.js","sourceRoot":"","sources":["../../../src/lib/config/createGitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,WAAmB,EACnB,OAAiB,EACF,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCpB,OAAO,CAAC,QAAQ,KAAK,wBAAwB;YAC3C,CAAC,CAAC;kBACY;YACd,CAAC,CAAC,EACN,EAAE,CAAC;QAEC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;QAElE,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wCAAwC;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { TAnswers } from "../utils/types.js";
2
+ export declare const createPackageJson: (projectPath: string, projectName: string, answers: TAnswers) => Promise<void>;
3
+ //# sourceMappingURL=createPackageJson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPackageJson.d.ts","sourceRoot":"","sources":["../../../src/lib/config/createPackageJson.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,eAAO,MAAM,iBAAiB,GAC5B,aAAa,MAAM,EACnB,aAAa,MAAM,EACnB,SAAS,QAAQ,KAChB,OAAO,CAAC,IAAI,CAuEd,CAAC"}
@@ -0,0 +1,74 @@
1
+ import path from "path";
2
+ import { createJsonFile } from "../utils/helpers.js";
3
+ import chalk from "chalk";
4
+ // Type-safe package.json creation function
5
+ export const createPackageJson = async (projectPath, projectName, answers) => {
6
+ try {
7
+ const packageJson = {
8
+ name: projectName,
9
+ version: "1.0.0",
10
+ description: "",
11
+ main: "dist/index.js",
12
+ scripts: {
13
+ test: 'echo "Error: no test specified" && exit 1',
14
+ start: "node dist/server.js",
15
+ dev: "ts-node-dev --respawn --transpile-only src/server.ts",
16
+ build: "tsc",
17
+ lint: "eslint ./src",
18
+ "lint:fix": "eslint ./src --fix",
19
+ prettier: 'prettier --ignore-path .gitignore --write "./src/**/*.+(js|ts|json)"',
20
+ },
21
+ license: "ISC",
22
+ dependencies: {
23
+ "cookie-parser": "^1.4.7",
24
+ cors: "^2.8.5",
25
+ dotenv: "^16.6.1",
26
+ "eslint-plugin-prettier": "^5.5.4",
27
+ express: "^5.1.0",
28
+ multer: "^2.0.2-lts.1",
29
+ "node-cache": "^5.1.2",
30
+ nodemailer: "^7.0.6",
31
+ zod: "^3.24.1",
32
+ },
33
+ devDependencies: {
34
+ "@types/cookie-parser": "^1.4.9",
35
+ "@types/cors": "^2.8.19",
36
+ "@eslint/js": "^9.35.0",
37
+ "@types/express": "^5.0.3", // Updated to match Express v4
38
+ "@types/nodemailer": "^7.0.1",
39
+ "@types/multer": "^2.0.0", // Updated for multer v1
40
+ "@typescript-eslint/eslint-plugin": "^8.43.0",
41
+ "@typescript-eslint/parser": "^8.43.0",
42
+ eslint: "^9.35.0",
43
+ "eslint-config-prettier": "^10.1.8",
44
+ globals: "^16.4.0",
45
+ prettier: "^3.6.2",
46
+ "ts-node-dev": "^2.0.0",
47
+ typescript: "^5.9.2",
48
+ "typescript-eslint": "^8.43.0",
49
+ },
50
+ };
51
+ // Add dependencies based on user choices
52
+ if (answers.database === "MongoDB with Mongoose") {
53
+ packageJson.dependencies.mongoose = "^8.18.1"; // Updated to latest
54
+ }
55
+ else if (answers.database === "PostgreSQL with Prisma") {
56
+ packageJson.dependencies["@prisma/client"] = "^6.16.1"; // Updated to latest
57
+ packageJson.devDependencies.prisma = "^6.16.1"; // Updated to latest
58
+ }
59
+ if (answers.includeAuth) {
60
+ packageJson.dependencies.jsonwebtoken = "^9.0.2";
61
+ packageJson.devDependencies["@types/jsonwebtoken"] = "^9.0.10";
62
+ packageJson.dependencies.bcryptjs = "^3.0.2";
63
+ }
64
+ await createJsonFile(path.join(projectPath, "package.json"), packageJson);
65
+ // Success message with green checkmark and text
66
+ console.log(chalk.green("✅ package.json file created successfully"));
67
+ }
68
+ catch (err) {
69
+ // Error message with red cross and text
70
+ console.error(chalk.red("❌ Error creating package.json file:"), err);
71
+ throw err;
72
+ }
73
+ };
74
+ //# sourceMappingURL=createPackageJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPackageJson.js","sourceRoot":"","sources":["../../../src/lib/config/createPackageJson.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,2CAA2C;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,WAAmB,EACnB,WAAmB,EACnB,OAAiB,EACF,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,WAAW,GAAQ;YACvB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE;gBACP,IAAI,EAAE,2CAA2C;gBACjD,KAAK,EAAE,qBAAqB;gBAC5B,GAAG,EAAE,sDAAsD;gBAC3D,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE,oBAAoB;gBAChC,QAAQ,EACN,sEAAsE;aACzE;YACD,OAAO,EAAE,KAAK;YACd,YAAY,EAAE;gBACZ,eAAe,EAAE,QAAQ;gBACzB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,SAAS;gBACjB,wBAAwB,EAAE,QAAQ;gBAClC,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,cAAc;gBACtB,YAAY,EAAE,QAAQ;gBACtB,UAAU,EAAE,QAAQ;gBACpB,GAAG,EAAE,SAAS;aACf;YACD,eAAe,EAAE;gBACf,sBAAsB,EAAE,QAAQ;gBAChC,aAAa,EAAE,SAAS;gBACxB,YAAY,EAAE,SAAS;gBACvB,gBAAgB,EAAE,QAAQ,EAAE,8BAA8B;gBAC1D,mBAAmB,EAAE,QAAQ;gBAC7B,eAAe,EAAE,QAAQ,EAAE,wBAAwB;gBACnD,kCAAkC,EAAE,SAAS;gBAC7C,2BAA2B,EAAE,SAAS;gBACtC,MAAM,EAAE,SAAS;gBACjB,wBAAwB,EAAE,SAAS;gBACnC,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,QAAQ;gBACvB,UAAU,EAAE,QAAQ;gBACpB,mBAAmB,EAAE,SAAS;aAC/B;SACF,CAAC;QAEF,yCAAyC;QACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,uBAAuB,EAAE,CAAC;YACjD,WAAW,CAAC,YAAY,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,oBAAoB;QACrE,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,wBAAwB,EAAE,CAAC;YACzD,WAAW,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC,CAAC,oBAAoB;YAC5E,WAAW,CAAC,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,oBAAoB;QACtE,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,WAAW,CAAC,YAAY,CAAC,YAAY,GAAG,QAAQ,CAAC;YACjD,WAAW,CAAC,eAAe,CAAC,qBAAqB,CAAC,GAAG,SAAS,CAAC;YAC/D,WAAW,CAAC,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC/C,CAAC;QAED,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;QAE1E,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wCAAwC;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const createPrettierConfig: (projectPath: string) => Promise<void>;
2
+ //# sourceMappingURL=createPrettierConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPrettierConfig.d.ts","sourceRoot":"","sources":["../../../src/lib/config/createPrettierConfig.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CA4Bd,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { createJsonFile } from "../utils/helpers.js";
2
+ import path from "path";
3
+ import chalk from "chalk";
4
+ // Type-safe Prettier config creation function
5
+ export const createPrettierConfig = async (projectPath) => {
6
+ try {
7
+ const prettierConfig = {
8
+ semi: false,
9
+ singleQuote: true,
10
+ tabWidth: 2,
11
+ useTabs: false,
12
+ printWidth: 80,
13
+ trailingComma: "none",
14
+ bracketSpacing: true,
15
+ jsxBracketSameLine: false,
16
+ arrowParens: "avoid",
17
+ proseWrap: "preserve",
18
+ endOfLine: "lf",
19
+ };
20
+ await createJsonFile(path.join(projectPath, ".prettierrc.json"), prettierConfig);
21
+ // Success message with green checkmark and text
22
+ console.log(chalk.green("✅ Prettier config file created successfully"));
23
+ }
24
+ catch (err) {
25
+ // Error message with red cross and text
26
+ console.error(chalk.red("❌ Error creating Prettier config file:"), err);
27
+ throw err;
28
+ }
29
+ };
30
+ //# sourceMappingURL=createPrettierConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPrettierConfig.js","sourceRoot":"","sources":["../../../src/lib/config/createPrettierConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,8CAA8C;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,WAAmB,EACJ,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,cAAc,GAAG;YACrB,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,EAAE;YACd,aAAa,EAAE,MAAM;YACrB,cAAc,EAAE,IAAI;YACpB,kBAAkB,EAAE,KAAK;YACzB,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,IAAI;SAChB,CAAC;QAEF,MAAM,cAAc,CAClB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAC1C,cAAc,CACf,CAAC;QAEF,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wCAAwC;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const createTsConfig: (projectPath: string) => Promise<void>;
2
+ //# sourceMappingURL=createTsConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTsConfig.d.ts","sourceRoot":"","sources":["../../../src/lib/config/createTsConfig.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAgItE,CAAC"}