Skip to content

Workaround #10179 in proposal-object-rest-spread#10200

Merged
nicolo-ribaudo merged 1 commit into
babel:masterfrom
nicolo-ribaudo:issue-10179
Jul 15, 2019
Merged

Workaround #10179 in proposal-object-rest-spread#10200
nicolo-ribaudo merged 1 commit into
babel:masterfrom
nicolo-ribaudo:issue-10179

Conversation

@nicolo-ribaudo

@nicolo-ribaudo nicolo-ribaudo commented Jul 11, 2019

Copy link
Copy Markdown
Member
Q                       A
Fixed Issues? Fixes #10179
Patch: Bug Fix? Yes
Major: Breaking Change?
Minor: New Feature?
Tests Added + Pass? Yes
Documentation PR Link
Any Dependency Changes?
License MIT

The real cause of this bug is in @babel/core (#10187), but even if we fixed it new versions of plugin-proposal-object-rest-spread wouldn't work with older versions of @babel/core and @babel/helpers.
This bug also needs to be fixed in @babel/core anyway, otherwise it will happen again.

I couldn't figure out how to add a test for this bug; I tested it manually with a package.json like this (it requires yarn):

{
  "devDependencies": {
    "@babel/cli": "^7.5.0",
    "@babel/core": "7.4.0",
    "@babel/plugin-proposal-object-rest-spread": "file:../../babel/babel/packages/babel-plugin-proposal-object-rest-spread"
  },
  "resolutions": {
    "@babel/helpers": "7.4.0"
  }
}
Input
void { ...foo };
void { ...bar };
Output before the fix
function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

void _objectSpread2({}, foo);
void _objectSpread({}, bar);
Output after the fix
function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

void _objectSpread2({}, foo);
void _objectSpread2({}, bar);

Note that in the fixed output the injected helper is called _objectSpread2 only because Babel is trolling* us, that is the _objectSpread helper present in <7.5.0.

*trolling = In the "try" block it genertes an _objectSpread UUID which is then discarted, so it must create _objectSpread2 the second time.

@nicolo-ribaudo nicolo-ribaudo added PR: Bug Fix 🐛 A type of pull request used for our changelog categories i: regression Spec: Object Rest/Spread labels Jul 11, 2019
@babel-bot

Copy link
Copy Markdown
Collaborator

Build successful! You can test your changes in the REPL here: https://babeljs.io/repl/build/11109/

@thiagoarrais thiagoarrais left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix confirmed locally.

@nicolo-ribaudo
nicolo-ribaudo merged commit 7dc5fdb into babel:master Jul 15, 2019
@nicolo-ribaudo
nicolo-ribaudo deleted the issue-10179 branch July 15, 2019 17:01
@nicolo-ribaudo

Copy link
Copy Markdown
Member Author

Release tomorrow!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

i: regression outdated A closed issue/PR that is archived due to age. Recommended to make a new issue PR: Bug Fix 🐛 A type of pull request used for our changelog categories Spec: Object Rest/Spread

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ReferenceError: _objectSpread is not defined after update

4 participants