Files
2022-07-06 15:53:07 -05:00

78 lines
1.9 KiB
JavaScript

class DFS {
traverse(node, getAdjacent) {
let traverseOrder = [],
stack = [],
missing = [],
visited = new Set();
stack.push(node);
while (stack.length > 0) {
node = stack.pop();
if (!visited.has(node)) {
traverseOrder.push(node);
visited.add(node);
let { graphAdj, missingNodes } = getAdjacent(node);
missing.push(...missingNodes);
for (let j = 0; j < graphAdj.length; j++) {
stack.push(graphAdj[j]);
}
}
}
missing = [
...new Set(
missing.map((obj) => {
return JSON.stringify(obj);
})
)
].map((str) => {
return JSON.parse(str);
});
return { traverseOrder, missing };
}
traverseAndBundle(node, getAdjacentAndBundle) {
let traverseOrder = [],
stack = [],
missing = [],
visited = new Set(),
nodeContents = {},
globalReferences = {};
stack.push(node);
while (stack.length > 0) {
node = stack.pop();
if (!visited.has(node)) {
traverseOrder.push(node);
visited.add(node);
let {
graphAdj,
missingNodes,
nodeContent,
nodeReferenceDirectory,
nodeName
} = getAdjacentAndBundle(node, globalReferences);
nodeContents[nodeName] = nodeContent;
Object.entries(nodeReferenceDirectory).forEach(([key, data]) => {
globalReferences[key] = data;
});
missing.push(...missingNodes);
for (let j = 0; j < graphAdj.length; j++) {
stack.push(graphAdj[j]);
}
}
}
missing = [
...new Set(
missing.map((obj) => {
return JSON.stringify(obj);
})
)
].map((str) => {
return JSON.parse(str);
});
return { traverseOrder, missing, nodeContents, globalReferences };
}
}
module.exports = {
DFS
};