Skip to content

Run a callback, asynchronously, on all filepaths in a directory tree

Notifications You must be signed in to change notification settings

ecman/walkitout

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

walkitout

build status codecov Code Climate Build status

Run a callback, asynchronously, on all filepaths in a directory tree

Usage

var walkitout = require('walkitout');

console.log("START WALK");

/**
 * @param {string}    path      path to walk
 * @param {function}  callback  callback handler
 * @param {function}  finish    optional finish handler
 * @param (object}    scope     optional handler scope
 * @param {function}  control   optional descent controller
 *
 * @returns {function}  ends walk and invokes finish
 */
var cancelWalk = walkitout('.',
  processLog, processComplete, null, controlDescent)

console.log("WALK STARTED");

function processLog(err, filename, done) {
  if (err) throw err;

  // skip: dotfiles, coverage, node_modules
  if (!/^(\.|coverage|node_modules)/
    .test(filename)) {
    console.log('FILE:', filename);
  }

  done();
}

function processComplete(cancelled) {
  // "cancelled" is true if cancelWalk() was invoked
  var info = '(' + (cancelled ? '' : 'not ') + 'cancelled)';
  console.log('COMPLETE: wrap up processing ' + info);
}

function controlDescent(dirname, dirPath, descend, skip, depth) {
  // skip directories named test,
  // only walk a max-depth of 2 levels
  (dirname === 'test' || depth === 2) ?
    skip() : descend();
}

Output:

START WALK
WALK STARTED
FILE: package.json
FILE: index.js
FILE: README.md
COMPLETE: wrap up processing (not cancelled)