Forráskód Böngészése

serializer docs and improvements

Pavel Zhigalov 1 hónapja
szülő
commit
ef4dffc880

+ 1 - 1
src/v1/graph/node/DummyNode.ts

@@ -4,7 +4,7 @@ import Node from "./Node.js";
  * Мнимая вершина графа, имеющая нулевые размеры
  */
 export default class DummyNode extends Node {
-	public constructor(x: number, y: number, id?: string) {
+	public constructor(x: number, y: number, originalEdgeId: string, id?: string) {
 		super(x, y, 0, 0, "dummy-node", id);
 	}
 }

+ 0 - 3
src/v1/io/serialize/Serializable.ts

@@ -1,3 +0,0 @@
-export default interface Serializable<TOut> {
-	serialize() : TOut;
-}

+ 9 - 0
src/v1/io/serialize/Serializer.ts

@@ -1,3 +1,12 @@
+/**
+ * Методы для сериализации объектов внутри приложения и отдачи их во внешнюю среду. Переводит объект из типа {@link TIn} в тип {@link TOut}
+ * @template TIn Исходный тип данных
+ * @template TOut Тип данных, в который объект будет переведён
+ */
 export default interface Serializer<TIn, TOut> {
+    /**
+     * Преобразование объекта из типа {@link TIn} в тип {@link TOut}
+     * @param data Объект, который необходимо преобразовать
+     */
 	serialize(data: TIn) : TOut;
 }

+ 22 - 2
src/v1/io/serialize/json/DefaultJsonSerializer.ts

@@ -3,9 +3,29 @@ import Graph from "../../../graph/Graph.js";
 import Node from "../../../graph/node/Node.js";
 import { JsonSerializer } from "./JsonSerializer.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<Graph<Node, Edge<Node>>> {
+	/**
+     * Преобразование объекта типа {@link Graph} в JSON
+     * @param data Объект, который необходимо сериализовать
+     */
 	serialize(data: Graph<Node, Edge<Node>>): string {
-		const nodes = data.getNodes(), edges = data.getEdges();
-		return JSON.stringify({ nodes, edges }, null, 2);
+		const nodes: JsonNode[] = [];
+		data.getNodes().forEach((node) => {
+			nodes.push({ x: node.getX(), y: node.getY(), width: node.getWidth(), height: node.getHeight(), type: node.getType(), id: node.getId() })
+		})
+
+		const edges: JsonEdge[] = [];
+		data.getEdges().forEach((edge) => {
+			edges.push({ from: edge.getFrom().getId(), to: edge.getTo().getId(), waypoints: edge.getWaypoints(), id: edge.getId() });
+		})
+
+		return JSON.stringify({ nodes, edges });
 	}
 }

+ 4 - 0
src/v1/io/serialize/json/JsonSerializer.ts

@@ -1,3 +1,7 @@
 import Serializer from "../Serializer.js";
 
+/**
+ * Сериализотор, преобразующий объект типа {@link TIn} в его JSON-представление, имееюшее строковый тип
+ * @template TIn Исходный тип объекта
+ */
 export type JsonSerializer<TIn> = Serializer<TIn, string>;

+ 1 - 1
src/v1/optimizer/steps/CoordinateAssignmentStep.ts

@@ -40,7 +40,7 @@ export default class CoordinateAssignmentStep extends AlgorithmStep<SiguiyamaCon
 			if(!feedbackSet.includes(edge))
 				continue;
 
-			const from = edge.getTo(), to = edge.getFrom();
+			const from = edge.getFrom(), to = edge.getTo();
 			edge.setFrom(to).setTo(from);
 		}
 	}

+ 0 - 1
src/v1/optimizer/steps/LayerAssignmentStep.ts

@@ -72,7 +72,6 @@ export default class LayerAssignmentStep extends AlgorithmStep<SiguiyamaContext>
 		for(const edge of edges) {
 			const edgeSpan = layering.getEdgeSpan(edge);
 
-
 			if(edgeSpan <= 1)
 				continue;