From 2c3c4ec32381bad3f21bf2778470d58abba7b82a Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Mon, 8 Aug 2022 19:02:43 +0100 Subject: [PATCH] improve source mapping accuracy (#5608) --- lib/compress.js | 272 ++++++++++++++------------------ lib/output.js | 51 +++--- test/input/issue-3040/expect.js | 2 +- test/input/issue-3294/output.js | 2 +- test/input/issue-505/output.js | 2 +- test/input/issue-520/output.js | 2 +- test/mocha/cli.js | 10 +- test/mocha/sourcemaps.js | 32 ++-- 8 files changed, 175 insertions(+), 198 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index f28e4daa..05554ebb 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -293,7 +293,7 @@ Compressor.prototype.compress = function(node) { function export_symbol(sym) { if (!(sym instanceof AST_SymbolDeclaration)) return; - var node = make_node(AST_SymbolExport, sym, sym); + var node = make_node(AST_SymbolExport, sym); node.alias = make_node(AST_String, node, { value: node.name }); props.push(node); } @@ -304,7 +304,7 @@ Compressor.prototype.compress = function(node) { var tt = new TreeTransformer(function(node) { if (insert) { if (node instanceof AST_Directive) node = make_node(AST_SimpleStatement, node, { - body: make_node(AST_String, node, node), + body: make_node(AST_String, node), }); if (node instanceof AST_SimpleStatement) { return transform ? transform(node) : make_node(AST_Return, node, { value: node.body }); @@ -312,7 +312,7 @@ Compressor.prototype.compress = function(node) { } else if (node instanceof AST_Return) { if (transform) return transform(node); var value = node.value; - if (value instanceof AST_String) return make_node(AST_Directive, node, value); + if (value instanceof AST_String) return make_node(AST_Directive, value); return make_node(AST_SimpleStatement, node, { body: value || make_node(AST_UnaryPrefix, node, { operator: "void", @@ -353,7 +353,7 @@ Compressor.prototype.compress = function(node) { }); case 1: var stat = self.body[0]; - if (stat instanceof AST_Directive) return make_node(AST_String, self, stat); + if (stat instanceof AST_Directive) return make_node(AST_String, stat); if (stat instanceof AST_SimpleStatement) return stat.body; default: return make_node(AST_Call, self, { @@ -693,7 +693,7 @@ Compressor.prototype.compress = function(node) { } function make_ref(ref, fixed) { - var node = make_node(AST_SymbolRef, ref, ref); + var node = make_node(AST_SymbolRef, ref); node.fixed = fixed || make_node(AST_Undefined, ref); return node; } @@ -839,7 +839,7 @@ Compressor.prototype.compress = function(node) { for (var i = 0, len = node.elements.length; i < len; i++) { if (value.elements[i] instanceof AST_Spread) return node; } - if (!fixed_node) fixed_node = make_node(AST_Array, node); + if (!fixed_node) fixed_node = make_node(AST_Array, node, {}); fixed_node.elements = value.elements.slice(len); return fixed_node; }); @@ -924,7 +924,7 @@ Compressor.prototype.compress = function(node) { var rest = fn.rest, fixed_node; if (rest) scan_declaration(tw, compressor, rest, compressor.option("rests") && function() { if (fn.rest !== rest) return rest; - if (!fixed_node) fixed_node = make_node(AST_Array, fn); + if (!fixed_node) fixed_node = make_node(AST_Array, fn, {}); fixed_node.elements = iife.args.slice(fn.argnames.length); return fixed_node; }, visit); @@ -1622,7 +1622,7 @@ Compressor.prototype.compress = function(node) { AST_DefaultValue.DEFMETHOD("convert_symbol", convert_destructured); AST_Destructured.DEFMETHOD("convert_symbol", convert_destructured); function convert_symbol(type, process) { - var node = make_node(type, this, this); + var node = make_node(type, this); return process(node, this) || node; } AST_SymbolDeclaration.DEFMETHOD("convert_symbol", convert_symbol); @@ -1730,19 +1730,18 @@ Compressor.prototype.compress = function(node) { } function make_node(ctor, orig, props) { - if (!props) props = {}; - if (orig) { - if (!props.start) props.start = orig.start; - if (!props.end) props.end = orig.end; + if (props) { + props.start = orig.start; + props.end = orig.end; + } else { + props = orig; } return new ctor(props); } function make_sequence(orig, expressions) { if (expressions.length == 1) return expressions[0]; - return make_node(AST_Sequence, orig, { - expressions: expressions.reduce(merge_sequence, []) - }); + return make_node(AST_Sequence, orig, { expressions: expressions.reduce(merge_sequence, []) }); } function make_node_from_constant(val, orig) { @@ -1754,7 +1753,7 @@ Compressor.prototype.compress = function(node) { if (isFinite(val)) { return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, { operator: "-", - expression: make_node(AST_Number, orig, { value: -val }) + expression: make_node(AST_Number, orig, { value: -val }), }) : make_node(AST_Number, orig, { value: val }); } return val < 0 ? make_node(AST_UnaryPrefix, orig, { @@ -1772,9 +1771,7 @@ Compressor.prototype.compress = function(node) { if (val instanceof RegExp) { return make_node(AST_RegExp, orig, { value: val }); } - throw new Error(string_template("Can't handle constant of type: {type}", { - type: typeof val - })); + throw new Error(string_template("Can't handle constant of type: {type}", { type: typeof val })); } } @@ -3104,10 +3101,10 @@ Compressor.prototype.compress = function(node) { }).length); if (declared > 1 && !(lhs instanceof AST_SymbolFunarg)) { mangleable_var(expr.value); - return make_node(AST_SymbolRef, lhs, lhs); + return make_node(AST_SymbolRef, lhs); } if (mangleable_var(expr.value) || remaining == 1 && !compressor.exposed(def)) { - return make_node(AST_SymbolRef, lhs, lhs); + return make_node(AST_SymbolRef, lhs); } return; } @@ -3977,7 +3974,7 @@ Compressor.prototype.compress = function(node) { decls.push(make_node(AST_If, stat, { condition: stat.condition, body: body || make_node(AST_EmptyStatement, stat.body), - alternative: alt + alternative: alt, })); decls.unshift(n, 1); [].splice.apply(statements, decls); @@ -4090,10 +4087,10 @@ Compressor.prototype.compress = function(node) { if (def.scope !== scope) break; if (def.orig.length > def.eliminated + 1) break; if (def.orig[0].TYPE != "SymbolVar") break; - var name = make_node(AST_SymbolVar, lhs, lhs); + var name = make_node(AST_SymbolVar, lhs); definitions.push(make_node(AST_VarDef, expr, { name: name, - value: expr.right + value: expr.right, })); def.orig.push(name); def.replaced++; @@ -4788,12 +4785,10 @@ Compressor.prototype.compress = function(node) { for (var key in value) if (HOP(value, key)) { props.push(make_node(AST_ObjectKeyVal, orig, { key: key, - value: to_node(value[key], orig) + value: to_node(value[key], orig), })); } - return make_node(AST_Object, orig, { - properties: props - }); + return make_node(AST_Object, orig, { properties: props }); } return make_node_from_constant(value, orig); } @@ -4872,9 +4867,7 @@ Compressor.prototype.compress = function(node) { } function arrow_first_statement() { - if (this.value) return make_node(AST_Return, this.value, { - value: this.value - }); + if (this.value) return make_node(AST_Return, this.value, { value: this.value }); return skip_directives(this.body); } AST_Arrow.DEFMETHOD("first_statement", arrow_first_statement); @@ -6729,8 +6722,8 @@ Compressor.prototype.compress = function(node) { } function to_class_expr(defcl, drop_name) { - var cl = make_node(AST_ClassExpression, defcl, defcl); - if (cl.name) cl.name = drop_name ? null : make_node(AST_SymbolClass, cl.name, cl.name); + var cl = make_node(AST_ClassExpression, defcl); + if (cl.name) cl.name = drop_name ? null : make_node(AST_SymbolClass, cl.name); return cl; } @@ -6750,8 +6743,8 @@ Compressor.prototype.compress = function(node) { ctor = AST_GeneratorFunction; break; } - var fn = make_node(ctor, defun, defun); - fn.name = drop_name ? null : make_node(AST_SymbolLambda, defun.name, defun.name); + var fn = make_node(ctor, defun); + fn.name = drop_name ? null : make_node(AST_SymbolLambda, defun.name); return fn; } @@ -7344,8 +7337,8 @@ Compressor.prototype.compress = function(node) { ctor = AST_GeneratorDefun; break; } - var defun = make_node(ctor, def, fn); - defun.name = make_node(AST_SymbolDefun, def.name, def.name); + var defun = make_node(ctor, fn); + defun.name = make_node(AST_SymbolDefun, def.name); var name_def = def.name.scope.resolve().def_function(defun.name); if (old_def) old_def.forEach(function(node) { node.name = name_def.name; @@ -7465,7 +7458,7 @@ Compressor.prototype.compress = function(node) { [].unshift.apply(side_effects, tail.map(function(def) { AST_Node.info("Dropping duplicated definition of variable {name} [{start}]", def.name); var sym = def.name.definition(); - var ref = make_node(AST_SymbolRef, def.name, def.name); + var ref = make_node(AST_SymbolRef, def.name); sym.references.push(ref); var assign = make_node(AST_Assign, def, { operator: "=", @@ -7571,9 +7564,7 @@ Compressor.prototype.compress = function(node) { var value = node.object.drop_side_effect_free(compressor); if (value) { AST_Node.warn("Side effects in object of for-in loop [{start}]", value); - body.push(make_node(AST_SimpleStatement, node, { - body: value - })); + body.push(make_node(AST_SimpleStatement, node, { body: value })); } if (node.init instanceof AST_Definitions && def.orig[0] instanceof AST_SymbolCatch) { body.push(node.init); @@ -7625,9 +7616,7 @@ Compressor.prototype.compress = function(node) { case 1: return body[0]; default: - return in_list ? List.splice(body) : make_node(AST_BlockStatement, orig, { - body: body - }); + return in_list ? List.splice(body) : make_node(AST_BlockStatement, orig, { body: body }); } } @@ -8179,7 +8168,7 @@ Compressor.prototype.compress = function(node) { if (p instanceof AST_ForEnumeration && p.init === node) { if (seq) return seq; var sym = node.definitions[0].name; - return make_node(AST_SymbolRef, sym, sym); + return make_node(AST_SymbolRef, sym); } if (p instanceof AST_For && p.init === node) return seq; if (!seq) return in_list ? List.skip : make_node(AST_EmptyStatement, node); @@ -8662,7 +8651,7 @@ Compressor.prototype.compress = function(node) { ctor = AST_GeneratorFunction; break; } - return make_node(ctor, exp, exp); + return make_node(ctor, exp); } } return changed && exp.clone(); @@ -8800,7 +8789,7 @@ Compressor.prototype.compress = function(node) { } if (compressor.option("yields") && is_generator(exp)) { var call = self.clone(); - call.expression = make_node(AST_Function, exp, exp); + call.expression = make_node(AST_Function, exp); call.expression.body = []; var opt = call.transform(compressor); if (opt !== call) return opt.drop_side_effect_free(compressor, first_in_statement); @@ -8824,7 +8813,7 @@ Compressor.prototype.compress = function(node) { return exprs && make_sequence(self, exprs.map(convert_spread)); } if (!fn.contains_this()) { - self = make_node(AST_Call, self, self); + self = make_node(AST_Call, self); self.expression = self.expression.clone(); self.args = self.args.slice(); } @@ -8902,7 +8891,7 @@ Compressor.prototype.compress = function(node) { function make_value() { return make_sequence(self, values.map(function(node) { if (!(node instanceof AST_ClassInit)) return node; - var fn = make_node(AST_Arrow, node, node.value); + var fn = make_node(AST_Arrow, node.value); fn.argnames = []; return make_node(AST_Call, node, { expression: fn, @@ -9075,7 +9064,7 @@ Compressor.prototype.compress = function(node) { }); OPT(AST_While, function(self, compressor) { - return compressor.option("loops") ? make_node(AST_For, self, self).optimize(compressor) : self; + return compressor.option("loops") ? make_node(AST_For, self).optimize(compressor) : self; }); function has_loop_control(loop, parent, type) { @@ -9101,19 +9090,15 @@ Compressor.prototype.compress = function(node) { body: make_node(AST_BlockStatement, self.body, { body: [ self.body, - make_node(AST_SimpleStatement, self.condition, { - body: self.condition - }), - ] - }) + make_node(AST_SimpleStatement, self.condition, { body: self.condition }), + ], + }), }).optimize(compressor); if (!has_loop_control(self, compressor.parent())) return make_node(AST_BlockStatement, self.body, { body: [ self.body, - make_node(AST_SimpleStatement, self.condition, { - body: self.condition - }), - ] + make_node(AST_SimpleStatement, self.condition, { body: self.condition }), + ], }).optimize(compressor); } if (self.body instanceof AST_BlockStatement && !has_loop_control(self, compressor.parent(), AST_Continue)) { @@ -9144,13 +9129,13 @@ Compressor.prototype.compress = function(node) { } self.body = trim_block(self.body, compressor.parent()); } - if (self.body instanceof AST_EmptyStatement) return make_node(AST_For, self, self).optimize(compressor); + if (self.body instanceof AST_EmptyStatement) return make_node(AST_For, self).optimize(compressor); if (self.body instanceof AST_SimpleStatement) return make_node(AST_For, self, { condition: make_sequence(self.condition, [ self.body.body, - self.condition + self.condition, ]), - body: make_node(AST_EmptyStatement, self) + body: make_node(AST_EmptyStatement, self), }).optimize(compressor); return self; @@ -9177,28 +9162,22 @@ Compressor.prototype.compress = function(node) { if (is_statement(self.init)) { body.push(self.init); } else if (self.init) { - body.push(make_node(AST_SimpleStatement, self.init, { - body: self.init - })); + body.push(make_node(AST_SimpleStatement, self.init, { body: self.init })); } var retain = external_target(first) || first instanceof AST_Exit; if (self.condition && retain) { body.push(make_node(AST_If, self, { condition: self.condition, body: first, - alternative: null + alternative: null, })); } else if (self.condition) { - body.push(make_node(AST_SimpleStatement, self.condition, { - body: self.condition - })); + body.push(make_node(AST_SimpleStatement, self.condition, { body: self.condition })); } else if (retain) { body.push(first); } extract_declarations_from_unreachable_code(compressor, self.body, body); - return make_node(AST_BlockStatement, self, { - body: body - }); + return make_node(AST_BlockStatement, self, { body: body }); } if (first instanceof AST_If) { var ab = first_statement(first.body); @@ -9248,9 +9227,7 @@ Compressor.prototype.compress = function(node) { self.body.body = rest.concat(self.body.body.slice(1)); self.body = self.body.transform(compressor); } else { - self.body = make_node(AST_BlockStatement, self.body, { - body: rest - }).transform(compressor); + self.body = make_node(AST_BlockStatement, self.body, { body: rest }).transform(compressor); } return if_break_in_loop(self, compressor); } @@ -9834,7 +9811,7 @@ Compressor.prototype.compress = function(node) { if (exp.has_side_effects(compressor)) { exact_match = branch; } else { - default_branch = branch = make_node(AST_Default, branch, branch); + default_branch = branch = make_node(AST_Default, branch); } while (++i < len) eliminate_branch(self.body[i], branch); } @@ -9848,7 +9825,7 @@ Compressor.prototype.compress = function(node) { if (!is_break(stat, compressor)) break; statements = statements.concat(stat); case 0: - var prev_block = make_node(AST_BlockStatement, prev, prev); + var prev_block = make_node(AST_BlockStatement, prev); var next_block = make_node(AST_BlockStatement, branch, { body: statements }); if (prev_block.equals(next_block)) prev.body = []; } @@ -9927,7 +9904,7 @@ Compressor.prototype.compress = function(node) { var exclusive = statements.length && is_break(statements[statements.length - 1], compressor); if (exclusive) statements.pop(); if (!all(statements, no_break)) break; - var alternative = body[1].body.length && make_node(AST_BlockStatement, body[1], body[1]); + var alternative = body[1].body.length && make_node(AST_BlockStatement, body[1]); var node = make_node(AST_If, self, { condition: make_node(AST_Binary, self, body[0] === default_branch ? { operator: "!==", @@ -9992,14 +9969,14 @@ Compressor.prototype.compress = function(node) { }); }); } - body.unshift(make_node(AST_BlockStatement, self, self).optimize(compressor)); + body.unshift(make_node(AST_BlockStatement, self).optimize(compressor)); if (self.bfinally) { - body.push(make_node(AST_BlockStatement, self.bfinally, self.bfinally).optimize(compressor)); + body.push(make_node(AST_BlockStatement, self.bfinally).optimize(compressor)); } return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor); } if (self.bfinally && has_declarations_only(self.bfinally)) { - var body = make_node(AST_BlockStatement, self.bfinally, self.bfinally).optimize(compressor); + var body = make_node(AST_BlockStatement, self.bfinally).optimize(compressor); body = self.body.concat(body); if (!self.bcatch) return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor); self.body = body; @@ -10017,7 +9994,7 @@ Compressor.prototype.compress = function(node) { defn.name.match_symbol(function(node) { if (node instanceof AST_SymbolDeclaration) defns.push(make_node(AST_VarDef, node, { name: node, - value: make_value(compressor, node) + value: make_value(compressor, node), })); }, true); }); @@ -10037,7 +10014,7 @@ Compressor.prototype.compress = function(node) { var value = defn.value; if (value) { if (value instanceof AST_Sequence) value = value.clone(); - var name = make_node(AST_SymbolRef, defn.name, defn.name); + var name = make_node(AST_SymbolRef, defn.name); var assign = make_node(AST_Assign, defn, { operator: "=", left: name, @@ -10103,7 +10080,7 @@ Compressor.prototype.compress = function(node) { }), value: defn.value, }); - }) + }), }); } @@ -10410,9 +10387,7 @@ Compressor.prototype.compress = function(node) { break EXIT; } else { if (consts.length > 0) { - elements.push(make_node(AST_String, self, { - value: consts.join(separator), - })); + elements.push(make_node(AST_String, self, { value: consts.join(separator) })); consts.length = 0; } elements.push(el); @@ -10497,7 +10472,7 @@ Compressor.prototype.compress = function(node) { func = func.fixed_value(); } if (func instanceof AST_Lambda && !func.contains_this()) { - return (self.args.length ? make_sequence(this, [ + return (self.args.length ? make_sequence(self, [ self.args[0], make_node(AST_Call, self, { expression: exp.expression, @@ -10525,7 +10500,7 @@ Compressor.prototype.compress = function(node) { // new Function() ---> function(){} if (self.args.length == 0) return make_node(AST_Function, self, { argnames: [], - body: [] + body: [], }).init_vars(exp.scope); if (all(self.args, function(x) { return x instanceof AST_String; @@ -10563,7 +10538,7 @@ Compressor.prototype.compress = function(node) { }), make_node(AST_String, self.args[self.args.length - 1], { value: code.get().replace(/^\{|\}$/g, "") - }) + }), ]; return self; } catch (ex) { @@ -10992,7 +10967,7 @@ Compressor.prototype.compress = function(node) { scope.variables.set(name.name, def); scope.enclosed.push(def); if (!value) return; - var sym = make_node(AST_SymbolRef, name, name); + var sym = make_node(AST_SymbolRef, name); def.assignments++; def.references.push(sym); expressions.push(make_node(AST_Assign, self, { @@ -11021,7 +10996,7 @@ Compressor.prototype.compress = function(node) { if (name.unused || scope.var_names().has(name.name)) { if (value) expressions.push(value); } else { - var symbol = make_node(AST_SymbolVar, name, name); + var symbol = make_node(AST_SymbolVar, name); var def = name.definition(); def.orig.push(symbol); def.eliminated++; @@ -11044,7 +11019,7 @@ Compressor.prototype.compress = function(node) { if (node.name.unused !== undefined) { expressions.push(node.value); } else { - var sym = make_node(AST_SymbolRef, node.name, node.name); + var sym = make_node(AST_SymbolRef, node.name); node.name.definition().references.push(sym); expressions.push(make_node(AST_Assign, node, { operator: "=", @@ -11073,7 +11048,7 @@ Compressor.prototype.compress = function(node) { var def = name.definition(); def.assignments++; def.references.push(ref); - var symbol = make_node(AST_SymbolVar, name, name); + var symbol = make_node(AST_SymbolVar, name); def.orig.push(symbol); def.eliminated++; append_var(decls, expressions, symbol); @@ -11085,7 +11060,7 @@ Compressor.prototype.compress = function(node) { var decl_var = [], expr_fn = [], expr_var = [], expr_loop = [], exprs = []; fn.body.filter(in_loop ? function(stat) { if (!(stat instanceof AST_LambdaDefinition)) return true; - var name = make_node(AST_SymbolVar, stat.name, flatten_var(stat.name)); + var name = make_node(AST_SymbolVar, flatten_var(stat.name)); var def = name.definition(); def.fixed = false; def.orig.push(name); @@ -11159,7 +11134,7 @@ Compressor.prototype.compress = function(node) { case "Function": case "Object": case "RegExp": - return make_node(AST_Call, self, self).transform(compressor); + return make_node(AST_Call, self).transform(compressor); } } if (compressor.option("sequences")) { @@ -11186,11 +11161,11 @@ Compressor.prototype.compress = function(node) { return node.operator == "&&" ? make_node(AST_Conditional, node, { condition: node.left, consequent: node.right.right, - alternative: value + alternative: value, }) : make_node(AST_Conditional, node, { condition: node.left, consequent: value, - alternative: node.right.right + alternative: node.right.right, }); function safe_from_assignment(node) { @@ -11237,8 +11212,8 @@ Compressor.prototype.compress = function(node) { while (end > 0 && is_undefined(expressions[end], compressor)) end--; if (end < expressions.length - 1) { expressions[end] = make_node(AST_UnaryPrefix, self, { - operator : "void", - expression : expressions[end] + operator: "void", + expression: expressions[end], }); expressions.length = end + 1; } @@ -11522,7 +11497,7 @@ Compressor.prototype.compress = function(node) { left: self.left, right: rhs.left, start: self.left.start, - end: rhs.left.end + end: rhs.left.end, }); self.right = rhs.right; if (compressor) { @@ -11573,7 +11548,7 @@ Compressor.prototype.compress = function(node) { AST_Node.warn("Expression always defined [{start}]", self); return make_sequence(self, [ self.right, - make_node(self.operator == "===" ? AST_False : AST_True, self) + make_node(self.operator == "===" ? AST_False : AST_True, self), ]).optimize(compressor); } var is_strict_comparison = true; @@ -11665,7 +11640,7 @@ Compressor.prototype.compress = function(node) { if (self.left instanceof AST_String && self.left.value == "" && self.right.is_string(compressor)) { return make_node(AST_UnaryPrefix, self, { operator: "!", - expression: self.right + expression: self.right, }).optimize(compressor); } break; @@ -11963,17 +11938,20 @@ Compressor.prototype.compress = function(node) { && PRECEDENCE[self.left.operator] == PRECEDENCE[self.operator] && self.left.is_number(compressor)) { if (self.left.left instanceof AST_Constant) { - var lhs = make_binary(self.left, self.operator, self.left.left, self.right, self.left.left.start, self.right.end); - self = make_binary(self, self.left.operator, try_evaluate(compressor, lhs), self.left.right); + var lhs = make_binary(self.operator, self.left.left, self.right, { + start: self.left.left.start, + end: self.right.end, + }); + self = make_binary(self.left.operator, try_evaluate(compressor, lhs), self.left.right, self); } else if (self.left.right instanceof AST_Constant) { var op = align(self.left.operator, self.operator); - var rhs = try_evaluate(compressor, make_binary(self.left, op, self.left.right, self.right)); + var rhs = try_evaluate(compressor, make_binary(op, self.left.right, self.right, self.left)); if (rhs.is_constant() && !(self.left.operator == "-" && self.right.value != 0 && +rhs.value == 0 && self.left.left.is_negative_zero())) { - self = make_binary(self, self.left.operator, self.left.left, rhs); + self = make_binary(self.left.operator, self.left.left, rhs, self); } } } @@ -12050,7 +12028,7 @@ Compressor.prototype.compress = function(node) { && self.left.value == 0) { return (self.operator == "==" ? make_node(AST_UnaryPrefix, self, { operator: "!", - expression: self.right + expression: self.right, }) : self.right).optimize(compressor); } var indexLeft = is_indexFn(self.left); @@ -12059,8 +12037,8 @@ Compressor.prototype.compress = function(node) { operator: "!", expression: make_node(AST_UnaryPrefix, self, { operator: "~", - expression: indexLeft ? self.left : self.right - }) + expression: indexLeft ? self.left : self.right, + }), }); switch (self.operator) { case "<": @@ -12069,7 +12047,7 @@ Compressor.prototype.compress = function(node) { case "!=": node = make_node(AST_UnaryPrefix, self, { operator: "!", - expression: node + expression: node, }); break; } @@ -12104,18 +12082,18 @@ Compressor.prototype.compress = function(node) { } } - function make_binary(orig, op, left, right, start, end) { + function make_binary(op, left, right, orig) { if (op == "+") { if (!left.is_boolean(compressor) && !left.is_number(compressor)) { left = make_node(AST_UnaryPrefix, left, { operator: "+", - expression: left + expression: left, }); } if (!right.is_boolean(compressor) && !right.is_number(compressor)) { right = make_node(AST_UnaryPrefix, right, { operator: "+", - expression: right + expression: right, }); } } @@ -12123,8 +12101,6 @@ Compressor.prototype.compress = function(node) { operator: op, left: left, right: right, - start: start, - end: end }); } @@ -12284,7 +12260,7 @@ Compressor.prototype.compress = function(node) { symbol_type = AST_SymbolLambda; } if (!(name instanceof symbol_type)) { - name = make_node(symbol_type, value.name, value.name); + name = make_node(symbol_type, value.name); name.scope = value; value.name = name; lambda_def = value[def_fn_name](name); @@ -12508,9 +12484,9 @@ Compressor.prototype.compress = function(node) { var undef = find_scope(compressor).find_variable("undefined"); if (undef) { var ref = make_node(AST_SymbolRef, self, { - name : "undefined", - scope : undef.scope, - thedef : undef + name: "undefined", + scope: undef.scope, + thedef: undef, }); ref.is_undefined = true; return ref; @@ -12689,7 +12665,7 @@ Compressor.prototype.compress = function(node) { var op = self.operator.slice(0, -1); return make_node(AST_UnaryPrefix, self, { operator: op + op, - expression: self.left + expression: self.left, }); } } @@ -12971,10 +12947,8 @@ Compressor.prototype.compress = function(node) { } var in_bool = compressor.option("booleans") && compressor.in_boolean_context(); if (is_true(consequent)) { - if (is_false(alternative)) { - // c ? true : false ---> !!c - return booleanize(condition); - } + // c ? true : false ---> !!c + if (is_false(alternative)) return booleanize(condition); // c ? true : x ---> !!c || x return make_node(AST_Binary, self, { operator: "||", @@ -12983,10 +12957,8 @@ Compressor.prototype.compress = function(node) { }); } if (is_false(consequent)) { - if (is_true(alternative)) { - // c ? false : true ---> !c - return booleanize(condition.negate(compressor)); - } + // c ? false : true ---> !c + if (is_true(alternative)) return booleanize(condition.negate(compressor)); // c ? false : x ---> !c && x return make_node(AST_Binary, self, { operator: "&&", @@ -12994,22 +12966,18 @@ Compressor.prototype.compress = function(node) { right: alternative, }); } - if (is_true(alternative)) { - // c ? x : true ---> !c || x - return make_node(AST_Binary, self, { - operator: "||", - left: booleanize(condition.negate(compressor)), - right: consequent, - }); - } - if (is_false(alternative)) { - // c ? x : false ---> !!c && x - return make_node(AST_Binary, self, { - operator: "&&", - left: booleanize(condition), - right: consequent, - }); - } + // c ? x : true ---> !c || x + if (is_true(alternative)) return make_node(AST_Binary, self, { + operator: "||", + left: booleanize(condition.negate(compressor)), + right: consequent, + }); + // c ? x : false ---> !!c && x + if (is_false(alternative)) return make_node(AST_Binary, self, { + operator: "&&", + left: booleanize(condition), + right: consequent, + }); if (compressor.option("typeofs")) mark_locally_defined(condition, consequent, alternative); return self; @@ -13018,7 +12986,7 @@ Compressor.prototype.compress = function(node) { // !!expression return make_node(AST_UnaryPrefix, node, { operator: "!", - expression: node.negate(compressor) + expression: node.negate(compressor), }); } @@ -13247,7 +13215,7 @@ Compressor.prototype.compress = function(node) { return node.name === argname.name; }, fn.argnames) === argname) { if (assigned) def.reassigned--; - var sym = make_node(AST_SymbolRef, self, argname); + var sym = make_node(AST_SymbolRef, argname); sym.reference(); argname.unused = undefined; return sym; @@ -13399,7 +13367,7 @@ Compressor.prototype.compress = function(node) { } else { return; } - value = make_node(ctor, value, value); + value = make_node(ctor, value); } values.push(value); } @@ -13612,7 +13580,7 @@ Compressor.prototype.compress = function(node) { } function init_ref(compressor, name) { - var sym = make_node(AST_SymbolRef, name, name); + var sym = make_node(AST_SymbolRef, name); var assign = make_node(AST_Assign, name, { operator: "=", left: sym, @@ -13868,7 +13836,7 @@ Compressor.prototype.compress = function(node) { }); [].push.apply(body, in_loop ? fn.body.filter(function(stat) { if (!(stat instanceof AST_LambdaDefinition)) return true; - var name = make_node(AST_SymbolVar, stat.name, flatten_var(stat.name)); + var name = make_node(AST_SymbolVar, flatten_var(stat.name)); var def = name.definition(); def.fixed = false; def.orig.push(name); @@ -14068,10 +14036,10 @@ Compressor.prototype.compress = function(node) { var fn = call.expression; switch (fn.CTOR) { case AST_AsyncGeneratorFunction: - fn = make_node(AST_AsyncFunction, fn, fn); + fn = make_node(AST_AsyncFunction, fn); break; case AST_GeneratorFunction: - fn = make_node(AST_Function, fn, fn); + fn = make_node(AST_Function, fn); break; default: return; diff --git a/lib/output.js b/lib/output.js index ea63f146..d59bea03 100644 --- a/lib/output.js +++ b/lib/output.js @@ -406,10 +406,11 @@ function OutputStream(options) { print(";"); } - function with_block(cont) { + function with_block(cont, end) { print("{"); newline(); with_indent(cont); + add_mapping(end); indent(); print("}"); } @@ -953,7 +954,7 @@ function OutputStream(options) { if (self.body.length > 0) { output.with_block(function() { display_body(self.body, false, output, allow_directives); - }); + }, self.end); } else print_braced_empty(self, output); } DEFPRINT(AST_BlockStatement, function(output) { @@ -1088,7 +1089,7 @@ function OutputStream(options) { print_entry(i); } output.newline(); - }); + }, self.end); output.space(); output.print("from"); output.space(); @@ -1352,7 +1353,7 @@ function OutputStream(options) { if (i < last && branch.body.length > 0) output.newline(); }); - }); + }, self.end); }); function print_branch_body(self, output) { output.newline(); @@ -1472,14 +1473,12 @@ function OutputStream(options) { output.print("/*@__PURE__*/"); } function print_call_args(self, output) { - if (self.expression instanceof AST_Call || self.expression instanceof AST_Lambda) { - output.add_mapping(self.start); - } output.with_parens(function() { self.args.forEach(function(expr, i) { if (i) output.comma(); expr.print(output); }); + output.add_mapping(self.end); }); } DEFPRINT(AST_Call, function(output) { @@ -1515,10 +1514,11 @@ function OutputStream(options) { expr.print(output); var prop = self.property; if (output.option("ie") && RESERVED_WORDS[prop]) { - output.print(self.optional ? "?.[" : "["); - output.add_mapping(self.end); - output.print_string(prop); - output.print("]"); + if (self.optional) output.print("?."); + output.with_square(function() { + output.add_mapping(self.end); + output.print_string(prop); + }); } else { if (expr instanceof AST_Number && !/[ex.)]/i.test(output.last())) output.print("."); output.print(self.optional ? "?." : "."); @@ -1530,9 +1530,10 @@ function OutputStream(options) { DEFPRINT(AST_Sub, function(output) { var self = this; self.expression.print(output); - output.print(self.optional ? "?.[" : "["); - self.property.print(output); - output.print("]"); + if (self.optional) output.print("?."); + output.with_square(function() { + self.property.print(output); + }); }); DEFPRINT(AST_Spread, function(output) { output.print("..."); @@ -1551,8 +1552,10 @@ function OutputStream(options) { exp.print(output); }); DEFPRINT(AST_UnaryPostfix, function(output) { - this.expression.print(output); - output.print(this.operator); + var self = this; + self.expression.print(output); + output.add_mapping(self.end); + output.print(self.operator); }); DEFPRINT(AST_Binary, function(output) { var self = this; @@ -1645,7 +1648,8 @@ function OutputStream(options) { value.print(output); }); DEFPRINT(AST_DestructuredObject, function(output) { - var props = this.properties, len = props.length, rest = this.rest; + var self = this; + var props = self.properties, len = props.length, rest = self.rest; if (len || rest) output.with_block(function() { props.forEach(function(prop, i) { if (i) { @@ -1665,8 +1669,8 @@ function OutputStream(options) { rest.print(output); } output.newline(); - }); - else print_braced_empty(this, output); + }, self.end); + else print_braced_empty(self, output); }); function print_properties(self, output, no_comma) { var props = self.properties; @@ -1680,7 +1684,7 @@ function OutputStream(options) { prop.print(output); }); output.newline(); - }); + }, self.end); else print_braced_empty(self, output); } DEFPRINT(AST_Object, function(output) { @@ -1890,7 +1894,7 @@ function OutputStream(options) { output.indent(); stmt.print(output); output.newline(); - }); + }, stmt.end); } /* -----[ source map generators ]----- */ @@ -1913,22 +1917,27 @@ function OutputStream(options) { // or if we should add even more. DEFMAP([ AST_Array, + AST_Await, AST_BlockStatement, AST_Catch, AST_Constant, AST_Debugger, AST_Definitions, AST_Destructured, + AST_Directive, AST_Finally, AST_Jump, AST_Lambda, AST_New, AST_Object, + AST_Spread, AST_StatementWithBody, AST_Symbol, AST_Switch, AST_SwitchBranch, AST_Try, + AST_UnaryPrefix, + AST_Yield, ], function(output) { output.add_mapping(this.start); }); diff --git a/test/input/issue-3040/expect.js b/test/input/issue-3040/expect.js index d207fcbe..19b76b3e 100644 --- a/test/input/issue-3040/expect.js +++ b/test/input/issue-3040/expect.js @@ -38,4 +38,4 @@ var _require = require("bar"), foo = _require.foo; var _require2 = require("world"), hello = _require2.hello; foo.x.apply(foo, _toConsumableArray(foo.y(hello.z))); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImlucHV0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtmb299ID0gcmVxdWlyZShcImJhclwiKTtcbmNvbnN0IHtoZWxsb30gPSByZXF1aXJlKFwid29ybGRcIik7XG5cbmZvby54KC4uLmZvby55KGhlbGxvLnopKTtcbiJdLCJuYW1lcyI6WyJyZXF1aXJlIiwiZm9vIiwiaGVsbG8iLCJ4IiwiYXBwbHkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJ5IiwieiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFBY0EsUUFBUSxRQUFmQyxNLFNBQUFBOztBLGdCQUNTRCxRQUFRLFVBQWpCRSxRLFVBQUFBOztBQUVQRCxJQUFJRSxFQUFKQyxNQUFBSCxLQUFHSSxtQkFBTUosSUFBSUssRUFBRUosTUFBTUsifQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImlucHV0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtmb299ID0gcmVxdWlyZShcImJhclwiKTtcbmNvbnN0IHtoZWxsb30gPSByZXF1aXJlKFwid29ybGRcIik7XG5cbmZvby54KC4uLmZvby55KGhlbGxvLnopKTtcbiJdLCJuYW1lcyI6WyJyZXF1aXJlIiwiZm9vIiwiaGVsbG8iLCJ4IiwiYXBwbHkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJ5IiwieiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFBY0EsUUFBUSxLQUFELEdBQWRDLE0sU0FBQUE7O0EsZ0JBQ1NELFFBQVEsT0FBRCxHQUFoQkUsUSxVQUFBQTs7QUFFUEQsSUFBSUUsRUFBSkMsTUFBQUgsS0FBR0ksbUJBQU1KLElBQUlLLEVBQUVKLE1BQU1LLENBQVosQ0FBTixDQUFBIn0= diff --git a/test/input/issue-3294/output.js b/test/input/issue-3294/output.js index 2e847e1b..cac93512 100644 --- a/test/input/issue-3294/output.js +++ b/test/input/issue-3294/output.js @@ -1,2 +1,2 @@ console.log(3); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEZvbyB7IGNvbnN0cnVjdG9yKCl7Y29uc29sZS5sb2coMSsyKTt9IH0gbmV3IEZvbygpO1xuIl0sIm5hbWVzIjpbImNvbnNvbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJBQUEwQkEsUUFBUUMsSUFBSSJ9 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEZvbyB7IGNvbnN0cnVjdG9yKCl7Y29uc29sZS5sb2coMSsyKTt9IH0gbmV3IEZvbygpO1xuIl0sIm5hbWVzIjpbImNvbnNvbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJBQUEwQkEsUUFBUUMsSUFBSSxDQUFHIn0= diff --git a/test/input/issue-505/output.js b/test/input/issue-505/output.js index 5627c00c..139c568d 100644 --- a/test/input/issue-505/output.js +++ b/test/input/issue-505/output.js @@ -2,4 +2,4 @@ function test(a){ "aaaaaaaaaaaaaaaa"; a(err,data),a(err, data)} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsidGVzdCIsImNhbGxiYWNrIiwiZXJyIiwiZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0E7SEFBS0M7QUFFVkE7aEJBQVNDLElBQUtDLE1BQ2RGLEVBQVNDLElBQUtDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsidGVzdCIsImNhbGxiYWNrIiwiZXJyIiwiZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0E7SEFBS0MsR0FDVjtBQUNBQTtoQkFBU0MsSUFBS0MsSUFBSSxFQUNsQkYsRUFBU0MsSUFBS0MsSUFBSSxDQUN0QiJ9 \ No newline at end of file diff --git a/test/input/issue-520/output.js b/test/input/issue-520/output.js index 2e847e1b..cac93512 100644 --- a/test/input/issue-520/output.js +++ b/test/input/issue-520/output.js @@ -1,2 +1,2 @@ console.log(3); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEZvbyB7IGNvbnN0cnVjdG9yKCl7Y29uc29sZS5sb2coMSsyKTt9IH0gbmV3IEZvbygpO1xuIl0sIm5hbWVzIjpbImNvbnNvbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJBQUEwQkEsUUFBUUMsSUFBSSJ9 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEZvbyB7IGNvbnN0cnVjdG9yKCl7Y29uc29sZS5sb2coMSsyKTt9IH0gbmV3IEZvbygpO1xuIl0sIm5hbWVzIjpbImNvbnNvbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJBQUEwQkEsUUFBUUMsSUFBSSxDQUFHIn0= diff --git a/test/mocha/cli.js b/test/mocha/cli.js index bc3f4c88..27b30bec 100644 --- a/test/mocha/cli.js +++ b/test/mocha/cli.js @@ -143,7 +143,7 @@ describe("bin/uglifyjs", function() { if (err) throw err; assert.strictEqual(stdout, [ "var bar=function(){function foo(bar){return bar}return foo}();", - "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMTMyMy9zYW1wbGUuanMiXSwibmFtZXMiOlsiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFNLFdBQ04sU0FBU0MsSUFBS0QsS0FDVixPQUFPQSxJQUdYLE9BQU9DLElBTEQifQ==", + "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMTMyMy9zYW1wbGUuanMiXSwibmFtZXMiOlsiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFNLFdBQ04sU0FBU0MsSUFBS0QsS0FDVixPQUFPQSxHQUNYLENBRUEsT0FBT0MsR0FDVixFQUFFIn0=", "", ].join("\n")); done(); @@ -330,7 +330,7 @@ describe("bin/uglifyjs", function() { if (err) throw err; assert.strictEqual(stdout, [ "var bar=function(){function foo(bar){return bar}return foo}();", - "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMTMyMy9zYW1wbGUuanMiXSwibmFtZXMiOlsiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFNLFdBQ04sU0FBU0MsSUFBS0QsS0FDVixPQUFPQSxJQUdYLE9BQU9DLElBTEQifQ==", + "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMTMyMy9zYW1wbGUuanMiXSwibmFtZXMiOlsiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFNLFdBQ04sU0FBU0MsSUFBS0QsS0FDVixPQUFPQSxHQUNYLENBRUEsT0FBT0MsR0FDVixFQUFFIn0=", "", ].join("\n")); var stderrLines = stderr.split("\n"); @@ -350,7 +350,7 @@ describe("bin/uglifyjs", function() { if (err) throw err; assert.strictEqual(stdout, [ "var Foo=function Foo(){console.log(1+2)};new Foo;var bar=function(){function foo(bar){return bar}return foo}();", - "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIiwidGVzdC9pbnB1dC9pc3N1ZS0xMzIzL3NhbXBsZS5qcyJdLCJuYW1lcyI6WyJGb28iLCJjb25zb2xlIiwibG9nIiwiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFNQSxJQUFJLFNBQUVBLE1BQWNDLFFBQVFDLElBQUksRUFBRSxJQUFPLElBQUlGLElDQW5ELElBQUlHLElBQU0sV0FDTixTQUFTQyxJQUFLRCxLQUNWLE9BQU9BLElBR1gsT0FBT0MsSUFMRCJ9", + "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIiwidGVzdC9pbnB1dC9pc3N1ZS0xMzIzL3NhbXBsZS5qcyJdLCJuYW1lcyI6WyJGb28iLCJjb25zb2xlIiwibG9nIiwiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFNQSxJQUFJLFNBQUVBLE1BQWNDLFFBQVFDLElBQUksRUFBRSxDQUFDLENBQUUsRUFBSSxJQUFJRixJQ0FuRCxJQUFJRyxJQUFNLFdBQ04sU0FBU0MsSUFBS0QsS0FDVixPQUFPQSxHQUNYLENBRUEsT0FBT0MsR0FDVixFQUFFIn0=", "", ].join("\n")); var stderrLines = stderr.split("\n"); @@ -791,7 +791,7 @@ describe("bin/uglifyjs", function() { 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImZvbyIsIngiLCJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiYUFBQSxJQUFJQSxJQUFNLFNBQU5BLElBQU1DLEdBQUEsTUFBSyxPQUFTQSxHQUN4QkMsUUFBUUMsSUFBSUgsSUFBSSJ9", + "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImZvbyIsIngiLCJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiYUFBQSxJQUFJQSxJQUFNLFNBQU5BLElBQU1DLEdBQUEsTUFBSyxPQUFTQSxDQUFkLEVBQ1ZDLFFBQVFDLElBQUlILElBQUksS0FBSixDQUFaIn0=", "" ].join("\n")); done(); @@ -814,7 +814,7 @@ describe("bin/uglifyjs", function() { if (err) throw err; assert.strictEqual(stdout, [ 'function foo(){return function(){console.log("PASS")}}foo()();', - "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMjMxMC9pbnB1dC5qcyJdLCJuYW1lcyI6WyJmb28iLCJjb25zb2xlIiwibG9nIiwiZiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFDTCxPQUFPLFdBQ0hDLFFBQVFDLElBQUksU0FLUkYsS0FDUkcifQ==", + "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMjMxMC9pbnB1dC5qcyJdLCJuYW1lcyI6WyJmb28iLCJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxNQUNMLE9BQU8sV0FDSEMsUUFBUUMsSUFBSSxNQUFNLENBQ3RCLENBQ0osQ0FHWUYsSUFBSSxFQUNWIn0=", "" ].join("\n")); done(); diff --git a/test/mocha/sourcemaps.js b/test/mocha/sourcemaps.js index dbe542eb..c5dc78aa 100644 --- a/test/mocha/sourcemaps.js +++ b/test/mocha/sourcemaps.js @@ -19,11 +19,11 @@ function source_map(code) { function get_map() { return { "version": 3, - "sources": ["index.js"], + "sources": [ "index.js" ], "names": [], "mappings": ";;AAAA,IAAI,MAAM,SAAN,GAAM;AAAA,SAAK,SAAS,CAAd;AAAA,CAAV;AACA,QAAQ,GAAR,CAAY,IAAI,KAAJ,CAAZ", "file": "bundle.js", - "sourcesContent": ["let foo = x => \"foo \" + x;\nconsole.log(foo(\"bar\"));"] + "sourcesContent": [ "let foo = x => \"foo \" + x;\nconsole.log(foo(\"bar\"));" ], }; } @@ -42,7 +42,7 @@ function prepare_map(sourceMap) { sourceMap: { content: sourceMap, includeSources: true, - } + }, }); if (result.error) throw result.error; return JSON.parse(result.map); @@ -112,7 +112,7 @@ describe("sourcemaps", function() { }); if (result.error) throw result.error; assert.strictEqual(result.code, "class A{static P=42;set#q(s){}}"); - assert.strictEqual(result.map, '{"version":3,"sources":["0"],"names":["A","P","#q","v"],"mappings":"MAAMA,EACFC,SAAW,GACXC,MAAOC"}'); + assert.strictEqual(result.map, '{"version":3,"sources":["0"],"names":["A","P","#q","v"],"mappings":"MAAMA,EACFC,SAAW,GACXC,MAAOC,IACX"}'); }); it("Should mark array/object literals", function() { var result = UglifyJS.minify([ @@ -124,7 +124,7 @@ describe("sourcemaps", function() { }); if (result.error) throw result.error; assert.strictEqual(result.code, "({}).wat([]);"); - assert.strictEqual(result.map, '{"version":3,"sources":["0"],"names":["wat"],"mappings":"CAAU,IACNA,IAAI"}'); + assert.strictEqual(result.map, '{"version":3,"sources":["0"],"names":["wat"],"mappings":"CAAU,IACNA,IAAI,EAAE"}'); }); it("Should give correct sourceRoot", function() { var code = "console.log(42);"; @@ -135,7 +135,7 @@ describe("sourcemaps", function() { }); if (result.error) throw result.error; assert.strictEqual(result.code, code); - assert.strictEqual(result.map, '{"version":3,"sourceRoot":"//foo.bar/","sources":["0"],"names":["console","log"],"mappings":"AAAAA,QAAQC,IAAI"}'); + assert.strictEqual(result.map, '{"version":3,"sourceRoot":"//foo.bar/","sources":["0"],"names":["console","log"],"mappings":"AAAAA,QAAQC,IAAI,EAAE"}'); }); it("Should produce same source map with DOS or UNIX line endings", function() { var code = [ @@ -160,8 +160,8 @@ describe("sourcemaps", function() { sourceMap: { content: read("test/input/issue-1236/simple.js.map"), filename: "simple.min.js", - includeSources: true - } + includeSources: true, + }, }); if (result.error) throw result.error; var map = JSON.parse(result.map); @@ -175,8 +175,8 @@ describe("sourcemaps", function() { sourceMap: { content: "inline", includeSources: true, - url: "inline" - } + url: "inline", + }, }); if (result.error) throw result.error; assert.strictEqual(result.code + "\n", read("test/input/issue-520/output.js")); @@ -185,7 +185,7 @@ describe("sourcemaps", function() { var result = UglifyJS.minify(read("test/input/issue-1323/sample.js"), { mangle: false, sourceMap: { - content: "inline" + content: "inline", }, warnings: true, }); @@ -206,7 +206,7 @@ describe("sourcemaps", function() { if (result.error) throw result.error; assert.strictEqual(result.code, [ "var Foo=function(){console.log(3)},bar=(new Foo,function(o){return o});", - "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIiwiMSJdLCJuYW1lcyI6WyJGb28iLCJjb25zb2xlIiwibG9nIiwiYmFyIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFNQSxJQUFJLFdBQWdCQyxRQUFRQyxJQUFJLElDQWxDQyxLREEyQyxJQUFJSCxJQ0MvQyxTQUFjRyxHQUNWLE9BQU9BIn0=", + "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIiwiMSJdLCJuYW1lcyI6WyJGb28iLCJjb25zb2xlIiwibG9nIiwiYmFyIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFNQSxJQUFJLFdBQWdCQyxRQUFRQyxJQUFJLENBQUcsQ0FBRSxFQ0F2Q0MsS0RBMkMsSUFBSUgsSUNDL0MsU0FBY0csR0FDVixPQUFPQSxDQUNYIn0=", ].join("\n")); assert.deepEqual(result.warnings, [ "WARN: inline source map not found: 1" ]); }); @@ -239,8 +239,8 @@ describe("sourcemaps", function() { sourceMap: { content: "inline", includeSources: true, - url: "inline" - } + url: "inline", + }, }); if (result.error) throw result.error; assert.strictEqual(result.code + "\n", read("test/input/issue-3294/output.js")); @@ -255,7 +255,7 @@ describe("sourcemaps", function() { }); if (result.error) throw result.error; assert.strictEqual(result.code, '(function(){console.log("hello")}).call(this);'); - assert.strictEqual(result.map, '{"version":3,"sources":["main.coffee"],"names":["console","log"],"mappings":"CAAA,WAAAA,QAAQC,IAAI"}'); + assert.strictEqual(result.map, '{"version":3,"sources":["main.coffee"],"names":["console","log"],"mappings":"CAAA,WAAAA,QAAQC,IAAI,OAAZ"}'); }); it("Should not overwrite existing sourcesContent", function() { var result = UglifyJS.minify({ @@ -302,7 +302,7 @@ describe("sourcemaps", function() { if (result.error) throw result.error; var code = result.code; assert.strictEqual(code, "var a=function(n){return n};\n" + - "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsiYSIsImZvbyJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSUEsRUFBSSxTQUFTQyxHQUFPLE9BQU9BIn0="); + "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsiYSIsImZvbyJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSUEsRUFBSSxTQUFTQyxHQUFPLE9BQU9BLENBQUsifQ=="); }); it("Should not append source map to output js when sourceMapInline is not enabled", function() { var result = UglifyJS.minify('var a = function(foo) { return foo; };');