UNPKG

depending

Version:

Find out which modules depend on a given module

69 lines (55 loc) 1.49 kB
var slice = Array.prototype.slice; var fs = require('fs'); var path = require('path'); exports.scan = function scan(dirs) { var d = depending; if (! arguments.length) throw new Error('Nothing to scan'); dirs = slice.call(arguments); dirs = reduce(dirs, []); d.dirs = dirs; d.packages = []; var dependings = {}; // reverse dependence tree scan(dirs); function depending(package) { return dependings[package] || []; } function addDependency(from, to) { if (! dependings[to]) dependings[to] = []; dependings[to].push(from); } function scanPackage(packagePath) { var package = require(packagePath); d.packages.push(package); var name = package.name if (name && package.dependencies) { Object.keys(package.dependencies).forEach(function(dep) { addDependency(name, dep); }); } } function scanDir(dir) { var packagePath = path.join(dir, 'package.json'); if (fs.existsSync(packagePath)) { scanPackage(packagePath); } else { if (fs.statSync(dir).isDirectory()) { var files = fs.readdirSync(dir); files.forEach(function(f) { scanDir(path.join(dir, f)); }); } } } function scan(dirs) { dirs.forEach(scanDir); } return d; } function reduce(dirs, previous) { return dirs.reduce(function(previous, dir) { if (Array.isArray(dir)) previous = reduce(dir, previous); else previous.push(dir); return previous; }, []); }