@devxi/laravel-init
Version:
CLI para inicializar rápidamente proyectos Laravel descargados de GitHub
63 lines (52 loc) • 1.85 kB
JavaScript
import { execSync } from "child_process";
import chalk from "chalk";
import ora from "ora";
/**
* Ejecuta un comando del sistema con una animación de espera
* @param {string} command - Comando a ejecutar
* @param {string} loadingText - Texto que se muestra durante la ejecución
* @param {string} errorMessage - Mensaje en caso de error
* @param {Object} options - Opciones adicionales
* @returns {boolean} - true si se ejecutó correctamente, false si hubo error
*/
function runCommand(command, loadingText, errorMessage, options = {}) {
const spinner = ora(loadingText).start();
try {
// Capturar o no la salida según las opciones
const stdio = options.silent ? "ignore" : "pipe";
// Ejecutar el comando
const result = execSync(command, { stdio });
// Mostrar la salida si se solicita y está disponible
if (options.showOutput && result) {
console.log(result.toString());
}
spinner.succeed(options.successMessage || `${loadingText} - Completado`);
return true;
} catch (error) {
spinner.fail(`${errorMessage}`);
if (options.verbose) {
console.error(chalk.red(`Error: ${error.message}`));
if (error.stderr) {
console.error(chalk.red(`Salida de error: ${error.stderr.toString()}`));
}
}
// Si es un error crítico, terminar el proceso
if (options.critical) {
process.exit(1);
}
return false;
}
}
/**
* Ejecuta un comando y devuelve la salida como string
* @param {string} command - Comando a ejecutar
* @returns {string|null} - Salida del comando o null si hay error
*/
function getCommandOutput(command) {
try {
return execSync(command, { encoding: "utf8" }).trim();
} catch (error) {
return null;
}
}
export { runCommand, getCommandOutput };