Placed on the root of all git repositories, and made executable via chmod +x find
, this utils displays folders with a package.json
that depends on it.
#!/usr/bin/env node
// ./find module-name
// simple utility to find folders depending on module-name
// by Andrea Giammarchi - @webreflection
let [_, find, search] = process.argv;
const fs = require('fs');
const path = require('path');
const cwd = process.cwd();
const dir = path.dirname(path.resolve(find));
if (cwd !== dir) {
if (!search) {
search = path.basename(cwd);
}
process.chdir(dir);
}
if (!search)
console.log(' ./find module-name');
else
fs.readdir('.', (err, dirs) => {
console.log('');
const promises = [];
const noPackage = [];
dirs.forEach(dir => {
promises.push(new Promise($ => {
fs.stat(dir, (err, stats) => {
if (!err && stats.isDirectory()) {
try {
const package = require(`./${dir}/package.json`);
const deps = [];
if (search in (package.dependencies || {}))
deps.push('dependency');
if (search in (package.devDependencies || {}))
deps.push('devDependency');
if (deps.length)
console.info(` \x1B[1m${dir}\x1B[0m as ${deps.join(', ')}`);
} catch(o_O) {
noPackage.push(dir);
}
}
$();
});
}));
});
Promise.all(promises).then(() => {
console.log('');
console.info(` \x1B[2mSearched for \x1B[0m${search}\x1B[2m in \x1B[0m${dir}`);
if (noPackage.length) {
console.warn(` \x1B[2mNo package.json in ${noPackage.join(', ')}\x1B[0m`);
}
console.log('');
});
});