import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const WFRP4E_SCRIPTS = '/home/morr/work/foundryvtt/WFRP4e-FoundryVTT/scripts'; const FR_SCRIPTS = '/home/morr/work/foundryvtt/foundryvtt-wh4-lang-fr-fr/scripts'; const COPY_LOG = path.join(__dirname, 'copy-new-scripts.log'); /** * Récupère la liste des fichiers .js dans un dossier * @param {string} dir - Le chemin du dossier * @returns {string[]} - Liste des noms de fichiers */ function getScriptFiles(dir) { try { return fs.readdirSync(dir).filter(f => f.endsWith('.js')); } catch (error) { console.error(`Erreur lors de la lecture du dossier ${dir}:`, error.message); return []; } } /** * Copie les nouveaux scripts du système WFRP4E vers le module FR * @param {boolean} dryRun - Si true, affiche ce qui serait fait sans copier * @returns {object} - Résultats de l'opération */ function copyNewScripts(dryRun = false) { console.log('Analyse des scripts...\n'); const wfrp4eFiles = getScriptFiles(WFRP4E_SCRIPTS); const frFiles = getScriptFiles(FR_SCRIPTS); // Fichiers présents dans WFRP4E mais pas dans le module FR const newFiles = wfrp4eFiles.filter(file => !frFiles.includes(file)); const results = { total: wfrp4eFiles.length, existingInFR: frFiles.length, newFiles: newFiles.length, copied: [], errors: [] }; console.log(`📊 Statistiques:`); console.log(` - Scripts dans WFRP4E: ${results.total}`); console.log(` - Scripts dans FR: ${results.existingInFR}`); console.log(` - Nouveaux scripts à copier: ${results.newFiles}\n`); if (newFiles.length === 0) { console.log('✅ Aucun nouveau script à copier.'); return results; } if (dryRun) { console.log('🔍 Mode simulation (dry-run) - Aucun fichier ne sera copié\n'); console.log('Nouveaux scripts qui seraient copiés:'); newFiles.forEach((file, index) => { console.log(` ${index + 1}. ${file}`); }); return results; } // Copie des nouveaux fichiers console.log('📋 Copie des nouveaux scripts...\n'); newFiles.forEach((file, index) => { const sourcePath = path.join(WFRP4E_SCRIPTS, file); const destPath = path.join(FR_SCRIPTS, file); try { fs.copyFileSync(sourcePath, destPath); results.copied.push(file); console.log(` ✓ [${index + 1}/${newFiles.length}] ${file}`); } catch (error) { results.errors.push({ file, error: error.message }); console.error(` ✗ [${index + 1}/${newFiles.length}] ${file} - Erreur: ${error.message}`); } }); // Sauvegarde du log const logContent = { date: new Date().toISOString(), results, files: results.copied }; fs.writeFileSync(COPY_LOG, JSON.stringify(logContent, null, 2), 'utf-8'); // Résumé console.log('\n' + '='.repeat(60)); console.log('📝 Résumé de l\'opération:'); console.log('='.repeat(60)); console.log(` ✅ Fichiers copiés avec succès: ${results.copied.length}`); if (results.errors.length > 0) { console.log(` ❌ Erreurs: ${results.errors.length}`); results.errors.forEach(err => { console.log(` - ${err.file}: ${err.error}`); }); } console.log(` 📄 Log sauvegardé dans: ${COPY_LOG}`); console.log('='.repeat(60) + '\n'); return results; } /** * Affiche la liste des nouveaux scripts sans les copier * @returns {object} - Résultats de l'analyse */ function listNewScripts() { const wfrp4eFiles = getScriptFiles(WFRP4E_SCRIPTS); const frFiles = getScriptFiles(FR_SCRIPTS); const newFiles = wfrp4eFiles.filter(file => !frFiles.includes(file)); console.log(`📊 Total scripts WFRP4E: ${wfrp4eFiles.length}`); console.log(`📊 Total scripts FR: ${frFiles.length}`); console.log(`📊 Nouveaux scripts: ${newFiles.length}\n`); if (newFiles.length > 0) { console.log('Nouveaux scripts:'); newFiles.forEach((file, index) => { console.log(` ${index + 1}. ${file}`); }); } else { console.log('✅ Aucun nouveau script trouvé.'); } return { total: wfrp4eFiles.length, existingInFR: frFiles.length, newFiles: newFiles.length, files: newFiles }; } // --- Exécution du script --- const args = process.argv.slice(2); const command = args[0]; switch (command) { case '--list': case '-l': listNewScripts(); break; case '--dry-run': case '-d': copyNewScripts(true); break; case '--copy': case '-c': copyNewScripts(false); break; case '--help': case '-h': default: console.log(` 📚 Script de copie des nouveaux scripts WFRP4E vers le module FR Usage: node copy-new-scripts.js [commande] Commandes: --list, -l Liste les nouveaux scripts sans les copier --dry-run, -d Simule la copie (affiche ce qui serait fait) --copy, -c Copie les nouveaux scripts dans le module FR --help, -h Affiche cette aide Exemples: node copy-new-scripts.js --list # Liste les nouveaux fichiers node copy-new-scripts.js --dry-run # Simulation node copy-new-scripts.js --copy # Copie les fichiers `); break; }