node package manager

gloth

Multiple glob expansions with exclusions and hooks

gloth

NPM version Downloads Build Status Dependency status Dev Dependency status

Multiple glob expansions with exclusions and hooks. Possible to use asynchronously and synchronously.

Installation

$ npm install gloth

Usage

var excludeSizeHigherThen = require('hooks/excludeSizeHigherThen');
 
gloth(['src/**/*', '!b.js', excludeSizeHigherThen(2097152)], function (err, matches) {
    // Do things with matches 
})
var excludeSizeHigherThen = require('hooks/excludeSizeHigherThen');
 
var matches = gloth.sync(['src/**/*', '!b.js', excludeSizeHigherThen(2097152)]);
// Do things with matches 

The example above would expand all files in the src folder, exclude any file named b.js and run the excludeSizeHigherThen hook. This hook would look something like:

var fs = require('fs');
 
module.exports = function (size) {
    return function (matches) {
        return matches.filter(function (match) {
            var stat = fs.statSync(match);
 
            return !stat.isFile() || stat.size <= size;
        });
    };
};

The hook above was written synchronously. The asynchronous version would be:

var fs    = require('fs');
var async = require('async');
 
module.exports = function (size) {
    return function (matches, next) {
        async.filter(matches, function (match, next) {
            fs.stat(match, function (err, stat) {
                if (err) return next(false);
 
                next(!stat.isFile() || stat.size <= size);
            });
        }, function (results) {
            next(null, results);
        });
    };
};

For more information on how hooks are done, please check the built-in hooks in the source code. The options available are the same as the glob ones.

IMPORTANT: sync hooks can be run in gloth async and sync, but async hooks can only be used with gloth async.

License

Released under the MIT License.