@expressots/cli
Version:
Expressots CLI - modern, fast, lightweight nodejs web framework (@cli)
135 lines (134 loc) • 5.41 kB
JavaScript
;
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;