export function TopologicalSorter () { const graph = {} let isVisitedNode let finishTimeCount let finishingTimeList let nextNode this.addOrder = function (nodeA, nodeB) { nodeA = String(nodeA) nodeB = String(nodeB) graph[nodeA] = graph[nodeA] || [] graph[nodeA].push(nodeB) } this.sortAndGetOrderedItems = function () { isVisitedNode = Object.create(null) finishTimeCount = 0 finishingTimeList = [] for (const node in graph) { if (Object.prototype.hasOwnProperty.call(graph, node) && !isVisitedNod