0.0.4 • Published 11 years ago

async-walker v0.0.4

Weekly downloads
28
License
MIT
Repository
github
Last release
11 years ago

Async Walker

This is just a basic async walker that allows you to perform manipulation (read: filter, map) during a file walk. It's fully async and returns a Q promise.

Note: If you're looking for something to do glob matching, this isn't the implementation you want. Check out node-glob, which is a very comprehensive and solid implementation.

Usage

Basic usage

Find all files: Passing a path to async-walker results in a promise w/ an array of files qualified to the base path.

var walker = require('async-walker');
walker('./path/').then(function(files) {
  console.log(files); // => Files array: ['./path/to/file.js']
});

With callback: The callback approach passes an object for each item that contains the path and two fs.stat properties: isDirectory and isFile. These are boolean values (not functions).

You're required to return a statObject or something falsey. Returning falsey values means the object's path will not be included in the result or be walked further).

Note: This is a synchronous operation. It could be made async later.

walker('./path', function(statObject) {
  var filePath = statObject.path;

  if (statObject.isFile && filePath.substr(-3) == '.js') {
    var file = fs.readFile(filePath, function(err, contents) {
      // Do something w/ javascript file contents
    });
  }

  return statObject;
});

Methods

Walker.filter(path<string>, callback<fn>, [matchDirectories<boolean: false>])

Takes a path to walk, and a callback, the boolean results of which will determine whether the item will be included. Optionally, a matchDirectories param can be added to specify whether to apply the filter callback to directories (defaults to false).

walker.filter('./node_modules', function(item) {
  return /readme\.{2,3}/i.test(item);
}).then(function(readmes) {
  // => Do something w/ all readme files in `node_modules`
});

Walker.map(path<string>, callback<fn>)

Applies a the result of a map function to each file. This does not deal w/ directories at all. I'm not sure why you'd use this, but I added to test the implementation.

walker.map('./path', function(item) {
  return item.toUpperCase();
}).then(function(files) {
  console.log(files); // => [./PATH/TO/FILE.JS...]
});