Source: apc-abstract/lib/file/expand_glob.js

/**
 * Expand glob patterns.
 * @function lib.file.expandGlob
 * @param {string|string[]} patterns - Glob patterns.
 * @param {function} callback - Callback when done.
 * @author Taka Okunishi
 *
 */
var path = require('path');
module.exports = function (patterns, callback) {
    var async = require('async'),
        glob = require('glob');
    async.parallel(
        [].concat(patterns)
            .map(function (pattern) {
                return pattern && path.resolve(pattern);
            })
            .map(function (pattern) {
                return function (callback) {
                    try {
                        glob(pattern, callback);
                    } catch (e) {
                        callback(e);
                    }
                };
            }),
        function (err, filenames) {
            if (err) {
                callback(err);
            } else {
                var result = filenames
                    .reduce(function (a, b) {
                        return a.concat(b);
                    }, []);
                callback(null, result);
            }

        }
    );

};