diff --git a/lib/build_types/minify_js.js b/lib/build_types/minify_js.js index 392f284b..9ab341ba 100644 --- a/lib/build_types/minify_js.js +++ b/lib/build_types/minify_js.js @@ -22,24 +22,31 @@ function uglify(source, options) { var envify = require("loose-envify/replace"); var code = source.code; - var opts = assign({}, options ? options.uglifyOptions : {}); + var existingSourceMap = source.map; + var uglifyOptions = assign({}, options ? options.uglifyOptions : {}); - if (source.map) { - var content = source.map.toJSON(); - var filename = content.sources && content.sources[0]; + if (options.sourceMaps) { + var sourceMap = uglifyOptions.sourceMap || {}; - opts.sourceMap = opts.sourceMap || {}; - opts.sourceMap.filename = filename; - opts.sourceMap.content = content; + if (existingSourceMap) { + var content = getRawSourceMap(existingSourceMap); + var filename = content.sources && content.sources[0]; - if (options.sourceMapsContent) { - opts.sourceMap.includeSources = true; + sourceMap.filename = filename; + sourceMap.content = content; } + + sourceMap.includeSources = !!options.sourceMapsContent; + uglifyOptions.sourceMap = sourceMap; } if (options.envify) { code = envify(code, [process.env]); } - return UglifyJS.minify(code, opts); + return UglifyJS.minify(code, uglifyOptions); +} + +function getRawSourceMap(map) { + return isFunction(map.toJSON) ? map.toJSON() : map; } diff --git a/test/minify_js_test.js b/test/minify_js_test.js new file mode 100644 index 00000000..367400c3 --- /dev/null +++ b/test/minify_js_test.js @@ -0,0 +1,45 @@ +var assert = require("assert"); +var minify = require("../lib/build_types/minify_js").sync; + +describe("minify js", function() { + it("generates sourcemaps when option is set", function() { + var result = minify({ code: "var a = 1;" }, { sourceMaps: true }); + assert.ok(result.map, "should return a map"); + }); + + it("map includes the source when option is set", function() { + var result = minify({ code: "var a = 1;" }, { + sourceMaps: true, + sourceMapsContent: true + }); + + assert.ok( + JSON.parse(result.map).sourcesContent, + "should include sourcesContent property" + ); + }); + + it("sets input sourcemap", function() { + var map = { + "version": 3, + "sources": ["index.js"], + "names": [], + "mappings": ";;AAAA,IAAI,MAAM,SAAN,GAAM;AAAA,SAAK,SAAS,CAAd;AAAA,CAAV;AACA,QAAQ,GAAR,CAAY,IAAI,KAAJ,CAAZ", + "file": "bundle.js", + "sourcesContent": ["let foo = x => \"foo \" + x;\nconsole.log(foo(\"bar\"));"] + }; + + var transpiled = '"use strict";\n\n' + + 'var foo = function foo(x) {\n return "foo " + x;\n};\n' + + 'console.log(foo("bar"));\n\n' + + '//# sourceMappingURL=bundle.js.map'; + + var result = minify({ code: transpiled, map: map }, { sourceMaps: true }); + + assert.equal( + JSON.parse(result.map).file, + "index.js", + "minify should compose the existing map" + ); + }); +}); diff --git a/test/test.js b/test/test.js index a27db9ab..501ea024 100644 --- a/test/test.js +++ b/test/test.js @@ -15,6 +15,7 @@ require("./cli/cmd_live_test"); require("./get_es_module_imports_test"); require("./cli/make_build_options_test"); require("./slim_build_conditionals_test"); +require("./minify_js_test"); // Integration tests require("./test_cli");