Spaces:
Running
Running
| import type { Node, Edge } from '@xyflow/svelte'; | |
| import type { ChatMessage } from './types'; | |
| export function mapNodesExport( | |
| nodes: Node[], | |
| edges: Edge[] | |
| ): Record<string, ChatMessage[]> { | |
| const outgoing = new Map<string, number>(); | |
| 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<string, ChatMessage[]> = {}; | |
| leafUserNodes.forEach((node, index) => { | |
| result[String(index + 1)] = (node.data.messages as ChatMessage[]) ?? []; | |
| }); | |
| return result; | |
| } | |