diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-04-15 23:50:50 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-15 23:50:50 +0800 |
commit | ec443e422c220619fe671166e467d3d8838b0cab (patch) | |
tree | 8272f7692a5f02208e6efe5ee8a33e657ff776f6 /lib/propmangle.js | |
parent | 32deb365d500f22f3215fe0edb094b38dba5b61a (diff) | |
download | tracifyjs-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.js | 52 |
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; })); } - } |