1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.convertPort = convertPort;
|
7 | exports.convertNode = convertNode;
|
8 | exports.convertNodes = convertNodes;
|
9 | exports.convertEdge = convertEdge;
|
10 | exports.convertEdges = convertEdges;
|
11 | exports.convertGraph = convertGraph;
|
12 |
|
13 | var _graphtools = require('@buggyorg/graphtools');
|
14 |
|
15 | var _lodash = require('lodash');
|
16 |
|
17 | var _lodash2 = _interopRequireDefault(_lodash);
|
18 |
|
19 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
20 |
|
21 | function convertPort(nodeName, type, port, portType) {
|
22 | return {
|
23 | id: nodeName + '_' + port + '_' + portType,
|
24 | meta: {
|
25 | type: type,
|
26 | name: port
|
27 | }
|
28 | };
|
29 | }
|
30 |
|
31 | function 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 |
|
40 | function convertNodes(nodes) {
|
41 | return _lodash2.default.map(nodes, convertNode);
|
42 | }
|
43 |
|
44 | function 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 |
|
73 | function convertEdges(graph, edges) {
|
74 | return _lodash2.default.map(edges, _lodash2.default.partial(convertEdge, graph, _lodash2.default));
|
75 | }
|
76 |
|
77 | function 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 |
|
87 | var 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 |
|
101 | function setEdgeParent(edge, graph) {
|
102 | return _lodash2.default.merge({}, edge, { parent: edgeParent(graph, edge) });
|
103 | }
|
104 |
|
105 | function 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 |
|
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 |