|
|
- 'use strict';
-
- var glob = require('glob');
-
- /**
- * Expand one or more patterns into an Array of files.
- *
- * ## Examples:
- *
- * ```
- * globs('../*.js', function (err, jsfiles) {
- * console.log(jsfiles);
- * })
- *
- * globs(['*.js', '../*.js'], function (err, jsfiles) {
- * console.log(jsfiles)
- * })
- *
- * globs(['*.js', '../*.js'], { cwd: '/foo' }, function (err, jsfiles) {
- * console.log(jsfiles)
- * })
- * ```
- *
- * @param {String|Array} patterns One or more patterns to match
- * @param {Object} [options] Options
- * @param {Function} callback Function which accepts two parameters: err, files
- */
- var globs = module.exports = function (patterns, options, callback) {
- var pending
- , groups = [];
-
- // not an Array? make it so!
- if (!Array.isArray(patterns)) {
- patterns = [ patterns ];
- }
-
- pending = patterns.length;
-
- // parameter shifting is really horrible, but i'm
- // mimicing glob's api...
- if (typeof options === 'function') {
- callback = options;
- options = {};
- }
-
- if (!pending) {
- // nothing to do
- // ensure callback called asynchronously
- return process.nextTick(function() {
- callback(null, []);
- })
- }
-
- // walk the patterns
- patterns.forEach(function (pattern) {
- // grab the files
- glob(pattern, options, function (err, files) {
- if (err) {
- return callback(err);
- }
-
- // add the files to the group
- groups = groups.concat(files);
-
- pending -= 1;
- // last pattern?
- if (!pending) {
- // done
- return callback(null, groups);
- }
- });
- });
- };
-
- /**
- * Synchronously Expand one or more patterns to an Array of files
- *
- * @api public
- * @param {String|Array} patterns
- * @param {Object} [options]
- * @return {Array}
- */
- globs.sync = function (patterns, options) {
- options = options || {};
-
- var groups = []
- , index
- , length;
-
- if (!Array.isArray(patterns)) {
- patterns = [ patterns ];
- }
-
- for (index = 0, length = patterns.length; index < length; index++) {
- groups = groups.concat(glob.sync(patterns[index], options));
- }
-
- return groups;
- };
|