UNPKG

npm-link-up

Version:

Use this package to link your projects together for local development.

48 lines (47 loc) 1.49 kB
'use strict'; 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;