UNPKG

topological-sort-group

Version:

Topological sorting and cycle detection. Optional grouping for parallel processing

37 lines 1.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return cycles; } }); function cycles(graph) { var visited = {}; var marks = {}; var cycles = []; function visit(key, ancestors) { if (marks[key]) return cycles.push(ancestors.concat(key)); // found a cycle if (visited[key]) return; // already visited visited[key] = true; // check for cycles from this key marks[key] = true; graph.edges(key).forEach(function(neighborKey) { visit(neighborKey, ancestors.concat(key)); }); delete marks[key]; } // check all keys var keys = graph.keys(); while(keys.length > 0){ visit(keys[0], []); // remove processed keys = keys.filter(function(key) { return !visited[key]; }); } return cycles; } /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }