UNPKG

@expressots/cli

Version:

Expressots CLI - modern, fast, lightweight nodejs web framework (@cli)

135 lines (134 loc) 5.41 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.addModuleToContainerNestedPath = exports.addModuleToContainer = void 0; const chalk_1 = __importDefault(require("chalk")); const glob_1 = require("glob"); const node_fs_1 = __importDefault(require("node:fs")); const cli_ui_1 = require("./cli-ui"); const compiler_1 = __importDefault(require("./compiler")); const APP_CONTAINER = "app.ts"; async function validateAppContainer() { const { sourceRoot } = await compiler_1.default.loadConfig(); const imports = []; const notImports = []; // Locate the container file const path = (0, glob_1.globSync)(`./${sourceRoot}/${APP_CONTAINER}`, { absolute: true, ignore: "**/node_modules/**", }); if (!path.length) { (0, cli_ui_1.printError)("Module not added to Container. Container file not found!", APP_CONTAINER); process.exit(1); } // Read the container file const fileContent = await node_fs_1.default.promises.readFile(path[0], "utf8"); // Collect imports and other lines fileContent.split("\n").forEach((line) => { if (line.startsWith("import")) { imports.push(line); } else { notImports.push(line); } }); // Regex to detect and extract modules from configContainer const moduleRegex = /this\.configContainer\(\s*\[\s*([\s\S]*?)\s*]\s*\)/; const moduleMatch = fileContent.match(moduleRegex); if (!moduleMatch) { (0, cli_ui_1.printError)("The App class does not contain a valid configContainer([]) declaration!", APP_CONTAINER); process.exit(1); } // Extract modules if present const modules = moduleMatch[1] .trim() .split(",") .filter((m) => m.trim() !== "") .map((m) => m.trim()); return { regex: moduleRegex, path: path[0], content: fileContent, modules, imports, notImports, }; } async function addModuleToContainer(name, modulePath, path) { console.log("To chamando esse cara"); const containerData = await validateAppContainer(); const moduleName = (name[0].toUpperCase() + name.slice(1)).trimStart(); const { opinionated } = await compiler_1.default.loadConfig(); let usecaseDir; if (opinionated) { usecaseDir = `@useCases/`; } else { usecaseDir = `./`; } let newImport = ""; const modulePathRegex = /^[^/]=$/; if (!modulePathRegex.test(modulePath)) { if (path.split("/").length > 1) { newImport = `import { ${moduleName}Module } from "${usecaseDir}${name.toLowerCase()}/${name.toLowerCase()}.module";`; } else { newImport = `import { ${moduleName}Module } from "${usecaseDir}${name.toLowerCase()}.module";`; } } else { newImport = `import { ${moduleName}Module } from "${usecaseDir}${name}/${name.toLowerCase()}.module";`; } if (containerData.imports.includes(newImport) && containerData.modules.includes(`${moduleName}Module`)) { return; } containerData.imports.push(newImport); containerData.modules.push(`${moduleName}Module`); const newModule = containerData.modules.join(", "); const newModuleDeclaration = `this.configContainer([${newModule}])`; const newFileContent = [ ...containerData.imports, ...containerData.notImports, ] .join("\n") .replace(containerData.regex, newModuleDeclaration); console.log(" ", chalk_1.default.greenBright(`[container]`.padEnd(14)), chalk_1.default.bold.white(`${moduleName}Module added to ${APP_CONTAINER}! ✔️`)); await node_fs_1.default.promises.writeFile(containerData.path, newFileContent, "utf8"); } exports.addModuleToContainer = addModuleToContainer; async function addModuleToContainerNestedPath(name, path) { const containerData = await validateAppContainer(); const moduleName = (name[0].toUpperCase() + name.slice(1)).trimStart(); const { opinionated } = await compiler_1.default.loadConfig(); let usecaseDir; if (opinionated) { usecaseDir = `@useCases/`; } else { usecaseDir = `./`; } if (path.endsWith("/")) { path = path.slice(0, -1); } const newImport = `import { ${moduleName}Module } from "${usecaseDir}${path}.module";`; if (containerData.imports.includes(newImport) && containerData.modules.includes(`${moduleName}Module`)) { return; } containerData.imports.push(newImport); containerData.modules.push(`${moduleName}Module`); const newModule = containerData.modules.join(", "); const newModuleDeclaration = `this.configContainer([${newModule}])`; const newFileContent = [ ...containerData.imports, ...containerData.notImports, ] .join("\n") .replace(containerData.regex, newModuleDeclaration); console.log(" ", chalk_1.default.greenBright(`[container]`.padEnd(14)), chalk_1.default.bold.white(`${moduleName}Module added to ${APP_CONTAINER}! ✔️`)); await node_fs_1.default.promises.writeFile(containerData.path, newFileContent, "utf8"); } exports.addModuleToContainerNestedPath = addModuleToContainerNestedPath;