graph-resolver
Version:
Graph Resolver resolves a value or a list of values of a model to another, provided their intermediaries have defined relationships.
61 lines (50 loc) • 1.66 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true
});
exports.setupGraph = setupGraph;
exports.getPath = getPath;
exports.validateRelationship = validateRelationship;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _graphlib = require('graphlib');
function setupGraph(pairs) {
var graph = new _graphlib.Graph({ directed: true });
_lodash2['default'].each(pairs, function (_ref) {
var from = _ref.from;
var to = _ref.to;
var method = _ref.method;
return graph.setEdge(from, to, method);
});
return graph;
}
function getPath(_x2, _x3, _x4) {
var _arguments = arguments;
var _again = true;
_function: while (_again) {
var graph = _x2,
source = _x3,
destination = _x4;
path = map = predecessor = undefined;
_again = false;
var path = _arguments.length <= 3 || _arguments[3] === undefined ? [] : _arguments[3];
var map = _graphlib.alg.dijkstra(graph, source);
if (map[destination].distance) {
var predecessor = map[destination].predecessor;
path.push(graph.edge(predecessor, destination));
_arguments = [_x2 = graph, _x3 = source, _x4 = predecessor, path];
_again = true;
continue _function;
} else {
return path.reverse();
}
}
}
function validateRelationship(_ref2) {
var from = _ref2.from;
var to = _ref2.to;
var method = _ref2.method;
var validations = [_lodash2['default'].isString(from), _lodash2['default'].isString(to), _lodash2['default'].isFunction(method)];
return _lodash2['default'].every(validations, Boolean);
}