diff --git a/src/babel/generation/generators/modules.js b/src/babel/generation/generators/modules.js index 2e22a5be87..33a086dc3a 100644 --- a/src/babel/generation/generators/modules.js +++ b/src/babel/generation/generators/modules.js @@ -79,9 +79,7 @@ export function ImportDeclaration(node, print) { this.push(", "); } - var isDefault = t.isSpecifierDefault(spec); - - if (!isDefault && spec.type !== "ImportNamespaceSpecifier" && !foundImportSpecifier) { + if (!t.isSpecifierDefault(spec) && !foundImportSpecifier) { foundImportSpecifier = true; this.push("{ "); } diff --git a/src/babel/transformation/modules/_default.js b/src/babel/transformation/modules/_default.js index 1177bc5b01..7d2555275d 100644 --- a/src/babel/transformation/modules/_default.js +++ b/src/babel/transformation/modules/_default.js @@ -215,17 +215,15 @@ export default class DefaultFormatter { } exportAllDeclaration(node, nodes) { - var nodes = []; var ref = this.getExternalReference(node, nodes); nodes.push(this.buildExportsWildcard(ref, node)); - return nodes; } exportSpecifier(specifier, node, nodes) { if (node.source) { var ref = this.getExternalReference(node, nodes); - if (t.isSpecifierDefault(specifier) && !this.noInteropRequireExport) { + if (specifier.local.name === "default" && !this.noInteropRequireExport) { // importing a default so we need to normalize it ref = t.callExpression(this.file.addHelper("interop-require"), [ref]); } else { diff --git a/src/babel/transformation/transformers/es6/modules.js b/src/babel/transformation/transformers/es6/modules.js index 28b6848275..fea77b4f9d 100644 --- a/src/babel/transformation/transformers/es6/modules.js +++ b/src/babel/transformation/transformers/es6/modules.js @@ -2,6 +2,14 @@ import * as t from "../../../types"; export { check } from "../internal/modules"; +function keepBlockHoist(node, nodes) { + if (node._blockHoist) { + for (let i = 0; i < nodes.length; i++) { + nodes[i]._blockHoist = node._blockHoist; + } + } +} + export function ImportDeclaration(node, parent, scope, file) { // flow type if (node.isType) return; @@ -27,12 +35,14 @@ export function ImportDeclaration(node, parent, scope, file) { export function ExportAllDeclaration(node, parent, scope, file) { var nodes = []; file.moduleFormatter.exportAllDeclaration(node, nodes, parent); + keepBlockHoist(node, nodes); return nodes; } export function ExportDefaultDeclaration(node, parent, scope, file) { var nodes = []; file.moduleFormatter.exportDeclaration(node, nodes, parent); + keepBlockHoist(node, nodes); return nodes; } @@ -57,11 +67,7 @@ export function ExportNamedDeclaration(node, parent, scope, file) { } } - if (node._blockHoist) { - for (let i = 0; i < nodes.length; i++) { - nodes[i]._blockHoist = node._blockHoist; - } - } + keepBlockHoist(node, nodes); return nodes; } diff --git a/src/babel/transformation/transformers/es7/object-rest-spread.js b/src/babel/transformation/transformers/es7/object-rest-spread.js index eea9f9fa1c..771b9808b2 100644 --- a/src/babel/transformation/transformers/es7/object-rest-spread.js +++ b/src/babel/transformation/transformers/es7/object-rest-spread.js @@ -9,7 +9,7 @@ export var metadata = { }; export function manipulateOptions(opts) { - if (opts.whitelist.length) opts.whitelist.push("es6.destructuring"); + if (opts.whitelist) opts.whitelist.push("es6.destructuring"); } var hasSpread = function (node) { diff --git a/src/babel/transformation/transformers/internal/validation.js b/src/babel/transformation/transformers/internal/validation.js index 600c2aa3d5..87119f6380 100644 --- a/src/babel/transformation/transformers/internal/validation.js +++ b/src/babel/transformation/transformers/internal/validation.js @@ -11,6 +11,22 @@ export function ForOfStatement(node, parent, scope, file) { export { ForOfStatement as ForInStatement }; +export function MethodDefinition(node) { + if (node.kind !== "constructor") { + // get constructor() {} + var isConstructor = !node.computed && t.isIdentifier(node.key, { name: "constructor" }); + + // get ["constructor"]() {} + isConstructor ||= t.isLiteral(node.key, { value: "constructor" }); + + if (isConstructor) { + throw this.errorWithNode(messages.get("classesIllegalConstructorKind")); + } + } + + Property.apply(this, arguments); +} + export function Property(node, parent, scope, file) { if (node.kind === "set") { if (node.value.params.length !== 1) { @@ -24,8 +40,6 @@ export function Property(node, parent, scope, file) { } } -export { Property as MethodDefinition }; - export function BlockStatement(node) { for (var i = 0; i < node.body.length; i++) { var bodyNode = node.body[i]; diff --git a/test/fixtures/transformation/es6-arrow-functions/arguments/expected.js b/test/fixtures/transformation/es6-arrow-functions/arguments/expected.js index 86b1ab853b..eac62b4a0e 100644 --- a/test/fixtures/transformation/es6-arrow-functions/arguments/expected.js +++ b/test/fixtures/transformation/es6-arrow-functions/arguments/expected.js @@ -50,7 +50,7 @@ function four() { four({ foo: "foo" }); function five(obj) { - var fn = function () { + var fn = function fn() { return obj.arguments[0].foo + "bar"; }; return fn(); @@ -58,7 +58,7 @@ function five(obj) { five({ arguments: ["foo"] }); function six(obj) { - var fn = function () { + var fn = function fn() { var fn2 = function fn2() { return arguments[0]; }; diff --git a/test/fixtures/transformation/es6-block-scoping-exec/duplicate-in-upper-scope.js b/test/fixtures/transformation/es6-block-scoping-exec/duplicate-in-upper-scope.js deleted file mode 100644 index b0c9c0f6c1..0000000000 --- a/test/fixtures/transformation/es6-block-scoping-exec/duplicate-in-upper-scope.js +++ /dev/null @@ -1,5 +0,0 @@ -let x = [0]; -for (let x of x) { - assert.equal(x, 0); -} -assert.deepEqual(x, [0]); diff --git a/test/fixtures/transformation/es6-destructuring/empty-object-pattern/expected.js b/test/fixtures/transformation/es6-destructuring/empty-object-pattern/expected.js index 93c853b604..e0b04dfea8 100644 --- a/test/fixtures/transformation/es6-destructuring/empty-object-pattern/expected.js +++ b/test/fixtures/transformation/es6-destructuring/empty-object-pattern/expected.js @@ -1,7 +1,4 @@ "use strict"; -var _objectDestructuringEmpty = function (obj) { if (obj == null) throw new TypeError("Cannot destructure undefined"); }; - var _ref = null; - -_objectDestructuringEmpty(_ref); +babelHelpers.objectDestructuringEmpty(_ref); diff --git a/test/fixtures/transformation/es6-destructuring/es7-object-rest/expected.js b/test/fixtures/transformation/es6-destructuring/es7-object-rest/expected.js index e4e278732b..cefe9cbafb 100644 --- a/test/fixtures/transformation/es6-destructuring/es7-object-rest/expected.js +++ b/test/fixtures/transformation/es6-destructuring/es7-object-rest/expected.js @@ -1,15 +1,10 @@ "use strict"; -var _objectWithoutProperties = function (obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }; - -var x = _objectWithoutProperties(z, []); - +var x = babelHelpers.objectWithoutProperties(z, []); var x = z.x; - -var y = _objectWithoutProperties(z, ["x"]); +var y = babelHelpers.objectWithoutProperties(z, ["x"]); (function (_ref) { var x = _ref.x; - - var y = _objectWithoutProperties(_ref, ["x"]); + var y = babelHelpers.objectWithoutProperties(_ref, ["x"]); });