/** * Graph serialization — compact JSON format for fragments.json embedding. * * Edges use short keys (s, t, ty, w, no, p) to reduce JSON size. * Round-trips through serialize → deserialize preserve all data. */ import type { ComponentGraph, GraphEdge, SerializedComponentGraph, SerializedEdge, } from './types.js'; /** Serialize a ComponentGraph to compact JSON format */ export function serializeGraph(graph: ComponentGraph): SerializedComponentGraph { return { nodes: graph.nodes, edges: graph.edges.map(serializeEdge), health: graph.health, }; } /** Deserialize a compact JSON graph back to full ComponentGraph */ export function deserializeGraph(serialized: SerializedComponentGraph): ComponentGraph { return { nodes: serialized.nodes, edges: serialized.edges.map(deserializeEdge), health: serialized.health, }; } function serializeEdge(edge: GraphEdge): SerializedEdge { const result: SerializedEdge = { s: edge.source, t: edge.target, ty: edge.type, w: edge.weight, p: edge.provenance, }; if (edge.note) result.no = edge.note; return result; } function deserializeEdge(edge: SerializedEdge): GraphEdge { const result: GraphEdge = { source: edge.s, target: edge.t, type: edge.ty, weight: edge.w, provenance: edge.p, }; if (edge.no) result.note = edge.no; return result; }