85 lines
1.9 KiB
JavaScript
85 lines
1.9 KiB
JavaScript
var fs = require('fs');
|
|
var path = require('path');
|
|
|
|
function getDeps(module) {
|
|
var pkg = JSON.parse(fs.readFileSync(module.path + '/package.json'));
|
|
return pkg.dependencies ? Object.keys(pkg.dependencies) : [];
|
|
}
|
|
|
|
function hasChildren(module) {
|
|
try {
|
|
fs.statSync(module.path + '/node_modules');
|
|
return true;
|
|
} catch(err) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function locateDep(module, dep, rootnm = false) {
|
|
var mPath = (rootnm ? '.' : module.path) + '/node_modules/' + dep;
|
|
try {
|
|
fs.statSync(mPath);
|
|
return {
|
|
name: dep,
|
|
path: mPath
|
|
}
|
|
} catch(err) {
|
|
if(!rootnm) return locateDep(module, dep, true);
|
|
return {
|
|
name: dep,
|
|
path: null
|
|
}
|
|
}
|
|
}
|
|
|
|
function buildDependencyTree(depsRef, module) {
|
|
if(module.name === null || module.path === null) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
fs.statSync(module.path + '/package.json');
|
|
} catch(err) { return; }
|
|
|
|
var deps = getDeps(module);
|
|
|
|
for(var dep of deps) {
|
|
var located = locateDep(module, dep);
|
|
if(!depsRef.find(d => d.path === located.path)) {
|
|
buildDependencyTree(depsRef, located);
|
|
depsRef.push(located);
|
|
}
|
|
|
|
if(hasChildren(located)) {
|
|
var childModules = fs.readdirSync(located.path + '/node_modules').map(name => located.path + '/node_modules/' + name).filter(source => fs.statSync(source).isDirectory());
|
|
for(var childModule of childModules) {
|
|
buildDependencyTree(depsRef, { name: '!child', path: childModule });
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = function(config) {
|
|
var depsRef = [];
|
|
|
|
buildDependencyTree(depsRef, {
|
|
name: '!root',
|
|
path: '.'
|
|
});
|
|
|
|
for(var dep of depsRef) {
|
|
if(!dep.path) {
|
|
if(!dep.name || !config.ignore.includes(dep.name)) {
|
|
console.warn('DEPENDENCY NOT FOUND:', dep.name)
|
|
}
|
|
}
|
|
}
|
|
|
|
var flatten = depsRef.filter(d => d.path && !d.path.replace('./node_modules', '').includes('node_modules'));
|
|
var star = flatten.map(d => d.path + '/**/*');
|
|
|
|
console.log('Found ' + star.length + ' dependencies');
|
|
return star;
|
|
}
|