Skip to content

Instantly share code, notes, and snippets.

@nic
Created June 3, 2018 19:18
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 nic/76e7cdf966600b84d20ac614e8793e2b to your computer and use it in GitHub Desktop.
Save nic/76e7cdf966600b84d20ac614e8793e2b to your computer and use it in GitHub Desktop.
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const Readable = require('readable-stream').Readable;
function complements(arr, predicate) {
const out = [[],[]];
arr.forEach(e => out[Number(!!predicate(e))].push(e));
return out;
}
function isDirectory(path) {
return fs.lstatSync(path).isDirectory();
}
function getFiles(root, stream) {
if (!(stream instanceof Readable)) {
stream = Readable({objectMode: true});
stream._read = () => {};
}
fs.readdir(root, (err, paths) => {
if (err) throw err;
paths = paths.map(i => path.join(root, i));
const [ files, dirs ] = complements(paths, isDirectory);
files.forEach(f => stream.push(f));
dirs.forEach(d => getFiles(d, stream));
});
return stream;
}
function grep(file, pattern, onMatch) {
if(file.match(pattern)){
onMatch(file);
}
}
getFiles(process.cwd()).on('data', file => {
grep(file, /package.json$/, fileMatch => {
console.log(fileMatch);
})
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment