UNPKG

flare-api

Version:

A modern, fast, and intuitive Node.js framework for building APIs

142 lines (125 loc) 5.45 kB
#!/usr/bin/env node const fs = require("fs"); const path = require("path"); const { interpretText } = require("./src/ml-model/textInterpreter"); const { loadThemes, generateThemeResources, generateController, generateService, generateEntity, generateBackoffice, generateServerStart, generateUnitTests, generateConfigFiles, generateMicroservicesStructure } = require("./src/ml-model/utils"); const srcPath = path.resolve(process.cwd(), "src"); if (!fs.existsSync(srcPath)) { fs.mkdirSync(srcPath, { recursive: true }); } // CLI command handler async function handleCommand(command, type, entityOrTheme) { const themes = loadThemes(); const lowerCaseEntityOrTheme = entityOrTheme?.toLowerCase(); const themesLowerCaseKeys = Object.keys(themes).map(key => key.toLowerCase()); if (command === "generate" && type === "framework") { console.log("Generando estructura base del framework..."); generateFrameworkStructure(); generateConfigFiles(); console.log("Generación de framework completa."); } else if (command === "generate" && type === "microservices") { console.log("Generando estructura de microservicios..."); generateMicroservicesStructure(); console.log("Generación de microservicios completa."); } else if (command === "generate" && type === "entity") { if (themesLowerCaseKeys.includes(lowerCaseEntityOrTheme)) { const originalTheme = Object.keys(themes).find(key => key.toLowerCase() === lowerCaseEntityOrTheme); generateThemeResources(originalTheme); } else { generateEntity(entityOrTheme, { id: "number", name: "string", description: "string" }); } } else if (command === "assistant") { console.log("Interpretando el texto:", entityOrTheme); // Procesar el texto usando el modelo para identificar acción, entidad y relaciones const { action, type, entityName, fields, relatedEntities } = await interpretText(entityOrTheme); console.log("Resultado de la interpretación:", { action, type, entityName, fields, relatedEntities }); // Ejecutar acción en función de la interpretación if (action === "crear" || action === "create") { if (entityName) { console.log(`Generando entidad principal: ${entityName}`); generateEntity(entityName, fields); generateController(entityName, fields); generateService(entityName, fields); generateUnitTests(entityName); generateServerStart(); } else { console.error("Error: No se pudo identificar la entidad principal."); } if (relatedEntities && Array.isArray(relatedEntities) && relatedEntities.length > 0) { relatedEntities.forEach(({ entity, relatedEntity }) => { if (relatedEntity.name) { console.log(`Generando entidad relacionada: ${relatedEntity.name}`); generateEntity(relatedEntity.name, relatedEntity.fields || {}); generateController(relatedEntity.name, relatedEntity.fields || {}); generateService(relatedEntity.name, relatedEntity.fields || {}); generateUnitTests(relatedEntity.name); } else { console.error("Error: Se encontró una entidad relacionada sin nombre o campos."); } }); } else { console.log("No se encontraron entidades relacionadas para generar."); } } else if (action === "integrar" || action === "integrate") { console.log("Integración solicitada:", type); if (type === "authentication" || type === "autenticación") { // Código para integración de autenticación console.log("Integrando autenticación..."); } } console.log("Generación de recursos completada."); } else { console.log("Comando no válido. Comandos disponibles:"); console.log("flareapi-cli generate framework"); console.log("flareapi-cli generate microservices"); console.log("flareapi-cli generate controller <entity> <theme>"); console.log("flareapi-cli generate service <entity> <theme>"); console.log("flareapi-cli generate entity <entity> <theme>"); console.log("flareapi-cli generate backoffice <entity>"); console.log("flareapi-cli generate swagger"); console.log("flareapi-cli generate server-start"); console.log('flareapi-cli assistant "<descripción en lenguaje natural>"'); } } // Function to generate the framework base structure function generateFrameworkStructure() { const baseFolders = ["middleware", "auth", "config", "controllers", "entities", "services", "tests", "backoffice"]; baseFolders.forEach(folder => { const folderPath = path.join(srcPath, folder); if (!fs.existsSync(folderPath)) { fs.mkdirSync(folderPath, { recursive: true }); console.log(`Carpeta ${folder} creada en ./src/`); } }); generateServerStart(); console.log("Archivo de inicio del servidor generado en ./src/"); } // Execute the CLI command (async () => { const command = process.argv[2]; const type = process.argv[3]; const entityOrTheme = command === "assistant" ? process.argv.slice(3).join(" ") : process.argv[4]; await handleCommand(command, type, entityOrTheme); })(); // Export functions for testing module.exports = { loadThemes, generateThemeResources, generateController, generateService, generateEntity, generateBackoffice, handleCommand, generateMicroservicesStructure };