diff --git a/packages/babel-plugin-proposal-object-rest-spread/src/index.js b/packages/babel-plugin-proposal-object-rest-spread/src/index.js index ca8e53b24f..0103816a23 100644 --- a/packages/babel-plugin-proposal-object-rest-spread/src/index.js +++ b/packages/babel-plugin-proposal-object-rest-spread/src/index.js @@ -96,10 +96,14 @@ export default declare((api, opts) => { const bindings = path.getOuterBindingIdentifierPaths(); Object.keys(bindings).forEach(bindingName => { - if (path.scope.getBinding(bindingName).references > 1) { + const bindingParentPath = bindings[bindingName].parentPath; + if ( + path.scope.getBinding(bindingName).references > 1 || + !bindingParentPath.isObjectProperty() + ) { return; } - bindings[bindingName].parentPath.remove(); + bindingParentPath.remove(); }); } diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/regression/gh-8323/input.js b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/regression/gh-8323/input.js new file mode 100644 index 0000000000..fc0991bbf7 --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/regression/gh-8323/input.js @@ -0,0 +1,8 @@ +const get = () => { + fireTheMissiles(); + return 3; +}; + +const f = ({ a = get(), b, c, ...z }) => { + const v = b + 3; +}; diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/regression/gh-8323/options.json b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/regression/gh-8323/options.json new file mode 100644 index 0000000000..0333615e14 --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/regression/gh-8323/options.json @@ -0,0 +1,4 @@ +{ + "presets": [ [ "env", { "targets": { "node": "8" } } ] ], + "plugins": [ [ "proposal-object-rest-spread", { "loose": true } ] ] +} diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/regression/gh-8323/output.js b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/regression/gh-8323/output.js new file mode 100644 index 0000000000..62b6e704ab --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/regression/gh-8323/output.js @@ -0,0 +1,16 @@ +function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } + +const get = () => { + fireTheMissiles(); + return 3; +}; + +const f = (_ref) => { + let { + a = get(), + b + } = _ref, + z = _objectWithoutPropertiesLoose(_ref, ["a", "b", "c"]); + + const v = b + 3; +};