in make-util.js [218:252]
var matchFind = function (pattern, root, options) {
assert(pattern, 'pattern');
assert(root, 'root');
// determine whether to recurse
options = options || {};
var noRecurse = options.hasOwnProperty('noRecurse') && options.noRecurse;
delete options.noRecurse;
// merge specified options with defaults
mergedOptions = { matchBase: true };
Object.keys(options || {}).forEach(function (key) {
mergedOptions[key] = options[key];
});
// normalize first, so we can substring later
root = path.resolve(root);
// determine the list of items
var items;
if (noRecurse) {
items = fs.readdirSync(root)
.map(function (name) {
return path.join(root, name);
});
}
else {
items = find(root)
.filter(function (item) { // filter out the root folder
return path.normalize(item) != root;
});
}
return minimatch.match(items, pattern, mergedOptions);
}