UNPKG

app-wizard-cli

Version:

CLI pour gérer votre projet Nest/Angular

105 lines (104 loc) 4.3 kB
import prompts from 'prompts'; import chalk from 'chalk'; import { BuildService } from '../services/build-service.js'; import { CleanService } from '../services/clean-service.js'; import { SecretManagerService } from '../services/secret-manager-service.js'; /** * Commande interactive "build" qui propose plusieurs options de build. * L'utilisateur peut choisir de nettoyer l'environnement (normal ou forcé), * puis sélectionner l'environnement de build (développement ou production). */ export async function buildCommand() { console.clear(); console.log(chalk.yellow('======================================')); console.log(chalk.yellow(' Build Options')); console.log(chalk.yellow('======================================')); console.log('1. Build sans clean'); console.log('2. Build avec clean'); console.log('3. Build avec clean forcé'); console.log('4. Retour'); console.log(''); // Options de nettoyage const cleanResponse = await prompts({ type: 'select', name: 'option', message: 'Choisissez une option de nettoyage:', choices: [ { title: '1. Build sans clean', value: 'noClean' }, { title: '2. Build avec clean', value: 'clean' }, { title: '3. Build avec clean forcé', value: 'forcedClean' }, { title: '4. Retour', value: 'return' } ] }); if (cleanResponse.option === 'return') { console.log(chalk.green('Retour au menu principal.')); return; } if (cleanResponse.option === 'clean') { console.log(chalk.blue('[Nettoyage standard]')); try { await CleanService.performGlobalClean(); console.log(chalk.green('Nettoyage standard terminé.')); } catch (error) { console.error(chalk.red('Erreur lors du nettoyage standard:'), error); return; } } else if (cleanResponse.option === 'forcedClean') { console.log(chalk.blue('[Nettoyage complet]')); try { CleanService.fullClean(); console.log(chalk.green('Nettoyage complet terminé.')); } catch (error) { console.error(chalk.red('Erreur lors du nettoyage complet:'), error); return; } } // Demander à l'utilisateur dans quel environnement il souhaite builder const envResponse = await prompts({ type: 'select', name: 'environment', message: 'Dans quel environnement souhaitez-vous builder votre projet ?', choices: [ { title: 'Développement (dev)', value: 'dev' }, { title: 'Production (prod)', value: 'prod' }, { title: 'Annuler', value: 'cancel' } ] }); if (envResponse.environment === 'cancel') { console.log(chalk.green('Build annulé.')); return; } // Vérification et correction des fichiers d'environnement avant le build const targetDir = process.cwd(); const envValid = await SecretManagerService.checkEnvFiles(targetDir); if (!envValid) { console.error(chalk.red('Les fichiers .env.dev et/ou .env.prod sont incomplets.')); console.error(chalk.red('Les fichiers ont été automatiquement corrigés. Veuillez renseigner les valeurs manquantes, puis relancer le build.')); await SecretManagerService.repairEnvFiles(targetDir); process.exit(1); } // Lancer le build selon l'environnement choisi if (envResponse.environment === 'dev') { console.log(chalk.blue('Lancement du build en mode développement...')); await BuildService.buildDev(); } else if (envResponse.environment === 'prod') { // Validation de la configuration console.log(chalk.blue('Vérification de la configuration...')); let cliConfig; try { cliConfig = {}; console.log(chalk.green('Configuration validée.')); } catch (error) { console.error(chalk.red('Erreur lors de la validation de la configuration:'), error); return; } // Lancement du build en mode production console.log(chalk.blue('Lancement du build en mode production...')); await BuildService.buildProd(cliConfig); } }