@nestjs/core
Version:
Nest - modern, fast, powerful node.js web framework (@core)
52 lines (51 loc) • 1.64 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.TopologyTree = void 0;
const tree_node_1 = require("./tree-node");
class TopologyTree {
constructor(moduleRef) {
this.links = new Map();
this.root = new tree_node_1.TreeNode({
value: moduleRef,
parent: null,
});
this.links.set(moduleRef, this.root);
this.traverseAndMapToTree(this.root);
}
walk(callback) {
function walkNode(node, depth = 1) {
callback(node.value, depth);
node.children.forEach(child => walkNode(child, depth + 1));
}
walkNode(this.root);
}
traverseAndMapToTree(node, depth = 1) {
if (!node.value.imports) {
return;
}
node.value.imports.forEach(child => {
if (!child) {
return;
}
if (this.links.has(child)) {
const existingSubtree = this.links.get(child);
if (node.hasCycleWith(child)) {
return;
}
const existingDepth = existingSubtree.getDepth();
if (existingDepth < depth) {
existingSubtree.relink(node);
}
return;
}
const childNode = new tree_node_1.TreeNode({
value: child,
parent: node,
});
node.addChild(childNode);
this.links.set(child, childNode);
this.traverseAndMapToTree(childNode, depth + 1);
});
}
}
exports.TopologyTree = TopologyTree;
;