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,104 @@
1
+ import path from "path";
2
+ import { createFile } from "../../utils/helpers.js";
3
+ import chalk from "chalk";
4
+ /**
5
+ * Creates a request validation middleware file using Zod schemas
6
+ * @param projectPath - Absolute path to the project root
7
+ * @returns Promise that resolves when the validate request middleware file is created
8
+ */
9
+ export const create_ValidateRequest_Guard = async (projectPath) => {
10
+ try {
11
+ const validateRequestMiddlewareTemplate = `/* eslint-disable @typescript-eslint/no-explicit-any */
12
+ import { AnyZodObject, ZodError, ZodIssue } from 'zod'
13
+ import { Request, Response, NextFunction } from 'express'
14
+ import catchAsync from '../utils/catchAsync'
15
+ import AppError from '../errors/AppError'
16
+
17
+ /**
18
+ * Request validation middleware using Zod schemas
19
+ * Creates a middleware function that validates the request against the provided Zod schema
20
+ *
21
+ * @param schema - Zod schema object to validate against
22
+ * @returns Express middleware function
23
+ *
24
+ * @example
25
+ * // Define a schema for user registration
26
+ * const userSchema = z.object({
27
+ * body: z.object({
28
+ * email: z.string().email(),
29
+ * password: z.string().min(8)
30
+ * }),
31
+ * params: z.object({
32
+ * id: z.string().uuid()
33
+ * })
34
+ * });
35
+ *
36
+ * // Use the middleware
37
+ * app.post('/users/:id', validateRequest(userSchema), userController.createUser);
38
+ */
39
+ const validateRequest = (schema: AnyZodObject) => {
40
+ return catchAsync(async (req: Request, res: Response, next: NextFunction) => {
41
+ try {
42
+ // Prepare the data to validate (body, cookies, and params)
43
+ const dataToValidate = {
44
+ body: req.body,
45
+ cookies: req.cookies,
46
+ params: req.params
47
+ }
48
+
49
+ // Validate the data against the schema
50
+ await schema.parseAsync(dataToValidate)
51
+
52
+ // If validation passes, proceed to the next middleware
53
+ next()
54
+ } catch (error) {
55
+ // Handle Zod validation errors
56
+ if (error instanceof ZodError) {
57
+ // Format the Zod error into a more readable format
58
+ const formattedErrors = error.errors.map((err: ZodIssue) => {
59
+ // Base error object
60
+ const errorObj: any = {
61
+ path: err.path.join('.'),
62
+ message: err.message,
63
+ code: err.code
64
+ }
65
+
66
+ // Add expected and received only if they exist
67
+ if ('expected' in err) {
68
+ errorObj.expected = (err as any).expected
69
+ }
70
+ if ('received' in err) {
71
+ errorObj.received = (err as any).received
72
+ }
73
+
74
+ return errorObj
75
+ })
76
+
77
+ // Throw an AppError with the validation details
78
+ throw new AppError(
79
+ 400,
80
+ 'validation',
81
+ 'Request validation failed',
82
+ JSON.stringify(formattedErrors)
83
+ )
84
+ }
85
+
86
+ // For other types of errors, rethrow them
87
+ next(error)
88
+ }
89
+ })
90
+ }
91
+
92
+ export default validateRequest
93
+ `;
94
+ await createFile(path.join(projectPath, "src/app/middlewares", "validateRequest.ts"), validateRequestMiddlewareTemplate);
95
+ // Success message with green checkmark and text
96
+ console.log(chalk.green("✅ Successfully created Validate Request Middleware file"));
97
+ }
98
+ catch (err) {
99
+ // Error message with red cross and text
100
+ console.error(chalk.red("❌ Error creating Validate Request Middleware file:"), err);
101
+ throw err;
102
+ }
103
+ };
104
+ //# sourceMappingURL=create_ValidateRequest_Guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_ValidateRequest_Guard.js","sourceRoot":"","sources":["../../../../src/lib/src/middlewares/create_ValidateRequest_Guard.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,EAC/C,WAAmB,EACJ,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,iCAAiC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkF7C,CAAC;QAEE,MAAM,UAAU,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,EAAE,oBAAoB,CAAC,EACnE,iCAAiC,CAClC,CAAC;QAEF,gDAAgD;QAChD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,yDAAyD,CAAC,CACvE,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wCAAwC;QACxC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,EAC/D,GAAG,CACJ,CAAC;QACF,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Creates a demo module structure with sample files
3
+ * @param projectPath - Absolute path to the project root
4
+ * @returns Promise that resolves when the demo module structure is created
5
+ */
6
+ export declare const createDemoModules_SrcStructure: (projectPath: string) => Promise<void>;
7
+ //# sourceMappingURL=create_DemoModules_SrcStructure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_DemoModules_SrcStructure.d.ts","sourceRoot":"","sources":["../../../../src/lib/src/modules/create_DemoModules_SrcStructure.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,GACzC,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CA4Wd,CAAC"}
@@ -0,0 +1,367 @@
1
+ import path from "path";
2
+ import { createDirectory, createFile } from "../../utils/helpers.js";
3
+ import chalk from "chalk";
4
+ /**
5
+ * Creates a demo module structure with sample files
6
+ * @param projectPath - Absolute path to the project root
7
+ * @returns Promise that resolves when the demo module structure is created
8
+ */
9
+ export const createDemoModules_SrcStructure = async (projectPath) => {
10
+ try {
11
+ // Create src/app/modules directory if it doesn't exist
12
+ const modulesPath = path.join(projectPath, "src/app/modules");
13
+ await createDirectory(modulesPath);
14
+ // Create demo_modules directory
15
+ const demoModulePath = path.join(modulesPath, "demo_modules");
16
+ await createDirectory(demoModulePath);
17
+ // Define files to create with their basic content
18
+ const files = [
19
+ {
20
+ name: "demo_modules_interface.ts",
21
+ content: `/**
22
+ * Demo Module Interfaces
23
+ * Defines TypeScript interfaces for the demo module
24
+ */
25
+ export type TDemoModule = {
26
+ id: string;
27
+ name: string;
28
+ description?: string;
29
+ createdAt: Date;
30
+ updatedAt: Date;
31
+ }
32
+ `,
33
+ },
34
+ {
35
+ name: "demo_modules_model.ts",
36
+ content: `/**
37
+ * Demo Module Model
38
+ * Mongoose model for demo modules
39
+ */
40
+ /**
41
+ import { Schema, model } from 'mongoose';
42
+ import { TDemoModule } from './demo_modules_interface';
43
+
44
+ const demoModuleSchema = new Schema<TDemoModule>({
45
+ name: {
46
+ type: String,
47
+ required: [true, 'Name is required'],
48
+ trim: true,
49
+ maxlength: 100
50
+ },
51
+ description: {
52
+ type: String,
53
+ trim: true,
54
+ maxlength: 500
55
+ }
56
+ }, {
57
+ timestamps: true
58
+ });
59
+
60
+ export const DemoModuleModel = model<TDemoModule>('DemoModule', demoModuleSchema);
61
+ */
62
+ `,
63
+ },
64
+ {
65
+ name: "demo_modules_validationZodSchema.ts",
66
+ content: `/**
67
+ * Demo Module Validation Schemas
68
+ * Zod schemas for validating demo module data
69
+ */
70
+ import { z } from 'zod';
71
+
72
+ export const createDemoModuleSchema = z.object({
73
+ body : z.object({
74
+ name: z.string({required_error: 'Name is required'})
75
+ .min(1, 'Name is required')
76
+ .max(100, 'Name cannot exceed 100 characters'),
77
+ description: z.string()
78
+ .max(500, 'Description cannot exceed 500 characters')
79
+ .optional()
80
+ })
81
+ });
82
+
83
+ export const updateDemoModuleSchema = z.object({
84
+ body : z.object({
85
+ name: z.string()
86
+ .max(100, 'Name cannot exceed 100 characters')
87
+ .optional(),
88
+ description: z.string()
89
+ .max(500, 'Description cannot exceed 500 characters')
90
+ .optional()
91
+ })
92
+ });
93
+
94
+ export type TCreateDemoModule = z.infer<typeof createDemoModuleSchema>;
95
+ export type TUpdateDemoModule = z.infer<typeof updateDemoModuleSchema>;
96
+ `,
97
+ },
98
+ {
99
+ name: "demo_modules_service.ts",
100
+ content: `/**
101
+ * Demo Module Service
102
+ * Business logic for demo modules
103
+ */
104
+ import AppError from '../../errors/AppError';
105
+
106
+ // fetche demo data from database
107
+ const fetch_DemoData_fromDB = async () => {
108
+ console.log('Fetching demo data from your database...');
109
+ const data = "Sample Demo Data from DB";
110
+ const meta = {
111
+ page : 1,
112
+ limit : 10,
113
+ totalPage : 3,
114
+ totalData : 30
115
+ }
116
+ return {data, meta};
117
+ }
118
+
119
+ export const DemoModuleServices = {
120
+ fetch_DemoData_fromDB
121
+ }
122
+ `,
123
+ },
124
+ {
125
+ name: "demo_modules_controller.ts",
126
+ content: `/**
127
+ * Demo Module Controller
128
+ * Handles HTTP requests for demo modules
129
+ */
130
+ import { Request, Response } from 'express'
131
+ import { DemoModuleServices } from './demo_modules_service'
132
+ import catchAsync from '../../utils/catchAsync'
133
+ import sendResponse from '../../utils/sendResponse'
134
+
135
+ // fetch demo data
136
+ const fetch_DemoData = catchAsync(async (req: Request, res: Response) => {
137
+ const { data, meta } = await DemoModuleServices.fetch_DemoData_fromDB()
138
+ sendResponse(res, {
139
+ status: 200,
140
+ success: true,
141
+ message: 'Demo data fetched successfully',
142
+ data: data,
143
+ meta: meta
144
+ })
145
+ })
146
+
147
+ export const DemoModuleControllers = {
148
+ fetch_DemoData
149
+ }
150
+ `,
151
+ },
152
+ {
153
+ name: "demo_modules_route.ts",
154
+ content: `/**
155
+ * Demo Module Routes
156
+ * Defines routes for demo modules
157
+ */
158
+ import { Router } from 'express';
159
+ import { DemoModuleControllers } from './demo_modules_controller';
160
+ // import { validateRequest } from '../../middlewares/validateRequest';
161
+ // import { createDemoModuleSchema, updateDemoModuleSchema } from './demo_modules_validationZodSchema';
162
+
163
+ const router: Router = Router();
164
+
165
+ // Create demo module
166
+ /**
167
+ router.post(
168
+ '/create',
169
+ validateRequest(createDemoModuleSchema),
170
+ DemoModuleControllers.createDemoModule
171
+ );
172
+ */
173
+
174
+ // Get all demo modules
175
+ router.get(
176
+ '/',
177
+ DemoModuleControllers.fetch_DemoData
178
+ );
179
+
180
+ // Get demo module by ID
181
+ /**
182
+ router.get(
183
+ '/:id',
184
+ DemoModuleControllers.getDemoModuleById
185
+ );
186
+ */
187
+
188
+ // Update demo module
189
+ /**
190
+ router.patch(
191
+ '/:id/update',
192
+ validateRequest(updateDemoModuleSchema),
193
+ DemoModuleControllers.updateDemoModule
194
+ );
195
+ */
196
+
197
+ // Delete demo module
198
+ /**
199
+ router.delete(
200
+ '/:id/delete',
201
+ DemoModuleControllers.deleteDemoModule
202
+ );
203
+ */
204
+
205
+ export const DemoModuleRoutes = router;
206
+ `,
207
+ },
208
+ {
209
+ name: "demo_modules_constant.ts",
210
+ content: `/**
211
+ * Demo Module Constants
212
+ * Defines constants used throughout the demo module
213
+ */
214
+ export const DEMO_MODULE_CONSTANTS = {
215
+ // Error messages
216
+ ERROR_MESSAGES: {
217
+ NOT_FOUND: 'Demo module not found',
218
+ CREATE_FAILED: 'Failed to create demo module',
219
+ UPDATE_FAILED: 'Failed to update demo module',
220
+ DELETE_FAILED: 'Failed to delete demo module'
221
+ },
222
+
223
+ // Success messages
224
+ SUCCESS_MESSAGES: {
225
+ CREATED: 'Demo module created successfully',
226
+ UPDATED: 'Demo module updated successfully',
227
+ DELETED: 'Demo module deleted successfully',
228
+ RETRIEVED: 'Demo module retrieved successfully'
229
+ },
230
+
231
+ // Validation limits
232
+ VALIDATION_LIMITS: {
233
+ NAME_MIN_LENGTH: 1,
234
+ NAME_MAX_LENGTH: 100,
235
+ DESCRIPTION_MAX_LENGTH: 500
236
+ }
237
+ };
238
+ `,
239
+ },
240
+ {
241
+ name: "demo_modules_lib.ts",
242
+ content: `/**
243
+ * Demo Module Library
244
+ * Contains library functions for demo modules
245
+ */
246
+ import { TDemoModule } from './demo_modules_interface';
247
+
248
+ /**
249
+ * Format demo module for response
250
+ * @param demoModule - The demo module to format
251
+ * @returns Formatted demo module
252
+ */
253
+ export const formatDemoModule = (demoModule: TDemoModule) => {
254
+ return {
255
+ id: demoModule.id,
256
+ name: demoModule.name,
257
+ description: demoModule.description || '',
258
+ createdAt: demoModule.createdAt,
259
+ updatedAt: demoModule.updatedAt
260
+ };
261
+ };
262
+
263
+ /**
264
+ * Format multiple demo modules for response
265
+ * @param demoModules - Array of demo modules to format
266
+ * @returns Array of formatted demo modules
267
+ */
268
+ export const formatDemoModules = (demoModules: TDemoModule[]) => {
269
+ return demoModules.map(formatDemoModule);
270
+ };
271
+ `,
272
+ },
273
+ {
274
+ name: "demo_modules_utils.ts",
275
+ content: `/**
276
+ * Demo Module Utilities
277
+ * Contains utility functions for demo modules
278
+ */
279
+ `,
280
+ },
281
+ {
282
+ name: "demo_modules_helpers.ts",
283
+ content: `/**
284
+ * Demo Module Helpers
285
+ * Contains helper functions for demo modules
286
+ */
287
+ import { TDemoModule } from './demo_modules_interface';
288
+
289
+ /**
290
+ * Generate a unique name for demo module
291
+ * @param baseName - Base name for the module
292
+ * @param existingNames - Array of existing names
293
+ * @returns Unique name
294
+ */
295
+ export const generateUniqueName = (
296
+ baseName: string,
297
+ existingNames: string[]
298
+ ): string => {
299
+ let counter = 1;
300
+ let uniqueName = baseName;
301
+
302
+ while (existingNames.includes(uniqueName)) {
303
+ uniqueName = \`\${baseName} \${counter}\`;
304
+ counter++;
305
+ }
306
+
307
+ return uniqueName;
308
+ };
309
+
310
+ /**
311
+ * Calculate similarity between two strings
312
+ * @param str1 - First string
313
+ * @param str2 - Second string
314
+ * @returns Similarity score (0-1)
315
+ */
316
+ export const calculateStringSimilarity = (str1: string, str2: string): number => {
317
+ const longer = str1.length > str2.length ? str1 : str2;
318
+ const shorter = str1.length > str2.length ? str2 : str1;
319
+
320
+ if (longer.length === 0) return 1;
321
+
322
+ const editDistance = levenshteinDistance(longer, shorter);
323
+ return (longer.length - editDistance) / longer.length;
324
+ };
325
+
326
+ /**
327
+ * Calculate Levenshtein distance between two strings
328
+ * @param str1 - First string
329
+ * @param str2 - Second string
330
+ * @returns Edit distance
331
+ */
332
+ const levenshteinDistance = (str1: string, str2: string): number => {
333
+ const matrix = Array(str2.length + 1).fill(null).map(() => Array(str1.length + 1).fill(null));
334
+
335
+ for (let i = 0; i <= str1.length; i++) matrix[0][i] = i;
336
+ for (let j = 0; j <= str2.length; j++) matrix[j][0] = j;
337
+
338
+ for (let j = 1; j <= str2.length; j++) {
339
+ for (let i = 1; i <= str1.length; i++) {
340
+ const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;
341
+ matrix[j][i] = Math.min(
342
+ matrix[j][i - 1] + 1, // deletion
343
+ matrix[j - 1][i] + 1, // insertion
344
+ matrix[j - 1][i - 1] + indicator // substitution
345
+ );
346
+ }
347
+ }
348
+
349
+ return matrix[str2.length][str1.length];
350
+ };
351
+ `,
352
+ },
353
+ ];
354
+ // Create each file
355
+ for (const file of files) {
356
+ await createFile(path.join(demoModulePath, file.name), file.content);
357
+ }
358
+ // Success message with green checkmark and text
359
+ console.log(chalk.green("✅ Demo module files created successfully. Delete them if not needed."));
360
+ }
361
+ catch (error) {
362
+ // Error message with red cross and text
363
+ console.error(chalk.red("❌ Error creating demo module files:"), error);
364
+ throw error;
365
+ }
366
+ };
367
+ //# sourceMappingURL=create_DemoModules_SrcStructure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_DemoModules_SrcStructure.js","sourceRoot":"","sources":["../../../../src/lib/src/modules/create_DemoModules_SrcStructure.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EACjD,WAAmB,EACJ,EAAE;IACjB,IAAI,CAAC;QACH,uDAAuD;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAC9D,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;QAEnC,gCAAgC;QAChC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC9D,MAAM,eAAe,CAAC,cAAc,CAAC,CAAC;QAEtC,kDAAkD;QAClD,MAAM,KAAK,GAAG;YACZ;gBACE,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE;;;;;;;;;;;CAWhB;aACM;YACD;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BhB;aACM;YACD;gBACE,IAAI,EAAE,qCAAqC;gBAC3C,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BhB;aACM;YACD;gBACE,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;CAsBhB;aACM;YACD;gBACE,IAAI,EAAE,4BAA4B;gBAClC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;CAwBhB;aACM;YACD;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDhB;aACM;YACD;gBACE,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BhB;aACM;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BhB;aACM;YACD;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE;;;;CAIhB;aACM;YACD;gBACE,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEhB;aACM;SACF,CAAC;QAEF,mBAAmB;QACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;QAED,gDAAgD;QAChD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,sEAAsE,CACvE,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wCAAwC;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Creates a router index file that serves as the central point for registering all module routes
3
+ * @param projectPath - Absolute path to the project root
4
+ * @returns Promise that resolves when the router index file is created
5
+ */
6
+ export declare const create_Router_index_Path: (projectPath: string) => Promise<void>;
7
+ //# sourceMappingURL=create_Router_Index_Path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_Router_Index_Path.d.ts","sourceRoot":"","sources":["../../../../src/lib/src/routers/create_Router_Index_Path.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GACnC,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CAgDd,CAAC"}
@@ -0,0 +1,54 @@
1
+ import path from "path";
2
+ import { createFile } from "../../utils/helpers.js";
3
+ import chalk from "chalk";
4
+ /**
5
+ * Creates a router index file that serves as the central point for registering all module routes
6
+ * @param projectPath - Absolute path to the project root
7
+ * @returns Promise that resolves when the router index file is created
8
+ */
9
+ export const create_Router_index_Path = async (projectPath) => {
10
+ try {
11
+ const routerIndexTemplate = `import express, { Router } from 'express';
12
+ import { DemoModuleRoutes } from '../modules/demo_modules/demo_modules_route';
13
+
14
+ /**
15
+ * Main router configuration
16
+ * This file serves as the central point for registering all module routes
17
+ */
18
+ const routers: Router = express.Router();
19
+
20
+ /**
21
+ * Array of module routes to be registered
22
+ * Each object contains:
23
+ * - path: The base path for the module (e.g., '/auth')
24
+ * - route: The router instance for the module
25
+ */
26
+ const moduleRoutes = [
27
+ {
28
+ path: '/demo-modules',
29
+ route: DemoModuleRoutes
30
+ }
31
+ ];
32
+
33
+ /**
34
+ * Register all module routes
35
+ * This loop iterates through the moduleRoutes array and registers each route
36
+ * with its corresponding path
37
+ */
38
+ moduleRoutes.forEach(route => {
39
+ routers.use(route.path, route.route);
40
+ });
41
+
42
+ export default routers;
43
+ `;
44
+ await createFile(path.join(projectPath, "src/app/routers", "index.ts"), routerIndexTemplate);
45
+ // Success message with green checkmark and text
46
+ console.log(chalk.green("✅ Router index file created successfully"));
47
+ }
48
+ catch (err) {
49
+ // Error message with red cross and text
50
+ console.error(chalk.red("❌ Error creating Router index file:"), err);
51
+ throw err;
52
+ }
53
+ };
54
+ //# sourceMappingURL=create_Router_Index_Path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_Router_Index_Path.js","sourceRoot":"","sources":["../../../../src/lib/src/routers/create_Router_Index_Path.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,WAAmB,EACJ,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC/B,CAAC;QAEE,MAAM,UAAU,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,UAAU,CAAC,EACrD,mBAAmB,CACpB,CAAC;QAEF,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,9 @@
1
+ import { TAnswers } from "../../utils/types.js";
2
+ /**
3
+ * Creates a Prisma shared file for PostgreSQL with Prisma database option
4
+ * @param projectPath - Absolute path to the project root
5
+ * @param answers - User answers from CLI prompts
6
+ * @returns Promise that resolves when the Prisma shared file is created (if applicable)
7
+ */
8
+ export declare const create_prisma_shared_file: (projectPath: string, answers: TAnswers) => Promise<void>;
9
+ //# sourceMappingURL=create_Prisma_Shated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_Prisma_Shated.d.ts","sourceRoot":"","sources":["../../../../src/lib/src/shared/create_Prisma_Shated.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GACpC,aAAa,MAAM,EACnB,SAAS,QAAQ,KAChB,OAAO,CAAC,IAAI,CA2Bd,CAAC"}
@@ -0,0 +1,34 @@
1
+ import path from "path";
2
+ import { createFile } from "../../utils/helpers.js";
3
+ import chalk from "chalk";
4
+ /**
5
+ * Creates a Prisma shared file for PostgreSQL with Prisma database option
6
+ * @param projectPath - Absolute path to the project root
7
+ * @param answers - User answers from CLI prompts
8
+ * @returns Promise that resolves when the Prisma shared file is created (if applicable)
9
+ */
10
+ export const create_prisma_shared_file = async (projectPath, answers) => {
11
+ try {
12
+ // Check if PostgreSQL with Prisma is selected
13
+ if (answers.database === "PostgreSQL with Prisma") {
14
+ const prismaSharedTemplate = `
15
+ import { PrismaClient } from '../../../generated/prisma'
16
+
17
+ const prisma = new PrismaClient({
18
+ log: ['query', 'info', 'warn', 'error'],
19
+ });
20
+
21
+ export default prisma;
22
+ `;
23
+ await createFile(path.join(projectPath, "src/app/shared", "prisma.ts"), prismaSharedTemplate);
24
+ // Success message with green checkmark and text
25
+ console.log(chalk.green("✅ Prisma shared file created successfully."));
26
+ }
27
+ }
28
+ catch (err) {
29
+ // Error message with red cross and text
30
+ console.error(chalk.red("❌ Error creating Prisma shared file:"), err);
31
+ throw err;
32
+ }
33
+ };
34
+ //# sourceMappingURL=create_Prisma_Shated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_Prisma_Shated.js","sourceRoot":"","sources":["../../../../src/lib/src/shared/create_Prisma_Shated.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAC5C,WAAmB,EACnB,OAAiB,EACF,EAAE;IACjB,IAAI,CAAC;QACH,8CAA8C;QAC9C,IAAI,OAAO,CAAC,QAAQ,KAAK,wBAAwB,EAAE,CAAC;YAClD,MAAM,oBAAoB,GAAG;;;;;;;;CAQlC,CAAC;YAEI,MAAM,UAAU,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC,EACrD,oBAAoB,CACrB,CAAC;YAEF,gDAAgD;YAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,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,7 @@
1
+ /**
2
+ * Creates a catch async utilities file for handling asynchronous errors in Express route handlers
3
+ * @param projectPath - Absolute path to the project root
4
+ * @returns Promise that resolves when the catch async utils file is created
5
+ */
6
+ export declare const createCatchAsync_Utils: (projectPath: string) => Promise<void>;
7
+ //# sourceMappingURL=createCatchAsync_Utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCatchAsync_Utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/src/utils/createCatchAsync_Utils.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CAqDd,CAAC"}