description and source-codegulp-requirejs-optimize = function (options) {
requirejs.define('node/print', [], function() {
return function(msg) {
if (msg.substring(0, 5) === 'Error') {
gutil.log(chalk.red(msg));
} else {
gutil.log(msg);
}
};
});
options = options || {};
var generateOptions;
if (typeof options === 'function') {
generateOptions = options;
} else {
generateOptions = function() {
return options;
};
}
var error;
return through.obj(function(file, enc, cb) {
if (file.isNull()) {
cb(null, file);
return;
}
if (file.isStream()) {
cb(new gutil.PluginError(PLUGIN_NAME, 'Streaming not supported'));
return;
}
var optimizeOptions = generateOptions(file);
if (typeof optimizeOptions !== 'object') {
cb(new gutil.PluginError(PLUGIN_NAME, 'Options function must produce an options object'));
return;
}
var sourceMapPresent = Boolean(file.sourceMap);
optimizeOptions = defaults({}, optimizeOptions, {
logLevel: 2,
baseUrl: file.base,
out: file.relative,
generateSourceMaps: sourceMapPresent
});
if (optimizeOptions.generateSourceMaps) {
defaults(optimizeOptions, {
preserveLicenseComments: false
});
}
if (!optimizeOptions.include && !optimizeOptions.name) {
optimizeOptions.include = pathToModuleId(file.relative);
}
if (typeof optimizeOptions.out !== 'string') {
cb(new gutil.PluginError(PLUGIN_NAME, 'If `out` is supplied, it must be a string'));
return;
}
var out = optimizeOptions.out;
optimizeOptions.out = function(text, sourceMapText) {
if (sourceMapPresent) {
// uglify adds its own sourceMappingURL comment which will get duplicated by gulp-sourcemaps
text = text.replace(/\/\/# sourceMappingURL=.*$/, '');
}
var outfile = new gutil.File({
path: out,
contents: new Buffer(text)
});
if (sourceMapText) {
applySourceMap(outfile, sourceMapText);
}
cb(null, outfile);
};
var target;
if (optimizeOptions.logLevel < 2) {
target = path.resolve(file.path);
} else {
target = file.relative;
}
gutil.log('Optimizing ' + chalk.magenta(target));
requirejs.optimize(optimizeOptions, null, function(err) {
error = err;
cb();
});
}, function(cb) {
if (error) {
cb(new gutil.PluginError(PLUGIN_NAME, error));
}
cb();
});
}