cloudstructs 0.9.10 → 0.9.12

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.
Files changed (170) hide show
  1. package/.jsii +3 -3
  2. package/assets/slack-textract/detect.lambda/index.js +2 -1
  3. package/lib/codecommit-mirror/index.js +2 -2
  4. package/lib/dmarc/index.js +1 -1
  5. package/lib/ecs-service-roller/index.js +2 -2
  6. package/lib/email-receiver/receiver.js +1 -1
  7. package/lib/mjml-template/index.js +1 -1
  8. package/lib/saml-identity-provider/index.js +2 -2
  9. package/lib/slack-app/manifest.js +1 -1
  10. package/lib/slack-app/slack-app.js +2 -2
  11. package/lib/slack-events/index.js +1 -1
  12. package/lib/slack-textract/index.js +1 -1
  13. package/lib/ssl-server-test/index.js +1 -1
  14. package/lib/state-machine-cr-provider/index.js +1 -1
  15. package/lib/static-website/index.js +1 -1
  16. package/lib/toolkit-cleaner/index.js +1 -1
  17. package/lib/url-shortener/index.js +1 -1
  18. package/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js +1 -1
  19. package/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js +1 -1
  20. package/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js +2 -2
  21. package/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +1 -1
  22. package/node_modules/@babel/runtime/helpers/esm/superPropGet.js +9 -0
  23. package/node_modules/@babel/runtime/helpers/esm/superPropSet.js +6 -0
  24. package/node_modules/@babel/runtime/helpers/esm/usingCtx.js +36 -24
  25. package/node_modules/@babel/runtime/helpers/objectWithoutProperties.js +2 -2
  26. package/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js +1 -1
  27. package/node_modules/@babel/runtime/helpers/superPropGet.js +9 -0
  28. package/node_modules/@babel/runtime/helpers/superPropSet.js +6 -0
  29. package/node_modules/@babel/runtime/helpers/usingCtx.js +36 -24
  30. package/node_modules/@babel/runtime/package.json +19 -1
  31. package/node_modules/@slack/logger/node_modules/@types/node/README.md +1 -1
  32. package/node_modules/@slack/logger/node_modules/@types/node/buffer.d.ts +0 -81
  33. package/node_modules/@slack/logger/node_modules/@types/node/child_process.d.ts +2 -2
  34. package/node_modules/@slack/logger/node_modules/@types/node/crypto.d.ts +5 -4
  35. package/node_modules/@slack/logger/node_modules/@types/node/dns/promises.d.ts +25 -23
  36. package/node_modules/@slack/logger/node_modules/@types/node/dns.d.ts +23 -23
  37. package/node_modules/@slack/logger/node_modules/@types/node/events.d.ts +11 -27
  38. package/node_modules/@slack/logger/node_modules/@types/node/package.json +3 -3
  39. package/node_modules/@slack/logger/node_modules/@types/node/test.d.ts +13 -2
  40. package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
  41. package/node_modules/@slack/web-api/node_modules/@types/node/buffer.d.ts +0 -81
  42. package/node_modules/@slack/web-api/node_modules/@types/node/child_process.d.ts +2 -2
  43. package/node_modules/@slack/web-api/node_modules/@types/node/crypto.d.ts +5 -4
  44. package/node_modules/@slack/web-api/node_modules/@types/node/dns/promises.d.ts +25 -23
  45. package/node_modules/@slack/web-api/node_modules/@types/node/dns.d.ts +23 -23
  46. package/node_modules/@slack/web-api/node_modules/@types/node/events.d.ts +11 -27
  47. package/node_modules/@slack/web-api/node_modules/@types/node/package.json +3 -3
  48. package/node_modules/@slack/web-api/node_modules/@types/node/test.d.ts +13 -2
  49. package/node_modules/@types/cacheable-request/node_modules/@types/node/README.md +1 -1
  50. package/node_modules/@types/cacheable-request/node_modules/@types/node/buffer.d.ts +0 -81
  51. package/node_modules/@types/cacheable-request/node_modules/@types/node/child_process.d.ts +2 -2
  52. package/node_modules/@types/cacheable-request/node_modules/@types/node/crypto.d.ts +5 -4
  53. package/node_modules/@types/cacheable-request/node_modules/@types/node/dns/promises.d.ts +25 -23
  54. package/node_modules/@types/cacheable-request/node_modules/@types/node/dns.d.ts +23 -23
  55. package/node_modules/@types/cacheable-request/node_modules/@types/node/events.d.ts +11 -27
  56. package/node_modules/@types/cacheable-request/node_modules/@types/node/package.json +3 -3
  57. package/node_modules/@types/cacheable-request/node_modules/@types/node/test.d.ts +13 -2
  58. package/node_modules/@types/is-stream/node_modules/@types/node/README.md +1 -1
  59. package/node_modules/@types/is-stream/node_modules/@types/node/buffer.d.ts +0 -81
  60. package/node_modules/@types/is-stream/node_modules/@types/node/child_process.d.ts +2 -2
  61. package/node_modules/@types/is-stream/node_modules/@types/node/crypto.d.ts +5 -4
  62. package/node_modules/@types/is-stream/node_modules/@types/node/dns/promises.d.ts +25 -23
  63. package/node_modules/@types/is-stream/node_modules/@types/node/dns.d.ts +23 -23
  64. package/node_modules/@types/is-stream/node_modules/@types/node/events.d.ts +11 -27
  65. package/node_modules/@types/is-stream/node_modules/@types/node/package.json +3 -3
  66. package/node_modules/@types/is-stream/node_modules/@types/node/test.d.ts +13 -2
  67. package/node_modules/@types/keyv/node_modules/@types/node/README.md +1 -1
  68. package/node_modules/@types/keyv/node_modules/@types/node/buffer.d.ts +0 -81
  69. package/node_modules/@types/keyv/node_modules/@types/node/child_process.d.ts +2 -2
  70. package/node_modules/@types/keyv/node_modules/@types/node/crypto.d.ts +5 -4
  71. package/node_modules/@types/keyv/node_modules/@types/node/dns/promises.d.ts +25 -23
  72. package/node_modules/@types/keyv/node_modules/@types/node/dns.d.ts +23 -23
  73. package/node_modules/@types/keyv/node_modules/@types/node/events.d.ts +11 -27
  74. package/node_modules/@types/keyv/node_modules/@types/node/package.json +3 -3
  75. package/node_modules/@types/keyv/node_modules/@types/node/test.d.ts +13 -2
  76. package/node_modules/@types/responselike/node_modules/@types/node/README.md +1 -1
  77. package/node_modules/@types/responselike/node_modules/@types/node/buffer.d.ts +0 -81
  78. package/node_modules/@types/responselike/node_modules/@types/node/child_process.d.ts +2 -2
  79. package/node_modules/@types/responselike/node_modules/@types/node/crypto.d.ts +5 -4
  80. package/node_modules/@types/responselike/node_modules/@types/node/dns/promises.d.ts +25 -23
  81. package/node_modules/@types/responselike/node_modules/@types/node/dns.d.ts +23 -23
  82. package/node_modules/@types/responselike/node_modules/@types/node/events.d.ts +11 -27
  83. package/node_modules/@types/responselike/node_modules/@types/node/package.json +3 -3
  84. package/node_modules/@types/responselike/node_modules/@types/node/test.d.ts +13 -2
  85. package/node_modules/jackspeak/dist/commonjs/index.js +2 -2
  86. package/node_modules/jackspeak/dist/commonjs/index.js.map +1 -1
  87. package/node_modules/jackspeak/dist/esm/index.js +2 -2
  88. package/node_modules/jackspeak/dist/esm/index.js.map +1 -1
  89. package/node_modules/jackspeak/package.json +4 -4
  90. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/glob.d.ts +0 -1
  91. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
  92. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/ignore.d.ts +0 -1
  93. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/ignore.d.ts.map +1 -1
  94. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/index.d.ts +2 -2
  95. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/index.js +6 -6
  96. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/index.js.map +1 -1
  97. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/pattern.d.ts +0 -1
  98. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
  99. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/walker.d.ts +0 -1
  100. package/node_modules/js-beautify/node_modules/glob/dist/commonjs/walker.d.ts.map +1 -1
  101. package/node_modules/js-beautify/node_modules/glob/dist/esm/glob.d.ts +0 -1
  102. package/node_modules/js-beautify/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
  103. package/node_modules/js-beautify/node_modules/glob/dist/esm/ignore.d.ts +0 -1
  104. package/node_modules/js-beautify/node_modules/glob/dist/esm/ignore.d.ts.map +1 -1
  105. package/node_modules/js-beautify/node_modules/glob/dist/esm/index.d.ts +2 -2
  106. package/node_modules/js-beautify/node_modules/glob/dist/esm/pattern.d.ts +0 -1
  107. package/node_modules/js-beautify/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
  108. package/node_modules/js-beautify/node_modules/glob/dist/esm/walker.d.ts +0 -1
  109. package/node_modules/js-beautify/node_modules/glob/dist/esm/walker.d.ts.map +1 -1
  110. package/node_modules/js-beautify/node_modules/glob/package.json +5 -4
  111. package/node_modules/js-beautify/node_modules/minimatch/README.md +1 -1
  112. package/node_modules/js-beautify/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -1
  113. package/node_modules/js-beautify/node_modules/minimatch/dist/commonjs/index.js +5 -4
  114. package/node_modules/js-beautify/node_modules/minimatch/dist/commonjs/index.js.map +1 -1
  115. package/node_modules/js-beautify/node_modules/minimatch/dist/esm/index.d.ts.map +1 -1
  116. package/node_modules/js-beautify/node_modules/minimatch/dist/esm/index.js +5 -4
  117. package/node_modules/js-beautify/node_modules/minimatch/dist/esm/index.js.map +1 -1
  118. package/node_modules/js-beautify/node_modules/minimatch/package.json +1 -1
  119. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/glob.d.ts +0 -1
  120. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
  121. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/ignore.d.ts +0 -1
  122. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/ignore.d.ts.map +1 -1
  123. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/index.d.ts +2 -2
  124. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/index.js +6 -6
  125. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/index.js.map +1 -1
  126. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/pattern.d.ts +0 -1
  127. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
  128. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/walker.d.ts +0 -1
  129. package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/walker.d.ts.map +1 -1
  130. package/node_modules/mjml-cli/node_modules/glob/dist/esm/glob.d.ts +0 -1
  131. package/node_modules/mjml-cli/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
  132. package/node_modules/mjml-cli/node_modules/glob/dist/esm/ignore.d.ts +0 -1
  133. package/node_modules/mjml-cli/node_modules/glob/dist/esm/ignore.d.ts.map +1 -1
  134. package/node_modules/mjml-cli/node_modules/glob/dist/esm/index.d.ts +2 -2
  135. package/node_modules/mjml-cli/node_modules/glob/dist/esm/pattern.d.ts +0 -1
  136. package/node_modules/mjml-cli/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
  137. package/node_modules/mjml-cli/node_modules/glob/dist/esm/walker.d.ts +0 -1
  138. package/node_modules/mjml-cli/node_modules/glob/dist/esm/walker.d.ts.map +1 -1
  139. package/node_modules/mjml-cli/node_modules/glob/package.json +5 -4
  140. package/node_modules/mjml-cli/node_modules/minimatch/README.md +1 -1
  141. package/node_modules/mjml-cli/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -1
  142. package/node_modules/mjml-cli/node_modules/minimatch/dist/commonjs/index.js +5 -4
  143. package/node_modules/mjml-cli/node_modules/minimatch/dist/commonjs/index.js.map +1 -1
  144. package/node_modules/mjml-cli/node_modules/minimatch/dist/esm/index.d.ts.map +1 -1
  145. package/node_modules/mjml-cli/node_modules/minimatch/dist/esm/index.js +5 -4
  146. package/node_modules/mjml-cli/node_modules/minimatch/dist/esm/index.js.map +1 -1
  147. package/node_modules/mjml-cli/node_modules/minimatch/package.json +1 -1
  148. package/node_modules/path-scurry/node_modules/lru-cache/README.md +11 -884
  149. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts +486 -65
  150. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -1
  151. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js +134 -34
  152. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map +1 -1
  153. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js +1 -1
  154. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map +3 -3
  155. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts +486 -65
  156. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -1
  157. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js +134 -34
  158. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map +1 -1
  159. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js +1 -1
  160. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map +3 -3
  161. package/node_modules/path-scurry/node_modules/lru-cache/package.json +8 -9
  162. package/node_modules/semver/README.md +1 -1
  163. package/node_modules/semver/classes/range.js +24 -10
  164. package/node_modules/semver/package.json +1 -1
  165. package/node_modules/uglify-js/README.md +5 -5
  166. package/node_modules/uglify-js/lib/ast.js +5 -4
  167. package/node_modules/uglify-js/lib/compress.js +199 -84
  168. package/node_modules/uglify-js/lib/output.js +17 -4
  169. package/node_modules/uglify-js/package.json +1 -1
  170. package/package.json +20 -20
@@ -185,7 +185,7 @@ function Compressor(options, false_by_default) {
185
185
  };
186
186
  }
187
187
 
188
- Compressor.prototype = new TreeTransformer(function(node, descend, in_list) {
188
+ Compressor.prototype = new TreeTransformer(function(node, descend) {
189
189
  if (node._squeezed) return node;
190
190
  var is_scope = node instanceof AST_Scope;
191
191
  if (is_scope) {
@@ -270,7 +270,7 @@ Compressor.prototype.compress = function(node) {
270
270
  };
271
271
 
272
272
  (function(OPT) {
273
- OPT(AST_Node, function(self, compressor) {
273
+ OPT(AST_Node, function(self) {
274
274
  return self;
275
275
  });
276
276
 
@@ -638,15 +638,38 @@ Compressor.prototype.compress = function(node) {
638
638
  }
639
639
 
640
640
  function push(tw, sequential) {
641
+ var defined_ids = Object.create(tw.defined_ids);
641
642
  var safe_ids = Object.create(tw.safe_ids);
642
- if (!sequential) safe_ids.seq = {};
643
+ if (!sequential) {
644
+ defined_ids.seq = {};
645
+ safe_ids.seq = {};
646
+ }
647
+ tw.defined_ids = defined_ids;
643
648
  tw.safe_ids = safe_ids;
644
649
  }
645
650
 
646
651
  function pop(tw) {
652
+ tw.defined_ids = Object.getPrototypeOf(tw.defined_ids);
647
653
  tw.safe_ids = Object.getPrototypeOf(tw.safe_ids);
648
654
  }
649
655
 
656
+ function access(tw, def) {
657
+ tw.defined_ids[def.id] = tw.defined_ids.seq;
658
+ }
659
+
660
+ function assign(tw, def) {
661
+ tw.assigned_ids[def.id] = tw.defined_ids.seq;
662
+ tw.defined_ids[def.id] = false;
663
+ }
664
+
665
+ function safe_to_access(tw, def) {
666
+ var seq = tw.defined_ids.seq;
667
+ var defined = tw.defined_ids[def.id];
668
+ if (defined !== seq) return false;
669
+ var assigned = tw.assigned_ids[def.id];
670
+ return !assigned || assigned === seq;
671
+ }
672
+
650
673
  function mark(tw, def) {
651
674
  tw.safe_ids[def.id] = {};
652
675
  }
@@ -939,9 +962,13 @@ Compressor.prototype.compress = function(node) {
939
962
  return fixed_node;
940
963
  }, visit);
941
964
  walk_lambda(fn, tw);
965
+ var defined_ids = tw.defined_ids;
942
966
  var safe_ids = tw.safe_ids;
943
967
  pop_scope(tw, fn);
944
- if (!aborts) tw.safe_ids = safe_ids;
968
+ if (!aborts) {
969
+ tw.defined_ids = defined_ids;
970
+ tw.safe_ids = safe_ids;
971
+ }
945
972
  return true;
946
973
 
947
974
  function visit(node, fixed) {
@@ -969,7 +996,6 @@ Compressor.prototype.compress = function(node) {
969
996
  if (left.equals(right) && !left.has_side_effects(compressor)) {
970
997
  right.walk(tw);
971
998
  walk_prop(left);
972
- node.redundant = true;
973
999
  return true;
974
1000
  }
975
1001
  if (ld && right instanceof AST_LambdaExpression) {
@@ -995,6 +1021,7 @@ Compressor.prototype.compress = function(node) {
995
1021
  mark_assignment_to_arguments(left);
996
1022
  return walk_lazy();
997
1023
  }
1024
+ assign(tw, ld);
998
1025
  ld.assignments++;
999
1026
  var fixed = ld.fixed;
1000
1027
  if (is_modified(compressor, tw, node, node, 0)) {
@@ -1063,6 +1090,7 @@ Compressor.prototype.compress = function(node) {
1063
1090
  return;
1064
1091
  }
1065
1092
  var d = sym.definition();
1093
+ assign(tw, d);
1066
1094
  d.assignments++;
1067
1095
  if (!fixed || sym.in_arg || !safe_to_assign(tw, d)) {
1068
1096
  walk();
@@ -1103,7 +1131,7 @@ Compressor.prototype.compress = function(node) {
1103
1131
  def(AST_BlockScope, function(tw, descend, compressor) {
1104
1132
  reset_block_variables(tw, compressor, this);
1105
1133
  });
1106
- def(AST_Call, function(tw, descend) {
1134
+ def(AST_Call, function(tw) {
1107
1135
  var node = this;
1108
1136
  var exp = node.expression;
1109
1137
  if (exp instanceof AST_LambdaExpression) {
@@ -1134,6 +1162,7 @@ Compressor.prototype.compress = function(node) {
1134
1162
  if (fixed instanceof AST_Lambda) {
1135
1163
  mark_fn_def(tw, exp.definition(), fixed);
1136
1164
  } else {
1165
+ tw.defined_ids.seq = {};
1137
1166
  tw.find_parent(AST_Scope).may_call_this();
1138
1167
  }
1139
1168
  return true;
@@ -1238,6 +1267,13 @@ Compressor.prototype.compress = function(node) {
1238
1267
  tw.in_loop = save_loop;
1239
1268
  return true;
1240
1269
  });
1270
+ def(AST_Dot, function(tw, descend) {
1271
+ descend();
1272
+ var node = this;
1273
+ var expr = node.expression;
1274
+ if (!node.optional && expr instanceof AST_SymbolRef) access(tw, expr.definition());
1275
+ return true;
1276
+ });
1241
1277
  def(AST_For, function(tw, descend, compressor) {
1242
1278
  var node = this;
1243
1279
  reset_block_variables(tw, compressor, node);
@@ -1335,12 +1371,18 @@ Compressor.prototype.compress = function(node) {
1335
1371
  pop_scope(tw, fn);
1336
1372
  return true;
1337
1373
  });
1338
- def(AST_Sub, function(tw) {
1339
- if (!this.optional) return;
1340
- this.expression.walk(tw);
1341
- push(tw, true);
1342
- this.property.walk(tw);
1343
- pop(tw);
1374
+ def(AST_Sub, function(tw, descend) {
1375
+ var node = this;
1376
+ var expr = node.expression;
1377
+ if (node.optional) {
1378
+ expr.walk(tw);
1379
+ push(tw, true);
1380
+ node.property.walk(tw);
1381
+ pop(tw);
1382
+ } else {
1383
+ descend();
1384
+ if (expr instanceof AST_SymbolRef) access(tw, expr.definition());
1385
+ }
1344
1386
  return true;
1345
1387
  });
1346
1388
  def(AST_Switch, function(tw, descend, compressor) {
@@ -1390,6 +1432,7 @@ Compressor.prototype.compress = function(node) {
1390
1432
  var d = ref.definition();
1391
1433
  var fixed = d.fixed || d.last_ref && d.last_ref.fixed;
1392
1434
  push_ref(d, ref);
1435
+ if (safe_to_access(tw, d)) ref.defined = true;
1393
1436
  if (d.references.length == 1 && !d.fixed && d.orig[0] instanceof AST_SymbolDefun) {
1394
1437
  tw.loop_ids[d.id] = tw.in_loop;
1395
1438
  }
@@ -1577,6 +1620,7 @@ Compressor.prototype.compress = function(node) {
1577
1620
  return node.value || make_node(AST_Undefined, node);
1578
1621
  }, function(name, fixed) {
1579
1622
  var d = name.definition();
1623
+ assign(tw, d);
1580
1624
  if (!d.first_decl && d.references.length == 0) d.first_decl = name;
1581
1625
  if (fixed && safe_to_assign(tw, d, true)) {
1582
1626
  mark(tw, d);
@@ -1609,6 +1653,7 @@ Compressor.prototype.compress = function(node) {
1609
1653
  function reset_flags(node) {
1610
1654
  node._squeezed = false;
1611
1655
  node._optimized = false;
1656
+ node.single_use = false;
1612
1657
  if (node instanceof AST_BlockScope) node._var_names = undefined;
1613
1658
  if (node instanceof AST_SymbolRef) node.fixed = undefined;
1614
1659
  }
@@ -1618,6 +1663,10 @@ Compressor.prototype.compress = function(node) {
1618
1663
  reset_flags(node);
1619
1664
  return node.reduce_vars(tw, descend, compressor);
1620
1665
  } : reset_flags);
1666
+ // Side-effect tracking on sequential property access
1667
+ tw.assigned_ids = Object.create(null);
1668
+ tw.defined_ids = Object.create(null);
1669
+ tw.defined_ids.seq = {};
1621
1670
  // Flow control for visiting lambda definitions
1622
1671
  tw.fn_scanning = null;
1623
1672
  tw.fn_visited = [];
@@ -2653,13 +2702,13 @@ Compressor.prototype.compress = function(node) {
2653
2702
  }
2654
2703
  if (node instanceof AST_ObjectIdentity) return symbol_in_lvalues(node, parent);
2655
2704
  if (node instanceof AST_PropAccess) {
2656
- if (side_effects) return true;
2657
2705
  var exp = node.expression;
2658
- if (exp instanceof AST_SymbolRef && is_arguments(exp.definition())) return true;
2659
2706
  if (compressor.option("unsafe")) {
2660
2707
  if (is_undeclared_ref(exp) && global_names[exp.name]) return false;
2661
2708
  if (is_static_fn(exp)) return false;
2662
2709
  }
2710
+ if (exp instanceof AST_SymbolRef && is_arguments(exp.definition())) return true;
2711
+ if (side_effects) return true;
2663
2712
  if (!well_defined) return true;
2664
2713
  if (value_def) return false;
2665
2714
  if (!in_try && lhs_local) return false;
@@ -2668,6 +2717,7 @@ Compressor.prototype.compress = function(node) {
2668
2717
  }
2669
2718
  if (node instanceof AST_Spread) return true;
2670
2719
  if (node instanceof AST_SymbolRef) {
2720
+ if (is_undeclared_ref(node) && node.is_declared(compressor)) return false;
2671
2721
  if (symbol_in_lvalues(node, parent)) return !is_direct_assignment(node, parent);
2672
2722
  if (side_effects && may_modify(node)) return true;
2673
2723
  var def = node.definition();
@@ -2687,8 +2737,10 @@ Compressor.prototype.compress = function(node) {
2687
2737
  if (sym instanceof AST_PropAccess) return true;
2688
2738
  if (check_destructured(sym)) return true;
2689
2739
  return sym.match_symbol(function(node) {
2690
- return node instanceof AST_SymbolRef
2691
- && (lvalues.has(node.name) || read_toplevel && compressor.exposed(node.definition()));
2740
+ if (node instanceof AST_PropAccess) return true;
2741
+ if (node instanceof AST_SymbolRef) {
2742
+ return lvalues.has(node.name) || read_toplevel && compressor.exposed(node.definition());
2743
+ }
2692
2744
  }, true);
2693
2745
 
2694
2746
  function reject(node) {
@@ -3284,10 +3336,14 @@ Compressor.prototype.compress = function(node) {
3284
3336
  }
3285
3337
 
3286
3338
  function update_symbols(value, node) {
3339
+ var clear_defined = node instanceof AST_SymbolRef && !node.defined;
3287
3340
  var scope = node.scope || find_scope(scanner) || block_scope;
3288
3341
  value.walk(new TreeWalker(function(node) {
3289
3342
  if (node instanceof AST_BlockScope) return true;
3290
- if (node instanceof AST_Symbol) node.scope = scope;
3343
+ if (node instanceof AST_Symbol) {
3344
+ if (clear_defined && node instanceof AST_SymbolRef) node.defined = false;
3345
+ node.scope = scope;
3346
+ }
3291
3347
  }));
3292
3348
  }
3293
3349
 
@@ -4300,18 +4356,18 @@ Compressor.prototype.compress = function(node) {
4300
4356
  if (prop instanceof AST_Node) return;
4301
4357
  if (!RE_POSITIVE_INTEGER.test("" + prop)) return;
4302
4358
  prop = +prop;
4303
- var len = value.elements.length;
4359
+ var elements = value.elements;
4360
+ var len = elements.length;
4304
4361
  if (prop > len + 4) return;
4362
+ for (var i = Math.min(len, prop + 1); --i >= 0;) {
4363
+ if (elements[i] instanceof AST_Spread) return;
4364
+ }
4305
4365
  if (prop < len) {
4306
- var element = value.elements[prop];
4307
- if (element instanceof AST_Hole) {
4308
- value.elements[prop] = node.right;
4309
- } else {
4310
- value.elements[prop] = make_sequence(node, [ element, node.right ]).optimize(compressor);
4311
- }
4366
+ var element = elements[prop].drop_side_effect_free(compressor);
4367
+ elements[prop] = element ? make_sequence(node, [ element, node.right ]) : node.right;
4312
4368
  } else {
4313
- while (prop > len) value.elements[len++] = make_node(AST_Hole, value);
4314
- value.elements[prop] = node.right;
4369
+ while (prop > len) elements[len++] = make_node(AST_Hole, value);
4370
+ elements[prop] = node.right;
4315
4371
  }
4316
4372
  return true;
4317
4373
  }
@@ -4712,6 +4768,7 @@ Compressor.prototype.compress = function(node) {
4712
4768
  return this.tail_node()._dot_throw(compressor);
4713
4769
  });
4714
4770
  def(AST_SymbolRef, function(compressor, force) {
4771
+ if (this.defined) return false;
4715
4772
  if (this.is_undefined) return true;
4716
4773
  if (!is_strict(compressor, force)) return false;
4717
4774
  if (is_undeclared_ref(this) && this.is_declared(compressor)) return false;
@@ -6202,26 +6259,8 @@ Compressor.prototype.compress = function(node) {
6202
6259
  return false;
6203
6260
  return true;
6204
6261
  }
6205
- def(AST_Node, return_false);
6206
- def(AST_Array, function(scope) {
6207
- return all_constant(this.elements, scope);
6208
- });
6209
- def(AST_Binary, function(scope) {
6210
- return this.left.is_constant_expression(scope)
6211
- && this.right.is_constant_expression(scope)
6212
- && can_drop_op(this);
6213
- });
6214
- def(AST_Class, function(scope) {
6215
- var base = this.extends;
6216
- if (base && !safe_for_extends(base)) return false;
6217
- return all_constant(this.properties, scope);
6218
- });
6219
- def(AST_ClassProperty, function(scope) {
6220
- return typeof this.key == "string" && (!this.value || this.value.is_constant_expression(scope));
6221
- });
6222
- def(AST_Constant, return_true);
6223
- def(AST_Lambda, function(scope) {
6224
- var self = this;
6262
+
6263
+ function walk_scoped(self, scope) {
6225
6264
  var result = true;
6226
6265
  var scopes = [];
6227
6266
  self.walk(new TreeWalker(function(node, descend) {
@@ -6238,7 +6277,7 @@ Compressor.prototype.compress = function(node) {
6238
6277
  result = false;
6239
6278
  return true;
6240
6279
  }
6241
- if (self.variables.has(node.name)) return true;
6280
+ if (self.variables && self.variables.has(node.name)) return true;
6242
6281
  var def = node.definition();
6243
6282
  if (member(def.scope, scopes)) return true;
6244
6283
  if (scope && !def.redefined()) {
@@ -6259,10 +6298,38 @@ Compressor.prototype.compress = function(node) {
6259
6298
  }
6260
6299
  }));
6261
6300
  return result;
6301
+ }
6302
+
6303
+ def(AST_Node, return_false);
6304
+ def(AST_Array, function(scope) {
6305
+ return all_constant(this.elements, scope);
6306
+ });
6307
+ def(AST_Binary, function(scope) {
6308
+ return this.left.is_constant_expression(scope)
6309
+ && this.right.is_constant_expression(scope)
6310
+ && can_drop_op(this);
6311
+ });
6312
+ def(AST_Class, function(scope) {
6313
+ var base = this.extends;
6314
+ if (base && !safe_for_extends(base)) return false;
6315
+ return all_constant(this.properties, scope);
6316
+ });
6317
+ def(AST_ClassProperty, function(scope) {
6318
+ if (typeof this.key != "string") return false;
6319
+ var value = this.value;
6320
+ if (!value) return true;
6321
+ return this.static ? value.is_constant_expression(scope) : walk_scoped(value, scope);
6322
+ });
6323
+ def(AST_Constant, return_true);
6324
+ def(AST_Lambda, function(scope) {
6325
+ return walk_scoped(this, scope);
6262
6326
  });
6263
6327
  def(AST_Object, function(scope) {
6264
6328
  return all_constant(this.properties, scope);
6265
6329
  });
6330
+ def(AST_ObjectIdentity, function(scope) {
6331
+ return this.scope.resolve() === scope;
6332
+ });
6266
6333
  def(AST_ObjectProperty, function(scope) {
6267
6334
  return typeof this.key == "string" && this.value.is_constant_expression(scope);
6268
6335
  });
@@ -7982,8 +8049,14 @@ Compressor.prototype.compress = function(node) {
7982
8049
  prop.walk(tw);
7983
8050
  });
7984
8051
  if (node instanceof AST_Assign) {
7985
- var right = get_rhs(node), shared = false;
7986
- if (init && node.write_only === true && !right.has_side_effects(compressor)) {
8052
+ var fixed = sym.fixed_value();
8053
+ var right = get_rhs(node);
8054
+ var safe = fixed && fixed.is_constant();
8055
+ var shared = false;
8056
+ if (init
8057
+ && node.write_only === true
8058
+ && (safe || node.left === sym || right.equals(sym))
8059
+ && !right.has_side_effects(compressor)) {
7987
8060
  initializations.add(node_def.id, right);
7988
8061
  } else {
7989
8062
  right.walk(tw);
@@ -7993,11 +8066,8 @@ Compressor.prototype.compress = function(node) {
7993
8066
  if (!node.write_only || shared) {
7994
8067
  verify_safe_usage(node_def, sym, value_modified[node_def.id]);
7995
8068
  }
7996
- } else {
7997
- var fixed = sym.fixed_value();
7998
- if (!fixed || !fixed.is_constant()) {
7999
- verify_safe_usage(node_def, value_read[node_def.id], true);
8000
- }
8069
+ } else if (!safe) {
8070
+ verify_safe_usage(node_def, value_read[node_def.id], true);
8001
8071
  }
8002
8072
  }
8003
8073
  if (track_assigns(node_def, sym) && is_lhs(sym, node) !== sym) add_assigns(node_def, sym);
@@ -8083,6 +8153,7 @@ Compressor.prototype.compress = function(node) {
8083
8153
  }
8084
8154
 
8085
8155
  function trim_destructured(node, value, process, drop, root) {
8156
+ var unwind = true;
8086
8157
  var trimmer = new TreeTransformer(function(node) {
8087
8158
  if (node instanceof AST_DefaultValue) {
8088
8159
  if (!(compressor.option("default_values") && value && value.is_defined(compressor))) {
@@ -8100,21 +8171,27 @@ Compressor.prototype.compress = function(node) {
8100
8171
  }
8101
8172
  if (node instanceof AST_DestructuredArray) {
8102
8173
  var save_drop = drop;
8174
+ var save_unwind = unwind;
8103
8175
  var save_value = value;
8104
8176
  if (value instanceof AST_SymbolRef) {
8105
8177
  drop = false;
8106
8178
  value = value.fixed_value();
8107
8179
  }
8108
- var native, values;
8180
+ var last_side_effects, native, values;
8109
8181
  if (value instanceof AST_Array) {
8110
8182
  native = true;
8111
8183
  values = value.elements;
8184
+ if (save_unwind) for (last_side_effects = values.length; --last_side_effects >= 0;) {
8185
+ if (values[last_side_effects].has_side_effects(compressor)) break;
8186
+ }
8112
8187
  } else {
8113
8188
  native = value && value.is_string(compressor);
8114
8189
  values = false;
8190
+ last_side_effects = node.elements.length;
8115
8191
  }
8116
8192
  var elements = [], newValues = drop && [], pos = 0;
8117
8193
  node.elements.forEach(function(element, index) {
8194
+ if (save_unwind) unwind = index >= last_side_effects;
8118
8195
  value = values && values[index];
8119
8196
  if (value instanceof AST_Hole) {
8120
8197
  value = null;
@@ -8157,6 +8234,7 @@ Compressor.prototype.compress = function(node) {
8157
8234
  }
8158
8235
  }
8159
8236
  value = save_value;
8237
+ unwind = save_unwind;
8160
8238
  drop = save_drop;
8161
8239
  if (values && newValues) {
8162
8240
  fill_holes(value, newValues);
@@ -8165,22 +8243,34 @@ Compressor.prototype.compress = function(node) {
8165
8243
  }
8166
8244
  if (!native) {
8167
8245
  elements.length = node.elements.length;
8168
- } else if (!node.rest) switch (elements.length) {
8246
+ } else if (!node.rest) SHORTHAND: switch (elements.length) {
8169
8247
  case 0:
8170
8248
  if (node === root) break;
8171
8249
  if (drop) value = value.drop_side_effect_free(compressor);
8172
8250
  return null;
8173
- case 1:
8251
+ default:
8174
8252
  if (!drop) break;
8253
+ if (!unwind) break;
8175
8254
  if (node === root) break;
8176
- var sym = elements[0];
8255
+ var pos = elements.length, sym;
8256
+ while (--pos >= 0) {
8257
+ var element = elements[pos];
8258
+ if (element) {
8259
+ sym = element;
8260
+ break;
8261
+ }
8262
+ }
8263
+ if (pos < 0) break;
8264
+ for (var i = pos; --i >= 0;) {
8265
+ if (elements[i]) break SHORTHAND;
8266
+ }
8177
8267
  if (sym.has_side_effects(compressor)) break;
8178
8268
  if (value.has_side_effects(compressor) && sym.match_symbol(function(node) {
8179
8269
  return node instanceof AST_PropAccess;
8180
8270
  })) break;
8181
8271
  value = make_node(AST_Sub, node, {
8182
8272
  expression: value,
8183
- property: make_node(AST_Number, node, { value: 0 }),
8273
+ property: make_node(AST_Number, node, { value: pos }),
8184
8274
  });
8185
8275
  return sym;
8186
8276
  }
@@ -8190,16 +8280,19 @@ Compressor.prototype.compress = function(node) {
8190
8280
  }
8191
8281
  if (node instanceof AST_DestructuredObject) {
8192
8282
  var save_drop = drop;
8283
+ var save_unwind = unwind;
8193
8284
  var save_value = value;
8194
8285
  if (value instanceof AST_SymbolRef) {
8195
8286
  drop = false;
8196
8287
  value = value.fixed_value();
8197
8288
  }
8198
- var prop_keys, prop_map, values;
8289
+ var last_side_effects, prop_keys, prop_map, values;
8199
8290
  if (value instanceof AST_Object) {
8291
+ last_side_effects = -1;
8200
8292
  prop_keys = [];
8201
8293
  prop_map = new Dictionary();
8202
8294
  values = value.properties.map(function(prop, index) {
8295
+ if (save_unwind && prop.has_side_effects(compressor)) last_side_effects = index;
8203
8296
  prop = prop.clone();
8204
8297
  if (prop instanceof AST_Spread) {
8205
8298
  prop_map = false;
@@ -8215,6 +8308,8 @@ Compressor.prototype.compress = function(node) {
8215
8308
  }
8216
8309
  return prop;
8217
8310
  });
8311
+ } else {
8312
+ last_side_effects = node.properties.length;
8218
8313
  }
8219
8314
  if (node.rest) {
8220
8315
  value = false;
@@ -8237,6 +8332,7 @@ Compressor.prototype.compress = function(node) {
8237
8332
  return key;
8238
8333
  }).forEach(function(key, index) {
8239
8334
  var prop = node.properties[index], trimmed;
8335
+ if (save_unwind) unwind = index >= last_side_effects;
8240
8336
  if (key instanceof AST_Node) {
8241
8337
  drop = false;
8242
8338
  value = false;
@@ -8277,6 +8373,7 @@ Compressor.prototype.compress = function(node) {
8277
8373
  }
8278
8374
  });
8279
8375
  value = save_value;
8376
+ unwind = save_unwind;
8280
8377
  drop = save_drop;
8281
8378
  if (drop_keys && prop_keys) {
8282
8379
  value = value.clone();
@@ -8284,6 +8381,7 @@ Compressor.prototype.compress = function(node) {
8284
8381
  if (prop instanceof AST_Spread) return prop;
8285
8382
  var key = prop_keys[index];
8286
8383
  if (key instanceof AST_Node) return prop;
8384
+ if (key === "__proto__") return prop;
8287
8385
  if (drop_keys.has(key)) {
8288
8386
  var mapped = drop_keys.get(key);
8289
8387
  if (!mapped) return prop;
@@ -8310,6 +8408,7 @@ Compressor.prototype.compress = function(node) {
8310
8408
  return null;
8311
8409
  case 1:
8312
8410
  if (!drop) break;
8411
+ if (!unwind) break;
8313
8412
  if (node === root) break;
8314
8413
  var prop = properties[0];
8315
8414
  if (prop.key instanceof AST_Node) break;
@@ -8317,7 +8416,10 @@ Compressor.prototype.compress = function(node) {
8317
8416
  if (value.has_side_effects(compressor) && prop.value.match_symbol(function(node) {
8318
8417
  return node instanceof AST_PropAccess;
8319
8418
  })) break;
8320
- value = make_node(AST_Sub, node, {
8419
+ value = is_identifier_string(prop.key) ? make_node(AST_Dot, node, {
8420
+ expression: value,
8421
+ property: prop.key,
8422
+ }) : make_node(AST_Sub, node, {
8321
8423
  expression: value,
8322
8424
  property: make_node_from_constant(prop.key, prop),
8323
8425
  });
@@ -8434,7 +8536,8 @@ Compressor.prototype.compress = function(node) {
8434
8536
  && self.find_variable(sym.name) === sym.definition();
8435
8537
  })) return node;
8436
8538
  node.definitions.forEach(function(defn) {
8437
- vars.set(defn.name.name, defn);
8539
+ var name = defn.name.name;
8540
+ if (!vars.has(name)) vars.set(name, defn);
8438
8541
  });
8439
8542
  var seq = node.to_assignments();
8440
8543
  if (p instanceof AST_ForEnumeration && p.init === node) {
@@ -8461,13 +8564,14 @@ Compressor.prototype.compress = function(node) {
8461
8564
  return !ref.in_arg;
8462
8565
  })) vars.del(argname.name);
8463
8566
  });
8464
- vars.each(function(defn, name) {
8567
+ vars.each(function(defn) {
8568
+ var name = defn.name;
8465
8569
  defn = defn.clone();
8466
- defn.name = defn.name.clone();
8570
+ defn.name = name.clone();
8467
8571
  defn.value = null;
8468
8572
  defns.push(defn);
8469
- vars.set(name, defn);
8470
- defn.name.definition().orig.unshift(defn.name);
8573
+ var orig = name.definition().orig;
8574
+ orig.splice(orig.indexOf(name), 0, defn.name);
8471
8575
  });
8472
8576
  if (defns.length > 0) hoisted.push(make_node(AST_Var, self, { definitions: defns }));
8473
8577
  }
@@ -10298,10 +10402,9 @@ Compressor.prototype.compress = function(node) {
10298
10402
  }
10299
10403
  });
10300
10404
  def.references.push(name);
10405
+ def.assignments++;
10301
10406
  }
10302
- def.assignments++;
10303
10407
  def.eliminated++;
10304
- def.single_use = false;
10305
10408
  return a;
10306
10409
  }, []);
10307
10410
  if (assignments.length == 0) return null;
@@ -10924,9 +11027,11 @@ Compressor.prototype.compress = function(node) {
10924
11027
  && (value = can_flatten_body(stat))) {
10925
11028
  var replacing = exp === fn || def.single_use && def.references.length - def.replaced == 1;
10926
11029
  if (can_substitute_directly()) {
11030
+ self._optimized = true;
11031
+ var retValue = value.optimize(compressor).clone(true);
10927
11032
  var args = self.args.slice();
10928
11033
  var refs = [];
10929
- var retValue = value.clone(true).transform(new TreeTransformer(function(node) {
11034
+ retValue = retValue.transform(new TreeTransformer(function(node) {
10930
11035
  if (node instanceof AST_SymbolRef) {
10931
11036
  var def = node.definition();
10932
11037
  if (fn.variables.get(node.name) !== def) {
@@ -11158,6 +11263,10 @@ Compressor.prototype.compress = function(node) {
11158
11263
  return;
11159
11264
  }
11160
11265
  if (node instanceof AST_Class) return abort = true;
11266
+ if (node instanceof AST_Destructured) {
11267
+ side_effects = true;
11268
+ return;
11269
+ }
11161
11270
  if (node instanceof AST_Scope) return abort = true;
11162
11271
  if (avoid && node instanceof AST_Symbol && avoid[node.name]) return abort = true;
11163
11272
  if (node instanceof AST_SymbolRef) {
@@ -12010,7 +12119,11 @@ Compressor.prototype.compress = function(node) {
12010
12119
  var exprs = [];
12011
12120
  if (self.left.evaluate(compressor) instanceof AST_Node) exprs.push(self.left);
12012
12121
  if (self.right.evaluate(compressor) instanceof AST_Node) exprs.push(self.right);
12013
- if (exprs.length < 2) {
12122
+ switch (exprs.length) {
12123
+ case 0:
12124
+ return make_node(AST_True, self).optimize(compressor);
12125
+ case 1:
12126
+ exprs[0] = exprs[0].clone();
12014
12127
  exprs.push(make_node(AST_True, self));
12015
12128
  return make_sequence(self, exprs).optimize(compressor);
12016
12129
  }
@@ -12606,7 +12719,8 @@ Compressor.prototype.compress = function(node) {
12606
12719
  single_use = false;
12607
12720
  } else if (fixed.has_side_effects(compressor)) {
12608
12721
  single_use = false;
12609
- } else if (compressor.option("ie") && fixed instanceof AST_Class) {
12722
+ } else if (fixed instanceof AST_Class
12723
+ && (compressor.option("ie") || !fixed.is_constant_expression(self.scope))) {
12610
12724
  single_use = false;
12611
12725
  }
12612
12726
  if (single_use) fixed.parent_scope = self.scope;
@@ -12945,24 +13059,23 @@ Compressor.prototype.compress = function(node) {
12945
13059
  if (compressor.option("dead_code")) {
12946
13060
  if (self.left instanceof AST_PropAccess) {
12947
13061
  if (self.operator == "=") {
12948
- if (self.redundant) {
12949
- var exprs = [ self.left.expression ];
12950
- if (self.left instanceof AST_Sub) exprs.push(self.left.property);
12951
- exprs.push(self.right);
12952
- return make_sequence(self, exprs).optimize(compressor);
12953
- }
12954
- if (self.left.equals(self.right) && !self.left.has_side_effects(compressor)) {
12955
- return self.right;
12956
- }
12957
13062
  var exp = self.left.expression;
13063
+ if (self.left.equals(self.right)) {
13064
+ var defined = exp.defined;
13065
+ exp.defined = false;
13066
+ var drop_lhs = !self.left.has_side_effects(compressor);
13067
+ exp.defined = defined;
13068
+ if (drop_lhs) return self.right;
13069
+ }
12958
13070
  if (exp instanceof AST_Lambda
12959
13071
  || !compressor.has_directive("use strict")
12960
13072
  && exp instanceof AST_Constant
12961
13073
  && !exp.may_throw_on_access(compressor)) {
12962
- return self.left instanceof AST_Dot ? self.right : make_sequence(self, [
13074
+ var value = self.left instanceof AST_Dot ? self.right : make_sequence(self, [
12963
13075
  self.left.property,
12964
- self.right
12965
- ]).optimize(compressor);
13076
+ self.right,
13077
+ ]);
13078
+ return maintain_this_binding(compressor.parent(), self, value).optimize(compressor);
12966
13079
  }
12967
13080
  }
12968
13081
  } else if (self.left instanceof AST_SymbolRef && can_drop_symbol(self.left, compressor)) {
@@ -14070,6 +14183,7 @@ Compressor.prototype.compress = function(node) {
14070
14183
  var fn = call.expression;
14071
14184
  if (!(fn instanceof AST_LambdaExpression)) return;
14072
14185
  if (fn.name) return;
14186
+ if (fn.single_use) return;
14073
14187
  if (fn.uses_arguments) return;
14074
14188
  if (fn.pinned()) return;
14075
14189
  if (is_generator(fn)) return;
@@ -14162,7 +14276,8 @@ Compressor.prototype.compress = function(node) {
14162
14276
  stat.walk(new TreeWalker(function(node) {
14163
14277
  if (abort) return true;
14164
14278
  if (node instanceof AST_Try) {
14165
- if (node.bfinally && all(node.body, function(stat) {
14279
+ if (!node.bfinally) return;
14280
+ if (all(node.body, function(stat) {
14166
14281
  stat.walk(find_return);
14167
14282
  return !abort;
14168
14283
  }) && node.bcatch) node.bcatch.walk(find_return);