cli
cli copied to clipboard
Babel loose config option causes issues with spread transform
I'm submitting a bug report I'm submitting a feature request
- Library Version: 1.0.0-beta7
Please tell us about your environment:
-
Operating System: all
-
Node Version: 6.2.0
- NPM Version: 8.11.3
-
Browser: all
-
Language: ESNext
-
Loader/bundler: all
Current behavior:
Babel config specifies loose: true
. This causes issues when using the spread (...
) operator with a Set
object. Specifically, the code:
this.foo = [...new Set([1, 2, 3])];
is transpiled to
this.foo = new Set([1, 2, 3]).concat();
This is a problem, as Set
objects do not have a concat
method. This transpilation is a consequence of having loose: true
in .babelrc.js
, per this issue: https://github.com/babel/babel/issues/7958 . As mentioned in the linked issue, this is the expected behavior when using loose: true
, and is not a bug in Babel or the spread transformer.
Simply setting loose: false
will fix this issue.
This issue was originally reported on StackOverflow here: https://stackoverflow.com/questions/53696962/aurelia-not-transpiling-set-and-spread-operator-correctly
-
What is the expected behavior? Spread operator to be transpiled correctly with
Set
objects. -
What is the motivation / use case for changing the behavior? Make transpilation work correctly.
I questioned loose mode before in #866 but didn't have any interesting code that broke with loose mode.
Alternatively this.foo = Array.from(new Set([1,2,3]));
(still compact and readable) can avoid the loose mode issue.
I would side with changing user code than pay the price (performance and size) of strict mode.