topological-sort-group
v0.1.11
Published
Topological sorting and cycle detection. Optional grouping for parallel processing
Downloads
232
Maintainers
Readme
topological-sort-group
Topological sorting and cycle detection. Optional grouping for parallel processing.
sort by group - default
import assert from 'assert';
import { Graph, sort, SortMode } from 'topological-sort-group';
const graph = Graph.from(
[
/* nodes */
{ package: { name: 'A' } },
{ package: { name: 'B' } },
{ package: { name: 'C' } },
{ package: { name: 'D' } },
{ package: { name: 'E' } },
{ package: { name: 'F' } },
/* edges */
['A', 'B'],
['B', 'C'],
['D', 'E'],
['E', 'F'],
['B', 'A'], // Creates a cycle
],
{ path: 'package.name' }
);
const result = sort(graph);
assert.deepEqual(result.nodes, [[{ package: { name: 'D' } }], [{ package: { name: 'E' } }], [{ package: { name: 'F' } }]]);
assert.deepEqual(result.cycles, [['A', 'B', 'A']]);
sort flat
import assert from 'assert';
import { Graph, sort, SortMode } from 'topological-sort-group';
const graph = Graph.from([
['A', 'C'],
['B', 'C'],
['B', 'D'],
['C', 'E'],
['D', 'F'],
['E', 'F'],
['E', 'G'],
['F', 'H'],
]);
const result = sort(graph, SortMode.Flat);
assert.deepEqual(result.nodes, ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']);
assert.deepEqual(result.cycles, []);