diff --git a/packages/babel-core/package.json b/packages/babel-core/package.json index b7f7576981..a73b183b16 100644 --- a/packages/babel-core/package.json +++ b/packages/babel-core/package.json @@ -32,7 +32,7 @@ "babel-template": "7.0.0-alpha.9", "babel-traverse": "7.0.0-alpha.9", "babel-types": "7.0.0-alpha.9", - "babylon": "7.0.0-beta.8", + "babylon": "7.0.0-beta.10", "convert-source-map": "^1.1.0", "debug": "^2.1.1", "json5": "^0.5.0", diff --git a/packages/babel-generator/src/generators/classes.js b/packages/babel-generator/src/generators/classes.js index 64066a04cd..63cc938f96 100644 --- a/packages/babel-generator/src/generators/classes.js +++ b/packages/babel-generator/src/generators/classes.js @@ -1,5 +1,13 @@ -export function ClassDeclaration(node: Object) { - this.printJoin(node.decorators, node); +import * as t from "babel-types"; + +export function ClassDeclaration(node: Object, parent: Object) { + if ( + !t.isExportDefaultDeclaration(parent) && + !t.isExportNamedDeclaration(parent) + ) { + this.printJoin(node.decorators, node); + } + this.word("class"); if (node.id) { diff --git a/packages/babel-generator/src/generators/modules.js b/packages/babel-generator/src/generators/modules.js index 3d6fbae1e2..f5d33b151a 100644 --- a/packages/babel-generator/src/generators/modules.js +++ b/packages/babel-generator/src/generators/modules.js @@ -52,13 +52,21 @@ export function ExportAllDeclaration(node: Object) { this.semicolon(); } -export function ExportNamedDeclaration() { +export function ExportNamedDeclaration(node: Object) { + if (t.isClassDeclaration(node.declaration)) { + this.printJoin(node.declaration.decorators, node); + } + this.word("export"); this.space(); ExportDeclaration.apply(this, arguments); } -export function ExportDefaultDeclaration() { +export function ExportDefaultDeclaration(node: Object) { + if (t.isClassDeclaration(node.declaration)) { + this.printJoin(node.declaration.decorators, node); + } + this.word("export"); this.space(); this.word("default"); diff --git a/packages/babel-generator/test/fixtures/flow/declare-statements/actual.js b/packages/babel-generator/test/fixtures/flow/declare-statements/actual.js index 543efd048a..d5744cfdcc 100644 --- a/packages/babel-generator/test/fixtures/flow/declare-statements/actual.js +++ b/packages/babel-generator/test/fixtures/flow/declare-statements/actual.js @@ -9,6 +9,7 @@ declare class A extends B { x: number } declare class A { static foo(): number; static x : string } declare class A { static [ indexer: number]: string } declare class A { static () : number } +declare class B { (): number } declare class A mixins B, C {} declare type A = string declare type T = { [k:string]: U } diff --git a/packages/babel-generator/test/fixtures/flow/declare-statements/expected.js b/packages/babel-generator/test/fixtures/flow/declare-statements/expected.js index 7498e25025..6f867c8eef 100644 --- a/packages/babel-generator/test/fixtures/flow/declare-statements/expected.js +++ b/packages/babel-generator/test/fixtures/flow/declare-statements/expected.js @@ -9,6 +9,7 @@ declare class A extends B { x: number } declare class A { static foo: () => number, static x: string, } declare class A { static [indexer: number]: string } declare class A { static (): number } +declare class B { (): number } declare class A mixins B, C {} declare type A = string; declare type T = { [k: string]: U }; diff --git a/packages/babel-generator/test/fixtures/regression/babylon-317/actual.js b/packages/babel-generator/test/fixtures/regression/babylon-317/actual.js new file mode 100644 index 0000000000..b2a6432b44 --- /dev/null +++ b/packages/babel-generator/test/fixtures/regression/babylon-317/actual.js @@ -0,0 +1 @@ +({ set = {} }) => set; diff --git a/packages/babel-generator/test/fixtures/regression/babylon-317/expected.js b/packages/babel-generator/test/fixtures/regression/babylon-317/expected.js new file mode 100644 index 0000000000..b2a6432b44 --- /dev/null +++ b/packages/babel-generator/test/fixtures/regression/babylon-317/expected.js @@ -0,0 +1 @@ +({ set = {} }) => set; diff --git a/packages/babel-generator/test/fixtures/types/ClassBody-ClassProperty/actual.js b/packages/babel-generator/test/fixtures/types/ClassBody-ClassProperty/actual.js index 25cd363323..41176ad01b 100644 --- a/packages/babel-generator/test/fixtures/types/ClassBody-ClassProperty/actual.js +++ b/packages/babel-generator/test/fixtures/types/ClassBody-ClassProperty/actual.js @@ -3,6 +3,7 @@ class Foo { foo = 1; "foo"; "foo" = 1; + foo = super.foo(); ["foo"]; ["foo"] = 1; ["f" + "oo"]; @@ -12,8 +13,56 @@ class Foo { static foo = 1; static "foo"; static "foo" = 1; + static foo = super.foo(); static ["foo"]; static ["foo"] = 1; static ["f" + "oo"]; static ["f" + "oo"] = 1; + + get; + set; + static; + static = 1; + async; + foo; bar; + foo = 0; bar = 1; +} + +class A1 { + static + a + static +} + +class A2 { + get + *a(){} +} + +class A3 { + static + *a(){} +} + +class A4 { + async + a(){} +} + +class A5 { + static + async + a +} + +class A6 { + get + ['a'](){} +} + +class A7 { + static + get + static + (){} } diff --git a/packages/babel-generator/test/fixtures/types/ClassBody-ClassProperty/expected.js b/packages/babel-generator/test/fixtures/types/ClassBody-ClassProperty/expected.js index 25cd363323..53ba841703 100644 --- a/packages/babel-generator/test/fixtures/types/ClassBody-ClassProperty/expected.js +++ b/packages/babel-generator/test/fixtures/types/ClassBody-ClassProperty/expected.js @@ -3,6 +3,7 @@ class Foo { foo = 1; "foo"; "foo" = 1; + foo = super.foo(); ["foo"]; ["foo"] = 1; ["f" + "oo"]; @@ -12,8 +13,49 @@ class Foo { static foo = 1; static "foo"; static "foo" = 1; + static foo = super.foo(); static ["foo"]; static ["foo"] = 1; static ["f" + "oo"]; static ["f" + "oo"] = 1; + + get; + set; + static; + static = 1; + async; + foo;bar; + foo = 0;bar = 1; +} + +class A1 { + static a; + static; +} + +class A2 { + get; + *a() {} +} + +class A3 { + static *a() {} +} + +class A4 { + async; + a() {} +} + +class A5 { + static async; + a; +} + +class A6 { + get ['a']() {} +} + +class A7 { + static get static() {} } diff --git a/packages/babel-generator/test/fixtures/types/ClassBody-MethodDefinition/actual.js b/packages/babel-generator/test/fixtures/types/ClassBody-MethodDefinition/actual.js index 1e431aa75b..bec3598e32 100644 --- a/packages/babel-generator/test/fixtures/types/ClassBody-MethodDefinition/actual.js +++ b/packages/babel-generator/test/fixtures/types/ClassBody-MethodDefinition/actual.js @@ -10,4 +10,46 @@ class Foo { static ["foo"]() {} static get foo() {} static set foo(bar) {} + static static() {} + + get + () {} + + set + () {} + + static + () {} + + async + () {} + + static + get + () {} + + static + set + () {} + + static + static + () {} + + static + async + () {} + + static + a + () {} + + get + async + () {} + + static + get + static + () {} } diff --git a/packages/babel-generator/test/fixtures/types/ClassBody-MethodDefinition/expected.js b/packages/babel-generator/test/fixtures/types/ClassBody-MethodDefinition/expected.js index 1e431aa75b..e73bae2cbf 100644 --- a/packages/babel-generator/test/fixtures/types/ClassBody-MethodDefinition/expected.js +++ b/packages/babel-generator/test/fixtures/types/ClassBody-MethodDefinition/expected.js @@ -10,4 +10,27 @@ class Foo { static ["foo"]() {} static get foo() {} static set foo(bar) {} + static static() {} + + get() {} + + set() {} + + static() {} + + async() {} + + static get() {} + + static set() {} + + static static() {} + + static async() {} + + static a() {} + + get async() {} + + static get static() {} } diff --git a/packages/babel-generator/test/fixtures/types/Decorator/actual.js b/packages/babel-generator/test/fixtures/types/Decorator/actual.js index d0b6d43621..f1946c7635 100644 --- a/packages/babel-generator/test/fixtures/types/Decorator/actual.js +++ b/packages/babel-generator/test/fixtures/types/Decorator/actual.js @@ -29,3 +29,17 @@ class Foo { @bar set bar(foo) {} } + +@foo +export default class Foo { + bar() { + class Baz {} + } +} + +@foo +export class Foo { + bar() { + class Baz {} + } +} diff --git a/packages/babel-generator/test/fixtures/types/Decorator/expected.js b/packages/babel-generator/test/fixtures/types/Decorator/expected.js index d0b6d43621..d47332b921 100644 --- a/packages/babel-generator/test/fixtures/types/Decorator/expected.js +++ b/packages/babel-generator/test/fixtures/types/Decorator/expected.js @@ -29,3 +29,17 @@ class Foo { @bar set bar(foo) {} } + +@foo +export default class Foo { + bar() { + class Baz {} + } +} + +@foo +export class Foo { + bar() { + class Baz {} + } +} \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration10/actual.js b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration10/actual.js new file mode 100644 index 0000000000..7c26b9ed68 --- /dev/null +++ b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration10/actual.js @@ -0,0 +1 @@ +export async function foo() {} diff --git a/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration10/expected.js b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration10/expected.js new file mode 100644 index 0000000000..bfb64da594 --- /dev/null +++ b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration10/expected.js @@ -0,0 +1 @@ +export async function foo() {} \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration11/actual.js b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration11/actual.js new file mode 100644 index 0000000000..b5d8066db5 --- /dev/null +++ b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration11/actual.js @@ -0,0 +1 @@ +export default async () => await foo() diff --git a/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration11/expected.js b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration11/expected.js new file mode 100644 index 0000000000..3bec97976a --- /dev/null +++ b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration11/expected.js @@ -0,0 +1 @@ +export default (async () => await foo()); \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration9/actual.js b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration9/actual.js new file mode 100644 index 0000000000..8db00b63ab --- /dev/null +++ b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration9/actual.js @@ -0,0 +1 @@ +export default async function bar() {} diff --git a/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration9/expected.js b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration9/expected.js new file mode 100644 index 0000000000..f3288c7d18 --- /dev/null +++ b/packages/babel-generator/test/fixtures/types/ExportDefaultDeclaration9/expected.js @@ -0,0 +1 @@ +export default async function bar() {} \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/types/ExportSpecifier16/actual.js b/packages/babel-generator/test/fixtures/types/ExportSpecifier16/actual.js new file mode 100644 index 0000000000..871cd28fa8 --- /dev/null +++ b/packages/babel-generator/test/fixtures/types/ExportSpecifier16/actual.js @@ -0,0 +1 @@ +export * as default from "foo"; diff --git a/packages/babel-generator/test/fixtures/types/ExportSpecifier16/expected.js b/packages/babel-generator/test/fixtures/types/ExportSpecifier16/expected.js new file mode 100644 index 0000000000..093e9ba5f1 --- /dev/null +++ b/packages/babel-generator/test/fixtures/types/ExportSpecifier16/expected.js @@ -0,0 +1 @@ +export * as default from "foo"; \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/types/Literal/actual.js b/packages/babel-generator/test/fixtures/types/Literal/actual.js index 6bd9f84a96..8c4a774d6d 100644 --- a/packages/babel-generator/test/fixtures/types/Literal/actual.js +++ b/packages/babel-generator/test/fixtures/types/Literal/actual.js @@ -10,3 +10,4 @@ false; 0b10; 0o70; 0X1F; +-0b1111011; diff --git a/packages/babel-generator/test/fixtures/types/Literal/expected.js b/packages/babel-generator/test/fixtures/types/Literal/expected.js index 6bd9f84a96..8c4a774d6d 100644 --- a/packages/babel-generator/test/fixtures/types/Literal/expected.js +++ b/packages/babel-generator/test/fixtures/types/Literal/expected.js @@ -10,3 +10,4 @@ false; 0b10; 0o70; 0X1F; +-0b1111011; diff --git a/packages/babel-generator/test/fixtures/types/RestProperty/actual.js b/packages/babel-generator/test/fixtures/types/RestProperty/actual.js new file mode 100644 index 0000000000..af90a6ba00 --- /dev/null +++ b/packages/babel-generator/test/fixtures/types/RestProperty/actual.js @@ -0,0 +1,3 @@ +var { ...{ z } } = { z: 1 }; +var { ...{ x = 5 } } = { x : 1 }; +({ x, ...{ y, z } } = o); diff --git a/packages/babel-generator/test/fixtures/types/RestProperty/expected.js b/packages/babel-generator/test/fixtures/types/RestProperty/expected.js new file mode 100644 index 0000000000..a85216576d --- /dev/null +++ b/packages/babel-generator/test/fixtures/types/RestProperty/expected.js @@ -0,0 +1,3 @@ +var { ...{ z } } = { z: 1 }; +var { ...{ x = 5 } } = { x: 1 }; +({ x, ...{ y, z } } = o); \ No newline at end of file diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/spec/super-call/actual.js b/packages/babel-plugin-transform-class-properties/test/fixtures/spec/super-call/actual.js new file mode 100644 index 0000000000..175fc704e7 --- /dev/null +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/spec/super-call/actual.js @@ -0,0 +1,9 @@ +class A { + foo() { + return "bar"; + } +} + +class B extends A { + foo = super.foo(); +} diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/spec/super-call/expected.js b/packages/babel-plugin-transform-class-properties/test/fixtures/spec/super-call/expected.js new file mode 100644 index 0000000000..8ed2311f3d --- /dev/null +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/spec/super-call/expected.js @@ -0,0 +1,30 @@ +var A = function () { + function A() { + babelHelpers.classCallCheck(this, A); + } + + babelHelpers.createClass(A, [{ + key: "foo", + value: function foo() { + return "bar"; + } + }]); + return A; +}(); + +var B = function (_A) { + babelHelpers.inherits(B, _A); + + function B(...args) { + var _temp, _this, _ret; + + babelHelpers.classCallCheck(this, B); + return _ret = (_temp = (_this = babelHelpers.possibleConstructorReturn(this, (B.__proto__ || Object.getPrototypeOf(B)).call(this, ...args)), _this), Object.defineProperty(_this, "foo", { + enumerable: true, + writable: true, + value: babelHelpers.get(B.prototype.__proto__ || Object.getPrototypeOf(B.prototype), "foo", _this).call(_this) + }), _temp), babelHelpers.possibleConstructorReturn(_this, _ret); + } + + return B; +}(A); \ No newline at end of file diff --git a/packages/babel-plugin-transform-decorators/test/fixtures/class-export-default/exec.js b/packages/babel-plugin-transform-decorators/test/fixtures/class-export-default/exec.js new file mode 100644 index 0000000000..542f0e00c4 --- /dev/null +++ b/packages/babel-plugin-transform-decorators/test/fixtures/class-export-default/exec.js @@ -0,0 +1,14 @@ +const calls = []; + +function foo(target) { + calls.push(target.name); +} + +@foo +export default class Foo { + bar() { + class Baz {} + } +} + +assert.deepEqual(calls, ["Foo"]); diff --git a/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/es7-object-rest/actual.js b/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/es7-object-rest/actual.js index a0fd177921..44903552ea 100644 --- a/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/es7-object-rest/actual.js +++ b/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/es7-object-rest/actual.js @@ -2,4 +2,6 @@ var z = {}; var { ...x } = z; var { x, ...y } = z; var { [x]: x, ...y } = z; -(function({ x, ...y }) { }) +(function({ x, ...y }) { }); + +({ x, ...{ y, z } } = o); diff --git a/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/es7-object-rest/expected.js b/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/es7-object-rest/expected.js index 7fa15501b2..62e912f6ad 100644 --- a/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/es7-object-rest/expected.js +++ b/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/es7-object-rest/expected.js @@ -1,11 +1,23 @@ var z = {}; -var x = babelHelpers.objectWithoutProperties(z, []); -var x = z.x, - y = babelHelpers.objectWithoutProperties(z, ["x"]); -var x = z[x], - y = babelHelpers.objectWithoutProperties(z, [x]); +var _z = z, + x = babelHelpers.objectWithoutProperties(_z, []); +var _z2 = z, + x = _z2.x, + y = babelHelpers.objectWithoutProperties(_z2, ["x"]); +var _z3 = z, + x = _z3[x], + y = babelHelpers.objectWithoutProperties(_z3, [x]); (function (_ref) { var x = _ref.x, y = babelHelpers.objectWithoutProperties(_ref, ["x"]); }); + +var _o = o; +x = _o.x; + +var _babelHelpers$objectW = babelHelpers.objectWithoutProperties(_o, ["x"]); + +y = _babelHelpers$objectW.y; +z = _babelHelpers$objectW.z; +_o; \ No newline at end of file diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/actual.js b/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/actual.js new file mode 100644 index 0000000000..871cd28fa8 --- /dev/null +++ b/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/actual.js @@ -0,0 +1 @@ +export * as default from "foo"; diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/expected.js b/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/expected.js new file mode 100644 index 0000000000..f5334b455c --- /dev/null +++ b/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/expected.js @@ -0,0 +1,2 @@ +import * as _default from "foo"; +export { _default as default }; \ No newline at end of file diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/options.json b/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/options.json new file mode 100644 index 0000000000..26dfe134f4 --- /dev/null +++ b/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", "transform-export-extensions"] +} diff --git a/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/variable-destructuring/actual.js b/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/variable-destructuring/actual.js index 6eed55d739..a8e761d5c9 100644 --- a/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/variable-destructuring/actual.js +++ b/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/variable-destructuring/actual.js @@ -17,3 +17,6 @@ let { } = complex; let { x4: { ...y4 } } = z; + +var { ...{ z } } = { z: 1 }; +var { ...{ x = 5 } } = { x : 1 }; diff --git a/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/variable-destructuring/expected.js b/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/variable-destructuring/expected.js index b9b3cfe2d3..2d4f70f8c1 100644 --- a/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/variable-destructuring/expected.js +++ b/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/variable-destructuring/expected.js @@ -24,3 +24,6 @@ let { let {} = z, y4 = babelHelpers.objectWithoutProperties(z.x4, []); + +var { z } = babelHelpers.objectWithoutProperties({ z: 1 }, []); +var { x = 5 } = babelHelpers.objectWithoutProperties({ x: 1 }, []); \ No newline at end of file diff --git a/packages/babel-template/package.json b/packages/babel-template/package.json index 105a88749c..16735ba59a 100644 --- a/packages/babel-template/package.json +++ b/packages/babel-template/package.json @@ -8,7 +8,7 @@ "repository": "https://github.com/babel/babel/tree/master/packages/babel-template", "main": "lib/index.js", "dependencies": { - "babylon": "7.0.0-beta.8", + "babylon": "7.0.0-beta.10", "babel-traverse": "7.0.0-alpha.9", "babel-types": "7.0.0-alpha.9", "lodash": "^4.2.0" diff --git a/packages/babel-traverse/package.json b/packages/babel-traverse/package.json index cd777cd3ed..054d35dce0 100644 --- a/packages/babel-traverse/package.json +++ b/packages/babel-traverse/package.json @@ -12,7 +12,7 @@ "babel-helper-function-name": "7.0.0-alpha.7", "babel-messages": "7.0.0-alpha.9", "babel-types": "7.0.0-alpha.9", - "babylon": "7.0.0-beta.8", + "babylon": "7.0.0-beta.10", "debug": "^2.2.0", "globals": "^9.0.0", "invariant": "^2.2.0",