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.
- package/dist/bin/index.d.ts +3 -0
- package/dist/bin/index.d.ts.map +1 -0
- package/dist/bin/index.js +177 -0
- package/dist/bin/index.js.map +1 -0
- package/dist/lib/config/createEnvExample.d.ts +3 -0
- package/dist/lib/config/createEnvExample.d.ts.map +1 -0
- package/dist/lib/config/createEnvExample.js +39 -0
- package/dist/lib/config/createEnvExample.js.map +1 -0
- package/dist/lib/config/createEslintConfig.d.ts +2 -0
- package/dist/lib/config/createEslintConfig.d.ts.map +1 -0
- package/dist/lib/config/createEslintConfig.js +48 -0
- package/dist/lib/config/createEslintConfig.js.map +1 -0
- package/dist/lib/config/createGitignore.d.ts +3 -0
- package/dist/lib/config/createGitignore.d.ts.map +1 -0
- package/dist/lib/config/createGitignore.js +51 -0
- package/dist/lib/config/createGitignore.js.map +1 -0
- package/dist/lib/config/createPackageJson.d.ts +3 -0
- package/dist/lib/config/createPackageJson.d.ts.map +1 -0
- package/dist/lib/config/createPackageJson.js +74 -0
- package/dist/lib/config/createPackageJson.js.map +1 -0
- package/dist/lib/config/createPrettierConfig.d.ts +2 -0
- package/dist/lib/config/createPrettierConfig.d.ts.map +1 -0
- package/dist/lib/config/createPrettierConfig.js +30 -0
- package/dist/lib/config/createPrettierConfig.js.map +1 -0
- package/dist/lib/config/createTsConfig.d.ts +2 -0
- package/dist/lib/config/createTsConfig.d.ts.map +1 -0
- package/dist/lib/config/createTsConfig.js +133 -0
- package/dist/lib/config/createTsConfig.js.map +1 -0
- package/dist/lib/prisma/create_Schema.Prisma.d.ts +3 -0
- package/dist/lib/prisma/create_Schema.Prisma.d.ts.map +1 -0
- package/dist/lib/prisma/create_Schema.Prisma.js +36 -0
- package/dist/lib/prisma/create_Schema.Prisma.js.map +1 -0
- package/dist/lib/src/builders/create_QueryBuilder_Helpers.d.ts +3 -0
- package/dist/lib/src/builders/create_QueryBuilder_Helpers.d.ts.map +1 -0
- package/dist/lib/src/builders/create_QueryBuilder_Helpers.js +292 -0
- package/dist/lib/src/builders/create_QueryBuilder_Helpers.js.map +1 -0
- package/dist/lib/src/config/create_Config_Index.d.ts +9 -0
- package/dist/lib/src/config/create_Config_Index.d.ts.map +1 -0
- package/dist/lib/src/config/create_Config_Index.js +92 -0
- package/dist/lib/src/config/create_Config_Index.js.map +1 -0
- package/dist/lib/src/constants/create_UserRole_Constant.d.ts +7 -0
- package/dist/lib/src/constants/create_UserRole_Constant.d.ts.map +1 -0
- package/dist/lib/src/constants/create_UserRole_Constant.js +39 -0
- package/dist/lib/src/constants/create_UserRole_Constant.js.map +1 -0
- package/dist/lib/src/createAppFile.d.ts +2 -0
- package/dist/lib/src/createAppFile.d.ts.map +1 -0
- package/dist/lib/src/createAppFile.js +122 -0
- package/dist/lib/src/createAppFile.js.map +1 -0
- package/dist/lib/src/createServerFile.d.ts +3 -0
- package/dist/lib/src/createServerFile.d.ts.map +1 -0
- package/dist/lib/src/createServerFile.js +75 -0
- package/dist/lib/src/createServerFile.js.map +1 -0
- package/dist/lib/src/createSrcStructure.d.ts +2 -0
- package/dist/lib/src/createSrcStructure.d.ts.map +1 -0
- package/dist/lib/src/createSrcStructure.js +50 -0
- package/dist/lib/src/createSrcStructure.js.map +1 -0
- package/dist/lib/src/errors/create_AppError_Class.d.ts +7 -0
- package/dist/lib/src/errors/create_AppError_Class.d.ts.map +1 -0
- package/dist/lib/src/errors/create_AppError_Class.js +65 -0
- package/dist/lib/src/errors/create_AppError_Class.js.map +1 -0
- package/dist/lib/src/errors/create_HandleCastError.d.ts +9 -0
- package/dist/lib/src/errors/create_HandleCastError.d.ts.map +1 -0
- package/dist/lib/src/errors/create_HandleCastError.js +101 -0
- package/dist/lib/src/errors/create_HandleCastError.js.map +1 -0
- package/dist/lib/src/errors/create_HandleDB_ValidationError.d.ts +9 -0
- package/dist/lib/src/errors/create_HandleDB_ValidationError.d.ts.map +1 -0
- package/dist/lib/src/errors/create_HandleDB_ValidationError.js +119 -0
- package/dist/lib/src/errors/create_HandleDB_ValidationError.js.map +1 -0
- package/dist/lib/src/errors/create_HandleDuplicateError.d.ts +9 -0
- package/dist/lib/src/errors/create_HandleDuplicateError.d.ts.map +1 -0
- package/dist/lib/src/errors/create_HandleDuplicateError.js +99 -0
- package/dist/lib/src/errors/create_HandleDuplicateError.js.map +1 -0
- package/dist/lib/src/errors/create_HandleZodValidationError.d.ts +7 -0
- package/dist/lib/src/errors/create_HandleZodValidationError.d.ts.map +1 -0
- package/dist/lib/src/errors/create_HandleZodValidationError.js +50 -0
- package/dist/lib/src/errors/create_HandleZodValidationError.js.map +1 -0
- package/dist/lib/src/interfaces/create_EmailFomat_type.d.ts +7 -0
- package/dist/lib/src/interfaces/create_EmailFomat_type.d.ts.map +1 -0
- package/dist/lib/src/interfaces/create_EmailFomat_type.js +34 -0
- package/dist/lib/src/interfaces/create_EmailFomat_type.js.map +1 -0
- package/dist/lib/src/interfaces/create_Errors_type.d.ts +7 -0
- package/dist/lib/src/interfaces/create_Errors_type.d.ts.map +1 -0
- package/dist/lib/src/interfaces/create_Errors_type.js +43 -0
- package/dist/lib/src/interfaces/create_Errors_type.js.map +1 -0
- package/dist/lib/src/interfaces/create_Index_d_type.d.ts +9 -0
- package/dist/lib/src/interfaces/create_Index_d_type.d.ts.map +1 -0
- package/dist/lib/src/interfaces/create_Index_d_type.js +45 -0
- package/dist/lib/src/interfaces/create_Index_d_type.js.map +1 -0
- package/dist/lib/src/interfaces/create_JWT_Token_type.d.ts +9 -0
- package/dist/lib/src/interfaces/create_JWT_Token_type.d.ts.map +1 -0
- package/dist/lib/src/interfaces/create_JWT_Token_type.js +33 -0
- package/dist/lib/src/interfaces/create_JWT_Token_type.js.map +1 -0
- package/dist/lib/src/interfaces/create_UserRole_type.d.ts +7 -0
- package/dist/lib/src/interfaces/create_UserRole_type.d.ts.map +1 -0
- package/dist/lib/src/interfaces/create_UserRole_type.js +33 -0
- package/dist/lib/src/interfaces/create_UserRole_type.js.map +1 -0
- package/dist/lib/src/middlewares/create_Auth_Gurad.d.ts +9 -0
- package/dist/lib/src/middlewares/create_Auth_Gurad.d.ts.map +1 -0
- package/dist/lib/src/middlewares/create_Auth_Gurad.js +99 -0
- package/dist/lib/src/middlewares/create_Auth_Gurad.js.map +1 -0
- package/dist/lib/src/middlewares/create_BigIntSerializer_Guard.d.ts +7 -0
- package/dist/lib/src/middlewares/create_BigIntSerializer_Guard.d.ts.map +1 -0
- package/dist/lib/src/middlewares/create_BigIntSerializer_Guard.js +64 -0
- package/dist/lib/src/middlewares/create_BigIntSerializer_Guard.js.map +1 -0
- package/dist/lib/src/middlewares/create_FormDataToSetJSONformatData_Guard.d.ts +7 -0
- package/dist/lib/src/middlewares/create_FormDataToSetJSONformatData_Guard.d.ts.map +1 -0
- package/dist/lib/src/middlewares/create_FormDataToSetJSONformatData_Guard.js +63 -0
- package/dist/lib/src/middlewares/create_FormDataToSetJSONformatData_Guard.js.map +1 -0
- package/dist/lib/src/middlewares/create_Global_ErrorHandler_Guard.d.ts +12 -0
- package/dist/lib/src/middlewares/create_Global_ErrorHandler_Guard.d.ts.map +1 -0
- package/dist/lib/src/middlewares/create_Global_ErrorHandler_Guard.js +375 -0
- package/dist/lib/src/middlewares/create_Global_ErrorHandler_Guard.js.map +1 -0
- package/dist/lib/src/middlewares/create_Handle_File_Upload_Middleware.d.ts +7 -0
- package/dist/lib/src/middlewares/create_Handle_File_Upload_Middleware.d.ts.map +1 -0
- package/dist/lib/src/middlewares/create_Handle_File_Upload_Middleware.js +260 -0
- package/dist/lib/src/middlewares/create_Handle_File_Upload_Middleware.js.map +1 -0
- package/dist/lib/src/middlewares/create_NotFound_Guard.d.ts +7 -0
- package/dist/lib/src/middlewares/create_NotFound_Guard.d.ts.map +1 -0
- package/dist/lib/src/middlewares/create_NotFound_Guard.js +47 -0
- package/dist/lib/src/middlewares/create_NotFound_Guard.js.map +1 -0
- package/dist/lib/src/middlewares/create_RateLimiting_Handler_Guard.d.ts +7 -0
- package/dist/lib/src/middlewares/create_RateLimiting_Handler_Guard.d.ts.map +1 -0
- package/dist/lib/src/middlewares/create_RateLimiting_Handler_Guard.js +270 -0
- package/dist/lib/src/middlewares/create_RateLimiting_Handler_Guard.js.map +1 -0
- package/dist/lib/src/middlewares/create_ValidateRequest_Guard.d.ts +7 -0
- package/dist/lib/src/middlewares/create_ValidateRequest_Guard.d.ts.map +1 -0
- package/dist/lib/src/middlewares/create_ValidateRequest_Guard.js +104 -0
- package/dist/lib/src/middlewares/create_ValidateRequest_Guard.js.map +1 -0
- package/dist/lib/src/modules/create_DemoModules_SrcStructure.d.ts +7 -0
- package/dist/lib/src/modules/create_DemoModules_SrcStructure.d.ts.map +1 -0
- package/dist/lib/src/modules/create_DemoModules_SrcStructure.js +367 -0
- package/dist/lib/src/modules/create_DemoModules_SrcStructure.js.map +1 -0
- package/dist/lib/src/routers/create_Router_Index_Path.d.ts +7 -0
- package/dist/lib/src/routers/create_Router_Index_Path.d.ts.map +1 -0
- package/dist/lib/src/routers/create_Router_Index_Path.js +54 -0
- package/dist/lib/src/routers/create_Router_Index_Path.js.map +1 -0
- package/dist/lib/src/shared/create_Prisma_Shated.d.ts +9 -0
- package/dist/lib/src/shared/create_Prisma_Shated.d.ts.map +1 -0
- package/dist/lib/src/shared/create_Prisma_Shated.js +34 -0
- package/dist/lib/src/shared/create_Prisma_Shated.js.map +1 -0
- package/dist/lib/src/utils/createCatchAsync_Utils.d.ts +7 -0
- package/dist/lib/src/utils/createCatchAsync_Utils.d.ts.map +1 -0
- package/dist/lib/src/utils/createCatchAsync_Utils.js +59 -0
- package/dist/lib/src/utils/createCatchAsync_Utils.js.map +1 -0
- package/dist/lib/src/utils/createLoggerFile.d.ts +7 -0
- package/dist/lib/src/utils/createLoggerFile.d.ts.map +1 -0
- package/dist/lib/src/utils/createLoggerFile.js +35 -0
- package/dist/lib/src/utils/createLoggerFile.js.map +1 -0
- package/dist/lib/src/utils/create_Common_Utils.d.ts +9 -0
- package/dist/lib/src/utils/create_Common_Utils.d.ts.map +1 -0
- package/dist/lib/src/utils/create_Common_Utils.js +262 -0
- package/dist/lib/src/utils/create_Common_Utils.js.map +1 -0
- package/dist/lib/src/utils/create_Date_Time_Validation_Utils.d.ts +7 -0
- package/dist/lib/src/utils/create_Date_Time_Validation_Utils.d.ts.map +1 -0
- package/dist/lib/src/utils/create_Date_Time_Validation_Utils.js +181 -0
- package/dist/lib/src/utils/create_Date_Time_Validation_Utils.js.map +1 -0
- package/dist/lib/src/utils/create_Node_Cache_Utils.d.ts +7 -0
- package/dist/lib/src/utils/create_Node_Cache_Utils.d.ts.map +1 -0
- package/dist/lib/src/utils/create_Node_Cache_Utils.js +149 -0
- package/dist/lib/src/utils/create_Node_Cache_Utils.js.map +1 -0
- package/dist/lib/src/utils/create_Remove_Uploaded_Files_Utils.d.ts +7 -0
- package/dist/lib/src/utils/create_Remove_Uploaded_Files_Utils.d.ts.map +1 -0
- package/dist/lib/src/utils/create_Remove_Uploaded_Files_Utils.js +162 -0
- package/dist/lib/src/utils/create_Remove_Uploaded_Files_Utils.js.map +1 -0
- package/dist/lib/src/utils/create_SendEmail_Utils.d.ts +7 -0
- package/dist/lib/src/utils/create_SendEmail_Utils.d.ts.map +1 -0
- package/dist/lib/src/utils/create_SendEmail_Utils.js +140 -0
- package/dist/lib/src/utils/create_SendEmail_Utils.js.map +1 -0
- package/dist/lib/src/utils/create_sendResponse_Utils.d.ts +7 -0
- package/dist/lib/src/utils/create_sendResponse_Utils.d.ts.map +1 -0
- package/dist/lib/src/utils/create_sendResponse_Utils.js +95 -0
- package/dist/lib/src/utils/create_sendResponse_Utils.js.map +1 -0
- package/dist/lib/utils/helpers.d.ts +5 -0
- package/dist/lib/utils/helpers.d.ts.map +1 -0
- package/dist/lib/utils/helpers.js +31 -0
- package/dist/lib/utils/helpers.js.map +1 -0
- package/dist/lib/utils/types.d.ts +5 -0
- package/dist/lib/utils/types.d.ts.map +1 -0
- package/dist/lib/utils/types.js +2 -0
- package/dist/lib/utils/types.js.map +1 -0
- 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"}
|