Skip to content

Instantly share code, notes, and snippets.

@ahlusar1989
Created February 12, 2018 17:18
Show Gist options
  • Save ahlusar1989/9d4b9a9378c2770279e66f4172edaed3 to your computer and use it in GitHub Desktop.
Save ahlusar1989/9d4b9a9378c2770279e66f4172edaed3 to your computer and use it in GitHub Desktop.
/* global require, exports */
var walkdir = require('walkdir'),
fs = require('fs'),
readInstalled = require('read-installed'),
emitter = require('events').EventEmitter;
function listdep(parent, dep, level, deps) {
var stack = [];
stack.push({parent: parent, dep: dep, level: level});
while (typeof (o = stack.pop()) !== 'undefined') {
for (var i in o.dep.dependencies) {
cyclic = false;
dep_parent = o.parent;
while (typeof dep_parent !== 'undefined') {
if (dep_parent.component === i) {
cyclic = true;
break;
} else {
dep_parent = dep_parent.parent;
}
}
if (cyclic) {
continue;
}
var d = { component: i, version: o.dep.dependencies[i].version, parent: o.parent, level: o.level };
deps.push(d);
stack.push({parent: d, dep: o.dep.dependencies[i], level: o.level + 1});
}
}
}
function getNodeDependencies(path, limit) {
var events = new emitter();
readInstalled(path, {}, function (er, pkginfo) {
var deps = [];
if (limit) {
var packages = JSON.parse(fs.readFileSync(path +'/package.json'));
filter = [];
var filter = packages.dependencies ? Object.keys(packages.dependencies) : [];
Object.keys(pkginfo.dependencies)
.filter(function(d) { return filter.indexOf(d) == -1; })
.forEach(function(d) { delete pkginfo.dependencies[d]; });
}
listdep({component: pkginfo.name, version: pkginfo.version}, pkginfo, 1, deps);
events.emit('done', deps);
});
return events;
}
function scanJsFiles(path) {
var finder = walkdir.find(path);
finder.on('file', function (file) {
if (file.match(/\.js$/)) {
finder.emit('jsfile', file);
}
if (file.match(/\/bower.json$/)) {
finder.emit('bowerfile', file);
}
});
return finder;
}
exports.scanJsFiles = function(path) {
return scanJsFiles(path);
};
exports.getNodeDependencies = function(path, limit) {
return getNodeDependencies(path, limit);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment