All files extra.js

11.53% Statements 3/26
100% Branches 1/1
0% Functions 0/1
11.53% Lines 3/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 271x 1x 1x                                                
import { uniqueNodes, groupByComponents, getStartNodes, makeOutgoingEdges, makeIncomingEdges, } from './helpers.js';
import { validateEdges, validateArgs, validateDag } from './validators.js';
export function toposortExtra(opts) {
    validateArgs(opts);
    const nodes = opts.nodes || uniqueNodes(opts.edges);
    const edges = opts.edges;
    validateEdges(nodes, edges);
    const prev = new Map([...makeIncomingEdges(edges)].map(([node, neighborsSet]) => [node, [...neighborsSet]]));
    const next = new Map([...makeOutgoingEdges(edges)].map(([node, neighborsSet]) => [node, [...neighborsSet]]));
    const sources = getStartNodes(edges);
    if (opts.throwOnCycle) {
        validateDag({ edges, nodes, outgoing: next });
    }
    return {
        sources,
        prev,
        next,
        graphs: groupByComponents({ edges })
            .map(graphNodesSet => {
            return {
                nodes: [...graphNodesSet],
                sources: sources.filter(node => graphNodesSet.has(node))
            };
        })
    };
}