diff --git a/packages/babel-plugin-transform-class-properties/src/index.js b/packages/babel-plugin-transform-class-properties/src/index.js index 49f14e188b..bee037d22e 100644 --- a/packages/babel-plugin-transform-class-properties/src/index.js +++ b/packages/babel-plugin-transform-class-properties/src/index.js @@ -145,6 +145,16 @@ export default function ({ types: t }) { } path.insertAfter(nodes); + }, + ArrowFunctionExpression(path) { + let classExp = path.get("body"); + if (!classExp.isClassExpression()) return; + + let body = classExp.get("body"); + let members = body.get("body"); + if (members.some((member) => member.isClassProperty())) { + path.ensureBlock(); + } } } }; diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/actual.js b/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/actual.js new file mode 100644 index 0000000000..4b67e0e158 --- /dev/null +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/actual.js @@ -0,0 +1,11 @@ +export default param => + class App { + static props = { + prop1: 'prop1', + prop2: 'prop2' + } + + getParam() { + return param; + } + } diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/expected.js b/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/expected.js new file mode 100644 index 0000000000..a1e381f8a8 --- /dev/null +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/general/non-block-arrow-func/expected.js @@ -0,0 +1,20 @@ +export default (param => { + var _class, _temp; + + return _temp = _class = function () { + function App() { + babelHelpers.classCallCheck(this, App); + } + + babelHelpers.createClass(App, [{ + key: 'getParam', + value: function getParam() { + return param; + } + }]); + return App; + }(), _class.props = { + prop1: 'prop1', + prop2: 'prop2' + }, _temp; +})