UNPKG

tamim-cli

Version:

A CLI tool for generating module boilerplate code including routes, controllers, services, and more

86 lines (85 loc) 4.51 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createModule = void 0; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const fileGeneratos_1 = require("../service/createModule/fileGeneratos"); const capitalize_1 = require("../helpers/capitalize"); const fileTypes_1 = require("../enums/fileTypes"); const parseFields_1 = require("../utils/parseFields"); const generateFileContent_1 = require("../service/createModule/generateFileContent"); const postmanFields_1 = require("../service/createModule/postman/postmanFields"); const requestArray_1 = require("../service/createModule/postman/requestArray"); const createModulePostman_1 = require("../service/createModule/postman/createModulePostman"); const updateCentralRouteFile_1 = require("../helpers/updateCentralRouteFile"); const createModule = async (name, fields, options) => { if (!name) { console.error("Error: Module name is required"); process.exit(1); } if (!Array.isArray(fields) || fields.length === 0) { console.error("Error: At least one field must be specified"); process.exit(1); } const isExistConfig = fs_1.default.existsSync(path_1.default.resolve(process.cwd(), "tamim.config.cjs")); try { const parsedFields = await (0, parseFields_1.parseFields)(fields); const postmanFields = await (0, postmanFields_1.createPostmanFields)(parsedFields); const requestsArray = await (0, requestArray_1.createRequestArray)(name, fields, postmanFields); const moduleDir = path_1.default.join(process.cwd(), "src", "app", "modules", name); fs_1.default.mkdirSync(moduleDir, { recursive: true }); const files = Object.keys(fileGeneratos_1.fileGenerators).map((type) => ({ path: `${moduleDir}/${name}.${type}`, type: type.split(".")[0], })); const skipTypes = options.skip || []; files.forEach(({ path, type }) => { if (skipTypes.includes(type)) { console.log(`Skipped: ${type}`); return; } const capitalizedModuleName = (0, capitalize_1.capitalize)(name); const exportName = `${capitalizedModuleName}${(0, capitalize_1.capitalize)(type)}`; const content = (0, generateFileContent_1.generateFileContent)(type, name, capitalizedModuleName, exportName, parsedFields, options); fs_1.default.writeFileSync(path, content.trim() + "\n"); console.log(`Created: ${path}`); }); const fileFieldData = []; const processedFields = new Set(); parsedFields.forEach((field) => { if (!processedFields.has(field.name)) { for (const fileType of Object.values(fileTypes_1.FileTypes)) { if (field.name.toLowerCase().includes(fileType.toLowerCase()) && field.type === "string") { fileFieldData.push({ fieldName: field.name, fieldType: fileType, }); processedFields.add(field.name); break; } } } }); //update central route file (0, updateCentralRouteFile_1.updateRouterFile)(name, (0, capitalize_1.capitalizedName)(name)); const isExistFileField = fileFieldData.length > 0; console.log(`\nSuccessfully created module '${name}' with all required files.`); console.log(`\nAdding requests to postman.`); if (isExistConfig) { const configPath = path_1.default.resolve(process.cwd(), "tamim.config.cjs"); const { config } = require(configPath); await (0, createModulePostman_1.automatePostman)(config.postman_api_key, config.postman_folder_name || name.toLowerCase(), config.postman_workspace_id, config.postman_collection_name, requestsArray, isExistFileField, fileFieldData); } console.log(`\nSuccessfully added requests to postman and created required files`); } catch (error) { console.error("Error parsing fields:", error.message); console.error("Error creating module:", error.message); process.exit(1); } }; exports.createModule = createModule;