ld31-space-diggers/node_modules/gulp-concat/index.js

60 lines
1.8 KiB
JavaScript
Raw Normal View History

2014-12-07 20:57:49 +01:00
var through = require('through');
var path = require('path');
var gutil = require('gulp-util');
var PluginError = gutil.PluginError;
var File = gutil.File;
var Buffer = require('buffer').Buffer;
var Concat = require('concat-with-sourcemaps');
module.exports = function(file, opt) {
if (!file) throw new PluginError('gulp-concat', 'Missing file option for gulp-concat');
if (!opt) opt = {};
// to preserve existing |undefined| behaviour and to introduce |newLine: ""| for binaries
if (typeof opt.newLine !== 'string') opt.newLine = gutil.linefeed;
var firstFile = null;
var fileName = file;
if (typeof file !== 'string') {
if (typeof file.path !== 'string') {
throw new PluginError('gulp-concat', 'Missing path in file options for gulp-concat');
}
fileName = path.basename(file.path);
firstFile = new File(file);
}
var concat = null;
function bufferContents(file) {
if (file.isNull()) return; // ignore
if (file.isStream()) return this.emit('error', new PluginError('gulp-concat', 'Streaming not supported'));
if (!firstFile) firstFile = file;
if (!concat) concat = new Concat(!!firstFile.sourceMap || !!file.sourceMap, fileName, opt.newLine);
concat.add(file.relative, file.contents.toString(), file.sourceMap);
}
function endStream() {
if (firstFile) {
var joinedFile = firstFile;
if (typeof file === 'string') {
joinedFile = firstFile.clone({contents: false});
joinedFile.path = path.join(firstFile.base, file);
}
joinedFile.contents = new Buffer(concat.content);
if (concat.sourceMapping)
joinedFile.sourceMap = JSON.parse(concat.sourceMap);
this.emit('data', joinedFile);
}
this.emit('end');
}
return through(bufferContents, endStream);
};