dagre-d3-es
Version:
<p align="center"> <a href="https://www.npmjs.com/dagre-d3-es"><img src="https://img.shields.io/npm/v/dagre-d3-es.svg?logo=npm&logoColor=fff&label=NPM+package&color=limegreen" alt="dagre-d3-es on npm" /></a> <a href="https://www.npmjs.com/dagre-
37 lines (27 loc) • 791 B
JavaScript
import * as _ from 'lodash-es';
export { topsort, CycleException };
topsort.CycleException = CycleException;
function topsort(g) {
var visited = {};
var stack = {};
var results = [];
function visit(node) {
if (Object.prototype.hasOwnProperty.call(stack, node)) {
throw new CycleException();
}
if (!Object.prototype.hasOwnProperty.call(visited, node)) {
stack[node] = true;
visited[node] = true;
_.each(g.predecessors(node), visit);
delete stack[node];
results.push(node);
}
}
_.each(g.sinks(), visit);
if (_.size(visited) !== g.nodeCount()) {
throw new CycleException();
}
return results;
}
function CycleException() {}
CycleException.prototype = new Error(); // must be an instance of Error to pass testing