JointJsonDeserializer.ts 892 B

12345678910111213141516171819202122232425
  1. import { InferOutput, parse } from "valibot";
  2. import DeserializerError from "../../../errors/DeserializerError.js";
  3. import Edge from "../../../graph/Edge.js";
  4. import Graph, { GraphSchema } from "../../../graph/Graph.js";
  5. import Node from "../../../graph/Node.js";
  6. import { JsonDeserializer } from "./JsonDeserializer.js";
  7. export default class JointJsonDeserializer implements JsonDeserializer<Graph<Node, Edge<Node>>> {
  8. deserialize(input: string) : Graph<Node, Edge<Node>> {
  9. const parsed = JSON.parse(input);
  10. if(!parsed)
  11. throw new DeserializerError("Result of parsing graph structure not found");
  12. let graph: InferOutput<typeof GraphSchema>;
  13. try {
  14. graph = parse(GraphSchema, parsed);
  15. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  16. } catch (error: any) {
  17. throw new DeserializerError(error.message)
  18. }
  19. return new Graph(graph.nodes, graph.edges);
  20. }
  21. }