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,59 @@
1
+ import { createFile } from "../../utils/helpers.js";
2
+ import path from "path";
3
+ import chalk from "chalk";
4
+ /**
5
+ * Creates a catch async utilities file for handling asynchronous errors in Express route handlers
6
+ * @param projectPath - Absolute path to the project root
7
+ * @returns Promise that resolves when the catch async utils file is created
8
+ */
9
+ export const createCatchAsync_Utils = async (projectPath) => {
10
+ try {
11
+ const catchAsyncTemplate = `import { NextFunction, Request, RequestHandler, Response } from 'express';
12
+
13
+ /**
14
+ * Higher-order function to catch asynchronous errors in Express route handlers.
15
+ * This eliminates the need for try-catch blocks in async route handlers.
16
+ *
17
+ * @param fn - The async route handler function to wrap
18
+ * @returns A wrapped function that passes errors to Express error middleware
19
+ *
20
+ * @example
21
+ * // Without catchAsync
22
+ * app.get('/users', async (req, res, next) => {
23
+ * try {
24
+ * const users = await User.find();
25
+ * res.json(users);
26
+ * } catch (error) {
27
+ * next(error);
28
+ * }
29
+ * });
30
+ *
31
+ * // With catchAsync
32
+ * app.get('/users', catchAsync(async (req, res) => {
33
+ * const users = await User.find();
34
+ * res.json(users);
35
+ * }));
36
+ */
37
+ const catchAsync = (fn: RequestHandler): RequestHandler => {
38
+ return (req: Request, res: Response, next: NextFunction) => {
39
+ Promise.resolve(fn(req, res, next)).catch((error: unknown) => {
40
+ // Log the error for debugging (optional)
41
+ console.error('Async error caught by catchAsync:', error);
42
+ next(error);
43
+ });
44
+ };
45
+ };
46
+
47
+ export default catchAsync;
48
+ `;
49
+ await createFile(path.join(projectPath, "src/app/utils", "catchAsync.ts"), catchAsyncTemplate);
50
+ // Success message with green checkmark and text
51
+ console.log(chalk.green("✅ CatchAsync Utils file created successfully"));
52
+ }
53
+ catch (err) {
54
+ // Error message with red cross and text
55
+ console.error(chalk.red("❌ Error creating CatchAsync Utils file:"), err);
56
+ throw err;
57
+ }
58
+ };
59
+ //# sourceMappingURL=createCatchAsync_Utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCatchAsync_Utils.js","sourceRoot":"","sources":["../../../../src/lib/src/utils/createCatchAsync_Utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EACzC,WAAmB,EACJ,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC9B,CAAC;QAEE,MAAM,UAAU,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,eAAe,CAAC,EACxD,kBAAkB,CACnB,CAAC;QAEF,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wCAAwC;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Creates a logger utilities file for application logging
3
+ * @param projectPath - Absolute path to the project root
4
+ * @returns Promise that resolves when the logger file is created
5
+ */
6
+ export declare const createLoggerFile: (projectPath: string) => Promise<void>;
7
+ //# sourceMappingURL=createLoggerFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createLoggerFile.d.ts","sourceRoot":"","sources":["../../../../src/lib/src/utils/createLoggerFile.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CA6BxE,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { createFile } from "../../utils/helpers.js";
2
+ import path from "path";
3
+ import chalk from "chalk";
4
+ /**
5
+ * Creates a logger utilities file for application logging
6
+ * @param projectPath - Absolute path to the project root
7
+ * @returns Promise that resolves when the logger file is created
8
+ */
9
+ export const createLoggerFile = async (projectPath) => {
10
+ try {
11
+ const loggerTemplate = `
12
+ /* eslint-disable @typescript-eslint/no-explicit-any */
13
+ export const logger = {
14
+ info: (message: string, meta?: any) => {
15
+ console.log(\`[INFO] \${message}\`, meta || '');
16
+ },
17
+ error: (message: string, error?: any) => {
18
+ console.error(\`[ERROR] \${message}\`, error || '');
19
+ },
20
+ warn: (message: string, meta?: any) => {
21
+ console.warn(\`[WARN] \${message}\`, meta || '');
22
+ },
23
+ };
24
+ `;
25
+ await createFile(path.join(projectPath, "src/app/", "utils", "logger.ts"), loggerTemplate);
26
+ // Success message with green checkmark and text
27
+ console.log(chalk.green("✅ Logger file created successfully"));
28
+ }
29
+ catch (err) {
30
+ // Error message with red cross and text
31
+ console.error(chalk.red("❌ Error creating Logger file:"), err);
32
+ throw err;
33
+ }
34
+ };
35
+ //# sourceMappingURL=createLoggerFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createLoggerFile.js","sourceRoot":"","sources":["../../../../src/lib/src/utils/createLoggerFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,WAAmB,EAAiB,EAAE;IAC3E,IAAI,CAAC;QACH,MAAM,cAAc,GAAG;;;;;;;;;;;;;CAa1B,CAAC;QAEE,MAAM,UAAU,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,EACxD,cAAc,CACf,CAAC;QAEF,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wCAAwC;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { TAnswers } from "../../utils/types.js";
2
+ /**
3
+ * Creates a common utilities file with optional JWT utilities
4
+ * @param projectPath - Absolute path to the project root
5
+ * @param answers - User answers from CLI prompts
6
+ * @returns Promise that resolves when the common utils file is created
7
+ */
8
+ export declare const create_Common_Utils: (projectPath: string, answers: TAnswers) => Promise<void>;
9
+ //# sourceMappingURL=create_Common_Utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_Common_Utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/src/utils/create_Common_Utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,aAAa,MAAM,EACnB,SAAS,QAAQ,KAChB,OAAO,CAAC,IAAI,CAgQd,CAAC"}
@@ -0,0 +1,262 @@
1
+ import { createFile } from "../../utils/helpers.js";
2
+ import path from "path";
3
+ import chalk from "chalk";
4
+ /**
5
+ * Creates a common utilities file with optional JWT utilities
6
+ * @param projectPath - Absolute path to the project root
7
+ * @param answers - User answers from CLI prompts
8
+ * @returns Promise that resolves when the common utils file is created
9
+ */
10
+ export const create_Common_Utils = async (projectPath, answers) => {
11
+ try {
12
+ // Create the file path
13
+ const filePath = path.join(projectPath, "src/app/utils", "commonUtils.ts");
14
+ // Base imports that are always included
15
+ const baseImports = `/* eslint-disable @typescript-eslint/no-explicit-any */
16
+ import AppError from '../errors/AppError';
17
+ `;
18
+ // JWT utilities - only included if auth is enabled
19
+ const jwtUtils = answers.includeAuth
20
+ ? `import jwt, { JwtPayload, SignOptions } from 'jsonwebtoken'
21
+ import { TJwtPayload } from '../interfaces/jwtToken_interface'
22
+
23
+ /**
24
+ * Create a JWT token
25
+ * @param jwtPayload - Payload to include in the token
26
+ * @param jwtSecret - Secret key for signing the token
27
+ * @param expiresIn - Token expiration time (e.g., '1d', '2h', '60m')
28
+ * @returns JWT token string
29
+ */
30
+ export const createToken = (
31
+ jwtPayload: TJwtPayload,
32
+ jwtSecret: string,
33
+ expiresIn: string
34
+ ): string => {
35
+ const options: SignOptions = { expiresIn: expiresIn as any }
36
+ return jwt.sign(jwtPayload, jwtSecret, options)
37
+ }
38
+
39
+ /**
40
+ * Verify a JWT token
41
+ * @param token - JWT token to verify
42
+ * @param secret - Secret key for verification
43
+ * @returns Decoded JWT payload
44
+ * @throws AppError if token is invalid or expired
45
+ */
46
+ export const verifyToken = (token: string, secret: string): JwtPayload => {
47
+ try {
48
+ const decoded = jwt.verify(token, secret) as JwtPayload
49
+ return decoded
50
+ } catch (err: any) {
51
+ throw new AppError(401, '', err.message || 'Invalid or expired token!')
52
+ }
53
+ }
54
+ `
55
+ : "";
56
+ // Common utilities that are always included
57
+ const commonUtils = `
58
+ /**
59
+ * Generate a random OTP (One-Time Password)
60
+ * @param length - Length of the OTP (default: 6)
61
+ * @returns Random OTP as a string
62
+ */
63
+ export const generateOTP = (length: number = 6): string => {
64
+ if (length < 1) {
65
+ throw new AppError(400, 'otp_length', 'OTP length must be at least 1')
66
+ }
67
+ if (length > 24) {
68
+ throw new AppError(400, 'otp_length', 'OTP length cannot exceed 24')
69
+ }
70
+ const min = Math.pow(10, length - 1)
71
+ const max = Math.pow(10, length) - 1
72
+ return Math.floor(min + Math.random() * (max - min + 1)).toString()
73
+ }
74
+
75
+ /**
76
+ * Check if input is a valid phone number or email
77
+ * @param input - String to validate
78
+ * @returns Object containing type ('phone' or 'email') and formatted value
79
+ * @throws AppError if input is neither a valid phone nor email
80
+ */
81
+ export const check_Input_isPhone_Or_isEmail = (
82
+ input: string
83
+ ): { type: 'phone' | 'email'; value: string } => {
84
+ if (!input || typeof input !== 'string') {
85
+ throw new AppError(400, 'input', 'Input must be a non-empty string')
86
+ }
87
+ // Trim to remove accidental spaces
88
+ const trimmed = input.trim()
89
+ // Check if it's all digits (potential phone number)
90
+ const isAllDigits = /^[0-9]+$/.test(trimmed)
91
+ if (isAllDigits) {
92
+ // Validate phone number format
93
+ if (trimmed.length === 11 && trimmed.startsWith('01')) {
94
+ return { type: 'phone', value: trimmed }
95
+ } else {
96
+ throw new AppError(
97
+ 400,
98
+ 'phone_format',
99
+ 'Invalid phone number format (must be 11 digits and start with "01")'
100
+ )
101
+ }
102
+ } else {
103
+ // Validate email format
104
+ const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
105
+ if (emailPattern.test(trimmed)) {
106
+ return { type: 'email', value: trimmed }
107
+ } else {
108
+ throw new AppError(400, 'email_format', 'Invalid email format')
109
+ }
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Format a phone number to a specific format
115
+ * @param phone - Phone number string
116
+ * @param format - Desired format ('standard', 'international', 'national')
117
+ * @returns Formatted phone number
118
+ */
119
+ export const formatPhoneNumber = (
120
+ phone: string,
121
+ format: 'standard' | 'international' | 'national' = 'standard'
122
+ ): string => {
123
+ // Remove all non-digit characters
124
+ const digitsOnly = phone.replace(/\D/g, '')
125
+ if (digitsOnly.length !== 11 || !digitsOnly.startsWith('01')) {
126
+ throw new AppError(
127
+ 400,
128
+ 'phone_format',
129
+ 'Invalid phone number for formatting'
130
+ )
131
+ }
132
+ switch (format) {
133
+ case 'international':
134
+ return \`+880\${digitsOnly.substring(1)}\`
135
+ case 'national':
136
+ return \`0\${digitsOnly.substring(1)}\`
137
+ case 'standard':
138
+ default:
139
+ return digitsOnly
140
+ }
141
+ }
142
+
143
+ /**
144
+ * Generate a random string of specified length
145
+ * @param length - Length of the string to generate
146
+ * @param options - Options for character set
147
+ * @returns Random string
148
+ */
149
+ export const generateRandomString = (
150
+ length: number,
151
+ options: {
152
+ includeUppercase?: boolean
153
+ includeLowercase?: boolean
154
+ includeNumbers?: boolean
155
+ includeSymbols?: boolean
156
+ } = {}
157
+ ): string => {
158
+ const {
159
+ includeUppercase = true,
160
+ includeLowercase = true,
161
+ includeNumbers = true,
162
+ includeSymbols = false
163
+ } = options
164
+ if (length < 1) {
165
+ throw new AppError(400, 'string_length', 'Length must be at least 1')
166
+ }
167
+ let charset = ''
168
+ if (includeUppercase) charset += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
169
+ if (includeLowercase) charset += 'abcdefghijklmnopqrstuvwxyz'
170
+ if (includeNumbers) charset += '0123456789'
171
+ if (includeSymbols) charset += '!@#$%^&*()_+-=[]{}|;:,.<>?'
172
+ if (charset === '') {
173
+ throw new AppError(
174
+ 400,
175
+ 'charset',
176
+ 'At least one character type must be selected'
177
+ )
178
+ }
179
+ let result = ''
180
+ for (let i = 0; i < length; i++) {
181
+ result += charset.charAt(Math.floor(Math.random() * charset.length))
182
+ }
183
+ return result
184
+ }
185
+
186
+ /**
187
+ * Check if a string is a valid email address
188
+ * @param email - Email string to validate
189
+ * @returns True if valid, false otherwise
190
+ */
191
+ export const isValidEmail = (email: string): boolean => {
192
+ const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
193
+ return emailPattern.test(email.trim())
194
+ }
195
+
196
+ /**
197
+ * Check if a string is a valid phone number
198
+ * @param phone - Phone number string to validate
199
+ * @returns True if valid, false otherwise
200
+ */
201
+ export const isValidPhone = (phone: string): boolean => {
202
+ const digitsOnly = phone.replace(/\D/g, '')
203
+ return digitsOnly.length === 11 && digitsOnly.startsWith('01')
204
+ }
205
+
206
+ /**
207
+ * Mask sensitive information (like email or phone)
208
+ * @param value - Value to mask
209
+ * @param type - Type of value ('email' or 'phone')
210
+ * @returns Masked string
211
+ */
212
+ export const maskSensitiveInfo = (
213
+ value: string,
214
+ type: 'email' | 'phone'
215
+ ): string => {
216
+ if (!value || typeof value !== 'string') {
217
+ return value
218
+ }
219
+ let maskedValue: string
220
+ switch (type) {
221
+ case 'email': {
222
+ const [username, domain] = value.split('@')
223
+ if (username && domain) {
224
+ const visibleChars = Math.max(1, Math.floor(username.length / 2))
225
+ const maskedUsername =
226
+ username.substring(0, visibleChars) +
227
+ '*'.repeat(username.length - visibleChars)
228
+ maskedValue = \`\${maskedUsername}@\${domain}\`
229
+ break
230
+ }
231
+ maskedValue = value
232
+ break
233
+ }
234
+ case 'phone': {
235
+ const digitsOnly = value.replace(/\D/g, '')
236
+ if (digitsOnly.length === 11) {
237
+ maskedValue = \`\${digitsOnly.substring(0, 3)}****\${digitsOnly.substring(7)}\`
238
+ break
239
+ }
240
+ maskedValue = value
241
+ break
242
+ }
243
+ default:
244
+ maskedValue = value
245
+ }
246
+ return maskedValue
247
+ }
248
+ `;
249
+ // Combine all parts
250
+ const templateContent = baseImports + jwtUtils + commonUtils;
251
+ // Create the file
252
+ await createFile(filePath, templateContent);
253
+ // Success message with green checkmark and text
254
+ console.log(chalk.green("✅ Common Utils file created successfully"));
255
+ }
256
+ catch (err) {
257
+ // Error message with red cross and text
258
+ console.error(chalk.red("❌ Error creating Common Utils file:"), err);
259
+ throw err;
260
+ }
261
+ };
262
+ //# sourceMappingURL=create_Common_Utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_Common_Utils.js","sourceRoot":"","sources":["../../../../src/lib/src/utils/create_Common_Utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,WAAmB,EACnB,OAAiB,EACF,EAAE;IACjB,IAAI,CAAC;QACH,uBAAuB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAE3E,wCAAwC;QACxC,MAAM,WAAW,GAAG;;CAEvB,CAAC;QAEE,mDAAmD;QACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW;YAClC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCP;YACK,CAAC,CAAC,EAAE,CAAC;QAEP,4CAA4C;QAC5C,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+LvB,CAAC;QAEE,oBAAoB;QACpB,MAAM,eAAe,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;QAE7D,kBAAkB;QAClB,MAAM,UAAU,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAE5C,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,7 @@
1
+ /**
2
+ * Creates a date and time validation utilities file
3
+ * @param projectPath - Absolute path to the project root
4
+ * @returns Promise that resolves when the date time validation utils file is created
5
+ */
6
+ export declare const create_Date_Time_Validation_Utils: (projectPath: string) => Promise<void>;
7
+ //# sourceMappingURL=create_Date_Time_Validation_Utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_Date_Time_Validation_Utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/src/utils/create_Date_Time_Validation_Utils.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,GAC5C,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CAoLd,CAAC"}
@@ -0,0 +1,181 @@
1
+ import { createFile } from "../../utils/helpers.js";
2
+ import path from "path";
3
+ import chalk from "chalk";
4
+ /**
5
+ * Creates a date and time validation utilities file
6
+ * @param projectPath - Absolute path to the project root
7
+ * @returns Promise that resolves when the date time validation utils file is created
8
+ */
9
+ export const create_Date_Time_Validation_Utils = async (projectPath) => {
10
+ try {
11
+ const dateTimeValidationTemplate = `import AppError from '../errors/AppError';
12
+
13
+ /**
14
+ * Check if a date string or Date object is valid
15
+ * @param dateString - Date string or Date object to validate
16
+ * @returns True if the date is valid, false otherwise
17
+ */
18
+ export function isValidDate(dateString: string | Date): boolean {
19
+ // Handle Date objects
20
+ if (dateString instanceof Date) {
21
+ return !isNaN(dateString.getTime());
22
+ }
23
+
24
+ // Handle string inputs
25
+ const date = new Date(dateString);
26
+
27
+ // Check if the date is invalid
28
+ if (isNaN(date.getTime())) {
29
+ return false;
30
+ }
31
+
32
+ // Additional validation: Check if the parsed date matches the input
33
+ // This catches cases like "2023-02-30" which becomes March 2nd
34
+ const dateStringNormalized = dateString.toString().trim();
35
+ const parsedString = date.toISOString();
36
+
37
+ // For ISO format strings, we can do a more direct comparison
38
+ if (dateStringNormalized.includes('T') || dateStringNormalized.includes('Z')) {
39
+ return !isNaN(date.getTime());
40
+ }
41
+
42
+ // For other formats, check if the date components match
43
+ const inputParts = dateStringNormalized.split(/[-/:T\s]/).map(part => parseInt(part, 10));
44
+ const parsedParts = [
45
+ date.getFullYear(),
46
+ date.getMonth() + 1, // getMonth() is 0-indexed
47
+ date.getDate(),
48
+ date.getHours(),
49
+ date.getMinutes(),
50
+ date.getSeconds()
51
+ ];
52
+
53
+ // Compare the significant parts (year, month, day)
54
+ for (let i = 0; i < Math.min(inputParts.length, 3); i++) {
55
+ if (inputParts[i] !== parsedParts[i]) {
56
+ return false;
57
+ }
58
+ }
59
+
60
+ return true;
61
+ }
62
+
63
+ /**
64
+ * Validate and normalize start and end dates
65
+ * @param start_date - Optional start date string or Date object
66
+ * @param end_date - Optional end date string or Date object
67
+ * @returns Object containing validated start and end Date objects
68
+ * @throws AppError if dates are invalid
69
+ */
70
+ export const Start_End_DateTime_Validation = (
71
+ start_date?: string | Date,
72
+ end_date?: string | Date
73
+ ): { start: Date; end: Date } => {
74
+ const now = new Date();
75
+
76
+ // Validate start date
77
+ if (start_date && !isValidDate(start_date)) {
78
+ throw new AppError(400, 'start_date', 'Start date is not a valid date');
79
+ }
80
+
81
+ // Validate end date
82
+ if (end_date && !isValidDate(end_date)) {
83
+ throw new AppError(400, 'end_date', 'End date is not a valid date');
84
+ }
85
+
86
+ // Parse dates or use defaults
87
+ let start = start_date ? new Date(start_date) : new Date(now.setHours(0, 0, 0, 0));
88
+ let end = end_date ? new Date(end_date) : new Date(now.setHours(23, 59, 59, 999));
89
+
90
+ if (start > end) [start, end] = [end, start]
91
+
92
+ // Validate that dates are not too far in the past or future (optional)
93
+ const maxPastDate = new Date();
94
+ maxPastDate.setFullYear(maxPastDate.getFullYear() - 100); // 100 years ago
95
+
96
+ const maxFutureDate = new Date();
97
+ maxFutureDate.setFullYear(maxFutureDate.getFullYear() + 100); // 100 years in future
98
+
99
+ if (start < maxPastDate || end < maxPastDate) {
100
+ throw new AppError(400, 'date_range', 'Date cannot be more than 100 years in the past');
101
+ }
102
+
103
+ if (start > maxFutureDate || end > maxFutureDate) {
104
+ throw new AppError(400, 'date_range', 'Date cannot be more than 100 years in the future');
105
+ }
106
+
107
+ return { start, end };
108
+ };
109
+
110
+ /**
111
+ * Check if a date is within a given range
112
+ * @param date - Date to check
113
+ * @param startDate - Start of the range
114
+ * @param endDate - End of the range
115
+ * @returns True if the date is within the range, false otherwise
116
+ */
117
+ export const isDateInRange = (
118
+ date: string | Date,
119
+ startDate: string | Date,
120
+ endDate: string | Date
121
+ ): boolean => {
122
+ const checkDate = date instanceof Date ? date : new Date(date);
123
+ const start = startDate instanceof Date ? startDate : new Date(startDate);
124
+ const end = endDate instanceof Date ? endDate : new Date(endDate);
125
+
126
+ return checkDate >= start && checkDate <= end;
127
+ };
128
+
129
+ /**
130
+ * Format a date to ISO string without timezone
131
+ * @param date - Date to format
132
+ * @returns Formatted date string (YYYY-MM-DDTHH:mm:ss)
133
+ */
134
+ export const formatDateToISOString = (date: string | Date): string => {
135
+ const d = date instanceof Date ? date : new Date(date);
136
+ return d.toISOString().replace('.000Z', '');
137
+ };
138
+
139
+ /**
140
+ * Get the difference between two dates in various units
141
+ * @param startDate - Start date
142
+ * @param endDate - End date
143
+ * @param unit - Unit of difference ('days', 'hours', 'minutes', 'seconds', 'milliseconds')
144
+ * @returns Difference in the specified unit
145
+ */
146
+ export const getDateDifference = (
147
+ startDate: string | Date,
148
+ endDate: string | Date,
149
+ unit: 'days' | 'hours' | 'minutes' | 'seconds' | 'milliseconds' = 'milliseconds'
150
+ ): number => {
151
+ const start = startDate instanceof Date ? startDate : new Date(startDate);
152
+ const end = endDate instanceof Date ? endDate : new Date(endDate);
153
+
154
+ const diffInMs = end.getTime() - start.getTime();
155
+
156
+ switch (unit) {
157
+ case 'days':
158
+ return Math.floor(diffInMs / (1000 * 60 * 60 * 24));
159
+ case 'hours':
160
+ return Math.floor(diffInMs / (1000 * 60 * 60));
161
+ case 'minutes':
162
+ return Math.floor(diffInMs / (1000 * 60));
163
+ case 'seconds':
164
+ return Math.floor(diffInMs / 1000);
165
+ case 'milliseconds':
166
+ default:
167
+ return diffInMs;
168
+ }
169
+ };
170
+ `;
171
+ await createFile(path.join(projectPath, "src/app/utils", "date_Time_Validation.ts"), dateTimeValidationTemplate);
172
+ // Success message with green checkmark and text
173
+ console.log(chalk.green("✅ Date Time Validation Utils file created successfully"));
174
+ }
175
+ catch (err) {
176
+ // Error message with red cross and text
177
+ console.error(chalk.red("❌ Error creating Date Time Validation Utils file:"), err);
178
+ throw err;
179
+ }
180
+ };
181
+ //# sourceMappingURL=create_Date_Time_Validation_Utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_Date_Time_Validation_Utils.js","sourceRoot":"","sources":["../../../../src/lib/src/utils/create_Date_Time_Validation_Utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,KAAK,EACpD,WAAmB,EACJ,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+JtC,CAAC;QAEE,MAAM,UAAU,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,yBAAyB,CAAC,EAClE,0BAA0B,CAC3B,CAAC;QAEF,gDAAgD;QAChD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,wDAAwD,CAAC,CACtE,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wCAAwC;QACxC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,EAC9D,GAAG,CACJ,CAAC;QACF,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Creates a Node Cache utilities file for in-memory caching
3
+ * @param projectPath - Absolute path to the project root
4
+ * @returns Promise that resolves when the Node Cache utils file is created
5
+ */
6
+ export declare const create_Node_Cache_Utils: (projectPath: string) => Promise<void>;
7
+ //# sourceMappingURL=create_Node_Cache_Utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_Node_Cache_Utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/src/utils/create_Node_Cache_Utils.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CA+Id,CAAC"}