Sync to latest WFRP release

This commit is contained in:
2026-02-26 21:53:55 +01:00
parent e0383def30
commit 786afeab74
480 changed files with 4221 additions and 91 deletions

181
tools/copy-new-scripts.js Normal file
View File

@@ -0,0 +1,181 @@
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;
}