tamim-cli
Version:
A CLI tool for generating module boilerplate code including routes, controllers, services, and more
86 lines (85 loc) • 4.51 kB
JavaScript
;
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;