aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/mocha/minify-file-map.js40
-rw-r--r--tools/node.js17
2 files changed, 52 insertions, 5 deletions
diff --git a/test/mocha/minify-file-map.js b/test/mocha/minify-file-map.js
new file mode 100644
index 00000000..aa42d25a
--- /dev/null
+++ b/test/mocha/minify-file-map.js
@@ -0,0 +1,40 @@
+var Uglify = require('../../');
+var assert = require("assert");
+
+describe("Input file as map", function() {
+ it("Should accept object", function() {
+ var jsMap = {
+ '/scripts/foo.js': 'var foo = {"x": 1, y: 2, \'z\': 3};'
+ };
+ var result = Uglify.minify(jsMap, {fromString: true, outSourceMap: true});
+
+ var map = JSON.parse(result.map);
+ assert.strictEqual(result.code, 'var foo={x:1,y:2,z:3};');
+ assert.deepEqual(map.sources, ['/scripts/foo.js']);
+ });
+
+ it("Should accept array of objects and strings", function() {
+ var jsSeq = [
+ {'/scripts/foo.js': 'var foo = {"x": 1, y: 2, \'z\': 3};'},
+ 'var bar = 15;'
+ ];
+ var result = Uglify.minify(jsSeq, {fromString: true, outSourceMap: true});
+
+ var map = JSON.parse(result.map);
+ assert.strictEqual(result.code, 'var foo={x:1,y:2,z:3},bar=15;');
+ assert.strictEqual(map.sources[0], '/scripts/foo.js');
+ });
+
+ it("Should correctly include source", function() {
+ var jsSeq = [
+ {'/scripts/foo.js': 'var foo = {"x": 1, y: 2, \'z\': 3};'},
+ 'var bar = 15;'
+ ];
+ var result = Uglify.minify(jsSeq, {fromString: true, outSourceMap: true, sourceMapIncludeSources: true});
+
+ var map = JSON.parse(result.map);
+ assert.strictEqual(result.code, 'var foo={x:1,y:2,z:3},bar=15;');
+ assert.deepEqual(map.sourcesContent, ['var foo = {"x": 1, y: 2, \'z\': 3};', 'var bar = 15;']);
+ });
+
+});
diff --git a/tools/node.js b/tools/node.js
index 39976371..2ee7df21 100644
--- a/tools/node.js
+++ b/tools/node.js
@@ -61,18 +61,25 @@ exports.minify = function(files, options) {
if (options.spidermonkey) {
toplevel = UglifyJS.AST_Node.from_mozilla_ast(files);
} else {
- if (typeof files == "string")
- files = [ files ];
- files.forEach(function(file, i){
+ function addFile(file, fileUrl) {
var code = options.fromString
? file
: fs.readFileSync(file, "utf8");
- sourcesContent[file] = code;
+ sourcesContent[fileUrl] = code;
toplevel = UglifyJS.parse(code, {
- filename: options.fromString ? i : file,
+ filename: fileUrl,
toplevel: toplevel,
bare_returns: options.parse ? options.parse.bare_returns : undefined
});
+ }
+ [].concat(files).forEach(function (files, i) {
+ if (typeof files === 'string') {
+ addFile(files, options.fromString ? i : files);
+ } else {
+ for (var fileUrl in files) {
+ addFile(files[fileUrl], fileUrl);
+ }
+ }
});
}
if (options.wrap) {