R2: git = source de vérité — src/nodes/ + build/extract intégrés au push
- src/nodes/*.js (6 nodes + template snapshot) = source de vérité unique. - n8n-push.mjs reconstruit le JSON depuis src/ avant syntaxe+golden+PUT (src gagne toujours; n8n-extract.mjs pour resynchroniser si édition UI). - n8n-build.mjs --check pour vérifier la synchro. - Copies historiques déplacées dans archive/ (mortes, dérivées de la prod). - .gitignore: backups locaux de rollback. - AGENTS.md: règle R2 pour toutes les futures sessions (dont Qwen local). - Validé: idempotence, mutation/restauration, pipeline push complet en réel.
This commit is contained in:
21
tools/n8n-extract.mjs
Normal file
21
tools/n8n-extract.mjs
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env node
|
||||
// R2 — EXTRACT : workflow JSON → src/nodes/*.js (+ template snapshot).
|
||||
// À utiliser UNIQUEMENT pour (re)synchroniser src/ après une modification faite
|
||||
// directement dans l'UI n8n (à éviter). En temps normal : éditer src/nodes/,
|
||||
// puis tools/n8n-push.mjs reconstruit le JSON automatiquement.
|
||||
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { WORKFLOW_FILE, SRC_DIR, NODE_MAP, getCode } from './lib-node-map.mjs';
|
||||
|
||||
const wf = JSON.parse(fs.readFileSync(WORKFLOW_FILE, 'utf8'));
|
||||
fs.mkdirSync(SRC_DIR, { recursive: true });
|
||||
|
||||
for (const { file, node, kind } of NODE_MAP) {
|
||||
const n = wf.nodes.find(x => x.name === node);
|
||||
if (!n) throw new Error(`Node introuvable: ${node}`);
|
||||
const code = getCode(n, kind);
|
||||
fs.writeFileSync(path.join(SRC_DIR, file), code);
|
||||
console.log(`${file} ← "${node}" (${code.length} chars)`);
|
||||
}
|
||||
console.log(`\nExtraction OK dans ${SRC_DIR}/`);
|
||||
Reference in New Issue
Block a user