Skip to content

Instantly share code, notes, and snippets.

@WebReflection
Last active May 16, 2019 08:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save WebReflection/b0a3b12e2e2614e4ca2b9f7054ed60a2 to your computer and use it in GitHub Desktop.
Save WebReflection/b0a3b12e2e2614e4ca2b9f7054ed60a2 to your computer and use it in GitHub Desktop.
Some commonly re-used / needed bash utils

./find module-name

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('');
    });
  });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment