UNPKG

3.9 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.convertPort = convertPort;
7exports.convertNode = convertNode;
8exports.convertNodes = convertNodes;
9exports.convertEdge = convertEdge;
10exports.convertEdges = convertEdges;
11exports.convertGraph = convertGraph;
12
13var _graphtools = require('@buggyorg/graphtools');
14
15var _lodash = require('lodash');
16
17var _lodash2 = _interopRequireDefault(_lodash);
18
19function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
21function convertPort(nodeName, type, port, portType) {
22 return {
23 id: nodeName + '_' + port + '_' + portType,
24 meta: {
25 type: type,
26 name: port
27 }
28 };
29}
30
31function convertNode(node) {
32 return {
33 id: node.v,
34 labels: [{ text: node.value.id || node.v, name: node.v }],
35 ports: _lodash2.default.concat(_lodash2.default.map(node.value.inputPorts, _lodash2.default.partial(convertPort, node.v, _lodash2.default, _lodash2.default, 'in')), _lodash2.default.map(node.value.outputPorts, _lodash2.default.partial(convertPort, node.v, _lodash2.default, _lodash2.default, 'out'))),
36 meta: Object.assign({}, node.value, { style: _lodash2.default.get(node, 'value.meta.style') })
37 };
38}
39
40function convertNodes(nodes) {
41 return _lodash2.default.map(nodes, convertNode);
42}
43
44function convertEdge(graph, edge) {
45 var sourceHierarchy = false;
46 var targetHierarchy = false;
47 if (graph.parent(edge.v) === edge.w) {
48 sourceHierarchy = true;
49 } else if (graph.parent(edge.w) === edge.v) {
50 targetHierarchy = true;
51 } else if (edge.v === edge.w) {
52 sourceHierarchy = true;
53 targetHierarchy = true;
54 }
55 return {
56 id: edge.v + edge.w,
57 source: edge.v,
58 sourcePort: edge.v + '_' + edge.value.outPort + (targetHierarchy ? '_in' : '_out'),
59 target: edge.w,
60 targetPort: edge.w + '_' + edge.value.inPort + (sourceHierarchy ? '_out' : '_in'),
61 meta: {
62 sourceType: graph.node(edge.v)[targetHierarchy ? 'inputPorts' : 'outputPorts'][edge.value.outPort],
63 targetType: graph.node(edge.w)[sourceHierarchy ? 'outputPorts' : 'inputPorts'][edge.value.inPort],
64 sourceNode: edge.v,
65 sourcePort: edge.value.outPort,
66 targetNode: edge.w,
67 targetPort: edge.value.inPort,
68 style: _lodash2.default.get(edge, 'value.meta.style')
69 }
70 };
71}
72
73function convertEdges(graph, edges) {
74 return _lodash2.default.map(edges, _lodash2.default.partial(convertEdge, graph, _lodash2.default));
75}
76
77function combineNodes(graph, node, childMap, edgeMap) {
78 if (_lodash2.default.has(childMap, node.id)) {
79 node.children = _lodash2.default.map(childMap[node.id], _lodash2.default.partial(combineNodes, graph, _lodash2.default, childMap, edgeMap));
80 }
81 if (_lodash2.default.has(edgeMap, node.id)) {
82 node.edges = convertEdges(graph, edgeMap[node.id]);
83 }
84 return node;
85}
86
87var edgeParent = function edgeParent(graph, edge) {
88 var outP = edge.v;
89 var inP = edge.w;
90 if (outP === inP) {
91 return outP;
92 } else if (graph.parent(outP) === graph.parent(inP)) {
93 return graph.parent(outP);
94 } else if (graph.parent(outP) === inP) {
95 return inP;
96 } else {
97 return outP;
98 }
99};
100
101function setEdgeParent(edge, graph) {
102 return _lodash2.default.merge({}, edge, { parent: edgeParent(graph, edge) });
103}
104
105function convertGraph(graph) {
106 var editGraph = _graphtools.utils.edit(graph);
107 var nodes = (0, _lodash2.default)(editGraph.nodes).groupBy('parent').mapValues(convertNodes).value();
108 var edges = (0, _lodash2.default)(editGraph.edges).map(_lodash2.default.partial(setEdgeParent, _lodash2.default, graph)).groupBy('parent').value();
109 return {
110 id: 'root',
111 // nodes[undefined] returns all nodes that have no parent
112 children: _lodash2.default.map(nodes[undefined], _lodash2.default.partial(combineNodes, graph, _lodash2.default, nodes, edges)),
113 edges: convertEdges(graph, edges[undefined])
114 };
115}
\No newline at end of file