gloth

Multiple glob expansions with exclusions and hooks

gloth


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

$ npm install gloth

var excludeSizeHigherThen = require('hooks/excludeSizeHigherThen');
 
gloth(['src/**/*', '!b.js', excludeSizeHigherThen(2097152)], function (errmatches) {
    // 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 (matchesnext) {
        async.filter(matches, function (matchnext) {
            fs.stat(match, function (errstat) {
                if (err) return next(false);
 
                next(!stat.isFile() || stat.size <= size);
            });
        }, function (results) {
            next(null, results);
        });
    };
};

For more information on hooks are done, people 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.

Released under the MIT License.