import type { Node, Edge } from '@xyflow/svelte'; import type { ChatMessage } from './types'; export function mapNodesExport( nodes: Node[], edges: Edge[] ): Record { const outgoing = new Map(); for (const node of nodes) { outgoing.set(node.id, 0); } for (const edge of edges) { outgoing.set(edge.source, (outgoing.get(edge.source) ?? 0) + 1); } // Each leaf user node (no outgoing edges) = one exported flow. // This covers both fully disconnected flows and edit branches within the same tree. const leafUserNodes = nodes.filter( (n) => (n.type === 'user' || n.type === 'user-follow-up') && (outgoing.get(n.id) ?? 0) === 0 ); const result: Record = {}; leafUserNodes.forEach((node, index) => { result[String(index + 1)] = (node.data.messages as ChatMessage[]) ?? []; }); return result; }