traverseDepthFirst = (map, root) => {
const isNotVisited = (node, path) => {
return path.every(pathNode => pathNode !== node)
}
const edges = []
const visit = (source, target, path) => {
edges.push({ source, target })
const children = map.get(target) ?? []
children.forEach(child => {
if (isNotVisited(child, path)) {
visit(target, child, [...path, child])
}
})
}
const ROOT = ""
visit(ROOT, root, [root])
return edges
}