Allow input files to be map (url->filename)

This commit is contained in:
Geraint
2016-06-27 12:01:21 +01:00
committed by Richard van Velzen
parent a97690fc72
commit 85924bb32e
2 changed files with 52 additions and 5 deletions

View File

@@ -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;']);
});
});

View File

@@ -61,18 +61,25 @@ exports.minify = function(files, options) {
if (options.spidermonkey) { if (options.spidermonkey) {
toplevel = UglifyJS.AST_Node.from_mozilla_ast(files); toplevel = UglifyJS.AST_Node.from_mozilla_ast(files);
} else { } else {
if (typeof files == "string") function addFile(file, fileUrl) {
files = [ files ];
files.forEach(function(file, i){
var code = options.fromString var code = options.fromString
? file ? file
: fs.readFileSync(file, "utf8"); : fs.readFileSync(file, "utf8");
sourcesContent[file] = code; sourcesContent[fileUrl] = code;
toplevel = UglifyJS.parse(code, { toplevel = UglifyJS.parse(code, {
filename: options.fromString ? i : file, filename: fileUrl,
toplevel: toplevel, toplevel: toplevel,
bare_returns: options.parse ? options.parse.bare_returns : undefined 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) { if (options.wrap) {