DefaultJsonSerializer.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233
  1. import Edge from "../../../graph/edge/Edge.js";
  2. import Graph from "../../../graph/Graph.js";
  3. import Node from "../../../graph/node/Node.js";
  4. import { JsonSerializer } from "./JsonSerializer.js";
  5. import DummyNode from "../../../graph/node/DummyNode.js";
  6. type JsonNode = { x: number, y: number, width: number, height: number, type: string, id: string };
  7. type JsonEdge = { from: JsonNode["id"], to: JsonNode["id"], waypoints: { x: number, y: number }[], id: string };
  8. /**
  9. * Стандартный JSON-сериализатор, преобразующий объект типа {@link Graph} в JSON
  10. */
  11. export default class DefaultJsonSerializer implements JsonSerializer<Graph<Node, Edge<Node>>> {
  12. /**
  13. * Преобразование объекта типа {@link Graph} в JSON
  14. * @param data Объект, который необходимо сериализовать
  15. */
  16. serialize(data: Graph<Node, Edge<Node>>): string {
  17. const edges: JsonEdge[] = [];
  18. data.getEdges().forEach((edge) => {
  19. edges.push({ from: edge.getFrom().getId(), to: edge.getTo().getId(), waypoints: edge.getWaypoints(), id: edge.getId() });
  20. })
  21. const nodes: JsonNode[] = [];
  22. data.getNodes().forEach((node) => {
  23. if(!(node instanceof DummyNode))
  24. nodes.push({ x: node.getX(), y: node.getY(), width: node.getWidth(), height: node.getHeight(), type: node.getType(), id: node.getId() });
  25. })
  26. return JSON.stringify({ nodes, edges }, null, 2);
  27. }
  28. }