babel-source 4.7.3 → 4.7.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.
Files changed (4) hide show
  1. checksums.yaml +8 -8
  2. data/lib/babel.js +355 -333
  3. data/lib/babel/source.rb +2 -2
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzQ2NGU3OTFiOTdlM2FiYTIyNjZmMWRjZmY3MzA0MWI2MTMwMmRjOQ==
4
+ M2U4NDlkNzg0YTA0NjdmMTdmZTVmYTllMGFlMWRhZTNkNjc2YTJmZA==
5
5
  data.tar.gz: !binary |-
6
- NWEzZDE2ZTE0ZWIwNWYwNWJhN2Y4MDJjNTc5ZTBjZDMwNzNiZjBmZQ==
6
+ ZjM2M2U5ZjkwNTU3NmNhOWQyNWE4YWNmMzNjZGFkMmViMmRlMjQ3NQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NjI2N2VlZmM0MTEzNzE1ODA3ZjM3YTFkMDY3M2RmNTI4MTdiNzExNDIzOTk0
10
- MTg3ZmU5OWRkZGI4YWRlMmZmNDZlYTdjMTAyYjM4M2VjYmMwMDI4MjlhODg5
11
- ODNlNDQzOTk0ODMzYTI4NzRhYWI2ODI1YWEzMjdkOWY0NzMwZTc=
9
+ ZmJlZDY4ZmZlMTU1NmQ2MDA5ODZiY2RiMmRjMWVlZDgyM2E3ZGFmZjEyOGRi
10
+ MDg0ZjJkNjc4N2M3MjY1NTBmNWMxYzE2NDJiNzFiMmNmNjM3M2Y3MDFjN2Jm
11
+ NzY5NTAwYWFhMDUzNzI4OWI3Nzc1MWMxZDFjM2VmMjhmMGQ2MWU=
12
12
  data.tar.gz: !binary |-
13
- NzUwZmUwOWUwOWYxOTZkYWVkYWFlNDE0Yzg1OGE4Nzg4NmRhZTI1N2UyOTkx
14
- ZDg2ODg1Yjk5YzQ2N2FmY2YwNGVjNDEwZjgyYzIwNzYxNzU3ZWZkYjc3ZmVi
15
- NGJkMGQyNDI3ZTZjNzdhNWNiYjk0M2YyYjBiNzNmMjU0MTcxZDQ=
13
+ YTMxNWI0YmFiYWNkY2E3ZWUwY2U2YzU5N2RkYmYxZjJjYTUzNzYyNDIwZWQ4
14
+ NjYwOGUwY2U5NTEyMjBiNmRmMWJkNzI2MWNiYTVmM2NiZjVmZWNmYmMyNTk1
15
+ NDEyYjNiOTE4MTg4YjMwNWI5MjQ3MTEyNDNjZTNjOWU4YjQyODQ=
data/lib/babel.js CHANGED
@@ -2888,13 +2888,13 @@ var messages = exports.messages = {
2888
2888
  };
2889
2889
 
2890
2890
  function get(key) {
2891
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
2892
+ args[_key - 1] = arguments[_key];
2893
+ }
2894
+
2891
2895
  var msg = messages[key];
2892
2896
  if (!msg) throw new ReferenceError("Unknown message " + JSON.stringify(key));
2893
2897
 
2894
- var args = [];
2895
- for (var i = 1; i < arguments.length; i++) {
2896
- args.push(arguments[i]);
2897
- }
2898
2898
  args = parseArgs(args);
2899
2899
 
2900
2900
  return msg.replace(/\$(\d+)/g, function (str, i) {
@@ -4319,8 +4319,8 @@ var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["defau
4319
4319
 
4320
4320
  var t = _interopRequire(require("../../types"));
4321
4321
 
4322
- var visitor = {
4323
- enter: function enter(node) {
4322
+ var awaitVisitor = {
4323
+ enter: function enter(node, parent, scope, state) {
4324
4324
  if (t.isFunction(node)) this.skip();
4325
4325
 
4326
4326
  if (t.isAwaitExpression(node)) {
@@ -4335,13 +4335,25 @@ var visitor = {
4335
4335
  }
4336
4336
  };
4337
4337
 
4338
+ var referenceVisitor = {
4339
+ enter: function enter(node, parent, scope, state) {
4340
+ var name = state.id.name;
4341
+ if (t.isReferencedIdentifier(node, parent, { name: name }) && scope.bindingIdentifierEquals(name, state.id)) {
4342
+ var _state;
4343
+
4344
+ return (_state = state, !_state.ref && (_state.ref = scope.generateUidIdentifier(name)), _state.ref);
4345
+ }
4346
+ }
4347
+ };
4348
+
4338
4349
  module.exports = function (node, callId, scope) {
4339
4350
  node.async = false;
4340
4351
  node.generator = true;
4341
4352
 
4342
- scope.traverse(node, visitor);
4353
+ scope.traverse(node, awaitVisitor, state);
4343
4354
 
4344
4355
  var call = t.callExpression(callId, [node]);
4356
+
4345
4357
  var id = node.id;
4346
4358
  node.id = null;
4347
4359
 
@@ -4350,6 +4362,16 @@ module.exports = function (node, callId, scope) {
4350
4362
  declar._blockHoist = true;
4351
4363
  return declar;
4352
4364
  } else {
4365
+ if (id) {
4366
+ var state = { id: id };
4367
+ scope.traverse(node, referenceVisitor, state);
4368
+
4369
+ if (state.ref) {
4370
+ scope.parent.push({ id: state.ref });
4371
+ return t.assignmentExpression("=", state.ref, call);
4372
+ }
4373
+ }
4374
+
4353
4375
  return call;
4354
4376
  }
4355
4377
  };
@@ -4413,12 +4435,11 @@ var ReplaceSupers = (function () {
4413
4435
 
4414
4436
  /**
4415
4437
  * Description
4416
- *
4417
- * @param {Object} opts
4418
- * @param {Boolean} [inClass]
4419
4438
  */
4420
4439
 
4421
- function ReplaceSupers(opts, inClass) {
4440
+ function ReplaceSupers(opts) {
4441
+ var inClass = arguments[1] === undefined ? false : arguments[1];
4442
+
4422
4443
  _classCallCheck(this, ReplaceSupers);
4423
4444
 
4424
4445
  this.topLevelThisReference = opts.topLevelThisReference;
@@ -4444,12 +4465,6 @@ var ReplaceSupers = (function () {
4444
4465
  *
4445
4466
  * _set(Object.getPrototypeOf(CLASS.prototype), "METHOD", "VALUE", this)
4446
4467
  *
4447
- * @param {Node} property
4448
- * @param {Node} value
4449
- * @param {Boolean} isComputed
4450
- * @param {Node} thisExpression
4451
- *
4452
- * @returns {Node}
4453
4468
  */
4454
4469
 
4455
4470
  ReplaceSupers.prototype.setSuperProperty = function setSuperProperty(property, value, isComputed, thisExpression) {
@@ -4463,11 +4478,6 @@ var ReplaceSupers = (function () {
4463
4478
  *
4464
4479
  * _get(Object.getPrototypeOf(CLASS.prototype), "METHOD", this)
4465
4480
  *
4466
- * @param {Node} property
4467
- * @param {Boolean} isComputed
4468
- * @param {Node} thisExpression
4469
- *
4470
- * @returns {Node}
4471
4481
  */
4472
4482
 
4473
4483
  ReplaceSupers.prototype.getSuperProperty = function getSuperProperty(property, isComputed, thisExpression) {
@@ -4484,9 +4494,6 @@ var ReplaceSupers = (function () {
4484
4494
 
4485
4495
  /**
4486
4496
  * Description
4487
- *
4488
- * @param {Object} node
4489
- * @param {Boolean} topLevel
4490
4497
  */
4491
4498
 
4492
4499
  ReplaceSupers.prototype.traverseLevel = function traverseLevel(node, topLevel) {
@@ -4510,11 +4517,6 @@ var ReplaceSupers = (function () {
4510
4517
 
4511
4518
  /**
4512
4519
  * Description
4513
- *
4514
- * @param {Object} node
4515
- * @param {Object} id
4516
- * @param {Object} parent
4517
- * @returns {Object}
4518
4520
  */
4519
4521
 
4520
4522
  ReplaceSupers.prototype.getLooseSuperProperty = function getLooseSuperProperty(id, parent) {
@@ -4552,10 +4554,6 @@ var ReplaceSupers = (function () {
4552
4554
 
4553
4555
  /**
4554
4556
  * Description
4555
- *
4556
- * @param {Function} getThisReference
4557
- * @param {Object} node
4558
- * @param {Object} parent
4559
4557
  */
4560
4558
 
4561
4559
  ReplaceSupers.prototype.looseHandle = function looseHandle(getThisReference, node, parent) {
@@ -4576,10 +4574,6 @@ var ReplaceSupers = (function () {
4576
4574
 
4577
4575
  /**
4578
4576
  * Description
4579
- *
4580
- * @param {Function} getThisReference
4581
- * @param {Object} node
4582
- * @param {Object} parent
4583
4577
  */
4584
4578
 
4585
4579
  ReplaceSupers.prototype.specHandle = function specHandle(getThisReference, node, parent) {
@@ -4757,7 +4751,7 @@ each(rawTransformers, function (transformer, key) {
4757
4751
 
4758
4752
  transform.transformers[key] = new Transformer(key, transformer);
4759
4753
  });
4760
- },{"../helpers/normalize-ast":23,"../helpers/object":24,"./file":28,"./modules":50,"./transformer":55,"./transformers":83,"./transformers/aliases":56,"./transformers/deprecated":57,"lodash/collection/each":202}],43:[function(require,module,exports){
4754
+ },{"../helpers/normalize-ast":23,"../helpers/object":24,"./file":28,"./modules":50,"./transformer":55,"./transformers":84,"./transformers/aliases":56,"./transformers/deprecated":57,"lodash/collection/each":202}],43:[function(require,module,exports){
4761
4755
  "use strict";
4762
4756
 
4763
4757
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -5860,6 +5854,7 @@ module.exports={
5860
5854
  module.exports={
5861
5855
  "selfContained": "runtime",
5862
5856
  "unicode-regex": "regex.unicode",
5857
+ "spec.typeofSymbol": "es6.symbols",
5863
5858
 
5864
5859
  "minification.deadCodeElimination": "utility.deadCodeElimination",
5865
5860
  "minification.removeConsoleCalls": "utility.removeConsole",
@@ -6115,7 +6110,7 @@ function Loop(node, parent, scope, file) {
6115
6110
 
6116
6111
  function BlockStatement(block, parent, scope, file) {
6117
6112
  if (!t.isLoop(parent)) {
6118
- var blockScoping = new BlockScoping(false, block, parent, scope, file);
6113
+ var blockScoping = new BlockScoping(null, block, parent, scope, file);
6119
6114
  blockScoping.run();
6120
6115
  }
6121
6116
  }
@@ -6260,12 +6255,6 @@ var BlockScoping = (function () {
6260
6255
 
6261
6256
  /**
6262
6257
  * Description
6263
- *
6264
- * @param {Boolean|Node} loopParent
6265
- * @param {Node} block
6266
- * @param {Node} parent
6267
- * @param {Scope} scope
6268
- * @param {File} file
6269
6258
  */
6270
6259
 
6271
6260
  function BlockScoping(loopParent, block, parent, scope, file) {
@@ -6506,9 +6495,6 @@ var BlockScoping = (function () {
6506
6495
  /**
6507
6496
  * Turn a `VariableDeclaration` into an array of `AssignmentExpressions` with
6508
6497
  * their declarations hoisted to before the closure wrapper.
6509
- *
6510
- * @param {Node} node VariableDeclaration
6511
- * @returns {Array}
6512
6498
  */
6513
6499
 
6514
6500
  BlockScoping.prototype.pushDeclar = function pushDeclar(node) {
@@ -6531,9 +6517,6 @@ var BlockScoping = (function () {
6531
6517
 
6532
6518
  /**
6533
6519
  * Push the closure to the body.
6534
- *
6535
- * @param {Node} ret Identifier
6536
- * @param {Node} call CallExpression
6537
6520
  */
6538
6521
 
6539
6522
  BlockScoping.prototype.build = function build(ret, call) {
@@ -6547,9 +6530,6 @@ var BlockScoping = (function () {
6547
6530
 
6548
6531
  /**
6549
6532
  * Description
6550
- *
6551
- * @param {Node} ret Identifier
6552
- * @param {Node} call CallExpression
6553
6533
  */
6554
6534
 
6555
6535
  BlockScoping.prototype.buildHas = function buildHas(ret, call) {
@@ -6673,11 +6653,6 @@ var ClassTransformer = (function () {
6673
6653
 
6674
6654
  /**
6675
6655
  * Description
6676
- *
6677
- * @param {Node} node
6678
- * @param {Node} parent
6679
- * @param {Scope} scope
6680
- * @param {File} file
6681
6656
  */
6682
6657
 
6683
6658
  function ClassTransformer(node, parent, scope, file) {
@@ -6851,8 +6826,6 @@ var ClassTransformer = (function () {
6851
6826
 
6852
6827
  /**
6853
6828
  * Description
6854
- *
6855
- * @param {Node} node
6856
6829
  */
6857
6830
 
6858
6831
  ClassTransformer.prototype.verifyConstructor = function verifyConstructor(node) {
@@ -6873,8 +6846,6 @@ var ClassTransformer = (function () {
6873
6846
 
6874
6847
  /**
6875
6848
  * Push a method to its respective mutatorMap.
6876
- *
6877
- * @param {Node} node MethodDefinition
6878
6849
  */
6879
6850
 
6880
6851
  ClassTransformer.prototype.pushMethod = function pushMethod(node) {
@@ -6914,8 +6885,6 @@ var ClassTransformer = (function () {
6914
6885
 
6915
6886
  /**
6916
6887
  * Description
6917
- *
6918
- * @param {Node} node
6919
6888
  */
6920
6889
 
6921
6890
  ClassTransformer.prototype.pushProperty = function pushProperty(node) {
@@ -6934,8 +6903,6 @@ var ClassTransformer = (function () {
6934
6903
 
6935
6904
  /**
6936
6905
  * Replace the constructor body of our class.
6937
- *
6938
- * @param {Node} method MethodDefinition
6939
6906
  */
6940
6907
 
6941
6908
  ClassTransformer.prototype.pushConstructor = function pushConstructor(method) {
@@ -7762,7 +7729,7 @@ function ExportDeclaration(node, parent, scope, file) {
7762
7729
  }
7763
7730
 
7764
7731
  exports.__esModule = true;
7765
- },{"../../../types":122,"../internal/modules":89}],69:[function(require,module,exports){
7732
+ },{"../../../types":122,"../internal/modules":90}],69:[function(require,module,exports){
7766
7733
  "use strict";
7767
7734
 
7768
7735
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -8422,6 +8389,32 @@ exports.__esModule = true;
8422
8389
  },{"../../../types":122,"lodash/collection/includes":205}],77:[function(require,module,exports){
8423
8390
  "use strict";
8424
8391
 
8392
+ var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
8393
+
8394
+ exports.UnaryExpression = UnaryExpression;
8395
+
8396
+ var t = _interopRequire(require("../../../types"));
8397
+
8398
+ var optional = exports.optional = true;
8399
+
8400
+ function UnaryExpression(node, parent, scope, file) {
8401
+ this.skip();
8402
+
8403
+ if (node.operator === "typeof") {
8404
+ var call = t.callExpression(file.addHelper("typeof"), [node.argument]);
8405
+ if (t.isIdentifier(node.argument)) {
8406
+ var undefLiteral = t.literal("undefined");
8407
+ return t.conditionalExpression(t.binaryExpression("===", t.unaryExpression("typeof", node.argument), undefLiteral), undefLiteral, call);
8408
+ } else {
8409
+ return call;
8410
+ }
8411
+ }
8412
+ }
8413
+
8414
+ exports.__esModule = true;
8415
+ },{"../../../types":122}],78:[function(require,module,exports){
8416
+ "use strict";
8417
+
8425
8418
  var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
8426
8419
 
8427
8420
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -8803,7 +8796,7 @@ var TailCallTransformer = (function () {
8803
8796
 
8804
8797
  return TailCallTransformer;
8805
8798
  })();
8806
- },{"../../../messages":26,"../../../types":122,"../../../util":124,"lodash/array/flatten":197,"lodash/collection/map":206,"lodash/collection/reduceRight":207}],78:[function(require,module,exports){
8799
+ },{"../../../messages":26,"../../../types":122,"../../../util":124,"lodash/array/flatten":197,"lodash/collection/map":206,"lodash/collection/reduceRight":207}],79:[function(require,module,exports){
8807
8800
  "use strict";
8808
8801
 
8809
8802
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -8878,7 +8871,7 @@ function TemplateLiteral(node) {
8878
8871
  }
8879
8872
 
8880
8873
  exports.__esModule = true;
8881
- },{"../../../types":122}],79:[function(require,module,exports){
8874
+ },{"../../../types":122}],80:[function(require,module,exports){
8882
8875
  "use strict";
8883
8876
 
8884
8877
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -8994,7 +8987,7 @@ function PrivateDeclaration(node) {
8994
8987
  }
8995
8988
 
8996
8989
  exports.__esModule = true;
8997
- },{"../../../types":122,"../../../util":124}],80:[function(require,module,exports){
8990
+ },{"../../../types":122,"../../../util":124}],81:[function(require,module,exports){
8998
8991
  "use strict";
8999
8992
 
9000
8993
  var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
@@ -9060,7 +9053,7 @@ function array(node, parent, scope, file) {
9060
9053
  return container;
9061
9054
  }
9062
9055
  exports.__esModule = true;
9063
- },{"../../../traversal":117,"../../../types":122,"../../../util":124,"../../helpers/build-comprehension":30}],81:[function(require,module,exports){
9056
+ },{"../../../traversal":117,"../../../types":122,"../../../util":124,"../../helpers/build-comprehension":30}],82:[function(require,module,exports){
9064
9057
  "use strict";
9065
9058
 
9066
9059
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9083,7 +9076,7 @@ build(exports, {
9083
9076
  }
9084
9077
  });
9085
9078
  exports.__esModule = true;
9086
- },{"../../../types":122,"../../helpers/build-binary-assignment-operator-transformer":29}],82:[function(require,module,exports){
9079
+ },{"../../../types":122,"../../helpers/build-binary-assignment-operator-transformer":29}],83:[function(require,module,exports){
9087
9080
  "use strict";
9088
9081
 
9089
9082
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9141,7 +9134,7 @@ function ObjectExpression(node, parent, scope, file) {
9141
9134
  }
9142
9135
 
9143
9136
  exports.__esModule = true;
9144
- },{"../../../types":122}],83:[function(require,module,exports){
9137
+ },{"../../../types":122}],84:[function(require,module,exports){
9145
9138
  "use strict";
9146
9139
 
9147
9140
  module.exports = {
@@ -9240,7 +9233,7 @@ module.exports = {
9240
9233
 
9241
9234
  _aliasFunctions: require("./internal/alias-functions"),
9242
9235
 
9243
- "spec.typeofSymbol": require("./spec/typeof-symbol"),
9236
+ "es6.symbols": require("./es6/symbols"),
9244
9237
  "spec.undefinedToVoid": require("./spec/undefined-to-void"),
9245
9238
 
9246
9239
  _strict: require("./internal/strict"),
@@ -9258,7 +9251,7 @@ module.exports = {
9258
9251
 
9259
9252
  _cleanUp: require("./internal/cleanup")
9260
9253
  };
9261
- },{"./es3/member-expression-literals":58,"./es3/property-literals":59,"./es5/properties.mutators":60,"./es6/arrow-functions":61,"./es6/block-scoping":63,"./es6/block-scoping-tdz":62,"./es6/classes":64,"./es6/constants":65,"./es6/destructuring":66,"./es6/for-of":67,"./es6/modules":68,"./es6/object-super":69,"./es6/parameters.default":70,"./es6/parameters.rest":71,"./es6/properties.computed":72,"./es6/properties.shorthand":73,"./es6/regex.sticky":74,"./es6/regex.unicode":75,"./es6/spread":76,"./es6/tail-call":77,"./es6/template-literals":78,"./es7/abstract-references":79,"./es7/comprehensions":80,"./es7/exponentiation-operator":81,"./es7/object-rest-spread":82,"./internal/alias-functions":84,"./internal/block-hoist":85,"./internal/cleanup":86,"./internal/declarations":87,"./internal/module-formatter":88,"./internal/modules":89,"./internal/strict":90,"./internal/validation":91,"./other/async-to-generator":92,"./other/bluebird-coroutines":93,"./other/flow":94,"./other/react":96,"./other/react-compat":95,"./other/regenerator":97,"./other/runtime":98,"./other/strict":99,"./playground/mallet-operator":100,"./playground/memoization-operator":101,"./playground/method-binding":102,"./playground/object-getter-memoization":103,"./spec/block-scoped-functions":104,"./spec/function-name":105,"./spec/proto-to-assign":106,"./spec/typeof-symbol":107,"./spec/undefined-to-void":108,"./utility/dead-code-elimination":109,"./utility/inline-environment-variables":110,"./utility/inline-expressions":111,"./utility/remove-console":112,"./utility/remove-debugger":113,"./validation/react":114,"./validation/undeclared-variable-check":115}],84:[function(require,module,exports){
9254
+ },{"./es3/member-expression-literals":58,"./es3/property-literals":59,"./es5/properties.mutators":60,"./es6/arrow-functions":61,"./es6/block-scoping":63,"./es6/block-scoping-tdz":62,"./es6/classes":64,"./es6/constants":65,"./es6/destructuring":66,"./es6/for-of":67,"./es6/modules":68,"./es6/object-super":69,"./es6/parameters.default":70,"./es6/parameters.rest":71,"./es6/properties.computed":72,"./es6/properties.shorthand":73,"./es6/regex.sticky":74,"./es6/regex.unicode":75,"./es6/spread":76,"./es6/symbols":77,"./es6/tail-call":78,"./es6/template-literals":79,"./es7/abstract-references":80,"./es7/comprehensions":81,"./es7/exponentiation-operator":82,"./es7/object-rest-spread":83,"./internal/alias-functions":85,"./internal/block-hoist":86,"./internal/cleanup":87,"./internal/declarations":88,"./internal/module-formatter":89,"./internal/modules":90,"./internal/strict":91,"./internal/validation":92,"./other/async-to-generator":93,"./other/bluebird-coroutines":94,"./other/flow":95,"./other/react":97,"./other/react-compat":96,"./other/regenerator":98,"./other/runtime":99,"./other/strict":100,"./playground/mallet-operator":101,"./playground/memoization-operator":102,"./playground/method-binding":103,"./playground/object-getter-memoization":104,"./spec/block-scoped-functions":105,"./spec/function-name":106,"./spec/proto-to-assign":107,"./spec/undefined-to-void":108,"./utility/dead-code-elimination":109,"./utility/inline-environment-variables":110,"./utility/inline-expressions":111,"./utility/remove-console":112,"./utility/remove-debugger":113,"./validation/react":114,"./validation/undeclared-variable-check":115}],85:[function(require,module,exports){
9262
9255
  "use strict";
9263
9256
 
9264
9257
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9360,7 +9353,7 @@ function FunctionDeclaration(node, parent, scope) {
9360
9353
 
9361
9354
  exports.FunctionExpression = FunctionDeclaration;
9362
9355
  exports.__esModule = true;
9363
- },{"../../../types":122}],85:[function(require,module,exports){
9356
+ },{"../../../types":122}],86:[function(require,module,exports){
9364
9357
  "use strict";
9365
9358
 
9366
9359
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9400,7 +9393,7 @@ var BlockStatement = exports.BlockStatement = {
9400
9393
 
9401
9394
  exports.Program = BlockStatement;
9402
9395
  exports.__esModule = true;
9403
- },{"lodash/array/flatten":197,"lodash/collection/groupBy":204,"lodash/object/values":307}],86:[function(require,module,exports){
9396
+ },{"lodash/array/flatten":197,"lodash/collection/groupBy":204,"lodash/object/values":307}],87:[function(require,module,exports){
9404
9397
  "use strict";
9405
9398
 
9406
9399
  var SequenceExpression = exports.SequenceExpression = {
@@ -9418,8 +9411,23 @@ var ExpressionStatement = exports.ExpressionStatement = {
9418
9411
  if (!node.expression) this.remove();
9419
9412
  }
9420
9413
  };
9414
+
9415
+ var Binary = exports.Binary = {
9416
+ exit: function exit(node) {
9417
+ var right = node.right;
9418
+ var left = node.left;
9419
+
9420
+ if (!left && !right) {
9421
+ this.remove();
9422
+ } else if (!left) {
9423
+ return right;
9424
+ } else if (!right) {
9425
+ return left;
9426
+ }
9427
+ }
9428
+ };
9421
9429
  exports.__esModule = true;
9422
- },{}],87:[function(require,module,exports){
9430
+ },{}],88:[function(require,module,exports){
9423
9431
  "use strict";
9424
9432
 
9425
9433
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9468,7 +9476,7 @@ function BlockStatement(node, parent, scope, file) {
9468
9476
 
9469
9477
  exports.Program = BlockStatement;
9470
9478
  exports.__esModule = true;
9471
- },{"../../../types":122,"../../helpers/strict":41}],88:[function(require,module,exports){
9479
+ },{"../../../types":122,"../../helpers/strict":41}],89:[function(require,module,exports){
9472
9480
  "use strict";
9473
9481
 
9474
9482
  var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
@@ -9490,7 +9498,7 @@ function Program(program, parent, scope, file) {
9490
9498
  }
9491
9499
 
9492
9500
  exports.__esModule = true;
9493
- },{"../../helpers/strict":41}],89:[function(require,module,exports){
9501
+ },{"../../helpers/strict":41}],90:[function(require,module,exports){
9494
9502
  "use strict";
9495
9503
 
9496
9504
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9532,40 +9540,43 @@ function ExportDeclaration(node, parent, scope) {
9532
9540
 
9533
9541
  if (node["default"]) {
9534
9542
  if (t.isClassDeclaration(declar)) {
9543
+ // export default class Foo {};
9544
+ this.node = [getDeclar(), node];
9535
9545
  node.declaration = declar.id;
9536
- return [getDeclar(), node];
9537
9546
  } else if (t.isClassExpression(declar)) {
9547
+ // export default class {};
9538
9548
  var temp = scope.generateUidIdentifier("default");
9539
9549
  declar = t.variableDeclaration("var", [t.variableDeclarator(temp, declar)]);
9540
9550
  node.declaration = temp;
9541
9551
  return [getDeclar(), node];
9542
9552
  } else if (t.isFunctionDeclaration(declar)) {
9553
+ // export default function Foo() {}
9543
9554
  node._blockHoist = 2;
9544
9555
  node.declaration = declar.id;
9545
9556
  return [getDeclar(), node];
9546
9557
  }
9547
9558
  } else {
9548
9559
  if (t.isFunctionDeclaration(declar)) {
9560
+ // export function Foo() {}
9549
9561
  node.specifiers = [t.importSpecifier(declar.id, declar.id)];
9550
9562
  node.declaration = null;
9551
9563
  node._blockHoist = 2;
9552
9564
  return [getDeclar(), node];
9553
9565
  } else if (t.isVariableDeclaration(declar)) {
9566
+ // export var foo = "bar";
9554
9567
  var specifiers = [];
9555
-
9556
9568
  var bindings = t.getBindingIdentifiers(declar);
9557
9569
  for (var key in bindings) {
9558
9570
  var id = bindings[key];
9559
9571
  specifiers.push(t.exportSpecifier(id, id));
9560
9572
  }
9561
-
9562
9573
  return [declar, t.exportDeclaration(null, specifiers)];
9563
9574
  }
9564
9575
  }
9565
9576
  }
9566
9577
 
9567
9578
  exports.__esModule = true;
9568
- },{"../../../types":122}],90:[function(require,module,exports){
9579
+ },{"../../../types":122}],91:[function(require,module,exports){
9569
9580
  "use strict";
9570
9581
 
9571
9582
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9581,7 +9592,7 @@ function Program(program, parent, scope, file) {
9581
9592
  }
9582
9593
 
9583
9594
  exports.__esModule = true;
9584
- },{"../../../types":122}],91:[function(require,module,exports){
9595
+ },{"../../../types":122}],92:[function(require,module,exports){
9585
9596
  "use strict";
9586
9597
 
9587
9598
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9590,6 +9601,7 @@ var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? ob
9590
9601
 
9591
9602
  exports.ForOfStatement = ForOfStatement;
9592
9603
  exports.Property = Property;
9604
+ exports.BlockStatement = BlockStatement;
9593
9605
 
9594
9606
  var messages = _interopRequireWildcard(require("../../../messages"));
9595
9607
 
@@ -9619,8 +9631,21 @@ function Property(node, parent, scope, file) {
9619
9631
  }
9620
9632
 
9621
9633
  exports.MethodDefinition = Property;
9634
+
9635
+ function BlockStatement(node) {
9636
+ for (var i = 0; i < node.body.length; i++) {
9637
+ var bodyNode = node.body[i];
9638
+ if (t.isExpressionStatement(bodyNode) && t.isLiteral(bodyNode.expression)) {
9639
+ bodyNode._blockHoist = Infinity;
9640
+ } else {
9641
+ return;
9642
+ }
9643
+ }
9644
+ }
9645
+
9646
+ exports.Program = BlockStatement;
9622
9647
  exports.__esModule = true;
9623
- },{"../../../messages":26,"../../../types":122}],92:[function(require,module,exports){
9648
+ },{"../../../messages":26,"../../../types":122}],93:[function(require,module,exports){
9624
9649
  "use strict";
9625
9650
 
9626
9651
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9636,7 +9661,7 @@ exports.Function = function (node, parent, scope, file) {
9636
9661
  return remapAsyncToGenerator(node, file.addHelper("async-to-generator"), scope);
9637
9662
  };
9638
9663
  exports.__esModule = true;
9639
- },{"../../helpers/remap-async-to-generator":39,"./bluebird-coroutines":93}],93:[function(require,module,exports){
9664
+ },{"../../helpers/remap-async-to-generator":39,"./bluebird-coroutines":94}],94:[function(require,module,exports){
9640
9665
  "use strict";
9641
9666
 
9642
9667
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9660,7 +9685,7 @@ exports.Function = function (node, parent, scope, file) {
9660
9685
  return remapAsyncToGenerator(node, t.memberExpression(file.addImport("bluebird", null, true), t.identifier("coroutine")), scope);
9661
9686
  };
9662
9687
  exports.__esModule = true;
9663
- },{"../../../types":122,"../../helpers/remap-async-to-generator":39}],94:[function(require,module,exports){
9688
+ },{"../../../types":122,"../../helpers/remap-async-to-generator":39}],95:[function(require,module,exports){
9664
9689
  "use strict";
9665
9690
 
9666
9691
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9707,7 +9732,7 @@ function ExportDeclaration(node) {
9707
9732
  }
9708
9733
 
9709
9734
  exports.__esModule = true;
9710
- },{"../../../types":122}],95:[function(require,module,exports){
9735
+ },{"../../../types":122}],96:[function(require,module,exports){
9711
9736
  "use strict";
9712
9737
 
9713
9738
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9738,7 +9763,7 @@ require("../../helpers/build-react-transformer")(exports, {
9738
9763
  }
9739
9764
  });
9740
9765
  exports.__esModule = true;
9741
- },{"../../../types":122,"../../helpers/build-react-transformer":32,"../../helpers/react":37}],96:[function(require,module,exports){
9766
+ },{"../../../types":122,"../../helpers/build-react-transformer":32,"../../helpers/react":37}],97:[function(require,module,exports){
9742
9767
  "use strict";
9743
9768
 
9744
9769
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9790,7 +9815,7 @@ require("../../helpers/build-react-transformer")(exports, {
9790
9815
  }
9791
9816
  });
9792
9817
  exports.__esModule = true;
9793
- },{"../../../types":122,"../../helpers/build-react-transformer":32,"../../helpers/react":37}],97:[function(require,module,exports){
9818
+ },{"../../../types":122,"../../helpers/build-react-transformer":32,"../../helpers/react":37}],98:[function(require,module,exports){
9794
9819
  "use strict";
9795
9820
 
9796
9821
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9812,7 +9837,7 @@ var Program = exports.Program = {
9812
9837
  }
9813
9838
  };
9814
9839
  exports.__esModule = true;
9815
- },{"../../../types":122,"regenerator-babel":320}],98:[function(require,module,exports){
9840
+ },{"../../../types":122,"regenerator-babel":320}],99:[function(require,module,exports){
9816
9841
  "use strict";
9817
9842
 
9818
9843
  var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
@@ -9840,7 +9865,7 @@ var coreHas = function coreHas(node) {
9840
9865
  return node.name !== "_" && has(core, node.name);
9841
9866
  };
9842
9867
 
9843
- var ALIASABLE_CONSTRUCTORS = ["Symbol", "Promise", "Map", "WeakMap", "Set", "WeakSet", "Number"];
9868
+ var ALIASABLE_CONSTRUCTORS = ["Symbol", "Promise", "Map", "WeakMap", "Set", "WeakSet"];
9844
9869
 
9845
9870
  var astVisitor = {
9846
9871
  enter: function enter(node, parent, scope, file) {
@@ -9923,7 +9948,7 @@ function Identifier(node, parent, scope, file) {
9923
9948
  }
9924
9949
 
9925
9950
  exports.__esModule = true;
9926
- },{"../../../types":122,"../../../util":124,"core-js/library":177,"lodash/collection/includes":205,"lodash/object/has":304}],99:[function(require,module,exports){
9951
+ },{"../../../types":122,"../../../util":124,"core-js/library":177,"lodash/collection/includes":205,"lodash/object/has":304}],100:[function(require,module,exports){
9927
9952
  "use strict";
9928
9953
 
9929
9954
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9963,7 +9988,7 @@ function CallExpression(node, parent, scope, file) {
9963
9988
  }
9964
9989
 
9965
9990
  exports.__esModule = true;
9966
- },{"../../../messages":26,"../../../types":122}],100:[function(require,module,exports){
9991
+ },{"../../../messages":26,"../../../types":122}],101:[function(require,module,exports){
9967
9992
  "use strict";
9968
9993
 
9969
9994
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -9994,7 +10019,7 @@ build(exports, {
9994
10019
  }
9995
10020
  });
9996
10021
  exports.__esModule = true;
9997
- },{"../../../messages":26,"../../../types":122,"../../helpers/build-conditional-assignment-operator-transformer":31}],101:[function(require,module,exports){
10022
+ },{"../../../messages":26,"../../../types":122,"../../helpers/build-conditional-assignment-operator-transformer":31}],102:[function(require,module,exports){
9998
10023
  "use strict";
9999
10024
 
10000
10025
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -10027,7 +10052,7 @@ build(exports, {
10027
10052
  }
10028
10053
  });
10029
10054
  exports.__esModule = true;
10030
- },{"../../../types":122,"../../helpers/build-conditional-assignment-operator-transformer":31}],102:[function(require,module,exports){
10055
+ },{"../../../types":122,"../../helpers/build-conditional-assignment-operator-transformer":31}],103:[function(require,module,exports){
10031
10056
  "use strict";
10032
10057
 
10033
10058
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -10071,7 +10096,7 @@ function BindFunctionExpression(node, parent, scope) {
10071
10096
  }
10072
10097
 
10073
10098
  exports.__esModule = true;
10074
- },{"../../../types":122}],103:[function(require,module,exports){
10099
+ },{"../../../types":122}],104:[function(require,module,exports){
10075
10100
  "use strict";
10076
10101
 
10077
10102
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -10117,7 +10142,7 @@ function MethodDefinition(node, parent, scope, file) {
10117
10142
 
10118
10143
  exports.Property = MethodDefinition;
10119
10144
  exports.__esModule = true;
10120
- },{"../../../types":122}],104:[function(require,module,exports){
10145
+ },{"../../../types":122}],105:[function(require,module,exports){
10121
10146
  "use strict";
10122
10147
 
10123
10148
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -10150,12 +10175,12 @@ function BlockStatement(node, parent, scope, file) {
10150
10175
  }
10151
10176
 
10152
10177
  exports.__esModule = true;
10153
- },{"../../../types":122}],105:[function(require,module,exports){
10178
+ },{"../../../types":122}],106:[function(require,module,exports){
10154
10179
  "use strict";
10155
10180
 
10156
10181
  exports.FunctionExpression = require("../../helpers/name-method").bare;
10157
10182
  exports.__esModule = true;
10158
- },{"../../helpers/name-method":36}],106:[function(require,module,exports){
10183
+ },{"../../helpers/name-method":36}],107:[function(require,module,exports){
10159
10184
  "use strict";
10160
10185
 
10161
10186
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -10227,33 +10252,7 @@ function ObjectExpression(node, parent, scope, file) {
10227
10252
  }
10228
10253
 
10229
10254
  exports.__esModule = true;
10230
- },{"../../../types":122,"lodash/array/pull":199}],107:[function(require,module,exports){
10231
- "use strict";
10232
-
10233
- var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
10234
-
10235
- exports.UnaryExpression = UnaryExpression;
10236
-
10237
- var t = _interopRequire(require("../../../types"));
10238
-
10239
- var optional = exports.optional = true;
10240
-
10241
- function UnaryExpression(node, parent, scope, file) {
10242
- this.skip();
10243
-
10244
- if (node.operator === "typeof") {
10245
- var call = t.callExpression(file.addHelper("typeof"), [node.argument]);
10246
- if (t.isIdentifier(node.argument)) {
10247
- var undefLiteral = t.literal("undefined");
10248
- return t.conditionalExpression(t.binaryExpression("===", t.unaryExpression("typeof", node.argument), undefLiteral), undefLiteral, call);
10249
- } else {
10250
- return call;
10251
- }
10252
- }
10253
- }
10254
-
10255
- exports.__esModule = true;
10256
- },{"../../../types":122}],108:[function(require,module,exports){
10255
+ },{"../../../types":122,"lodash/array/pull":199}],108:[function(require,module,exports){
10257
10256
  "use strict";
10258
10257
 
10259
10258
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -10553,6 +10552,8 @@ var flatten = _interopRequire(require("lodash/array/flatten"));
10553
10552
 
10554
10553
  var compact = _interopRequire(require("lodash/array/compact"));
10555
10554
 
10555
+ var t = _interopRequire(require("../types"));
10556
+
10556
10557
  var TraversalContext = (function () {
10557
10558
  function TraversalContext(scope, opts, state, parentPath) {
10558
10559
  _classCallCheck(this, TraversalContext);
@@ -10595,7 +10596,7 @@ var TraversalContext = (function () {
10595
10596
  if (this.shouldFlatten) {
10596
10597
  node[key] = flatten(node[key]);
10597
10598
 
10598
- if (key === "body" || key === "expressions") {
10599
+ if (t.FLATTENABLE_KEYS.indexOf(key) >= 0) {
10599
10600
  // we can safely compact this
10600
10601
  node[key] = compact(node[key]);
10601
10602
  }
@@ -10606,7 +10607,7 @@ var TraversalContext = (function () {
10606
10607
  })();
10607
10608
 
10608
10609
  module.exports = TraversalContext;
10609
- },{"./path":118,"lodash/array/compact":196,"lodash/array/flatten":197}],117:[function(require,module,exports){
10610
+ },{"../types":122,"./path":118,"lodash/array/compact":196,"lodash/array/flatten":197}],117:[function(require,module,exports){
10610
10611
  "use strict";
10611
10612
 
10612
10613
  var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
@@ -10817,7 +10818,6 @@ var TraversalPath = (function () {
10817
10818
  };
10818
10819
 
10819
10820
  TraversalPath.prototype.setContext = function setContext(parentPath, context, key) {
10820
- this.shouldRemove = false;
10821
10821
  this.shouldSkip = false;
10822
10822
  this.shouldStop = false;
10823
10823
 
@@ -10831,8 +10831,9 @@ var TraversalPath = (function () {
10831
10831
  };
10832
10832
 
10833
10833
  TraversalPath.prototype.remove = function remove() {
10834
- this.shouldRemove = true;
10835
- this.shouldSkip = true;
10834
+ this._refresh(this.node, []);
10835
+ this.container[this.key] = null;
10836
+ this.flatten();
10836
10837
  };
10837
10838
 
10838
10839
  TraversalPath.prototype.skip = function skip() {
@@ -10848,6 +10849,13 @@ var TraversalPath = (function () {
10848
10849
  this.context.flatten();
10849
10850
  };
10850
10851
 
10852
+ TraversalPath.prototype._refresh = function _refresh(oldNode, newNodes) {};
10853
+
10854
+ TraversalPath.prototype.refresh = function refresh() {
10855
+ var node = this.node;
10856
+ this._refresh(node, [node]);
10857
+ };
10858
+
10851
10859
  TraversalPath.prototype.call = function call(key) {
10852
10860
  var node = this.node;
10853
10861
  if (!node) return;
@@ -10861,11 +10869,6 @@ var TraversalPath = (function () {
10861
10869
  if (replacement) {
10862
10870
  this.node = replacement;
10863
10871
  }
10864
-
10865
- if (this.shouldRemove) {
10866
- this.container[this.key] = null;
10867
- this.flatten();
10868
- }
10869
10872
  };
10870
10873
 
10871
10874
  TraversalPath.prototype.isBlacklisted = function isBlacklisted() {
@@ -10885,16 +10888,17 @@ var TraversalPath = (function () {
10885
10888
  var node = this.node;
10886
10889
  var opts = this.opts;
10887
10890
 
10888
- if (Array.isArray(node)) {
10889
- // traverse over these replacement nodes we purposely don't call exitNode
10890
- // as the original node has been destroyed
10891
- for (var i = 0; i < node.length; i++) {
10892
- traverse.node(node[i], opts, this.scope, this.state, this);
10891
+ if (node) {
10892
+ if (Array.isArray(node)) {
10893
+ // traverse over these replacement nodes we purposely don't call exitNode
10894
+ // as the original node has been destroyed
10895
+ for (var i = 0; i < node.length; i++) {
10896
+ traverse.node(node[i], opts, this.scope, this.state, this);
10897
+ }
10898
+ } else {
10899
+ traverse.node(node, opts, this.scope, this.state, this);
10900
+ this.call("exit");
10893
10901
  }
10894
- } else {
10895
- traverse.node(node, opts, this.scope, this.state, this);
10896
-
10897
- this.call("exit");
10898
10902
  }
10899
10903
 
10900
10904
  return this.shouldStop;
@@ -10926,25 +10930,29 @@ var TraversalPath = (function () {
10926
10930
  return this.container[this.key];
10927
10931
  },
10928
10932
  set: function (replacement) {
10933
+ if (!replacement) return this.remove();
10934
+
10935
+ var oldNode = this.node;
10929
10936
  var isArray = Array.isArray(replacement);
10937
+ var replacements = isArray ? replacement : [replacement];
10930
10938
 
10931
10939
  // inherit comments from original node to the first replacement node
10932
- var inheritTo = replacement;
10933
- if (isArray) inheritTo = replacement[0];
10934
- if (inheritTo) t.inheritsComments(inheritTo, this.node);
10940
+ var inheritTo = replacements[0];
10941
+ if (inheritTo) t.inheritsComments(inheritTo, oldNode);
10935
10942
 
10936
10943
  // replace the node
10937
10944
  this.container[this.key] = replacement;
10945
+
10946
+ // potentially create new scope
10938
10947
  this.setScope();
10939
10948
 
10949
+ // refresh scope with new/removed bindings
10950
+ this._refresh(oldNode, replacements);
10951
+
10940
10952
  var file = this.scope && this.scope.file;
10941
10953
  if (file) {
10942
- if (isArray) {
10943
- for (var i = 0; i < replacement.length; i++) {
10944
- file.checkNode(replacement[i], this.scope);
10945
- }
10946
- } else {
10947
- file.checkNode(replacement, this.scope);
10954
+ for (var i = 0; i < replacements.length; i++) {
10955
+ file.checkNode(replacements[i], this.scope);
10948
10956
  }
10949
10957
  }
10950
10958
 
@@ -10956,6 +10964,7 @@ var TraversalPath = (function () {
10956
10964
  }
10957
10965
 
10958
10966
  this.flatten();
10967
+ // TODO: duplicate internal path metadata across the new node paths
10959
10968
  }
10960
10969
  },
10961
10970
  configurable: true
@@ -10976,6 +10985,8 @@ for (var i = 0; i < t.TYPES.length; i++) {
10976
10985
  };
10977
10986
  })();
10978
10987
  }
10988
+
10989
+ // todo
10979
10990
  },{"../types":122,"./index":117,"./scope":119,"lodash/collection/includes":205}],119:[function(require,module,exports){
10980
10991
  "use strict";
10981
10992
 
@@ -11059,11 +11070,6 @@ var Scope = (function () {
11059
11070
  /**
11060
11071
  * This searches the current "scope" and collects all references/bindings
11061
11072
  * within.
11062
- *
11063
- * @param {Node} block
11064
- * @param {Node} parentBlock
11065
- * @param {Scope} [parent]
11066
- * @param {File} [file]
11067
11073
  */
11068
11074
 
11069
11075
  function Scope(block, parentBlock, parent, file) {
@@ -11079,14 +11085,10 @@ var Scope = (function () {
11079
11085
  }
11080
11086
 
11081
11087
  Scope.globals = flatten([globals.builtin, globals.browser, globals.node].map(Object.keys));
11082
- Scope.contextVariables = ["this", "arguments"];
11088
+ Scope.contextVariables = ["this", "arguments", "super"];
11083
11089
 
11084
11090
  /**
11085
11091
  * Description
11086
- *
11087
- * @param {Object} node
11088
- * @param {Object} opts
11089
- * @param [state]
11090
11092
  */
11091
11093
 
11092
11094
  Scope.prototype.traverse = (function (_traverse) {
@@ -11105,12 +11107,12 @@ var Scope = (function () {
11105
11107
 
11106
11108
  /**
11107
11109
  * Description
11108
- *
11109
- * @param {String} [name="temp"]
11110
11110
  */
11111
11111
 
11112
- Scope.prototype.generateTemp = function generateTemp(name) {
11113
- var id = this.generateUidIdentifier(name || "temp");
11112
+ Scope.prototype.generateTemp = function generateTemp() {
11113
+ var name = arguments[0] === undefined ? "temp" : arguments[0];
11114
+
11115
+ var id = this.generateUidIdentifier(name);
11114
11116
  this.push({
11115
11117
  key: id.name,
11116
11118
  id: id
@@ -11120,8 +11122,6 @@ var Scope = (function () {
11120
11122
 
11121
11123
  /**
11122
11124
  * Description
11123
- *
11124
- * @param {String} name
11125
11125
  */
11126
11126
 
11127
11127
  Scope.prototype.generateUidIdentifier = function generateUidIdentifier(name) {
@@ -11132,8 +11132,6 @@ var Scope = (function () {
11132
11132
 
11133
11133
  /**
11134
11134
  * Description
11135
- *
11136
- * @param {String} name
11137
11135
  */
11138
11136
 
11139
11137
  Scope.prototype.generateUid = function generateUid(name) {
@@ -11156,9 +11154,6 @@ var Scope = (function () {
11156
11154
 
11157
11155
  /*
11158
11156
  * Description
11159
- *
11160
- * @param {Object} parent
11161
- * @returns {Object}
11162
11157
  */
11163
11158
 
11164
11159
  Scope.prototype.generateUidBasedOnNode = function generateUidBasedOnNode(parent) {
@@ -11207,9 +11202,6 @@ var Scope = (function () {
11207
11202
 
11208
11203
  /**
11209
11204
  * Description
11210
- *
11211
- * @param {Object} node
11212
- * @returns {Object}
11213
11205
  */
11214
11206
 
11215
11207
  Scope.prototype.generateTempBasedOnNode = function generateTempBasedOnNode(node) {
@@ -11225,6 +11217,10 @@ var Scope = (function () {
11225
11217
  return id;
11226
11218
  };
11227
11219
 
11220
+ /**
11221
+ * Description
11222
+ */
11223
+
11228
11224
  Scope.prototype.checkBlockScopedCollisions = function checkBlockScopedCollisions(kind, name, id) {
11229
11225
  var local = this.getOwnBindingInfo(name);
11230
11226
  if (!local) return;
@@ -11237,6 +11233,10 @@ var Scope = (function () {
11237
11233
  }
11238
11234
  };
11239
11235
 
11236
+ /**
11237
+ * Description
11238
+ */
11239
+
11240
11240
  Scope.prototype.rename = function rename(oldName, newName) {
11241
11241
  if (!newName) newName = this.generateUidIdentifier(oldName).name;
11242
11242
 
@@ -11263,12 +11263,16 @@ var Scope = (function () {
11263
11263
  }
11264
11264
  });
11265
11265
 
11266
- this.clearOwnBinding(oldName);
11266
+ scope.removeOwnBinding(oldName);
11267
11267
  scope.bindings[newName] = info;
11268
11268
 
11269
11269
  binding.name = newName;
11270
11270
  };
11271
11271
 
11272
+ /**
11273
+ * Description
11274
+ */
11275
+
11272
11276
  Scope.prototype.inferType = function inferType(node) {
11273
11277
  var target;
11274
11278
 
@@ -11301,6 +11305,10 @@ var Scope = (function () {
11301
11305
  }
11302
11306
  };
11303
11307
 
11308
+ /**
11309
+ * Description
11310
+ */
11311
+
11304
11312
  Scope.prototype.isTypeGeneric = function isTypeGeneric(name, genericName) {
11305
11313
  var info = this.getBindingInfo(name);
11306
11314
  if (!info) return false;
@@ -11309,10 +11317,18 @@ var Scope = (function () {
11309
11317
  return t.isGenericTypeAnnotation(type) && t.isIdentifier(type.id, { name: genericName });
11310
11318
  };
11311
11319
 
11320
+ /**
11321
+ * Description
11322
+ */
11323
+
11312
11324
  Scope.prototype.assignTypeGeneric = function assignTypeGeneric(name, type) {
11313
11325
  this.assignType(name, t.genericTypeAnnotation(t.identifier(type)));
11314
11326
  };
11315
11327
 
11328
+ /**
11329
+ * Description
11330
+ */
11331
+
11316
11332
  Scope.prototype.assignType = function assignType(name, type) {
11317
11333
  var info = this.getBindingInfo(name);
11318
11334
  if (!info) return;
@@ -11320,7 +11336,11 @@ var Scope = (function () {
11320
11336
  info.typeAnnotation = type;
11321
11337
  };
11322
11338
 
11323
- Scope.prototype.getTypeAnnotation = function getTypeAnnotation(name, id, node) {
11339
+ /**
11340
+ * Description
11341
+ */
11342
+
11343
+ Scope.prototype.getTypeAnnotation = function getTypeAnnotation(id, node) {
11324
11344
  var info = {
11325
11345
  annotation: null,
11326
11346
  inferred: false
@@ -11345,6 +11365,10 @@ var Scope = (function () {
11345
11365
  return info;
11346
11366
  };
11347
11367
 
11368
+ /**
11369
+ * Description
11370
+ */
11371
+
11348
11372
  Scope.prototype.toArray = function toArray(node, i) {
11349
11373
  var file = this.file;
11350
11374
 
@@ -11371,10 +11395,24 @@ var Scope = (function () {
11371
11395
  return t.callExpression(file.addHelper(helperName), args);
11372
11396
  };
11373
11397
 
11374
- Scope.prototype.clearOwnBinding = function clearOwnBinding(name) {
11375
- delete this.bindings[name];
11398
+ /**
11399
+ * Description
11400
+ */
11401
+
11402
+ Scope.prototype.refreshDeclaration = function refreshDeclaration(node) {
11403
+ if (t.isBlockScoped(node)) {
11404
+ this.getBlockParent().registerDeclaration(node);
11405
+ } else if (t.isVariableDeclaration(node, { kind: "var" })) {
11406
+ this.getFunctionParent().registerDeclaration(node);
11407
+ } else if (node === this.block) {
11408
+ this.recrawl();
11409
+ }
11376
11410
  };
11377
11411
 
11412
+ /**
11413
+ * Description
11414
+ */
11415
+
11378
11416
  Scope.prototype.registerDeclaration = function registerDeclaration(node) {
11379
11417
  if (t.isFunctionDeclaration(node)) {
11380
11418
  this.registerBinding("hoisted", node);
@@ -11391,6 +11429,10 @@ var Scope = (function () {
11391
11429
  }
11392
11430
  };
11393
11431
 
11432
+ /**
11433
+ * Description
11434
+ */
11435
+
11394
11436
  Scope.prototype.registerBindingReassignment = function registerBindingReassignment(node) {
11395
11437
  var ids = t.getBindingIdentifiers(node);
11396
11438
  for (var name in ids) {
@@ -11406,6 +11448,10 @@ var Scope = (function () {
11406
11448
  }
11407
11449
  };
11408
11450
 
11451
+ /**
11452
+ * Description
11453
+ */
11454
+
11409
11455
  Scope.prototype.registerBinding = function registerBinding(kind, node) {
11410
11456
  if (!kind) throw new ReferenceError("no `kind`");
11411
11457
 
@@ -11416,7 +11462,7 @@ var Scope = (function () {
11416
11462
 
11417
11463
  this.checkBlockScopedCollisions(kind, name, id);
11418
11464
 
11419
- var typeInfo = this.getTypeAnnotation(name, id, node);
11465
+ var typeInfo = this.getTypeAnnotation(id, node);
11420
11466
 
11421
11467
  this.bindings[name] = {
11422
11468
  typeAnnotationInferred: typeInfo.inferred,
@@ -11430,17 +11476,18 @@ var Scope = (function () {
11430
11476
  }
11431
11477
  };
11432
11478
 
11433
- Scope.prototype.registerVariableDeclaration = function registerVariableDeclaration(declar) {
11434
- var declars = declar.declarations;
11435
- for (var i = 0; i < declars.length; i++) {
11436
- this.registerBinding(declar.kind, declars[i]);
11437
- }
11438
- };
11479
+ /**
11480
+ * Description
11481
+ */
11439
11482
 
11440
11483
  Scope.prototype.addGlobal = function addGlobal(node) {
11441
11484
  this.globals[node.name] = node;
11442
11485
  };
11443
11486
 
11487
+ /**
11488
+ * Description
11489
+ */
11490
+
11444
11491
  Scope.prototype.hasGlobal = function hasGlobal(name) {
11445
11492
  var scope = this;
11446
11493
 
@@ -11451,6 +11498,19 @@ var Scope = (function () {
11451
11498
  return false;
11452
11499
  };
11453
11500
 
11501
+ /**
11502
+ * Description
11503
+ */
11504
+
11505
+ Scope.prototype.recrawl = function recrawl() {
11506
+ this.block._scopeInfo = null;
11507
+ this.crawl();
11508
+ };
11509
+
11510
+ /**
11511
+ * Description
11512
+ */
11513
+
11454
11514
  Scope.prototype.crawl = function crawl() {
11455
11515
  var block = this.block;
11456
11516
  var i;
@@ -11491,6 +11551,12 @@ var Scope = (function () {
11491
11551
  }
11492
11552
  }
11493
11553
 
11554
+ // Class
11555
+
11556
+ if (t.isClass(block) && block.id) {
11557
+ this.registerBinding("var", block.id);
11558
+ }
11559
+
11494
11560
  // Function - params, rest
11495
11561
 
11496
11562
  if (t.isFunction(block)) {
@@ -11536,8 +11602,6 @@ var Scope = (function () {
11536
11602
 
11537
11603
  /**
11538
11604
  * Description
11539
- *
11540
- * @param {Object} opts
11541
11605
  */
11542
11606
 
11543
11607
  Scope.prototype.push = function push(opts) {
@@ -11552,7 +11616,7 @@ var Scope = (function () {
11552
11616
  var _block = block;
11553
11617
  if (!_block._declarations) _block._declarations = {};
11554
11618
 
11555
- block._declarations[opts.key] = {
11619
+ block._declarations[opts.key || opts.id.name] = {
11556
11620
  kind: opts.kind || "var",
11557
11621
  id: opts.id,
11558
11622
  init: opts.init
@@ -11575,10 +11639,21 @@ var Scope = (function () {
11575
11639
  return scope;
11576
11640
  };
11577
11641
 
11642
+ /**
11643
+ * Walk up the scope tree until we hit either a BlockStatement/Loop or reach the
11644
+ * very top and hit Program.
11645
+ */
11646
+
11647
+ Scope.prototype.getBlockParent = function getBlockParent() {
11648
+ var scope = this;
11649
+ while (scope.parent && !t.isFunction(scope.block) && !t.isLoop(scope.block) && !t.isFunction(scope.block)) {
11650
+ scope = scope.parent;
11651
+ }
11652
+ return scope;
11653
+ };
11654
+
11578
11655
  /**
11579
11656
  * Walks the scope tree and gathers **all** bindings.
11580
- *
11581
- * @returns {Object}
11582
11657
  */
11583
11658
 
11584
11659
  Scope.prototype.getAllBindings = function getAllBindings() {
@@ -11595,9 +11670,6 @@ var Scope = (function () {
11595
11670
 
11596
11671
  /**
11597
11672
  * Walks the scope tree and gathers all declarations of `kind`.
11598
- *
11599
- * @param {String} kind
11600
- * @returns {Object}
11601
11673
  */
11602
11674
 
11603
11675
  Scope.prototype.getAllBindingsOfKind = function getAllBindingsOfKind(kind) {
@@ -11615,13 +11687,17 @@ var Scope = (function () {
11615
11687
  return ids;
11616
11688
  };
11617
11689
 
11618
- // misc
11690
+ /**
11691
+ * Description
11692
+ */
11619
11693
 
11620
11694
  Scope.prototype.bindingIdentifierEquals = function bindingIdentifierEquals(name, node) {
11621
11695
  return this.getBindingIdentifier(name) === node;
11622
11696
  };
11623
11697
 
11624
- // get
11698
+ /**
11699
+ * Description
11700
+ */
11625
11701
 
11626
11702
  Scope.prototype.getBindingInfo = function getBindingInfo(name) {
11627
11703
  var scope = this;
@@ -11632,24 +11708,44 @@ var Scope = (function () {
11632
11708
  } while (scope = scope.parent);
11633
11709
  };
11634
11710
 
11711
+ /**
11712
+ * Description
11713
+ */
11714
+
11635
11715
  Scope.prototype.getOwnBindingInfo = function getOwnBindingInfo(name) {
11636
11716
  return this.bindings[name];
11637
11717
  };
11638
11718
 
11719
+ /**
11720
+ * Description
11721
+ */
11722
+
11639
11723
  Scope.prototype.getBindingIdentifier = function getBindingIdentifier(name) {
11640
11724
  var info = this.getBindingInfo(name);
11641
11725
  return info && info.identifier;
11642
11726
  };
11643
11727
 
11728
+ /**
11729
+ * Description
11730
+ */
11731
+
11644
11732
  Scope.prototype.getOwnBindingIdentifier = function getOwnBindingIdentifier(name) {
11645
11733
  var binding = this.bindings[name];
11646
11734
  return binding && binding.identifier;
11647
11735
  };
11648
11736
 
11737
+ /**
11738
+ * Description
11739
+ */
11740
+
11649
11741
  Scope.prototype.getOwnImmutableBindingValue = function getOwnImmutableBindingValue(name) {
11650
11742
  return this._immutableBindingInfoToValue(this.getOwnBindingInfo(name));
11651
11743
  };
11652
11744
 
11745
+ /**
11746
+ * Description
11747
+ */
11748
+
11653
11749
  Scope.prototype.getImmutableBindingValue = function getImmutableBindingValue(name) {
11654
11750
  return this._immutableBindingInfoToValue(this.getBindingInfo(name));
11655
11751
  };
@@ -11676,12 +11772,18 @@ var Scope = (function () {
11676
11772
  }
11677
11773
  };
11678
11774
 
11679
- // has
11775
+ /**
11776
+ * Description
11777
+ */
11680
11778
 
11681
11779
  Scope.prototype.hasOwnBinding = function hasOwnBinding(name) {
11682
11780
  return !!this.getOwnBindingInfo(name);
11683
11781
  };
11684
11782
 
11783
+ /**
11784
+ * Description
11785
+ */
11786
+
11685
11787
  Scope.prototype.hasBinding = function hasBinding(name) {
11686
11788
  if (!name) return false;
11687
11789
  if (this.hasOwnBinding(name)) return true;
@@ -11691,10 +11793,31 @@ var Scope = (function () {
11691
11793
  return false;
11692
11794
  };
11693
11795
 
11796
+ /**
11797
+ * Description
11798
+ */
11799
+
11694
11800
  Scope.prototype.parentHasBinding = function parentHasBinding(name) {
11695
11801
  return this.parent && this.parent.hasBinding(name);
11696
11802
  };
11697
11803
 
11804
+ /**
11805
+ * Description
11806
+ */
11807
+
11808
+ Scope.prototype.removeOwnBinding = function removeOwnBinding(name) {
11809
+ this.bindings[name] = null;
11810
+ };
11811
+
11812
+ /**
11813
+ * Description
11814
+ */
11815
+
11816
+ Scope.prototype.removeBinding = function removeBinding(name) {
11817
+ var info = this.getBindingInfo(name);
11818
+ if (info) info.scope.removeOwnBinding(name);
11819
+ };
11820
+
11698
11821
  return Scope;
11699
11822
  })();
11700
11823
 
@@ -11727,7 +11850,7 @@ module.exports={
11727
11850
  "ImportSpecifier": ["ModuleSpecifier"],
11728
11851
  "ExportSpecifier": ["ModuleSpecifier"],
11729
11852
 
11730
- "BlockStatement": ["Statement", "Scopable"],
11853
+ "BlockStatement": ["Scopable", "Statement"],
11731
11854
  "Program": ["Scopable"],
11732
11855
  "CatchClause": ["Scopable"],
11733
11856
 
@@ -11738,8 +11861,8 @@ module.exports={
11738
11861
  "SpreadProperty": ["UnaryLike"],
11739
11862
  "SpreadElement": ["UnaryLike"],
11740
11863
 
11741
- "ClassDeclaration": ["Statement", "Declaration", "Class"],
11742
- "ClassExpression": ["Class", "Expression"],
11864
+ "ClassDeclaration": ["Scopable", "Class", "Statement", "Declaration"],
11865
+ "ClassExpression": ["Scopable", "Class", "Expression"],
11743
11866
 
11744
11867
  "ForOfStatement": ["Scopable", "Statement", "For", "Loop"],
11745
11868
  "ForInStatement": ["Scopable", "Statement", "For", "Loop"],
@@ -12031,9 +12154,6 @@ module.exports = t;
12031
12154
  /**
12032
12155
  * Registers `is[Type]` and `assert[Type]` generated functions for a given `type`.
12033
12156
  * Pass `skipAliasCheck` to force it to directly compare `node.type` with `type`.
12034
- *
12035
- * @param {String} type
12036
- * @param {Boolean?} skipAliasCheck
12037
12157
  */
12038
12158
 
12039
12159
  function registerType(type, skipAliasCheck) {
@@ -12052,6 +12172,7 @@ function registerType(type, skipAliasCheck) {
12052
12172
 
12053
12173
  t.STATEMENT_OR_BLOCK_KEYS = ["consequent", "body", "alternate"];
12054
12174
  t.NATIVE_TYPE_NAMES = ["Array", "Object", "Number", "Boolean", "Date", "Array", "String"];
12175
+ t.FLATTENABLE_KEYS = ["body", "expressions"];
12055
12176
  t.FOR_INIT_KEYS = ["left", "init"];
12056
12177
 
12057
12178
  t.VISITOR_KEYS = require("./visitor-keys");
@@ -12084,12 +12205,6 @@ t.TYPES = Object.keys(t.VISITOR_KEYS).concat(Object.keys(t.FLIPPED_ALIAS_KEYS));
12084
12205
  *
12085
12206
  * For better performance, use this instead of `is[Type]` when `type` is unknown.
12086
12207
  * Optionally, pass `skipAliasCheck` to directly compare `node.type` with `type`.
12087
- *
12088
- * @param {String} type
12089
- * @param {Node} node
12090
- * @param {Object?} opts
12091
- * @param {Boolean?} skipAliasCheck
12092
- * @returns {Boolean} isOfType
12093
12208
  */
12094
12209
 
12095
12210
  t.is = function (type, node, opts, skipAliasCheck) {
@@ -12150,9 +12265,6 @@ each(t.BUILDER_KEYS, function (keys, type) {
12150
12265
 
12151
12266
  /**
12152
12267
  * Description
12153
- *
12154
- * @param {Object} node
12155
- * @returns {Object}
12156
12268
  */
12157
12269
 
12158
12270
  t.toComputedKey = function (node, key) {
@@ -12169,9 +12281,6 @@ t.toComputedKey = function (node, key) {
12169
12281
  * declarations hoisted to the top of the current scope.
12170
12282
  *
12171
12283
  * Expression statements are just resolved to their standard expression.
12172
- *
12173
- * @param {Array} nodes
12174
- * @param {Scope} scope
12175
12284
  */
12176
12285
 
12177
12286
  t.toSequenceExpression = function (nodes, scope) {
@@ -12203,10 +12312,6 @@ t.toSequenceExpression = function (nodes, scope) {
12203
12312
 
12204
12313
  /*
12205
12314
  * Description
12206
- *
12207
- * @param {Object} actual
12208
- * @param {Object} expected
12209
- * @returns {Boolean}
12210
12315
  */
12211
12316
 
12212
12317
  t.shallowEqual = function (actual, expected) {
@@ -12225,11 +12330,6 @@ t.shallowEqual = function (actual, expected) {
12225
12330
 
12226
12331
  /**
12227
12332
  * Description
12228
- *
12229
- * @param {Object} member
12230
- * @param {Object} append
12231
- * @param {Boolean} [computed]
12232
- * @returns {Object} member
12233
12333
  */
12234
12334
 
12235
12335
  t.appendToMemberExpression = function (member, append, computed) {
@@ -12241,10 +12341,6 @@ t.appendToMemberExpression = function (member, append, computed) {
12241
12341
 
12242
12342
  /**
12243
12343
  * Description
12244
- *
12245
- * @param {Object} member
12246
- * @param {Object} append
12247
- * @returns {Object} member
12248
12344
  */
12249
12345
 
12250
12346
  t.prependToMemberExpression = function (member, append) {
@@ -12254,10 +12350,6 @@ t.prependToMemberExpression = function (member, append) {
12254
12350
 
12255
12351
  /**
12256
12352
  * Check if the input `node` is a reference to a bound variable.
12257
- *
12258
- * @param {Object} node
12259
- * @param {Object} parent
12260
- * @returns {Boolean}
12261
12353
  */
12262
12354
 
12263
12355
  t.isReferenced = function (node, parent) {
@@ -12364,10 +12456,6 @@ t.isReferenced = function (node, parent) {
12364
12456
 
12365
12457
  /**
12366
12458
  * Check if the input `node` is an `Identifier` and `isReferenced`.
12367
- *
12368
- * @param {Node} node
12369
- * @parma {Node} parent
12370
- * @returns {Boolean}
12371
12459
  */
12372
12460
 
12373
12461
  t.isReferencedIdentifier = function (node, parent, opts) {
@@ -12377,9 +12465,6 @@ t.isReferencedIdentifier = function (node, parent, opts) {
12377
12465
  /**
12378
12466
  * Check if the input `name` is a valid identifier name
12379
12467
  * and isn't a reserved word.
12380
- *
12381
- * @param {String} name
12382
- * @returns {Boolean}
12383
12468
  */
12384
12469
 
12385
12470
  t.isValidIdentifier = function (name) {
@@ -12388,9 +12473,6 @@ t.isValidIdentifier = function (name) {
12388
12473
 
12389
12474
  /*
12390
12475
  * Description
12391
- *
12392
- * @param {String} name
12393
- * @returns {String}
12394
12476
  */
12395
12477
 
12396
12478
  t.toIdentifier = function (name) {
@@ -12418,22 +12500,16 @@ t.toIdentifier = function (name) {
12418
12500
 
12419
12501
  /**
12420
12502
  * Description
12421
- *
12422
- * @param {Object} node
12423
- * @param {String=} key
12424
12503
  */
12425
12504
 
12426
- t.ensureBlock = function (node, key) {
12427
- if (!key) key = "body";
12505
+ t.ensureBlock = function (node) {
12506
+ var key = arguments[1] === undefined ? "body" : arguments[1];
12428
12507
 
12429
12508
  return node[key] = t.toBlock(node[key], node);
12430
12509
  };
12431
12510
 
12432
12511
  /**
12433
12512
  * Description
12434
- *
12435
- * @param {Object} node
12436
- * @returns {Object}
12437
12513
  */
12438
12514
 
12439
12515
  t.clone = function (node) {
@@ -12447,9 +12523,6 @@ t.clone = function (node) {
12447
12523
 
12448
12524
  /**
12449
12525
  * Description
12450
- *
12451
- * @param {Object} node
12452
- * @returns {Object}
12453
12526
  */
12454
12527
 
12455
12528
  t.cloneDeep = function (node) {
@@ -12480,10 +12553,6 @@ t.cloneDeep = function (node) {
12480
12553
  *
12481
12554
  * For example, given the match `React.createClass` it would match the
12482
12555
  * parsed nodes of `React.createClass` and `React["createClass"]`.
12483
- *
12484
- * @param {String} match Dot-delimited string
12485
- * @param {Boolean} [allowPartial] Allow a partial match
12486
- * @returns {Function}
12487
12556
  */
12488
12557
 
12489
12558
  t.buildMatchMemberExpression = function (match, allowPartial) {
@@ -12536,8 +12605,6 @@ t.buildMatchMemberExpression = function (match, allowPartial) {
12536
12605
  /**
12537
12606
  * Description
12538
12607
  *
12539
- * @param {Object} node
12540
- * @param {Boolean} [ignore]
12541
12608
  * @returns {Object|Boolean}
12542
12609
  */
12543
12610
 
@@ -12578,9 +12645,6 @@ t.toStatement = function (node, ignore) {
12578
12645
 
12579
12646
  /**
12580
12647
  * Description
12581
- *
12582
- * @param {Object} node
12583
- * @returns {Object}
12584
12648
  */
12585
12649
 
12586
12650
  t.toExpression = function (node) {
@@ -12603,10 +12667,6 @@ t.toExpression = function (node) {
12603
12667
 
12604
12668
  /**
12605
12669
  * Description
12606
- *
12607
- * @param {Object} node
12608
- * @param {Object} parent
12609
- * @returns {Object}
12610
12670
  */
12611
12671
 
12612
12672
  t.toBlock = function (node, parent) {
@@ -12636,9 +12696,6 @@ t.toBlock = function (node, parent) {
12636
12696
  /**
12637
12697
  * Return a list of binding identifiers associated with
12638
12698
  * the input `node`.
12639
- *
12640
- * @param {Object} node
12641
- * @returns {Array|Object}
12642
12699
  */
12643
12700
 
12644
12701
  t.getBindingIdentifiers = function (node) {
@@ -12676,7 +12733,9 @@ t.getBindingIdentifiers.keys = {
12676
12733
  ImportBatchSpecifier: ["name"],
12677
12734
  VariableDeclarator: ["id"],
12678
12735
  FunctionDeclaration: ["id"],
12736
+ FunctionExpression: ["id"],
12679
12737
  ClassDeclaration: ["id"],
12738
+ ClassExpression: ["id"],
12680
12739
  SpreadElement: ["argument"],
12681
12740
  RestElement: ["argument"],
12682
12741
  UpdateExpression: ["argument"],
@@ -12694,9 +12753,6 @@ t.getBindingIdentifiers.keys = {
12694
12753
 
12695
12754
  /**
12696
12755
  * Description
12697
- *
12698
- * @param {Object} node
12699
- * @returns {Boolean}
12700
12756
  */
12701
12757
 
12702
12758
  t.isLet = function (node) {
@@ -12705,9 +12761,6 @@ t.isLet = function (node) {
12705
12761
 
12706
12762
  /**
12707
12763
  * Description
12708
- *
12709
- * @param {Object} node
12710
- * @returns {Boolean}
12711
12764
  */
12712
12765
 
12713
12766
  t.isBlockScoped = function (node) {
@@ -12716,9 +12769,6 @@ t.isBlockScoped = function (node) {
12716
12769
 
12717
12770
  /**
12718
12771
  * Description
12719
- *
12720
- * @param {Object} node
12721
- * @returns {Boolean}
12722
12772
  */
12723
12773
 
12724
12774
  t.isVar = function (node) {
@@ -12731,9 +12781,6 @@ t.COMMENT_KEYS = ["leadingComments", "trailingComments"];
12731
12781
 
12732
12782
  /**
12733
12783
  * Description
12734
- *
12735
- * @param {Object} child
12736
- * @returns {Object} child
12737
12784
  */
12738
12785
 
12739
12786
  t.removeComments = function (child) {
@@ -12745,10 +12792,6 @@ t.removeComments = function (child) {
12745
12792
 
12746
12793
  /**
12747
12794
  * Description
12748
- *
12749
- * @param {Object} child
12750
- * @param {Object} parent
12751
- * @returns {Object} child
12752
12795
  */
12753
12796
 
12754
12797
  t.inheritsComments = function (child, parent) {
@@ -12760,10 +12803,6 @@ t.inheritsComments = function (child, parent) {
12760
12803
 
12761
12804
  /**
12762
12805
  * Description
12763
- *
12764
- * @param {Object} child
12765
- * @param {Object} parent
12766
- * @returns {Object} child
12767
12806
  */
12768
12807
 
12769
12808
  t.inherits = function (child, parent) {
@@ -12783,9 +12822,6 @@ t.inherits = function (child, parent) {
12783
12822
 
12784
12823
  /**
12785
12824
  * Description
12786
- *
12787
- * @param {Object} node
12788
- * @returns {Array}
12789
12825
  */
12790
12826
 
12791
12827
  t.getLastStatements = function (node) {
@@ -12811,9 +12847,6 @@ t.getLastStatements = function (node) {
12811
12847
 
12812
12848
  /**
12813
12849
  * Description
12814
- *
12815
- * @param {Object} specifier
12816
- * @returns {String}
12817
12850
  */
12818
12851
 
12819
12852
  t.getSpecifierName = function (specifier) {
@@ -12822,9 +12855,6 @@ t.getSpecifierName = function (specifier) {
12822
12855
 
12823
12856
  /**
12824
12857
  * Description
12825
- *
12826
- * @param {Object} specifier
12827
- * @returns {String}
12828
12858
  */
12829
12859
 
12830
12860
  t.getSpecifierId = function (specifier) {
@@ -12837,9 +12867,6 @@ t.getSpecifierId = function (specifier) {
12837
12867
 
12838
12868
  /**
12839
12869
  * Description
12840
- *
12841
- * @param {Object} specifier
12842
- * @returns {Boolean}
12843
12870
  */
12844
12871
 
12845
12872
  t.isSpecifierDefault = function (specifier) {
@@ -12848,10 +12875,6 @@ t.isSpecifierDefault = function (specifier) {
12848
12875
 
12849
12876
  /**
12850
12877
  * Description
12851
- *
12852
- * @param {Node} node
12853
- * @param {Node} parent
12854
- * @returns {Boolean}
12855
12878
  */
12856
12879
 
12857
12880
  t.isScope = function (node, parent) {
@@ -12870,9 +12893,6 @@ t.isScope = function (node, parent) {
12870
12893
 
12871
12894
  /**
12872
12895
  * Description
12873
- *
12874
- * @param {Node} node
12875
- * @returns {Boolean}
12876
12896
  */
12877
12897
 
12878
12898
  t.isImmutable = function (node) {
@@ -12913,9 +12933,6 @@ t.isImmutable = function (node) {
12913
12933
  *
12914
12934
  * if (!t.evaluateTruthy(node)) falsyLogic();
12915
12935
  *
12916
- * @param {Node} node
12917
- * @param {Scope} scope
12918
- * @returns {Boolean}
12919
12936
  */
12920
12937
 
12921
12938
  t.evaluateTruthy = function (node, scope) {
@@ -12936,9 +12953,6 @@ t.evaluateTruthy = function (node, scope) {
12936
12953
  * t.evaluate(parse("!true")) // { confident: true, value: false }
12937
12954
  * t.evaluate(parse("foo + foo")) // { confident: false, value: undefined }
12938
12955
  *
12939
- * @param {Node} node
12940
- * @param {Scope} scope
12941
- * @returns {Object}
12942
12956
  */
12943
12957
 
12944
12958
  t.evaluate = function (node, scope) {
@@ -13048,9 +13062,6 @@ t.evaluate = function (node, scope) {
13048
13062
 
13049
13063
  /**
13050
13064
  * Description
13051
- *
13052
- * @param value
13053
- * @returns {Node}
13054
13065
  */
13055
13066
 
13056
13067
  t.valueToNode = function (value) {
@@ -33596,7 +33607,7 @@ function baseAssign(object, source, customizer) {
33596
33607
  value = object[key],
33597
33608
  result = customizer(value, source[key], key, object, source);
33598
33609
 
33599
- if ((result === result ? result !== value : value === value) ||
33610
+ if ((result === result ? (result !== value) : (value === value)) ||
33600
33611
  (typeof value == 'undefined' && !(key in object))) {
33601
33612
  object[key] = result;
33602
33613
  }
@@ -34958,6 +34969,7 @@ function createAssigner(assigner) {
34958
34969
  module.exports = createAssigner;
34959
34970
 
34960
34971
  },{"./bindCallback":249,"./isIterateeCall":274}],258:[function(require,module,exports){
34972
+ (function (global){
34961
34973
  var createCtorWrapper = require('./createCtorWrapper');
34962
34974
 
34963
34975
  /**
@@ -34973,13 +34985,15 @@ function createBindWrapper(func, thisArg) {
34973
34985
  var Ctor = createCtorWrapper(func);
34974
34986
 
34975
34987
  function wrapper() {
34976
- return (this instanceof wrapper ? Ctor : func).apply(thisArg, arguments);
34988
+ var fn = (this && this !== global && this instanceof wrapper) ? Ctor : func;
34989
+ return fn.apply(thisArg, arguments);
34977
34990
  }
34978
34991
  return wrapper;
34979
34992
  }
34980
34993
 
34981
34994
  module.exports = createBindWrapper;
34982
34995
 
34996
+ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
34983
34997
  },{"./createCtorWrapper":260}],259:[function(require,module,exports){
34984
34998
  (function (global){
34985
34999
  var SetCache = require('./SetCache'),
@@ -35032,6 +35046,7 @@ function createCtorWrapper(Ctor) {
35032
35046
  module.exports = createCtorWrapper;
35033
35047
 
35034
35048
  },{"../lang/isObject":296,"./baseCreate":224}],261:[function(require,module,exports){
35049
+ (function (global){
35035
35050
  var arrayCopy = require('./arrayCopy'),
35036
35051
  composeArgs = require('./composeArgs'),
35037
35052
  composeArgsRight = require('./composeArgsRight'),
@@ -35130,14 +35145,17 @@ function createHybridWrapper(func, bitmask, thisArg, partials, holders, partials
35130
35145
  if (isAry && ary < args.length) {
35131
35146
  args.length = ary;
35132
35147
  }
35133
- return (this instanceof wrapper ? (Ctor || createCtorWrapper(func)) : func).apply(thisBinding, args);
35148
+ var fn = (this && this !== global && this instanceof wrapper) ? (Ctor || createCtorWrapper(func)) : func;
35149
+ return fn.apply(thisBinding, args);
35134
35150
  }
35135
35151
  return wrapper;
35136
35152
  }
35137
35153
 
35138
35154
  module.exports = createHybridWrapper;
35139
35155
 
35156
+ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
35140
35157
  },{"./arrayCopy":213,"./composeArgs":254,"./composeArgsRight":255,"./createCtorWrapper":260,"./reorder":280,"./replaceHolders":281}],262:[function(require,module,exports){
35158
+ (function (global){
35141
35159
  var createCtorWrapper = require('./createCtorWrapper');
35142
35160
 
35143
35161
  /** Used to compose bitmasks for wrapper metadata. */
@@ -35174,13 +35192,15 @@ function createPartialWrapper(func, bitmask, thisArg, partials) {
35174
35192
  while (argsLength--) {
35175
35193
  args[leftIndex++] = arguments[++argsIndex];
35176
35194
  }
35177
- return (this instanceof wrapper ? Ctor : func).apply(isBind ? thisArg : this, args);
35195
+ var fn = (this && this !== global && this instanceof wrapper) ? Ctor : func;
35196
+ return fn.apply(isBind ? thisArg : this, args);
35178
35197
  }
35179
35198
  return wrapper;
35180
35199
  }
35181
35200
 
35182
35201
  module.exports = createPartialWrapper;
35183
35202
 
35203
+ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
35184
35204
  },{"./createCtorWrapper":260}],263:[function(require,module,exports){
35185
35205
  var baseSetData = require('./baseSetData'),
35186
35206
  createBindWrapper = require('./createBindWrapper'),
@@ -35440,8 +35460,10 @@ function equalObjects(object, other, equalFunc, customizer, isWhere, stackA, sta
35440
35460
  othCtor = other.constructor;
35441
35461
 
35442
35462
  // Non `Object` object instances with different constructors are not equal.
35443
- if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) &&
35444
- !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {
35463
+ if (objCtor != othCtor &&
35464
+ ('constructor' in object && 'constructor' in other) &&
35465
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
35466
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
35445
35467
  return false;
35446
35468
  }
35447
35469
  }
@@ -35696,7 +35718,7 @@ function isIterateeCall(value, index, object) {
35696
35718
  }
35697
35719
  if (prereq) {
35698
35720
  var other = object[index];
35699
- return value === value ? value === other : other !== other;
35721
+ return value === value ? (value === other) : (other !== other);
35700
35722
  }
35701
35723
  return false;
35702
35724
  }
@@ -36960,7 +36982,7 @@ var keys = !nativeKeys ? shimKeys : function(object) {
36960
36982
  length = object.length;
36961
36983
  }
36962
36984
  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
36963
- (typeof object != 'function' && (length && isLength(length)))) {
36985
+ (typeof object != 'function' && (length && isLength(length)))) {
36964
36986
  return shimKeys(object);
36965
36987
  }
36966
36988
  return isObject(object) ? nativeKeys(object) : [];
@@ -46062,7 +46084,7 @@ module.exports = function (str) {
46062
46084
  module.exports={
46063
46085
  "name": "babel",
46064
46086
  "description": "Turn ES6 code into readable vanilla ES5 with source maps",
46065
- "version": "4.7.3",
46087
+ "version": "4.7.4",
46066
46088
  "author": "Sebastian McKenzie <sebmck@gmail.com>",
46067
46089
  "homepage": "https://babeljs.io/",
46068
46090
  "repository": "babel/babel",