63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
var assign = require('object-assign');
|
|
var through2 = require('through2');
|
|
var gs = require('glob-stream');
|
|
var duplexify = require('duplexify');
|
|
var merge = require('merge-stream');
|
|
var sourcemaps = require('gulp-sourcemaps');
|
|
var filterSince = require('../filterSince');
|
|
var isValidGlob = require('is-valid-glob');
|
|
|
|
var getContents = require('./getContents');
|
|
var wrapWithVinylFile = require('./wrapWithVinylFile');
|
|
|
|
function src(glob, opt) {
|
|
var options = assign({
|
|
read: true,
|
|
buffer: true,
|
|
stripBOM: true,
|
|
sourcemaps: false,
|
|
passthrough: false,
|
|
followSymlinks: true,
|
|
}, opt);
|
|
|
|
// Don't pass `read` option on to through2
|
|
var read = options.read !== false;
|
|
options.read = undefined;
|
|
|
|
var inputPass;
|
|
|
|
if (!isValidGlob(glob)) {
|
|
throw new Error('Invalid glob argument: ' + glob);
|
|
}
|
|
|
|
var globStream = gs.create(glob, options);
|
|
|
|
var outputStream = globStream
|
|
.pipe(wrapWithVinylFile(options));
|
|
|
|
if (options.since != null) {
|
|
outputStream = outputStream
|
|
.pipe(filterSince(options.since));
|
|
}
|
|
|
|
if (read) {
|
|
outputStream = outputStream
|
|
.pipe(getContents(options));
|
|
}
|
|
|
|
if (options.passthrough === true) {
|
|
inputPass = through2.obj(options);
|
|
outputStream = duplexify.obj(inputPass, merge(outputStream, inputPass));
|
|
}
|
|
if (options.sourcemaps === true) {
|
|
outputStream = outputStream
|
|
.pipe(sourcemaps.init({ loadMaps: true }));
|
|
}
|
|
globStream.on('error', outputStream.emit.bind(outputStream, 'error'));
|
|
return outputStream;
|
|
}
|
|
|
|
module.exports = src;
|