From ef25bebfa81a389deb53ab5d0cdc0466197f0179 Mon Sep 17 00:00:00 2001 From: Jason Aslakson Date: Thu, 19 Jan 2017 21:36:18 -0500 Subject: [PATCH] fix issue #5012 - Cannot read property 'declarations' of null (#5019) - temporary fix --- .../constant-elements/destructure/actual.js | 10 ++++++++++ .../constant-elements/destructure/expected.js | 13 +++++++++++++ .../constant-elements/destructure/options.json | 7 +++++++ packages/babel-traverse/src/path/lib/hoister.js | 7 ++++++- 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/actual.js create mode 100644 packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/expected.js create mode 100644 packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/options.json diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/actual.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/actual.js new file mode 100644 index 0000000000..fbd1ed5555 --- /dev/null +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/actual.js @@ -0,0 +1,10 @@ +class AnchorLink extends Component { + render() { + const { isExternal, children } = this.props; + if (isExternal) { + return ({children}); + } + + return ({children}); + } +} diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/expected.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/expected.js new file mode 100644 index 0000000000..4f730edf03 --- /dev/null +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/expected.js @@ -0,0 +1,13 @@ +class AnchorLink extends Component { + render() { + var _props = this.props; + const isExternal = _props.isExternal, + children = _props.children; + + if (isExternal) { + return {children}; + } + + return {children}; + } +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/options.json b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/options.json new file mode 100644 index 0000000000..dc9272a969 --- /dev/null +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/destructure/options.json @@ -0,0 +1,7 @@ +{ + "plugins": [ + "syntax-jsx", + "transform-es2015-destructuring", + "transform-react-constant-elements" + ] +} diff --git a/packages/babel-traverse/src/path/lib/hoister.js b/packages/babel-traverse/src/path/lib/hoister.js index 8a36031f1e..243e9c18ac 100644 --- a/packages/babel-traverse/src/path/lib/hoister.js +++ b/packages/babel-traverse/src/path/lib/hoister.js @@ -121,7 +121,12 @@ export default class PathHoister { do { if (!path.parentPath || (Array.isArray(path.container) && path.isStatement()) || - (path.isVariableDeclarator() && path.parentPath.node.declarations.length > 1)) + ( + path.isVariableDeclarator() && + path.parentPath.node !== null && + path.parentPath.node.declarations.length > 1 + ) + ) return path; } while ((path = path.parentPath)); }