")
.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")
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");
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({
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
});
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
- });
- }
- };
-};