point cli to built version
This commit is contained in:
parent
e09d92dc52
commit
84464b7750
234
bin/uglifyjs
234
bin/uglifyjs
|
|
@ -8,10 +8,27 @@ require("../tools/tty");
|
||||||
var fs = require("fs");
|
var fs = require("fs");
|
||||||
var info = require("../package.json");
|
var info = require("../package.json");
|
||||||
var path = require("path");
|
var path = require("path");
|
||||||
var UglifyJS = require("../tools/node");
|
var UglifyJS = require("..");
|
||||||
|
|
||||||
var skip_keys = [ "cname", "fixed", "in_arg", "inlined", "length_read", "parent_scope", "redef", "scope", "unused" ];
|
var skip_keys = [
|
||||||
var truthy_keys = [ "optional", "pure", "terminal", "uses_arguments", "uses_eval", "uses_with" ];
|
"cname",
|
||||||
|
"fixed",
|
||||||
|
"in_arg",
|
||||||
|
"inlined",
|
||||||
|
"length_read",
|
||||||
|
"parent_scope",
|
||||||
|
"redef",
|
||||||
|
"scope",
|
||||||
|
"unused",
|
||||||
|
];
|
||||||
|
var truthy_keys = [
|
||||||
|
"optional",
|
||||||
|
"pure",
|
||||||
|
"terminal",
|
||||||
|
"uses_arguments",
|
||||||
|
"uses_eval",
|
||||||
|
"uses_with",
|
||||||
|
];
|
||||||
|
|
||||||
var files = {};
|
var files = {};
|
||||||
var options = {};
|
var options = {};
|
||||||
|
|
@ -41,7 +58,8 @@ while (args.length) {
|
||||||
break;
|
break;
|
||||||
} else if (arg[1] == "-") {
|
} else if (arg[1] == "-") {
|
||||||
process_option(arg.slice(2));
|
process_option(arg.slice(2));
|
||||||
} else [].forEach.call(arg.slice(1), function(letter, index, arg) {
|
} else
|
||||||
|
[].forEach.call(arg.slice(1), function (letter, index, arg) {
|
||||||
if (!(letter in short_forms)) fatal("invalid option -" + letter);
|
if (!(letter in short_forms)) fatal("invalid option -" + letter);
|
||||||
process_option(short_forms[letter], index + 1 < arg.length);
|
process_option(short_forms[letter], index + 1 < arg.length);
|
||||||
});
|
});
|
||||||
|
|
@ -63,28 +81,39 @@ function process_option(name, no_value) {
|
||||||
for (var name in defaults) {
|
for (var name in defaults) {
|
||||||
var option = defaults[name];
|
var option = defaults[name];
|
||||||
if (option && typeof option == "object") {
|
if (option && typeof option == "object") {
|
||||||
text.push("--" + ({
|
text.push(
|
||||||
|
"--" +
|
||||||
|
({
|
||||||
output: "beautify",
|
output: "beautify",
|
||||||
sourceMap: "source-map",
|
sourceMap: "source-map",
|
||||||
}[name] || name) + " options:");
|
}[name] || name) +
|
||||||
|
" options:"
|
||||||
|
);
|
||||||
text.push(format_object(option));
|
text.push(format_object(option));
|
||||||
text.push("");
|
text.push("");
|
||||||
} else {
|
} else {
|
||||||
if (padding.length < name.length) padding = Array(name.length + 1).join(" ");
|
if (padding.length < name.length)
|
||||||
toplevels.push([ {
|
padding = Array(name.length + 1).join(" ");
|
||||||
|
toplevels.push([
|
||||||
|
{
|
||||||
keep_fargs: "keep-fargs",
|
keep_fargs: "keep-fargs",
|
||||||
keep_fnames: "keep-fnames",
|
keep_fnames: "keep-fnames",
|
||||||
nameCache: "name-cache",
|
nameCache: "name-cache",
|
||||||
}[name] || name, option ]);
|
}[name] || name,
|
||||||
|
option,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
toplevels.forEach(function (tokens) {
|
toplevels.forEach(function (tokens) {
|
||||||
text.push("--" + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]);
|
text.push(
|
||||||
|
"--" + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]
|
||||||
|
);
|
||||||
});
|
});
|
||||||
print(text.join("\n"));
|
print(text.join("\n"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
print([
|
print(
|
||||||
|
[
|
||||||
"Usage: uglifyjs [files...] [options]",
|
"Usage: uglifyjs [files...] [options]",
|
||||||
"",
|
"",
|
||||||
"Options:",
|
"Options:",
|
||||||
|
|
@ -127,7 +156,8 @@ function process_option(name, no_value) {
|
||||||
"(internal debug use only)",
|
"(internal debug use only)",
|
||||||
" --in-situ Warning: replaces original source files with minified output.",
|
" --in-situ Warning: replaces original source files with minified output.",
|
||||||
" --reduce-test Reduce a standalone test case (assumes cloned repository).",
|
" --reduce-test Reduce a standalone test case (assumes cloned repository).",
|
||||||
].join("\n"));
|
].join("\n")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
process.exit();
|
process.exit();
|
||||||
case "version":
|
case "version":
|
||||||
|
|
@ -135,10 +165,17 @@ function process_option(name, no_value) {
|
||||||
process.exit();
|
process.exit();
|
||||||
case "config-file":
|
case "config-file":
|
||||||
var config = JSON.parse(read_file(read_value(true)));
|
var config = JSON.parse(read_file(read_value(true)));
|
||||||
if (config.mangle && config.mangle.properties && config.mangle.properties.regex) {
|
if (
|
||||||
config.mangle.properties.regex = UglifyJS.parse(config.mangle.properties.regex, {
|
config.mangle &&
|
||||||
|
config.mangle.properties &&
|
||||||
|
config.mangle.properties.regex
|
||||||
|
) {
|
||||||
|
config.mangle.properties.regex = UglifyJS.parse(
|
||||||
|
config.mangle.properties.regex,
|
||||||
|
{
|
||||||
expression: true,
|
expression: true,
|
||||||
}).value;
|
}
|
||||||
|
).value;
|
||||||
}
|
}
|
||||||
for (var key in config) if (!(key in options)) options[key] = config[key];
|
for (var key in config) if (!(key in options)) options[key] = config[key];
|
||||||
break;
|
break;
|
||||||
|
|
@ -195,11 +232,18 @@ function process_option(name, no_value) {
|
||||||
break;
|
break;
|
||||||
case "define":
|
case "define":
|
||||||
if (typeof options.compress != "object") options.compress = {};
|
if (typeof options.compress != "object") options.compress = {};
|
||||||
options.compress.global_defs = parse_js(read_value(true), options.compress.global_defs, "define");
|
options.compress.global_defs = parse_js(
|
||||||
|
read_value(true),
|
||||||
|
options.compress.global_defs,
|
||||||
|
"define"
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case "mangle-props":
|
case "mangle-props":
|
||||||
if (typeof options.mangle != "object") options.mangle = {};
|
if (typeof options.mangle != "object") options.mangle = {};
|
||||||
options.mangle.properties = parse_js(read_value(), options.mangle.properties);
|
options.mangle.properties = parse_js(
|
||||||
|
read_value(),
|
||||||
|
options.mangle.properties
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case "module":
|
case "module":
|
||||||
options.module = true;
|
options.module = true;
|
||||||
|
|
@ -239,8 +283,10 @@ function process_option(name, no_value) {
|
||||||
return args.shift();
|
return args.shift();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!output && options.sourceMap && options.sourceMap.url != "inline") fatal("cannot write source map to STDOUT");
|
if (!output && options.sourceMap && options.sourceMap.url != "inline")
|
||||||
if (specified["beautify"] && specified["output-opts"]) fatal("--beautify cannot be used with --output-opts");
|
fatal("cannot write source map to STDOUT");
|
||||||
|
if (specified["beautify"] && specified["output-opts"])
|
||||||
|
fatal("--beautify cannot be used with --output-opts");
|
||||||
["compress", "mangle"].forEach(function (name) {
|
["compress", "mangle"].forEach(function (name) {
|
||||||
if (!(name in options)) options[name] = false;
|
if (!(name in options)) options[name] = false;
|
||||||
});
|
});
|
||||||
|
|
@ -249,8 +295,12 @@ if (/^ast|spidermonkey$/.test(output)) {
|
||||||
options.output.ast = true;
|
options.output.ast = true;
|
||||||
options.output.code = false;
|
options.output.code = false;
|
||||||
}
|
}
|
||||||
if (options.parse && (options.parse.acorn || options.parse.spidermonkey)
|
if (
|
||||||
&& options.sourceMap && options.sourceMap.content == "inline") {
|
options.parse &&
|
||||||
|
(options.parse.acorn || options.parse.spidermonkey) &&
|
||||||
|
options.sourceMap &&
|
||||||
|
options.sourceMap.content == "inline"
|
||||||
|
) {
|
||||||
fatal("inline source map only works with built-in parser");
|
fatal("inline source map only works with built-in parser");
|
||||||
}
|
}
|
||||||
if (options.warnings) {
|
if (options.warnings) {
|
||||||
|
|
@ -261,23 +311,28 @@ var convert_path = function(name) {
|
||||||
return name;
|
return name;
|
||||||
};
|
};
|
||||||
if (typeof options.sourceMap == "object" && "base" in options.sourceMap) {
|
if (typeof options.sourceMap == "object" && "base" in options.sourceMap) {
|
||||||
convert_path = function() {
|
convert_path = (function () {
|
||||||
var base = options.sourceMap.base;
|
var base = options.sourceMap.base;
|
||||||
delete options.sourceMap.base;
|
delete options.sourceMap.base;
|
||||||
return function (name) {
|
return function (name) {
|
||||||
return path.relative(base, name);
|
return path.relative(base, name);
|
||||||
};
|
};
|
||||||
}();
|
})();
|
||||||
}
|
}
|
||||||
if (specified["self"]) {
|
if (specified["self"]) {
|
||||||
if (paths.length) UglifyJS.AST_Node.warn("Ignoring input files since --self was passed");
|
if (paths.length)
|
||||||
|
UglifyJS.AST_Node.warn("Ignoring input files since --self was passed");
|
||||||
if (!options.wrap) options.wrap = "UglifyJS";
|
if (!options.wrap) options.wrap = "UglifyJS";
|
||||||
paths = UglifyJS.FILES;
|
paths = UglifyJS.FILES;
|
||||||
} else if (paths.length) {
|
} else if (paths.length) {
|
||||||
paths = simple_glob(paths);
|
paths = simple_glob(paths);
|
||||||
}
|
}
|
||||||
if (specified["in-situ"]) {
|
if (specified["in-situ"]) {
|
||||||
if (output && output != "spidermonkey" || specified["reduce-test"] || specified["self"]) {
|
if (
|
||||||
|
(output && output != "spidermonkey") ||
|
||||||
|
specified["reduce-test"] ||
|
||||||
|
specified["self"]
|
||||||
|
) {
|
||||||
fatal("incompatible options specified");
|
fatal("incompatible options specified");
|
||||||
}
|
}
|
||||||
paths.forEach(function (name) {
|
paths.forEach(function (name) {
|
||||||
|
|
@ -294,14 +349,24 @@ if (specified["in-situ"]) {
|
||||||
});
|
});
|
||||||
run();
|
run();
|
||||||
} else {
|
} else {
|
||||||
var timerId = process.stdin.isTTY && process.argv.length < 3 && setTimeout(function() {
|
var timerId =
|
||||||
print_error("Waiting for input... (use `--help` to print usage information)");
|
process.stdin.isTTY &&
|
||||||
|
process.argv.length < 3 &&
|
||||||
|
setTimeout(function () {
|
||||||
|
print_error(
|
||||||
|
"Waiting for input... (use `--help` to print usage information)"
|
||||||
|
);
|
||||||
}, 1500);
|
}, 1500);
|
||||||
var chunks = [];
|
var chunks = [];
|
||||||
process.stdin.setEncoding("utf8");
|
process.stdin.setEncoding("utf8");
|
||||||
process.stdin.once("data", function() {
|
process.stdin
|
||||||
|
.once("data", function () {
|
||||||
clearTimeout(timerId);
|
clearTimeout(timerId);
|
||||||
}).on("data", process.stdin.isTTY ? function(chunk) {
|
})
|
||||||
|
.on(
|
||||||
|
"data",
|
||||||
|
process.stdin.isTTY
|
||||||
|
? function (chunk) {
|
||||||
// emulate console input termination via Ctrl+D / Ctrl+Z
|
// emulate console input termination via Ctrl+D / Ctrl+Z
|
||||||
var match = /[\x04\x1a]\r?\n?$/.exec(chunk);
|
var match = /[\x04\x1a]\r?\n?$/.exec(chunk);
|
||||||
if (match) {
|
if (match) {
|
||||||
|
|
@ -311,9 +376,12 @@ if (specified["in-situ"]) {
|
||||||
} else {
|
} else {
|
||||||
chunks.push(chunk);
|
chunks.push(chunk);
|
||||||
}
|
}
|
||||||
} : function(chunk) {
|
}
|
||||||
|
: function (chunk) {
|
||||||
chunks.push(chunk);
|
chunks.push(chunk);
|
||||||
}).once("end", function() {
|
}
|
||||||
|
)
|
||||||
|
.once("end", function () {
|
||||||
files = { STDIN: chunks.join("") };
|
files = { STDIN: chunks.join("") };
|
||||||
run();
|
run();
|
||||||
});
|
});
|
||||||
|
|
@ -321,7 +389,9 @@ if (specified["in-situ"]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function convert_ast(fn) {
|
function convert_ast(fn) {
|
||||||
return UglifyJS.AST_Node.from_mozilla_ast(Object.keys(files).reduce(fn, null));
|
return UglifyJS.AST_Node.from_mozilla_ast(
|
||||||
|
Object.keys(files).reduce(fn, null)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function run() {
|
function run() {
|
||||||
|
|
@ -338,7 +408,7 @@ function run() {
|
||||||
var annotations = Object.create(null);
|
var annotations = Object.create(null);
|
||||||
files = convert_ast(function (toplevel, name) {
|
files = convert_ast(function (toplevel, name) {
|
||||||
var content = files[name];
|
var content = files[name];
|
||||||
var list = annotations[name] = [];
|
var list = (annotations[name] = []);
|
||||||
var prev = -1;
|
var prev = -1;
|
||||||
return require("acorn").parse(content, {
|
return require("acorn").parse(content, {
|
||||||
allowHashBang: true,
|
allowHashBang: true,
|
||||||
|
|
@ -360,18 +430,21 @@ function run() {
|
||||||
sourceType: "module",
|
sourceType: "module",
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
files.walk(new UglifyJS.TreeWalker(function(node) {
|
files.walk(
|
||||||
|
new UglifyJS.TreeWalker(function (node) {
|
||||||
if (!(node instanceof UglifyJS.AST_Call)) return;
|
if (!(node instanceof UglifyJS.AST_Call)) return;
|
||||||
var list = annotations[node.start.file];
|
var list = annotations[node.start.file];
|
||||||
var pure = list[node.start.pos];
|
var pure = list[node.start.pos];
|
||||||
if (!pure) {
|
if (!pure) {
|
||||||
var tokens = node.start.parens;
|
var tokens = node.start.parens;
|
||||||
if (tokens) for (var i = 0; !pure && i < tokens.length; i++) {
|
if (tokens)
|
||||||
|
for (var i = 0; !pure && i < tokens.length; i++) {
|
||||||
pure = list[tokens[i].pos];
|
pure = list[tokens[i].pos];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pure) node.pure = pure;
|
if (pure) node.pure = pure;
|
||||||
}));
|
})
|
||||||
|
);
|
||||||
} else if (options.parse.spidermonkey) {
|
} else if (options.parse.spidermonkey) {
|
||||||
files = convert_ast(function (toplevel, name) {
|
files = convert_ast(function (toplevel, name) {
|
||||||
var obj = JSON.parse(files[name]);
|
var obj = JSON.parse(files[name]);
|
||||||
|
|
@ -399,7 +472,9 @@ function run() {
|
||||||
if (result.error) {
|
if (result.error) {
|
||||||
var ex = result.error;
|
var ex = result.error;
|
||||||
if (ex.name == "SyntaxError") {
|
if (ex.name == "SyntaxError") {
|
||||||
print_error("Parse error at " + ex.filename + ":" + ex.line + "," + ex.col);
|
print_error(
|
||||||
|
"Parse error at " + ex.filename + ":" + ex.line + "," + ex.col
|
||||||
|
);
|
||||||
var file = files[ex.filename];
|
var file = files[ex.filename];
|
||||||
if (file) {
|
if (file) {
|
||||||
var col = ex.col;
|
var col = ex.col;
|
||||||
|
|
@ -428,7 +503,8 @@ function run() {
|
||||||
if (!options.compress && !options.mangle) {
|
if (!options.compress && !options.mangle) {
|
||||||
var toplevel = result.ast;
|
var toplevel = result.ast;
|
||||||
if (!(toplevel instanceof UglifyJS.AST_Toplevel)) {
|
if (!(toplevel instanceof UglifyJS.AST_Toplevel)) {
|
||||||
if (!(toplevel instanceof UglifyJS.AST_Statement)) toplevel = new UglifyJS.AST_SimpleStatement({
|
if (!(toplevel instanceof UglifyJS.AST_Statement))
|
||||||
|
toplevel = new UglifyJS.AST_SimpleStatement({
|
||||||
body: toplevel,
|
body: toplevel,
|
||||||
});
|
});
|
||||||
toplevel = new UglifyJS.AST_Toplevel({
|
toplevel = new UglifyJS.AST_Toplevel({
|
||||||
|
|
@ -437,8 +513,12 @@ function run() {
|
||||||
}
|
}
|
||||||
toplevel.figure_out_scope({});
|
toplevel.figure_out_scope({});
|
||||||
}
|
}
|
||||||
print(JSON.stringify(result.ast, function(key, value) {
|
print(
|
||||||
if (value) switch (key) {
|
JSON.stringify(
|
||||||
|
result.ast,
|
||||||
|
function (key, value) {
|
||||||
|
if (value)
|
||||||
|
switch (key) {
|
||||||
case "enclosed":
|
case "enclosed":
|
||||||
return value.length ? value.map(symdef) : undefined;
|
return value.length ? value.map(symdef) : undefined;
|
||||||
case "functions":
|
case "functions":
|
||||||
|
|
@ -453,7 +533,7 @@ function run() {
|
||||||
if (value instanceof UglifyJS.Dictionary) return;
|
if (value instanceof UglifyJS.Dictionary) return;
|
||||||
if (value instanceof UglifyJS.AST_Node) {
|
if (value instanceof UglifyJS.AST_Node) {
|
||||||
var result = {
|
var result = {
|
||||||
_class: "AST_" + value.TYPE
|
_class: "AST_" + value.TYPE,
|
||||||
};
|
};
|
||||||
value.CTOR.PROPS.forEach(function (prop) {
|
value.CTOR.PROPS.forEach(function (prop) {
|
||||||
result[prop] = value[prop];
|
result[prop] = value[prop];
|
||||||
|
|
@ -461,7 +541,10 @@ function run() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}, 2));
|
},
|
||||||
|
2
|
||||||
|
)
|
||||||
|
);
|
||||||
} else if (output == "spidermonkey") {
|
} else if (output == "spidermonkey") {
|
||||||
print(JSON.stringify(result.ast.to_mozilla_ast(), null, 2));
|
print(JSON.stringify(result.ast.to_mozilla_ast(), null, 2));
|
||||||
} else if (output) {
|
} else if (output) {
|
||||||
|
|
@ -471,7 +554,9 @@ function run() {
|
||||||
for (var name in options.output) {
|
for (var name in options.output) {
|
||||||
if (!/^ast|code$/.test(name)) opts[name] = options.output[name];
|
if (!/^ast|code$/.test(name)) opts[name] = options.output[name];
|
||||||
}
|
}
|
||||||
code = UglifyJS.AST_Node.from_mozilla_ast(result.ast.to_mozilla_ast()).print_to_string(opts);
|
code = UglifyJS.AST_Node.from_mozilla_ast(
|
||||||
|
result.ast.to_mozilla_ast()
|
||||||
|
).print_to_string(opts);
|
||||||
} else {
|
} else {
|
||||||
code = result.code;
|
code = result.code;
|
||||||
}
|
}
|
||||||
|
|
@ -481,14 +566,15 @@ function run() {
|
||||||
print(result.code);
|
print(result.code);
|
||||||
}
|
}
|
||||||
if (nameCache) fs.writeFileSync(nameCache, JSON.stringify(options.nameCache));
|
if (nameCache) fs.writeFileSync(nameCache, JSON.stringify(options.nameCache));
|
||||||
if (result.timings) for (var phase in result.timings) {
|
if (result.timings)
|
||||||
|
for (var phase in result.timings) {
|
||||||
print_error("- " + phase + ": " + result.timings[phase].toFixed(3) + "s");
|
print_error("- " + phase + ": " + result.timings[phase].toFixed(3) + "s");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function fatal(message) {
|
function fatal(message) {
|
||||||
if (message instanceof Error) {
|
if (message instanceof Error) {
|
||||||
message = message.stack.replace(/^\S*?Error:/, "ERROR:")
|
message = message.stack.replace(/^\S*?Error:/, "ERROR:");
|
||||||
} else {
|
} else {
|
||||||
message = "ERROR: " + message;
|
message = "ERROR: " + message;
|
||||||
}
|
}
|
||||||
|
|
@ -514,15 +600,22 @@ function simple_glob(paths) {
|
||||||
});
|
});
|
||||||
} catch (ex) {}
|
} catch (ex) {}
|
||||||
if (entries) {
|
if (entries) {
|
||||||
var pattern = "^" + path.basename(glob)
|
var pattern =
|
||||||
|
"^" +
|
||||||
|
path
|
||||||
|
.basename(glob)
|
||||||
.replace(/[.+^$[\]\\(){}]/g, "\\$&")
|
.replace(/[.+^$[\]\\(){}]/g, "\\$&")
|
||||||
.replace(/\*/g, "[^/\\\\]*")
|
.replace(/\*/g, "[^/\\\\]*")
|
||||||
.replace(/\?/g, "[^/\\\\]") + "$";
|
.replace(/\?/g, "[^/\\\\]") +
|
||||||
|
"$";
|
||||||
var mod = process.platform === "win32" ? "i" : "";
|
var mod = process.platform === "win32" ? "i" : "";
|
||||||
var rx = new RegExp(pattern, mod);
|
var rx = new RegExp(pattern, mod);
|
||||||
var results = entries.filter(function(name) {
|
var results = entries
|
||||||
|
.filter(function (name) {
|
||||||
return rx.test(name);
|
return rx.test(name);
|
||||||
}).sort().map(function(name) {
|
})
|
||||||
|
.sort()
|
||||||
|
.map(function (name) {
|
||||||
return path.join(dir, name);
|
return path.join(dir, name);
|
||||||
});
|
});
|
||||||
if (results.length) {
|
if (results.length) {
|
||||||
|
|
@ -547,10 +640,12 @@ function read_file(path, default_value) {
|
||||||
|
|
||||||
function parse_js(value, options, flag) {
|
function parse_js(value, options, flag) {
|
||||||
if (!options || typeof options != "object") options = Object.create(null);
|
if (!options || typeof options != "object") options = Object.create(null);
|
||||||
if (typeof value == "string") try {
|
if (typeof value == "string")
|
||||||
|
try {
|
||||||
UglifyJS.parse(value, {
|
UglifyJS.parse(value, {
|
||||||
expression: true
|
expression: true,
|
||||||
}).walk(new UglifyJS.TreeWalker(function(node) {
|
}).walk(
|
||||||
|
new UglifyJS.TreeWalker(function (node) {
|
||||||
if (node instanceof UglifyJS.AST_Assign) {
|
if (node instanceof UglifyJS.AST_Assign) {
|
||||||
var name = node.left.print_to_string();
|
var name = node.left.print_to_string();
|
||||||
var value = node.right;
|
var value = node.right;
|
||||||
|
|
@ -563,7 +658,10 @@ function parse_js(value, options, flag) {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (node instanceof UglifyJS.AST_Symbol || node instanceof UglifyJS.AST_PropAccess) {
|
if (
|
||||||
|
node instanceof UglifyJS.AST_Symbol ||
|
||||||
|
node instanceof UglifyJS.AST_PropAccess
|
||||||
|
) {
|
||||||
var name = node.print_to_string();
|
var name = node.print_to_string();
|
||||||
options[name] = true;
|
options[name] = true;
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -571,11 +669,14 @@ function parse_js(value, options, flag) {
|
||||||
if (!(node instanceof UglifyJS.AST_Sequence)) throw node;
|
if (!(node instanceof UglifyJS.AST_Sequence)) throw node;
|
||||||
|
|
||||||
function to_string(value) {
|
function to_string(value) {
|
||||||
return value instanceof UglifyJS.AST_Constant ? value.value : value.print_to_string({
|
return value instanceof UglifyJS.AST_Constant
|
||||||
quote_keys: true
|
? value.value
|
||||||
|
: value.print_to_string({
|
||||||
|
quote_keys: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}));
|
})
|
||||||
|
);
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
fatal("cannot parse arguments for '" + flag + "': " + value);
|
fatal("cannot parse arguments for '" + flag + "': " + value);
|
||||||
|
|
@ -587,13 +688,15 @@ function parse_js(value, options, flag) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function skip_property(key, value) {
|
function skip_property(key, value) {
|
||||||
return skip_keys.indexOf(key) >= 0
|
return (
|
||||||
|
skip_keys.indexOf(key) >= 0 ||
|
||||||
// only skip truthy_keys if their value is falsy
|
// only skip truthy_keys if their value is falsy
|
||||||
|| truthy_keys.indexOf(key) >= 0 && !value;
|
(truthy_keys.indexOf(key) >= 0 && !value)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function symdef(def) {
|
function symdef(def) {
|
||||||
var ret = (1e6 + def.id) + " " + def.name;
|
var ret = 1e6 + def.id + " " + def.name;
|
||||||
if (def.mangled_name) ret += " " + def.mangled_name;
|
if (def.mangled_name) ret += " " + def.mangled_name;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
@ -601,11 +704,16 @@ function symdef(def) {
|
||||||
function format_object(obj) {
|
function format_object(obj) {
|
||||||
var lines = [];
|
var lines = [];
|
||||||
var padding = "";
|
var padding = "";
|
||||||
Object.keys(obj).map(function(name) {
|
Object.keys(obj)
|
||||||
if (padding.length < name.length) padding = Array(name.length + 1).join(" ");
|
.map(function (name) {
|
||||||
|
if (padding.length < name.length)
|
||||||
|
padding = Array(name.length + 1).join(" ");
|
||||||
return [name, JSON.stringify(obj[name])];
|
return [name, JSON.stringify(obj[name])];
|
||||||
}).forEach(function(tokens) {
|
})
|
||||||
lines.push(" " + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]);
|
.forEach(function (tokens) {
|
||||||
|
lines.push(
|
||||||
|
" " + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]
|
||||||
|
);
|
||||||
});
|
});
|
||||||
return lines.join("\n");
|
return lines.join("\n");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user