1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
var util = require('util'),
minimatch = require('minimatch'),
Glob = require('glob').Glob,
EventEmitter = require('events').EventEmitter;
module.exports = fileset;
function fileset(include, exclude, options, cb) {
if (typeof exclude === 'function') cb = exclude, exclude = '';
else if (typeof options === 'function') cb = options, options = {};
var includes = (typeof include === 'string') ? include.split(' ') : include;
var excludes = (typeof exclude === 'string') ? exclude.split(' ') : exclude;
var em = new EventEmitter,
remaining = includes.length,
results = [];
if(!includes.length) return cb(new Error('Must provide an include pattern'));
em.includes = includes.map(function(pattern) {
return new fileset.Fileset(pattern, options)
.on('error', cb ? cb : em.emit.bind(em, 'error'))
.on('match', em.emit.bind(em, 'match'))
.on('match', em.emit.bind(em, 'include'))
.on('end', next.bind({}, pattern))
});
function next(pattern, matches) {
results = results.concat(matches);
if(!(--remaining)) {
results = results.filter(function(file) {
return !excludes.filter(function(glob) {
var match = minimatch(file, glob, { matchBase: true });
if(match) em.emit('exclude', file);
return match;
}).length;
});
if(cb) cb(null, results);
em.emit('end', results);
}
}
return em;
}
fileset.Fileset = function Fileset(pattern, options, cb) {
if (typeof options === 'function') cb = options, options = {};
if (!options) options = {};
Glob.call(this, pattern, options);
if(typeof cb === 'function') {
this.on('error', cb);
this.on('end', function(matches) { cb(null, matches); });
}
};
util.inherits(fileset.Fileset, Glob);
|