aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/uglifyjs221
-rw-r--r--lib/output.js1
-rw-r--r--lib/sourcemap.js32
3 files changed, 36 insertions, 18 deletions
diff --git a/bin/uglifyjs2 b/bin/uglifyjs2
index 0ed873a9..aa302044 100755
--- a/bin/uglifyjs2
+++ b/bin/uglifyjs2
@@ -12,6 +12,7 @@ Use a single dash to read input from the standard input.\
")
.describe("source-map", "Specify an output file where to generate source map.")
.describe("source-map-root", "The path to the original source to be included in the source map.")
+ .describe("in-source-map", "Input source map, useful if you're compressing JS that was generated from some other original code.")
.describe("p", "Skip prefix for original filenames that appear in source maps. For example -p 3 will drop 3 directories from file names and ensure they are relative paths.")
.describe("o", "Output file (default STDOUT)")
.describe("b", "Beautify output")
@@ -60,12 +61,27 @@ if (ARGS.c && ARGS.c !== true) {
var a = opt.split(/\s*=\s*/);
COMPRESSOR_OPTIONS[a[0]] = new Function("return(" + a[1] + ")")();
});
+ normalize(COMPRESSOR_OPTIONS);
}
var files = ARGS._.slice();
-if (files.length == 0)
+var ORIG_MAP = ARGS.in_source_map;
+
+if (ORIG_MAP) {
+ ORIG_MAP = JSON.parse(fs.readFileSync(ORIG_MAP));
+ if (files.length == 0) {
+ sys.error("INFO: Using file from the input source map: " + ORIG_MAP.file);
+ files = [ ORIG_MAP.file ];
+ }
+ if (ARGS.source_map_root == null) {
+ ARGS.source_map_root = ORIG_MAP.sourceRoot;
+ }
+}
+
+if (files.length == 0) {
files = [ "-" ];
+}
if (files.indexOf("-") >= 0 && ARGS.source_map) {
sys.error("ERROR: Source map doesn't work with input from STDIN");
@@ -83,7 +99,8 @@ var TOPLEVEL = null;
var SOURCE_MAP = ARGS.source_map ? UglifyJS.SourceMap({
file: OUTPUT_FILE,
- root: ARGS.source_map_root
+ root: ARGS.source_map_root,
+ orig: ORIG_MAP,
}) : null;
var output = UglifyJS.OutputStream({
diff --git a/lib/output.js b/lib/output.js
index a7a580c9..69401d0d 100644
--- a/lib/output.js
+++ b/lib/output.js
@@ -55,7 +55,6 @@ function OutputStream(options) {
ie_proof : true,
beautify : true,
source_map : null,
- in_source_map : null
});
var indentation = 0;
diff --git a/lib/sourcemap.js b/lib/sourcemap.js
index 6cbce5e1..da4ab4fe 100644
--- a/lib/sourcemap.js
+++ b/lib/sourcemap.js
@@ -45,16 +45,30 @@
function SourceMap(options) {
options = defaults(options, {
file : null,
- root : null
+ root : null,
+ orig : null,
});
var generator = new MOZ_SourceMap.SourceMapGenerator({
file : options.file,
sourceRoot : options.root
});
+ var orig_map = options.orig && new MOZ_SourceMap.SourceMapConsumer(options.orig);
function add(source, gen_line, gen_col, orig_line, orig_col, name) {
+ orig_line++;
+ gen_line++;
+ if (orig_map) {
+ var info = orig_map.originalPositionFor({
+ line: orig_line,
+ column: orig_col
+ });
+ source = info.source;
+ orig_line = info.line;
+ orig_col = info.column;
+ name = info.name;
+ }
generator.addMapping({
- generated : { line: gen_line + 1, column: gen_col },
- original : { line: orig_line + 1, column: orig_col },
+ generated : { line: gen_line, column: gen_col },
+ original : { line: orig_line, column: orig_col },
source : source,
name : name
});
@@ -65,15 +79,3 @@ function SourceMap(options) {
toString : function() { return generator.toString() }
};
};
-
-function SourceMapInput(map) {
- map = new MOZ_SourceMap.SourceMapConsumer(map);
- return {
- info: function(line, col) {
- return map.originalPositionFor({
- line: line,
- column: col
- });
- }
- };
-};