UNPKG

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
'use strict'; 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); }