From e9ed687666fc0389a59e3f2ae45c6a2a6ca19b8b Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 9 Jan 2018 08:38:52 +0300 Subject: [PATCH] Bail out on JSX fragments instead of throwing (#7166) * Bail out on JSX fragments instead of throwing The `transform-react-inline-elements` plugin doesn't handle JSX fragments. It throws an exception because `node.openingElement` is undefined. * Add a comment explaining `node.openingElement` --- .../src/index.js | 6 +++++- .../test/fixtures/inline-elements/fragment/actual.js | 1 + .../test/fixtures/inline-elements/fragment/expected.js | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/fragment/actual.js create mode 100644 packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/fragment/expected.js diff --git a/packages/babel-plugin-transform-react-inline-elements/src/index.js b/packages/babel-plugin-transform-react-inline-elements/src/index.js index 08dcd11a60..a2288ee9be 100644 --- a/packages/babel-plugin-transform-react-inline-elements/src/index.js +++ b/packages/babel-plugin-transform-react-inline-elements/src/index.js @@ -19,7 +19,11 @@ export default function() { const visitor = helper({ filter(node) { - return !hasRefOrSpread(node.openingElement.attributes); + return ( + // Regular JSX nodes have an `openingElement`. JSX fragments, however, don't have an + // `openingElement` which causes `node.openingElement.attributes` to throw. + node.openingElement && !hasRefOrSpread(node.openingElement.attributes) + ); }, pre(state) { const tagName = state.tagName; diff --git a/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/fragment/actual.js b/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/fragment/actual.js new file mode 100644 index 0000000000..f34cb095aa --- /dev/null +++ b/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/fragment/actual.js @@ -0,0 +1 @@ +<>
diff --git a/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/fragment/expected.js b/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/fragment/expected.js new file mode 100644 index 0000000000..55fbad164b --- /dev/null +++ b/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/fragment/expected.js @@ -0,0 +1 @@ +React.createElement(React.Fragment, null, babelHelpers.jsx("span", {}), babelHelpers.jsx("div", {}));