aboutsummaryrefslogtreecommitdiff
path: root/lib/propmangle.js
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2017-04-15 23:50:50 +0800
committerGitHub <noreply@github.com>2017-04-15 23:50:50 +0800
commitec443e422c220619fe671166e467d3d8838b0cab (patch)
tree8272f7692a5f02208e6efe5ee8a33e657ff776f6 /lib/propmangle.js
parent32deb365d500f22f3215fe0edb094b38dba5b61a (diff)
downloadtracifyjs-ec443e422c220619fe671166e467d3d8838b0cab.tar.gz
tracifyjs-ec443e422c220619fe671166e467d3d8838b0cab.zip
unify CLI & API under `minify()` (#1811)
- rename `screw_ie8` to `ie8` - rename `mangle.except` to `mangle.reserved` - rename `mangle.properties.ignore_quoted` to `mangle.properties.keep_quoted` - compact `sourceMap` options - more stringent verification on input `options` - toplevel shorthands - `ie8` - `keep_fnames` - `toplevel` - `warnings` - support arrays and unquoted string values on CLI - drop `fromString` from `minify()` - `minify()` no longer handles any `fs` operations - unify order of operations for `mangle_properties()` on CLI & API - `bin/uglifyjs` used to `mangle_properties()` before even `Compressor` - `minify()` used to `mangle_properties()` after `Compressor` but before `mangle_names()` - both will now do `Compressor`, `mangle_names()` then `mangle_properties()` - `options.parse` / `--parse` for parser options beyond `bare_returns` - add `mangle.properties.builtins` to disable built-in reserved list - disable with `--mangle-props builtins` on CLI - `warnings` now off by default - add `--warn` and `--verbose` on CLI - drop `--enclose` - drop `--export-all` - drop `--reserved-file` - use `--mangle reserved` instead - drop `--reserve-domprops` - enabled by default, disable with `--mangle-props domprops` - drop `--prefix` - use `--source-map base` instead - drop `--lint` - remove `bin/extract-props.js` - limit exposure of internal APIs - update documentations closes #96 closes #102 closes #136 closes #166 closes #243 closes #254 closes #261 closes #311 closes #700 closes #748 closes #912 closes #1072 closes #1366 fixes #101 fixes #123 fixes #124 fixes #263 fixes #379 fixes #419 fixes #423 fixes #461 fixes #465 fixes #576 fixes #737 fixes #772 fixes #958 fixes #1036 fixes #1142 fixes #1175 fixes #1220 fixes #1223 fixes #1280 fixes #1359 fixes #1368
Diffstat (limited to 'lib/propmangle.js')
-rw-r--r--lib/propmangle.js52
1 files changed, 25 insertions, 27 deletions
diff --git a/lib/propmangle.js b/lib/propmangle.js
index aaf5936f..efb31cc1 100644
--- a/lib/propmangle.js
+++ b/lib/propmangle.js
@@ -43,16 +43,16 @@
"use strict";
-function find_builtins() {
+function find_builtins(reserved) {
// NaN will be included due to Number.NaN
- var a = [
+ [
"null",
"true",
"false",
"Infinity",
"-Infinity",
"undefined",
- ];
+ ].forEach(add);
[ Object, Array, Function, Number,
String, Boolean, Error, Math,
Date, RegExp
@@ -63,24 +63,23 @@ function find_builtins() {
}
});
function add(name) {
- push_uniq(a, name);
+ push_uniq(reserved, name);
}
- return a;
}
function mangle_properties(ast, options) {
options = defaults(options, {
+ builtins: false,
cache: null,
debug: false,
- ignore_quoted: false,
+ keep_quoted: false,
only_cache: false,
regex: null,
reserved: null,
});
- var reserved = options.reserved;
- if (reserved == null)
- reserved = find_builtins();
+ var reserved = options.reserved || [];
+ if (!options.builtins) find_builtins(reserved);
var cache = options.cache;
if (cache == null) {
@@ -91,12 +90,12 @@ function mangle_properties(ast, options) {
}
var regex = options.regex;
- var ignore_quoted = options.ignore_quoted;
+ var keep_quoted = options.keep_quoted;
// note debug is either false (disabled), or a string of the debug suffix to use (enabled).
// note debug may be enabled as an empty string, which is falsey. Also treat passing 'true'
// the same as passing an empty string.
- var debug = (options.debug !== false);
+ var debug = options.debug !== false;
var debug_name_suffix;
if (debug) {
debug_name_suffix = (options.debug === true ? "" : options.debug);
@@ -104,12 +103,12 @@ function mangle_properties(ast, options) {
var names_to_mangle = [];
var unmangleable = [];
- var ignored = {};
+ var to_keep = {};
// step 1: find candidates to mangle
ast.walk(new TreeWalker(function(node){
if (node instanceof AST_ObjectKeyVal) {
- add(node.key, ignore_quoted && node.quote);
+ add(node.key, keep_quoted && node.quote);
}
else if (node instanceof AST_ObjectProperty) {
// setter or getter, since KeyVal is handled above
@@ -119,14 +118,14 @@ function mangle_properties(ast, options) {
add(node.property);
}
else if (node instanceof AST_Sub) {
- addStrings(node.property, ignore_quoted);
+ addStrings(node.property, keep_quoted);
}
}));
// step 2: transform the tree, renaming properties
return ast.transform(new TreeTransformer(function(node){
if (node instanceof AST_ObjectKeyVal) {
- if (!(ignore_quoted && node.quote))
+ if (!(keep_quoted && node.quote))
node.key = mangle(node.key);
}
else if (node instanceof AST_ObjectProperty) {
@@ -137,7 +136,7 @@ function mangle_properties(ast, options) {
node.property = mangle(node.property);
}
else if (node instanceof AST_Sub) {
- if (!ignore_quoted)
+ if (!keep_quoted)
node.property = mangleStrings(node.property);
}
// else if (node instanceof AST_String) {
@@ -167,16 +166,16 @@ function mangle_properties(ast, options) {
}
function should_mangle(name) {
- if (ignore_quoted && name in ignored) return false;
+ if (keep_quoted && name in to_keep) return false;
if (regex && !regex.test(name)) return false;
if (reserved.indexOf(name) >= 0) return false;
return cache.props.has(name)
|| names_to_mangle.indexOf(name) >= 0;
}
- function add(name, ignore) {
- if (ignore) {
- ignored[name] = true;
+ function add(name, keep) {
+ if (keep) {
+ to_keep[name] = true;
return;
}
@@ -199,19 +198,19 @@ function mangle_properties(ast, options) {
// debug mode: use a prefix and suffix to preserve readability, e.g. o.foo -> o._$foo$NNN_.
var debug_mangled = "_$" + name + "$" + debug_name_suffix + "_";
- if (can_mangle(debug_mangled) && !(ignore_quoted && debug_mangled in ignored)) {
+ if (can_mangle(debug_mangled) && !(keep_quoted && debug_mangled in to_keep)) {
mangled = debug_mangled;
}
}
// either debug mode is off, or it is on and we could not use the mangled name
if (!mangled) {
- // note can_mangle() does not check if the name collides with the 'ignored' set
- // (filled with quoted properties when ignore_quoted set). Make sure we add this
+ // Note: `can_mangle()` does not check if the name collides with the `to_keep` set
+ // (filled with quoted properties when `keep_quoted` is set). Make sure we add this
// check so we don't collide with a quoted name.
do {
mangled = base54(++cache.cname);
- } while (!can_mangle(mangled) || (ignore_quoted && mangled in ignored));
+ } while (!can_mangle(mangled) || keep_quoted && mangled in to_keep);
}
cache.props.set(name, mangled);
@@ -219,7 +218,7 @@ function mangle_properties(ast, options) {
return mangled;
}
- function addStrings(node, ignore) {
+ function addStrings(node, keep) {
var out = {};
try {
(function walk(node){
@@ -229,7 +228,7 @@ function mangle_properties(ast, options) {
return true;
}
if (node instanceof AST_String) {
- add(node.value, ignore);
+ add(node.value, keep);
return true;
}
if (node instanceof AST_Conditional) {
@@ -261,5 +260,4 @@ function mangle_properties(ast, options) {
return node;
}));
}
-
}