wishthis/node_modules/gulp-concat-filenames/index.js
2022-01-21 09:28:41 +01:00

90 lines
2.3 KiB
JavaScript

var through = require('through');
var path = require('path');
var gutil = require('gulp-util');
var File = gutil.File;
var PluginError = gutil.PluginError;
function concatFilenames(filename, opts) {
'use strict';
function identity(x) {
return x;
}
var error = {
noFilename: 'Missing fileName option for gulp-concat-filenames',
badTemplate: 'Error in template function'
};
opts = opts || {};
opts.template = opts.template || identity;
if (!filename) {
throw new PluginError('gulp-concat-filenames', error.noFilename);
}
if (typeof opts.newLine !== 'string') {
opts.newLine = gutil.linefeed;
}
var buffer = [],
firstfile;
function bufferContents(file) {
firstfile = firstfile || file;
var requirePath = path.resolve(file.path);
// Make sure template errors reach the output
var safeTemplate = function(str) {
var output;
try {
output = opts.template(str);
} catch (e) {
e.message = error.badTemplate + ': ' + e.message;
return this.emit('error', new PluginError('gulp-concat-filenames', e));
}
if (typeof output !== 'string') {
return this.emit('error', new PluginError('gulp-concat-filenames', error.badTemplate));
}
return output;
};
requirePath = opts.root ?
path.relative(opts.root, requirePath) :
requirePath;
var thisRequire = [
opts.prepend || '',
safeTemplate.call(this, requirePath.replace(/\\/g, '\/')),
opts.append || '',
opts.newLine
].join('');
buffer.push(new Buffer(thisRequire));
}
function endStream() {
if (buffer.length === 0) {
return this.emit('end');
}
var outFileContents = Buffer.concat(buffer),
outFilePath = path.join(firstfile.base, filename);
var outFile = new File({
cwd: firstfile.cwd,
base: firstfile.base,
path: outFilePath,
contents: outFileContents
});
this.emit('data', outFile);
this.emit('end');
}
return through(bufferContents, endStream);
}
module.exports = concatFilenames;