3 var defaults = require('defaults');
4 var through = require('through2');
5 var gs = require('glob-stream');
6 var File = require('vinyl');
8 var getContents = require('./getContents');
9 var getStats = require('./getStats');
11 function createFile (globFile, enc, cb) {
12 cb(null, new File(globFile));
15 function src(glob, opt) {
17 var pass = through.obj();
19 if (!isValidGlob(glob)) {
20 throw new Error('Invalid glob argument: ' + glob);
22 // return dead stream if empty array
23 if (Array.isArray(glob) && glob.length === 0) {
24 process.nextTick(pass.end.bind(pass));
28 var options = defaults(opt, {
33 var globStream = gs.create(glob, options);
35 // when people write to use just pass it through
36 var outputStream = globStream
37 .pipe(through.obj(createFile))
38 .pipe(getStats(options));
40 if (options.read !== false) {
41 outputStream = outputStream
42 .pipe(getContents(options));
45 return outputStream.pipe(pass);
48 function isValidGlob(glob) {
49 if (typeof glob === 'string') {
52 if (Array.isArray(glob) && glob.length !== 0) {
53 return glob.every(isValidGlob);
55 if (Array.isArray(glob) && glob.length === 0) {