terser 5.16.2 → 5.16.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/parse.js CHANGED
@@ -152,6 +152,7 @@ import {
152
152
  AST_Toplevel,
153
153
  AST_True,
154
154
  AST_Try,
155
+ AST_TryBlock,
155
156
  AST_UnaryPostfix,
156
157
  AST_UnaryPrefix,
157
158
  AST_Var,
@@ -260,6 +261,19 @@ var UNICODE = {
260
261
  ID_Continue: /(?:[$0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF])+/,
261
262
  };
262
263
 
264
+ try {
265
+ UNICODE = {
266
+ // https://262.ecma-international.org/13.0/#prod-IdentifierStartChar
267
+ // $, _, ID_Start
268
+ ID_Start: new RegExp("[_$\\p{ID_Start}]", "u"),
269
+ // https://262.ecma-international.org/13.0/#prod-IdentifierPartChar
270
+ // $, zero-width-joiner, zero-width-non-joiner, ID_Continue
271
+ ID_Continue: new RegExp("[$\\u200C\\u200D\\p{ID_Continue}]+", "u"),
272
+ };
273
+ } catch(e) {
274
+ // Could not use modern JS \p{...}. UNICODE is already defined above so let's continue
275
+ }
276
+
263
277
  function get_full_char(str, pos) {
264
278
  if (is_surrogate_pair_head(str.charCodeAt(pos))) {
265
279
  if (is_surrogate_pair_tail(str.charCodeAt(pos + 1))) {
@@ -2053,7 +2067,12 @@ function parse($TEXT, options) {
2053
2067
  }
2054
2068
 
2055
2069
  function try_() {
2056
- var body = block_(), bcatch = null, bfinally = null;
2070
+ var body, bcatch = null, bfinally = null;
2071
+ body = new AST_TryBlock({
2072
+ start : S.token,
2073
+ body : block_(),
2074
+ end : prev(),
2075
+ });
2057
2076
  if (is("keyword", "catch")) {
2058
2077
  var start = S.token;
2059
2078
  next();
package/lib/scope.js CHANGED
@@ -58,7 +58,6 @@ import {
58
58
  AST_Arrow,
59
59
  AST_Block,
60
60
  AST_Call,
61
- AST_Catch,
62
61
  AST_Class,
63
62
  AST_Conditional,
64
63
  AST_DefClass,
@@ -223,12 +222,7 @@ AST_Scope.DEFMETHOD("figure_out_scope", function(options, { parent_scope = null,
223
222
  const save_scope = scope;
224
223
  node.block_scope = scope = new AST_Scope(node);
225
224
  scope._block_scope = true;
226
- // AST_Try in the AST sadly *is* (not has) a body itself,
227
- // and its catch and finally branches are children of the AST_Try itself
228
- const parent_scope = node instanceof AST_Catch
229
- ? save_scope.parent_scope
230
- : save_scope;
231
- scope.init_scope_vars(parent_scope);
225
+ scope.init_scope_vars(save_scope);
232
226
  scope.uses_with = save_scope.uses_with;
233
227
  scope.uses_eval = save_scope.uses_eval;
234
228
 
@@ -243,7 +237,7 @@ AST_Scope.DEFMETHOD("figure_out_scope", function(options, { parent_scope = null,
243
237
  // AST_Switch has a scope within the body, but it itself "is a block scope"
244
238
  // This means the switched expression has to belong to the outer scope
245
239
  // while the body inside belongs to the switch itself.
246
- // This is pretty nasty and warrants an AST change similar to AST_Try (read above)
240
+ // This is pretty nasty and warrants an AST change
247
241
  const the_block_scope = scope;
248
242
  scope = save_scope;
249
243
  node.expression.walk(tw);
package/lib/size.js CHANGED
@@ -216,9 +216,7 @@ AST_Default.prototype._size = function () {
216
216
  return 8 + list_overhead(this.body);
217
217
  };
218
218
 
219
- AST_Try.prototype._size = function () {
220
- return 3 + list_overhead(this.body);
221
- };
219
+ AST_Try.prototype._size = () => 3;
222
220
 
223
221
  AST_Catch.prototype._size = function () {
224
222
  let size = 7 + list_overhead(this.body);
package/lib/transform.js CHANGED
@@ -89,7 +89,7 @@ import {
89
89
  AST_Yield,
90
90
  } from "./ast.js";
91
91
  import {
92
- MAP,
92
+ MAP as do_list,
93
93
  noop,
94
94
  } from "./utils/index.js";
95
95
 
@@ -111,12 +111,6 @@ function def_transform(node, descend) {
111
111
  });
112
112
  }
113
113
 
114
- function do_list(list, tw) {
115
- return MAP(list, function(node) {
116
- return node.transform(tw, true);
117
- });
118
- }
119
-
120
114
  def_transform(AST_Node, noop);
121
115
 
122
116
  def_transform(AST_LabeledStatement, function(self, tw) {
@@ -185,7 +179,7 @@ def_transform(AST_Case, function(self, tw) {
185
179
  });
186
180
 
187
181
  def_transform(AST_Try, function(self, tw) {
188
- self.body = do_list(self.body, tw);
182
+ self.body = self.body.transform(tw);
189
183
  if (self.bcatch) self.bcatch = self.bcatch.transform(tw);
190
184
  if (self.bfinally) self.bfinally = self.bfinally.transform(tw);
191
185
  });
@@ -210,7 +204,7 @@ def_transform(AST_Destructuring, function(self, tw) {
210
204
 
211
205
  def_transform(AST_Lambda, function(self, tw) {
212
206
  if (self.name) self.name = self.name.transform(tw);
213
- self.argnames = do_list(self.argnames, tw);
207
+ self.argnames = do_list(self.argnames, tw, /* allow_splicing */ false);
214
208
  if (self.body instanceof AST_Node) {
215
209
  self.body = self.body.transform(tw);
216
210
  } else {
@@ -220,7 +214,7 @@ def_transform(AST_Lambda, function(self, tw) {
220
214
 
221
215
  def_transform(AST_Call, function(self, tw) {
222
216
  self.expression = self.expression.transform(tw);
223
- self.args = do_list(self.args, tw);
217
+ self.args = do_list(self.args, tw, /* allow_splicing */ false);
224
218
  });
225
219
 
226
220
  def_transform(AST_Sequence, function(self, tw) {
@@ -43,6 +43,8 @@
43
43
 
44
44
  "use strict";
45
45
 
46
+ import { AST_Node } from "../ast.js";
47
+
46
48
  function characters(str) {
47
49
  return str.split("");
48
50
  }
@@ -96,48 +98,42 @@ function return_this() { return this; }
96
98
  function return_null() { return null; }
97
99
 
98
100
  var MAP = (function() {
99
- function MAP(a, f, backwards) {
100
- var ret = [], top = [], i;
101
- function doit() {
102
- var val = f(a[i], i);
103
- var is_last = val instanceof Last;
104
- if (is_last) val = val.v;
105
- if (val instanceof AtTop) {
106
- val = val.v;
107
- if (val instanceof Splice) {
108
- top.push.apply(top, backwards ? val.v.slice().reverse() : val.v);
109
- } else {
110
- top.push(val);
101
+ function MAP(a, tw, allow_splicing = true) {
102
+ // Loop but try not to build a new array
103
+ for (let i = 0; i < a.length; ++i) {
104
+ let item = a[i];
105
+ let ret = item.transform(tw, allow_splicing);
106
+
107
+ if (ret !== item) {
108
+ const a1 = a.slice(0, i);
109
+
110
+ // Looks like something was transformed. Change the loop.
111
+ if (ret instanceof AST_Node) {
112
+ a1.push(ret);
113
+ } else if (ret instanceof Splice) {
114
+ a1.push(...ret.v);
111
115
  }
112
- } else if (val !== skip) {
113
- if (val instanceof Splice) {
114
- ret.push.apply(ret, backwards ? val.v.slice().reverse() : val.v);
115
- } else {
116
- ret.push(val);
116
+
117
+ while ((item = a[++i])) {
118
+ const ret = item.transform(tw, true);
119
+
120
+ if (ret instanceof AST_Node) {
121
+ a1.push(ret);
122
+ } else if (ret instanceof Splice) {
123
+ a1.push(...ret.v);
124
+ }
117
125
  }
126
+
127
+ return a1;
118
128
  }
119
- return is_last;
120
- }
121
- if (Array.isArray(a)) {
122
- if (backwards) {
123
- for (i = a.length; --i >= 0;) if (doit()) break;
124
- ret.reverse();
125
- top.reverse();
126
- } else {
127
- for (i = 0; i < a.length; ++i) if (doit()) break;
128
- }
129
- } else {
130
- for (i in a) if (HOP(a, i)) if (doit()) break;
131
129
  }
132
- return top.concat(ret);
130
+
131
+ return a;
133
132
  }
134
- MAP.at_top = function(val) { return new AtTop(val); };
133
+
135
134
  MAP.splice = function(val) { return new Splice(val); };
136
- MAP.last = function(val) { return new Last(val); };
137
- var skip = MAP.skip = {};
138
- function AtTop(val) { this.v = val; }
135
+ MAP.skip = {};
139
136
  function Splice(val) { this.v = val; }
140
- function Last(val) { this.v = val; }
141
137
  return MAP;
142
138
  })();
143
139
 
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "homepage": "https://terser.org",
5
5
  "author": "Mihai Bazon <mihai.bazon@gmail.com> (http://lisperator.net/)",
6
6
  "license": "BSD-2-Clause",
7
- "version": "5.16.2",
7
+ "version": "5.16.4",
8
8
  "engines": {
9
9
  "node": ">=10"
10
10
  },