diff --git a/tools/node.js b/tools/node.js index 07c3bfae..5439045c 100644 --- a/tools/node.js +++ b/tools/node.js @@ -62,12 +62,45 @@ for (var i in UglifyJS) { } } -exports.minify = function(files, options) { +exports.minify = function(files, options) +{ options = UglifyJS.defaults(options, { outSourceMap : null, inSourceMap : null, warnings : false, + compressor : null, + output : null, + comments: false }); + + var compressorOptions = UglifyJS.defaults(options.compressor, { + warnings : false + }); + + var outputOptions = UglifyJS.defaults(options.output, { + comments: false, + beautify: false + }); + + // Got comment option? + if (options.comments) { + if (/^\//.test(options.comments)) { + outputOptions.comments = new Function("return(" + options.comments + ")")(); + } else if (options.comments == "all") { + outputOptions.comments = true; + } else { + outputOptions.comments = function(node, comment) { + var text = comment.value; + var type = comment.type; + if (type == "comment2") { + // preserved multiline comments + return /License|license|@preserve|@license|@cc_on/i.test(text); + } + } + } + } + + if (typeof files == "string") files = [ files ]; @@ -83,9 +116,11 @@ exports.minify = function(files, options) { // 2. compress toplevel.figure_out_scope(); - var sq = UglifyJS.Compressor({ - warnings: options.warnings, - }); + + // Toplevel warnings override + if(options.warnings) compressorOptions.warnings = true; + + var sq = UglifyJS.Compressor(compressorOptions); toplevel = toplevel.transform(sq); // 3. mangle @@ -103,7 +138,11 @@ exports.minify = function(files, options) { file: options.outSourceMap, orig: inMap }); - var stream = UglifyJS.OutputStream({ source_map: map }); + + // Add sourcemap to output options + outputOptions.source_map = map; + + var stream = UglifyJS.OutputStream(outputOptions); toplevel.print(stream); return { code : stream + "",