#!/usr/bin/env node // R2 — BUILD : src/nodes/*.js → workflow JSON (src/ = SOURCE DE VÉRITÉ, src gagne). // Usage : node tools/n8n-build.mjs [--check] // --check : vérifie que le JSON est déjà synchronisé avec src/ (exit 1 sinon), // sans rien écrire. import fs from 'fs'; import path from 'path'; import { WORKFLOW_FILE, SRC_DIR, NODE_MAP, getCode, setCode } from './lib-node-map.mjs'; const CHECK = process.argv.includes('--check'); const wf = JSON.parse(fs.readFileSync(WORKFLOW_FILE, 'utf8')); let changes = 0; for (const { file, node, kind } of NODE_MAP) { const srcPath = path.join(SRC_DIR, file); if (!fs.existsSync(srcPath)) throw new Error(`Fichier source manquant: ${srcPath}`); const srcCode = fs.readFileSync(srcPath, 'utf8'); const n = wf.nodes.find(x => x.name === node); if (!n) throw new Error(`Node introuvable dans le JSON: ${node}`); if (getCode(n, kind) !== srcCode) { changes++; console.log(`${CHECK ? 'DÉSYNCHRONISÉ' : 'inject'}: ${file} → "${node}"`); if (!CHECK) setCode(n, kind, srcCode); } } if (CHECK) { console.log(changes ? `\n${changes} node(s) désynchronisé(s) : lancer node tools/n8n-build.mjs` : 'JSON synchronisé avec src/nodes/'); process.exit(changes ? 1 : 0); } if (changes) { fs.writeFileSync(WORKFLOW_FILE, JSON.stringify(wf, null, 2) + '\n'); console.log(`\nBuild OK: ${changes} node(s) injecté(s) dans ${WORKFLOW_FILE}`); } else { console.log('Build: aucun changement (déjà synchronisé)'); }