Skip to content

Commit

Permalink
Improve minified code sourcemaps
Browse files Browse the repository at this point in the history
Closes #863
  • Loading branch information
m-mujica committed Oct 1, 2017
1 parent 0abee93 commit 1c2fa5d
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 10 deletions.
27 changes: 17 additions & 10 deletions lib/build_types/minify_js.js
Expand Up @@ -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;
}
45 changes: 45 additions & 0 deletions 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"
);
});
});
1 change: 1 addition & 0 deletions test/test.js
Expand Up @@ -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");
Expand Down

0 comments on commit 1c2fa5d

Please sign in to comment.