value: true,
}, AST_Boolean);
+// Nick
+var AST_Interpolate = DEFNODE("Interpolate", "expression", {
+ $documentation: "An interpolated expression. Used to for dropping computed values from server-side javascript into client-side javascript.",
+ $propdoc: {
+ expression: "[AST_Node] server-side expression to substitute",
+ },
+ walk: function(visitor) {
+ var node = this;
+ visitor.visit(node, function() {
+ node.expression.walk(visitor);
+ });
+ },
+ _validate: function() {
+ must_be_expression(this, "expression");
+ },
+});
+
/* -----[ TreeWalker ]----- */
function TreeWalker(callback) {
map("AwaitExpression", AST_Await, "argument>expression");
map("YieldExpression", AST_Yield, "argument>expression, delegate=nested");
+ // Nick
+ map("InterpolateExpression", AST_Interpolate, "argument>expression");
+
def_to_moz(AST_Toplevel, function To_Moz_Program(M) {
return to_moz_scope("Program", M);
});
webkit : false,
width : 80,
wrap_iife : false,
+ // Nick
+ interpolate : false,
}, true);
// Convert comment option to RegExp if neccessary and set up comments filter
}
return s;
});
+ if (options.interpolate) // Nick
+ str = str.replace("\\", "\\\\").replace("${", "\\${")
return quote_string(to_utf8(str), quote, dq, sq);
}
parent : function(n) {
return stack[stack.length - 2 - (n || 0)];
},
+ // Nick
+ interpolate : function() {
+ return options.interpolate
+ }
};
}
if (self.tag) self.tag.print(output);
output.print("`");
for (var i = 0; i < self.expressions.length; i++) {
- output.print(self.strings[i]);
- output.print("${");
+ if (output.interpolate) { // Nick
+ output.print(self.strings[i].replace("\\", "\\\\").replace("${", "\\${"));
+ output.print("\\${");
+ }
+ else {
+ output.print(self.strings[i]);
+ output.print("${");
+ }
self.expressions[i].print(output);
output.print("}");
}
- output.print(self.strings[i]);
+ if (output.interpolate) // Nick
+ output.print(self.strings[i].replace("\\", "\\\\").replace("${", "\\${"));
+ else
+ output.print(self.strings[i]);
output.print("`");
});
DEFPRINT(AST_Constant, function(output) {
return match[0] == "\\" ? match : match.slice(0, -1) + "\\/";
}) + str.slice(end);
}
- output.print(output.to_utf8(str).replace(/\\(?:\0(?![0-9])|[^\0])/g, function(match) {
+ str = output.to_utf8(str).replace(/\\(?:\0(?![0-9])|[^\0])/g, function(match) {
switch (match[1]) {
case "\n": return "\\n";
case "\r": return "\\r";
case "\u2028": return "\\u2028";
case "\u2029": return "\\u2029";
}
- }));
+ });
+ if (output.interpolate()) // Nick
+ str = str.replace("\\", "\\\\").replace("${", "\\${")
+ output.print(str);
var p = output.parent();
if (p instanceof AST_Binary && /^in/.test(p.operator) && p.left === this)
output.print(" ");
});
+ // Nick
+ DEFPRINT(AST_Interpolate, function(output) {
+ if (!output.interpolate()) // Nick
+ throw new Error("AST_Interpolate with interpolation turned off")
+ output.print("(${");
+ this.expression.print(output);
+ output.print("})");
+ });
+
function force_statement(stat, output) {
if (output.option("braces") && !(stat instanceof AST_Const || stat instanceof AST_Let)) {
make_block(stat, output);
{
- "name": "uglify-js",
- "description": "JavaScript parser, mangler/compressor and beautifier toolkit",
+ "name": "@ndcode/uglify-js",
+ "description": "JavaScript parser, mangler/compressor and beautifier toolkit, NDCODE",
"author": "Mihai Bazon <mihai.bazon@gmail.com> (http://lisperator.net/)",
"license": "BSD-2-Clause",
"version": "3.14.5",