improve source mapping accuracy (#5608)
This commit is contained in:
272
lib/compress.js
272
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;
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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=
|
||||
|
||||
@@ -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=
|
||||
|
||||
@@ -2,4 +2,4 @@ function test(a){
|
||||
"aaaaaaaaaaaaaaaa";
|
||||
a(err,data),a(err,
|
||||
data)}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsidGVzdCIsImNhbGxiYWNrIiwiZXJyIiwiZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0E7SEFBS0M7QUFFVkE7aEJBQVNDLElBQUtDLE1BQ2RGLEVBQVNDLElBQUtDIn0=
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsidGVzdCIsImNhbGxiYWNrIiwiZXJyIiwiZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0E7SEFBS0MsR0FDVjtBQUNBQTtoQkFBU0MsSUFBS0MsSUFBSSxFQUNsQkYsRUFBU0MsSUFBS0MsSUFBSSxDQUN0QiJ9
|
||||
@@ -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=
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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; };');
|
||||
|
||||
Reference in New Issue
Block a user