Skip to content

Instantly share code, notes, and snippets.

@adamburgess
Created July 3, 2016 17:52
Show Gist options
  • Save adamburgess/b96fa38237408cdcc087d7e6b2a70d3c to your computer and use it in GitHub Desktop.
Save adamburgess/b96fa38237408cdcc087d7e6b2a70d3c to your computer and use it in GitHub Desktop.
var Builder = require('jspm').Builder;
var builder = new Builder();
builder
.trace(process.argv[2], {
node: true,
production: true
})
.then(function(tree) {
var root;
var treeDeps = {};
var treeKeys = Object.keys(tree);
root = treeKeys[0];
treeKeys.sort();
treeKeys.forEach(key => {
var module = tree[key];
if(module === false) {
treeDeps[key] = {
name: key,
package: key,
deps: []
};
} else {
treeDeps[key] = {
name: key,
package: module.packageConfig,
deps: findDeps(key, tree)
};
}
});
/*treeDeps = {
a: { name: 'a', package: 'a', deps: ['b', 'd'] },
b: { name: 'b', package: 'b', deps: ['c'] },
c: { name: 'c', package: 'c', deps: []},
d: { name: 'd', package: 'd', deps: ['e', 'f', 'h']},
e: { name: 'e', package: 'e', deps: []},
f: { name: 'f', package: 'f', deps: ['g']},
g: { name: 'g', package: 'g', deps: []},
h: { name: 'h', package: 'h', deps: []}
};
var root = 'a';*/
// now resolve them
for(var key in treeDeps) {
treeDeps[key].deps = treeDeps[key].deps.map(dep => treeDeps[dep]);
}
console.log(root);
printDeps(treeDeps[root], 0, false, {}, {});
})
.catch(function(err) {
console.log('Build error');
throw err
});
function printDeps(module, curLevel, isEnd, levels, seen) {
var deps = module.deps;
if(!deps.length) return;
deps = deps.filter(x => x.package == module.package)
.concat(deps.filter(x => x.package != module.package));
var line = '';
for(var i = 0; i < curLevel; i++) {
if(!levels[i]) line += ' ';
else line += '│ ';
}
levels[curLevel] = true;
for(var i = 0; i < deps.length; i++) {
var module = deps[i];
var depDeps = module.deps;
var depLine = line;
if(i + 1 == deps.length) {
depLine += '└';
levels[curLevel] = false;
}
else depLine += '├';
var seenBefore = module.name in seen;
//─
if(!seenBefore && depDeps.length) depLine += '─┬'
else depLine += '──';
depLine += '╴' + module.name;
if(seenBefore && depDeps.length) depLine += ' (' + depDeps.length + ' ' + (depDeps.length == 1 ? 'child' : 'children') + ')';
console.log(depLine);
if(!seenBefore)
printDeps(module, curLevel + 1, i + 1 == deps.length, levels, seen);
seen[module.name] = true;
}
}
function findDeps(name, tree) {
var module = tree[name];
if(module == undefined) return [];
if(module.deps == undefined) return [];
return module.deps
.map(dep => module.depMap[dep]).filter(dep => dep.indexOf('0.2.0-alpha') === -1);
}
/*
a
├─┬╴b
│ └──╴c
└─┬╴d
├──╴e
├─┬╴f
│ └──╴g
└──╴h
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment