diff options
Diffstat (limited to 'node_modules/gulp-concat/index.js')
-rw-r--r-- | node_modules/gulp-concat/index.js | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/node_modules/gulp-concat/index.js b/node_modules/gulp-concat/index.js new file mode 100644 index 000000000..697fea594 --- /dev/null +++ b/node_modules/gulp-concat/index.js @@ -0,0 +1,103 @@ +'use strict'; + +var through = require('through2'); +var path = require('path'); +var gutil = require('gulp-util'); +var PluginError = gutil.PluginError; +var File = gutil.File; +var Concat = require('concat-with-sourcemaps'); + +// file can be a vinyl file object or a string +// when a string it will construct a new one +module.exports = function(file, opt) { + if (!file) { + throw new PluginError('gulp-concat', 'Missing file option for gulp-concat'); + } + opt = opt || {}; + + // to preserve existing |undefined| behaviour and to introduce |newLine: ""| for binaries + if (typeof opt.newLine !== 'string') { + opt.newLine = gutil.linefeed; + } + + var isUsingSourceMaps = false; + var latestFile; + var latestMod; + var fileName; + var concat; + + if (typeof file === 'string') { + fileName = file; + } else if (typeof file.path === 'string') { + fileName = path.basename(file.path); + } else { + throw new PluginError('gulp-concat', 'Missing path in file options for gulp-concat'); + } + + function bufferContents(file, enc, cb) { + // ignore empty files + if (file.isNull()) { + cb(); + return; + } + + // we don't do streams (yet) + if (file.isStream()) { + this.emit('error', new PluginError('gulp-concat', 'Streaming not supported')); + cb(); + return; + } + + // enable sourcemap support for concat + // if a sourcemap initialized file comes in + if (file.sourceMap && isUsingSourceMaps === false) { + isUsingSourceMaps = true; + } + + // set latest file if not already set, + // or if the current file was modified more recently. + if (!latestMod || file.stat && file.stat.mtime > latestMod) { + latestFile = file; + latestMod = file.stat && file.stat.mtime; + } + + // construct concat instance + if (!concat) { + concat = new Concat(isUsingSourceMaps, fileName, opt.newLine); + } + + // add file to concat instance + concat.add(file.relative, file.contents, file.sourceMap); + cb(); + } + + function endStream(cb) { + // no files passed in, no file goes out + if (!latestFile || !concat) { + cb(); + return; + } + + var joinedFile; + + // if file opt was a file path + // clone everything from the latest file + if (typeof file === 'string') { + joinedFile = latestFile.clone({contents: false}); + joinedFile.path = path.join(latestFile.base, file); + } else { + joinedFile = new File(file); + } + + joinedFile.contents = concat.content; + + if (concat.sourceMapping) { + joinedFile.sourceMap = JSON.parse(concat.sourceMap); + } + + this.push(joinedFile); + cb(); + } + + return through.obj(bufferContents, endStream); +}; |