From 4da6b564db29ffb7e9d66588edf09b1965fc43cd Mon Sep 17 00:00:00 2001 From: alexlamsl Date: Sat, 15 Apr 2017 19:01:53 +0800 Subject: [PATCH] allow literal string as souce map input on CLI fixes #123 --- bin/uglifyjs | 8 +++++--- test/mocha/cli.js | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/bin/uglifyjs b/bin/uglifyjs index ba14f21a..d86a43a3 100755 --- a/bin/uglifyjs +++ b/bin/uglifyjs @@ -111,7 +111,7 @@ if (program.parse) { var convert_path = function(name) { return name; }; -if (program.sourceMap && "base" in program.sourceMap) { +if (typeof program.sourceMap == "object" && "base" in program.sourceMap) { convert_path = function() { var base = program.sourceMap.base; delete options.sourceMap.base; @@ -291,7 +291,9 @@ function parse_js(flag, constants) { if (!(node instanceof UglifyJS.AST_Sequence)) throw node; function to_string(value) { - return value instanceof UglifyJS.AST_Constant ? value.getValue() : value.print_to_string(); + return value instanceof UglifyJS.AST_Constant ? value.getValue() : value.print_to_string({ + quote_keys: true + }); } })); } catch(ex) { @@ -308,7 +310,7 @@ function parse_source_map() { var settings = parse(value, options); if (!hasContent && settings.content && settings.content != "inline") { console.error("INFO: Using input source map:", settings.content); - settings.content = read_file(settings.content); + settings.content = read_file(settings.content, settings.content); } return settings; } diff --git a/test/mocha/cli.js b/test/mocha/cli.js index 2f3fc0fa..7162c816 100644 --- a/test/mocha/cli.js +++ b/test/mocha/cli.js @@ -2,6 +2,10 @@ var assert = require("assert"); var exec = require("child_process").exec; var readFileSync = require("fs").readFileSync; +function read(path) { + return readFileSync(path, "utf8"); +} + describe("bin/uglifyjs", function () { var uglifyjscmd = '"' + process.argv[0] + '" bin/uglifyjs'; it("should produce a functional build when using --self", function (done) { @@ -137,7 +141,7 @@ describe("bin/uglifyjs", function () { exec(command, function (err, stdout) { if (err) throw err; - assert.strictEqual(stdout, readFileSync("test/input/issue-1482/default.js", "utf8")); + assert.strictEqual(stdout, read("test/input/issue-1482/default.js")); done(); }); }); @@ -147,7 +151,7 @@ describe("bin/uglifyjs", function () { exec(command, function (err, stdout) { if (err) throw err; - assert.strictEqual(stdout, readFileSync("test/input/issue-1482/bracketize.js", "utf8")); + assert.strictEqual(stdout, read("test/input/issue-1482/bracketize.js")); done(); }); }); @@ -157,7 +161,7 @@ describe("bin/uglifyjs", function () { exec(command, function (err, stdout) { if (err) throw err; - assert.strictEqual(stdout, readFileSync("test/input/issue-520/output.js", "utf8")); + assert.strictEqual(stdout, read("test/input/issue-520/output.js")); done(); }); }); @@ -300,4 +304,29 @@ describe("bin/uglifyjs", function () { done(); }); }); + it("Should handle literal string as source map input", function(done) { + var command = [ + uglifyjscmd, + "test/input/issue-1236/simple.js", + "--source-map", + 'content="' + read_map() + '",url=inline' + ].join(" "); + + exec(command, function (err, stdout) { + if (err) throw err; + + assert.strictEqual(stdout, [ + '"use strict";var foo=function foo(x){return"foo "+x};console.log(foo("bar"));', + "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImZvbyIsIngiLCJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiWUFBQSxJQUFJQSxLQUFNLFFBQU5BLEtBQU1DLEdBQUEsTUFBSyxPQUFTQSxFQUN4QkMsU0FBUUMsSUFBSUgsSUFBSSJ9", + "" + ].join("\n")); + done(); + }); + + function read_map() { + var map = JSON.parse(read("./test/input/issue-1236/simple.js.map")); + delete map.sourcesContent; + return JSON.stringify(map).replace(/"/g, '\\"'); + } + }); });