export class Graph { private ids = new Set(); private graph: GraphData = { nodes: [], links: [], }; addNode(node: GraphNode) { if (this.ids.has(node.id)) { return this.graph.nodes.find((n) => n.id === node.id)!; } this.ids.add(node.id); this.graph.nodes.push(node); return node; } addLink(link: GraphLink) { this.graph.links.push(link); return link; } toJSON() { return this.graph; } } export interface GraphNode { id: string; name?: string; group?: string; value?: T; } export interface GraphLink { source: string; target: string; name?: string; value?: T; } export interface GraphData { name?: string; description?: string; nodes: GraphNode[]; links: GraphLink[]; }