UNPKG

@feature-hub/core

Version:

Create scalable web applications using micro frontends.

30 lines 1.43 kB
import toposort from 'toposort'; function createTuple(first) { return (second) => [first, second]; } function createDependencyEdges(dependentName, dependencies) { return Object.keys(dependencies).map(createTuple(dependentName)); } function createAllDependencyEdges(dependencyGraph) { return Array.from(dependencyGraph.keys()).reduce((allDependencyEdges, dependencyName) => { const dependencies = dependencyGraph.get(dependencyName); /* istanbul ignore next */ if (!dependencies) { return allDependencyEdges; } const dependencyEdges = createDependencyEdges(dependencyName, dependencies); return [...allDependencyEdges, ...dependencyEdges]; }, []); } export function toposortDependencies(dependencyGraph) { const dependencyNames = Array.from(dependencyGraph.keys()); const dependencyEdges = createAllDependencyEdges(dependencyGraph); const sortedDependencyNames = toposort(dependencyEdges); // Add modules that are not part of sortedDependencyNames because they // don't have dependencies and are not a dependency. sortedDependencyNames.push(...dependencyNames.filter((dependencyName) => dependencyGraph.has(dependencyName) && sortedDependencyNames.indexOf(dependencyName) === -1)); // Reverse array to yield execution order. return sortedDependencyNames.reverse(); } //# sourceMappingURL=toposort-dependencies.js.map