mirror of
https://github.com/postmanlabs/openapi-to-postman.git
synced 2022-11-29 22:05:00 +03:00
78 lines
1.9 KiB
JavaScript
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
|
|
};
|