import Edge from "../../../graph/edge/Edge.js"; import Graph from "../../../graph/Graph.js"; import Node from "../../../graph/node/Node.js"; import { JsonSerializer } from "./JsonSerializer.js"; import DummyNode from "../../../graph/node/DummyNode.js"; type JsonNode = { x: number, y: number, width: number, height: number, type: string, id: string }; type JsonEdge = { from: JsonNode["id"], to: JsonNode["id"], waypoints: { x: number, y: number }[], id: string }; /** * Стандартный JSON-сериализатор, преобразующий объект типа {@link Graph} в JSON */ export default class DefaultJsonSerializer implements JsonSerializer>> { /** * Преобразование объекта типа {@link Graph} в JSON * @param data Объект, который необходимо сериализовать */ serialize(data: Graph>): string { const edges: JsonEdge[] = []; data.getEdges().forEach((edge) => { edges.push({ from: edge.getFrom().getId(), to: edge.getTo().getId(), waypoints: edge.getWaypoints(), id: edge.getId() }); }) const nodes: JsonNode[] = []; data.getNodes().forEach((node) => { if(!(node instanceof DummyNode)) nodes.push({ x: node.getX(), y: node.getY(), width: node.getWidth(), height: node.getHeight(), type: node.getType(), id: node.getId() }); }) return JSON.stringify({ nodes, edges }, null, 2); } }