twreporter-react
Version:
React-Redux site for The Reporter Foundation in Taiwan
82 lines (65 loc) • 2.01 kB
JavaScript
;
var path = require('path');
var assign = require('object-assign');
var through2 = require('through2');
var gs = require('glob-stream');
var File = require('vinyl');
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 resolveSymlinks = require('./resolveSymlinks');
function normalizePath(options) {
function normalize(globFile, enc, cb) {
// TODO: probably move this somewhere
// Ref https://github.com/gulpjs/vinyl/issues/80
var normalizedFile = assign({}, globFile, {
path: path.normalize(globFile.path),
});
cb(null, normalizedFile);
}
return through2.obj(options, normalize);
}
function createFile(globFile, enc, cb) {
cb(null, new File(globFile));
}
function src(glob, opt) {
var options = assign({
read: true,
buffer: true,
stripBOM: true,
sourcemaps: false,
passthrough: false,
followSymlinks: true,
}, opt);
var inputPass;
if (!isValidGlob(glob)) {
throw new Error('Invalid glob argument: ' + glob);
}
var globStream = gs.create(glob, options);
var outputStream = globStream
.pipe(normalizePath(options))
.pipe(resolveSymlinks(options))
.pipe(through2.obj(opt, createFile));
if (options.since != null) {
outputStream = outputStream
.pipe(filterSince(options.since));
}
if (options.read !== false) {
outputStream = outputStream
.pipe(getContents(options));
}
if (options.passthrough === true) {
inputPass = through2.obj(opt);
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;