export type Graph = Map>; export function getNodesInTopologicalOrder(graph: Graph): T[] { const visited = new Set(); const sorted: T[] = []; for (const node of graph.keys()) { if (!visited.has(node)) { visit(graph, node, visited, sorted); } } return sorted.reverse(); } function visit(graph: Graph, node: T, visited: Set, sorted: T[]) { visited.add(node); for (const to of graph.get(node)!) { if (!visited.has(to)) { visit(graph, to, visited, sorted); } } sorted.push(node); }