npm-link-up
Version:
Use this package to link your projects together for local development.
48 lines (47 loc) • 1.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTree = void 0;
const chalk_1 = require("chalk");
const createTree = function (map, mainProjectPath, mainDep, opts) {
if (!map[mainProjectPath]) {
throw new Error('No main project path in the map. Strange.');
}
const main = map[mainProjectPath];
if (main !== mainDep) {
throw new Error('Main should be equal to mainDep.');
}
const getKey = (dep) => {
return `${chalk_1.default.bold(dep.name)}:${dep.path}`;
};
const sorter = ((a, b) => b[0] > a[0] ? 1 : (b[0] < a[0] ? -1 : 0));
const root = {};
let tree = {
[getKey(main)]: root
};
const addDepthFirst = (currTreeNode, dep) => {
for (let [k, v] of Object.entries(dep.linkedSet)) {
if (v.visited) {
continue;
}
v.visited = true;
addDepthFirst(currTreeNode[getKey(v)] = {}, v);
}
};
const queue = [];
const addBreadthFirst = (currTreeNode, dep) => {
for (let [k, v] of Object.entries(dep.linkedSet)) {
if (v.visited) {
continue;
}
v.visited = true;
queue.push([currTreeNode[getKey(v)] = {}, v]);
}
const popped = queue.shift();
if (popped) {
addDepthFirst(...popped);
}
};
addBreadthFirst(root, main);
return tree;
};
exports.createTree = createTree;