@buggyorg/graphtools
Advanced tools
Comparing version 0.2.8 to 0.2.9
@@ -0,19 +1,62 @@ | ||
'use strict'; | ||
import _ from 'lodash'; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.backtrackPortGraph = backtrackPortGraph; | ||
exports.backtrackNetworkGraph = backtrackNetworkGraph; | ||
export default function backtrack(graph, node, fn) { | ||
var _lodash = require('lodash'); | ||
var _lodash2 = _interopRequireDefault(_lodash); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function backtrackPortGraph(graph, node, fn) { | ||
var getPredecessors = function getPredecessors() { | ||
return (0, _lodash2.default)([]).map(function (e) { | ||
return e.v; | ||
}); | ||
}; | ||
return backtrack(graph, node, fn, getPredecessors); | ||
} | ||
function backtrackNetworkGraph(graph, node, fn) { | ||
var getPredecessors = function getPredecessors(cur) { | ||
return (0, _lodash2.default)([]).filter(function (e) { | ||
return e.v === cur.node + '_PORT_' + cur.port; | ||
}).map(function (e) { | ||
return graph.predecessors(e.v); | ||
}).flatten().map(function (e) { | ||
return graph.predecessors(e); | ||
}).flatten(); | ||
}; | ||
return backtrack(graph, node, fn, getPredecessors); | ||
} | ||
function backtrack(graph, node, fn, predecessor) { | ||
// inPorts [ {port: name, payload: ?}] | ||
var inPorts = fn(graph.node(node), undefined); | ||
var callStack = _.map(inPorts, portData => ({ node: node, port: portData.port, payload: portData.payload })); | ||
var inPorts = fn(node, graph.node(node), undefined); | ||
var callStack = _lodash2.default.map(inPorts, function (portData) { | ||
return { node: node, port: portData.port, payload: portData.payload, path: [node] }; | ||
}); | ||
var endPoints = []; | ||
while (callStack.length !== 0) { | ||
var cur = callStack.pop(); | ||
console.log(cur); | ||
var inEdges = graph.inEdges(cur.node); | ||
var portEdges = _.filter(inEdges, e => e.v === cur.node + '_PORT_' + cur.port); | ||
var inNodes = _(portEdges).map(e => graph.predecessors(e.v)).flatten().map(e => graph.predecessors(e)).flatten().value(); | ||
var newCallStackElements = _.map(inNodes, n => { | ||
var result = fn(graph.node(n), cur.payload); | ||
return _.map(result, port => ({ node: n, port: port })); | ||
}); | ||
callStack = _.concat(callStack, _.flatten(newCallStackElements)); | ||
var inNodes = predecessor(cur).plant(inEdges).value(); | ||
var newCallStackElements = (0, _lodash2.default)(inNodes).map(function (n) { | ||
var result = fn(n, graph.node(n), cur.payload); | ||
console.log(result); | ||
return _lodash2.default.map(result, function (res) { | ||
return { node: n, port: res.port, payload: res.payload, path: _lodash2.default.concat(cur.path, n) }; | ||
}); | ||
}).flatten().value(); | ||
if (newCallStackElements.length === 0) { | ||
endPoints.push(cur); | ||
} | ||
callStack = _lodash2.default.concat(callStack, newCallStackElements); | ||
} | ||
return endPoints; | ||
} |
@@ -63,2 +63,5 @@ 'use strict'; | ||
var predecessors = graph.predecessors(nodes[i]); | ||
while (graph.node(predecessors[0]).hierarchyBorder) { | ||
predecessors = graph.predecessors(predecessors[0]); | ||
} | ||
nodes[i] = predecessors[0]; | ||
@@ -65,0 +68,0 @@ nodes = nodes.concat(predecessors.slice(1, predecessors.length)); |
{ | ||
"name": "@buggyorg/graphtools", | ||
"version": "0.2.8", | ||
"version": "0.2.9", | ||
"description": "Tools for processing buggy graphs.", | ||
@@ -5,0 +5,0 @@ "main": "lib/api.js", |
@@ -35,2 +35,5 @@ | ||
var predecessors = graph.predecessors(nodes[i]) | ||
while (graph.node(predecessors[0]).hierarchyBorder) { | ||
predecessors = graph.predecessors(predecessors[0]) | ||
} | ||
nodes[i] = predecessors[0] | ||
@@ -37,0 +40,0 @@ nodes = nodes.concat(predecessors.slice(1, predecessors.length)) |
74018
1727