import fs from "fs"; import inquirer from "inquirer"; import path from "path"; function capitalize(str: string) { return str.charAt(0).toUpperCase() + str.slice(1); } async function main() { let rawName = process.argv[2]; if (!rawName) { const answers = await inquirer.prompt([ { type: "input", name: "packageName", message: "Nombre del nuevo package:", validate: (input) => (input ? true : "El nombre no puede estar vacío"), }, ]); rawName = answers.packageName; } const name = rawName.toLowerCase(); const capitalized = capitalize(name); const packagePath = path.resolve(__dirname, "../packages", name); const clientPath = path.join(packagePath, "client"); const serverPath = path.join(packagePath, "server"); const templatePath = path.resolve(__dirname, "./templates"); // Crear carpetas fs.mkdirSync(clientPath, { recursive: true }); fs.mkdirSync(serverPath, { recursive: true }); // Función de reemplazo de contenido const renderTemplate = (content: string) => content .replace(/__PACKAGE_NAME__/g, name) .replace(/__PACKAGE_NAME_CAPITALIZED__/g, capitalized); // Copiar plantillas desde carpeta 'templates/client' const copyFromTemplate = (srcDir: string, destDir: string) => { const files = fs.readdirSync(srcDir); for (const file of files) { const filePath = path.join(srcDir, file); const content = fs.readFileSync(filePath, "utf-8"); const outputName = file.replace(/__PACKAGE_NAME__/g, capitalized); const outputPath = path.join(destDir, outputName); fs.writeFileSync(outputPath, renderTemplate(content)); } }; copyFromTemplate(path.join(templatePath, "client"), clientPath); copyFromTemplate(path.join(templatePath, "server"), serverPath); // package.json const pkgJsonTemplate = fs.readFileSync(path.join(templatePath, "package.json"), "utf-8"); fs.writeFileSync(path.join(packagePath, "package.json"), renderTemplate(pkgJsonTemplate)); console.log(`✅ Package '${name}' creado correctamente en packages/${name}`); } main();