UNPKG

1.4 kBJavaScriptView Raw
1var _ = require("./lodash"),
2 Graph = require("./graph");
3
4module.exports = {
5 write: write,
6 read: read
7};
8
9function write(g) {
10 var json = {
11 options: {
12 directed: g.isDirected(),
13 multigraph: g.isMultigraph(),
14 compound: g.isCompound()
15 },
16 nodes: writeNodes(g),
17 edges: writeEdges(g)
18 };
19 if (!_.isUndefined(g.graph())) {
20 json.value = _.clone(g.graph());
21 }
22 return json;
23}
24
25function writeNodes(g) {
26 return _.map(g.nodes(), function(v) {
27 var nodeValue = g.node(v),
28 parent = g.parent(v),
29 node = { v: v };
30 if (!_.isUndefined(nodeValue)) {
31 node.value = nodeValue;
32 }
33 if (!_.isUndefined(parent)) {
34 node.parent = parent;
35 }
36 return node;
37 });
38}
39
40function writeEdges(g) {
41 return _.map(g.edges(), function(e) {
42 var edgeValue = g.edge(e),
43 edge = { v: e.v, w: e.w };
44 if (!_.isUndefined(e.name)) {
45 edge.name = e.name;
46 }
47 if (!_.isUndefined(edgeValue)) {
48 edge.value = edgeValue;
49 }
50 return edge;
51 });
52}
53
54function read(json) {
55 var g = new Graph(json.options).setGraph(json.value);
56 _.each(json.nodes, function(entry) {
57 g.setNode(entry.v, entry.value);
58 if (entry.parent) {
59 g.setParent(entry.v, entry.parent);
60 }
61 });
62 _.each(json.edges, function(entry) {
63 g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);
64 });
65 return g;
66}