<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Babel</title>
    <description>The compiler for writing next generation JavaScript</description>
    <link>https://babeljs.io/</link>
    <atom:link href="https://babeljs.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 14 Sep 2017 22:03:58 +0000</pubDate>
    <lastBuildDate>Thu, 14 Sep 2017 22:03:58 +0000</lastBuildDate>
    <generator>Jekyll v3.5.2</generator>
    
      <item>
        <title>Planning for 7.0</title>
        <description>&lt;p&gt;If you didn’t know already, we’re planning on releasing a 7.0 version soon 🙌 ! Work on it actually started back in February, when I just wanted to make a release to drop Node 0.10/0.12 support and remove babel-runtime and various other code. And since then, we’ve done releases up to &lt;code class=&quot;highlighter-rouge&quot;&gt;alpha.20&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We’re going to update this post throughout the beta releases&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Since we’re still just a volunteer project, it’s been difficult for most of the team to stay focused and motivated to make all these changes and continue to maintain a project that so many companies, bootcamps, and tools rely on so much. But in the meantime we’ve made a lot of progress: &lt;a href=&quot;https://github.com/babel/notes&quot;&gt;weekly meetings/notes&lt;/a&gt;, participating as invited guests at TC39 for the last few meetings, facilitating in both &lt;a href=&quot;https://railsgirlssummerofcode.org/&quot;&gt;RGSoC&lt;/a&gt; and &lt;a href=&quot;https://summerofcode.withgoogle.com&quot;&gt;GSoC&lt;/a&gt;, and creating an &lt;a href=&quot;https://opencollective.com/babel&quot;&gt;Open Collective&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;upgrading&quot;&gt;Upgrading&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Upgrading for most projects should be as simple as updating your &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt; deps to &lt;code class=&quot;highlighter-rouge&quot;&gt;7.0.0-beta.0&lt;/code&gt;. For the whole time we’ve been working on 7.0, we’ve been using it in Babel itself (so meta) and at my workplace at Behance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;We will be pinning all dependencies to exact versions until the official release.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;devDependencies&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;babel-cli&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;7.0.0-beta.0&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Specific packages:&lt;/p&gt;

&lt;details&gt;
babel packages in the monorepo should all be &amp;gt;= 7.0.0-beta.0 &lt;br /&gt;
babel-preset-env should be at least 2.0.0-beta.0 &lt;br /&gt;
babel-eslint can be &amp;gt;= 8.0.0 &lt;br /&gt;
babel-loader should be &amp;gt;= 7.0.0 (out of beta since it uses babel-core as a peerDependency) &lt;br /&gt;
grunt-babel can be &amp;gt;= 7.0.0 &lt;br /&gt;
gulp-babel can be &amp;gt;= 7.0.0 &lt;br /&gt;
rollup-plugin-babel can be &amp;gt;= 3.0.2
&lt;/details&gt;

&lt;hr /&gt;

&lt;p&gt;Please check out our &lt;a href=&quot;https://babeljs.io/blog/2017/03/01/upgrade-to-babel-7&quot;&gt;upgrade guide&lt;/a&gt; and other guide specifically for &lt;a href=&quot;https://babeljs.io/blog/2017/03/01/upgrade-to-babel-7-for-tool-authors&quot;&gt;tool authors&lt;/a&gt; which we will also be updating as necessary.&lt;/p&gt;

&lt;p&gt;I’d like to go over some notable changes for our first beta release (it’s still a lot &lt;em&gt;smaller&lt;/em&gt; in scope in terms of breaking changes than the previous 6.0 release).&lt;/p&gt;

&lt;h2 id=&quot;re-iterating-project-goals&quot;&gt;Re-iterating Project Goals&lt;/h2&gt;

&lt;p&gt;Before we go into that, I just want to repeat again what the purpose of Babel is.&lt;/p&gt;

&lt;p&gt;Since Babel has been renamed from 6to5, browsers have been implementing more of the spec and users are more comfortable with using the latest syntax/build tooling. It shouldn’t be surprisingly however that Babel’s goals haven’t changed much.&lt;/p&gt;

&lt;p&gt;Our two goals are hand in hand:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Help developers transform new syntax into backwards compatible code (abstract browser support away)&lt;/li&gt;
  &lt;li&gt;Be a bridge to help TC39 get feedback on new ECMAScript proposals and for the community to have a say in the future of the language.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thus, I think it’s an understatement to say that Babel is a vital part of the JavaScript community (almost 10 million downloads a month of &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core&lt;/code&gt;) and sorely needs its support. (The only talks I’ve tried to give are about this point: &lt;a href=&quot;https://github.com/hzoo/maintaining-an-oss-project&quot;&gt;JSConf EU&lt;/a&gt;, &lt;a href=&quot;https://github.com/hzoo/so-how-does-babel-even-work&quot;&gt;React Rally&lt;/a&gt;, &lt;a href=&quot;https://github.com/hzoo/role-of-babel-in-js&quot;&gt;TC39&lt;/a&gt;). I said recently: “What happens if Babel dies”? What happens when the current group of people interested in this project get bored/burned out/move on to other things? (What if it’s already happened?). Are we going to do something about it? I don’t want to just ask you to help us, you already are &lt;em&gt;us&lt;/em&gt; as users of the project.&lt;/p&gt;

&lt;p&gt;Ok then, let’s talk about some changes!&lt;/p&gt;

&lt;h2 id=&quot;4315-drop-support-for-unmaintained-node-versions-010-012-5&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/4315&quot;&gt;#4315&lt;/a&gt; Drop support for unmaintained Node versions: 0.10, 0.12, 5&lt;/h2&gt;

&lt;p&gt;Progress in OSS projects often comes at the cost of upgrading for its users. Because of this, we’ve always been hesitant in making the choice to introduce a major version bump/breaking changes. By dropping unsupported versions of Node, we can not only make a number of improvements to the codebase, but also upgrade dependencies and tools (ESLint, Yarn, Jest, Lerna, etc).&lt;/p&gt;

&lt;h2 id=&quot;-proposal-updatesspec-compliancy&quot;&gt;👓 Proposal Updates/Spec Compliancy&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;AKA the only things most of you care about 😅&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;philosophy-proposals-spec-loose-default-behavior&quot;&gt;Philosophy (Proposals: spec, loose, default behavior)&lt;/h3&gt;

&lt;p&gt;We’ve created a new repo: &lt;a href=&quot;https://github.com/babel/proposals&quot;&gt;babel/proposals&lt;/a&gt; to track our progress on the various &lt;a href=&quot;https://github.com/tc39/proposals&quot;&gt;TC39 Proposals&lt;/a&gt; and meetings.&lt;/p&gt;

&lt;p&gt;I also added a section about &lt;a href=&quot;https://github.com/babel/proposals#when-does-babel-implement-new-features&quot;&gt;how we accept new proposals&lt;/a&gt;. Our basic thinking is that we will start accepting PRs for anything a TC39 champion is going to present (Stage 0). And we will update them (with your help!) when the spec changes.&lt;/p&gt;

&lt;p&gt;Naturally, we will take the opportunity to be as spec compliant as possible (within reasonable speed, etc) as the default behavior. This means if you need a faster/smaller build, you should use the &lt;code class=&quot;highlighter-rouge&quot;&gt;loose&lt;/code&gt; option which will purposely disregard certain spec changes like runtime checks and other edge cases. The reason why it is opt-in is because we expect you should know what you are doing, while others should be able to seamlessly upgrade &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-env&lt;/code&gt; to use the native version of each syntax or stop using Babel entirely and have no issues.&lt;/p&gt;

&lt;h3 id=&quot;stage-3-class-properties-from-stage-2&quot;&gt;Stage 3: Class Properties (from Stage 2)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-class-properties&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-class-properties&lt;/code&gt;&lt;/a&gt;: the default behavior is now what was previously the “spec” option, which uses &lt;code class=&quot;highlighter-rouge&quot;&gt;Object.defineProperty&lt;/code&gt; instead of simple assignment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;This currently has the effect of breaking the &lt;a href=&quot;https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy&quot;&gt;legacy decorators plugin&lt;/a&gt; (which we made the “transform-decorators” plugin in 7.0) if you try to decorate a class property. You’ll need to use the &lt;code class=&quot;highlighter-rouge&quot;&gt;loose&lt;/code&gt; option to be compatible with the version of decorators in the transform until we release the Stage 2 decorators plugin.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Private fields are WIP: &lt;a href=&quot;https://github.com/babel/babel/pull/6120&quot;&gt;#6120&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Bork&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kr&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'foo'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'bar'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output (default)&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Bork&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;defineProperty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;x&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;configurable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;enumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;writable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'bar'&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;defineProperty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Bork&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;configurable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;enumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;writable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'foo'&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output (loose mode)&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Bork&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'bar'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;Bork&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'foo'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-3-object-rest-spread-from-stage-2&quot;&gt;Stage 3: Object Rest Spread (from Stage 2)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-object-rest-spread&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-object-rest-spread&lt;/code&gt;&lt;/a&gt;: And now the plugin handles non-string keys (ex: Number/Symbol)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// Rest Properties&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 1&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 2&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// { a: 3, b: 4 }&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Spread Properties&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// { x: 1, y: 2, a: 3, b: 4 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Also disallowed&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...[&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-3-optional-catch-binding-new&quot;&gt;Stage 3: Optional Catch Binding (new)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-optional-catch-binding&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-optional-catch-binding&lt;/code&gt;&lt;/a&gt;: allow developers to use try/catch without creating an unused binding.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;doSomethingWhichDoesntCareAboutTheValueThrown&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_unused&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;doSomethingWhichDoesntCareAboutTheValueThrown&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-3-unicode-property-regex-new&quot;&gt;Stage 3: Unicode Property Regex (new)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/mathiasbynens/babel-plugin-transform-unicode-property-regex&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-unicode-property-regex&lt;/code&gt;&lt;/a&gt;: compile Unicode property escapes (&lt;code class=&quot;highlighter-rouge&quot;&gt;\p{…}&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;\P{…}&lt;/code&gt;) in Unicode regular expressions to ES5 or ES6 that works in today’s environments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;regex&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\p&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;{ASCII_Hex_Digit}/&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;regex&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;0-9A-Fa-f&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-3-bigint-new-unfinished&quot;&gt;Stage 3: BigInt (new, unfinished)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-bigint&lt;/code&gt;: &lt;a href=&quot;https://github.com/babel/babel/pull/6015&quot;&gt;#6015&lt;/a&gt;.
This won’t be included in the Stage presets because it would be slow to wrap all operators.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;50000&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;babelCheckBinaryExpressions&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;babel-check-binary-expressions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;babelCheckBinaryExpressions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;BigInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;50000&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;BigInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;60&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;+&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-3-dynamic-import-from-stage-2&quot;&gt;Stage 3: Dynamic Import (from Stage 2)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-dynamic-import&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-syntax-dynamic-import&lt;/code&gt;&lt;/a&gt;: You only need to parse the syntax since tools like Webpack can handle the transformation in place of Babel.
There is also a &lt;a href=&quot;https://github.com/airbnb/babel-plugin-dynamic-import-node&quot;&gt;plugin for Node&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;testModule&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'test-module'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-2-importmeta-syntax-only&quot;&gt;Stage 2: &lt;code class=&quot;highlighter-rouge&quot;&gt;import.meta&lt;/code&gt; (syntax only)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;A meta property that is only syntactically valid in modules, meant for meta-information about the currently running module provided by the host environment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;size&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;meta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scriptElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dataset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;size&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-2-numeric-seperators-new&quot;&gt;Stage 2: Numeric Seperators (new)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-numeric-separator&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-numeric-separator&lt;/code&gt;&lt;/a&gt;: make numeric literals more readable by creating a visual separation (a &lt;code class=&quot;highlighter-rouge&quot;&gt;_&lt;/code&gt;) between groups of digits.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_000_000_000&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b1010_0001_1000_0101&lt;/span&gt;
&lt;span class=&quot;mh&quot;&gt;0xA0&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_B0_C0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;1000000000&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b1010000110000101&lt;/span&gt;
&lt;span class=&quot;mh&quot;&gt;0xA0B0C0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-2-decorators-from-stage-1-still-wip&quot;&gt;Stage 2: Decorators (from Stage 1), still WIP&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-decorators&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-decorators&lt;/code&gt;&lt;/a&gt;: &lt;a href=&quot;https://github.com/babel/babel/pull/6107&quot;&gt;#6107&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Disallowed&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// no computed decorator keys&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;A&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// no parameter decorators (a separate proposal)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// no decorators on object methods&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;baz&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// decorator cannot be attached to the export&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Valid&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// decorators with a call expression&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'bar'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;A&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// decorators on computed methods&lt;/span&gt;
  &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;autobind&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;arg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// decorators on generator functions&lt;/span&gt;
  &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;deco&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;gen&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// decorators with a member expression&lt;/span&gt;
  &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// exported decorator classes&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Unsupported (WIP)&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// decorated class properties&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;A&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dec&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-2-functionsent-new&quot;&gt;Stage 2: &lt;code class=&quot;highlighter-rouge&quot;&gt;function.sent&lt;/code&gt; (new)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://www.npmjs.com/package/babel-plugin-transform-function-sent&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-function-sent&lt;/code&gt;&lt;/a&gt;: compile the &lt;code class=&quot;highlighter-rouge&quot;&gt;function.sent&lt;/code&gt; meta property, used inside generator functions&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Sent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;sent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Yield&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;iterator&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;iterator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;next&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Logs &quot;Sent 1&quot;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;iterator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;next&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Logs &quot;Yield 2&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generator&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_skipFirstGeneratorNext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_functionSent&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Sent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_functionSent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Yield&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-2-export-ns-from&quot;&gt;Stage 2: export-ns-from&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-export-namespace&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-export-namespace&lt;/code&gt;&lt;/a&gt;: a shorthand to import/reexport a namespace. Split out from the old &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-export-extensions&lt;/code&gt; which combined this proposal with another&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ns&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;mod&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ns&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;mod&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ns&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-1-export-default-from&quot;&gt;Stage 1: export-default-from&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-export-default&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-export-default&lt;/code&gt;&lt;/a&gt;: a shorthand to import/reexport something. Split out from the old &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-export-extensions&lt;/code&gt; which combined this proposal with another&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;v&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;mod&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_v&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;module&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_v&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;v&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stage-1-optional-chaining-new&quot;&gt;Stage 1: Optional Chaining (new)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-optional-chaining&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-optional-chaining&lt;/code&gt;&lt;/a&gt;: the operator (&lt;code class=&quot;highlighter-rouge&quot;&gt;?.&lt;/code&gt;) allows you to handle properties of deeply nested objects without worrying about undefined intermediate objects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;es2015-newtarget&quot;&gt;ES2015: &lt;code class=&quot;highlighter-rouge&quot;&gt;new.target&lt;/code&gt;&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-new-target&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-new-target&lt;/code&gt;&lt;/a&gt;: we never got around to implementing &lt;code class=&quot;highlighter-rouge&quot;&gt;new.target&lt;/code&gt; support earlier, so now there is a plugin for it that will be included in the ES2015/env presets.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Example&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// with a function&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// =&amp;gt; undefined&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// =&amp;gt; Foo&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// with classes&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Bar&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// =&amp;gt; Foo&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Bar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// =&amp;gt; Bar&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;nx&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;nx&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;-new-feature&quot;&gt;🚀 New Feature&lt;/h2&gt;

&lt;h3 id=&quot;babelrcjs&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;.babelrc.js&lt;/code&gt;&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/4630&quot;&gt;babel/babel#4630&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.js&lt;/code&gt; configuration files are fairly common in the JavaScript ecosystem. ESLint and Webpack both allow for &lt;code class=&quot;highlighter-rouge&quot;&gt;.eslintrc.js&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;webpack.config.js&lt;/code&gt; configuration files, respectively.&lt;/p&gt;

&lt;p&gt;Writing configuration files in JavaScript allows for dynamic configuration, making it possible to write a single configuration file that can adapt to different environments programmatically.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;env&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;BABEL_ENV&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;NODE_ENV&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;plugins&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[];&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;env&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'production'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;apply&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;a-super-cool-babel-plugin&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;plugins&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;env&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;BABEL_ENV&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;NODE_ENV&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;env&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'production'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;another-super-cool-babel-plugin&quot;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This was previously done through the &lt;code class=&quot;highlighter-rouge&quot;&gt;env&lt;/code&gt; configuration option, which is now deprecated. See &lt;a href=&quot;#deprecate-the-env-option-in-babelrc&quot;&gt;below&lt;/a&gt; for more details.&lt;/p&gt;

&lt;h3 id=&quot;typescript&quot;&gt;TypeScript&lt;/h3&gt;

&lt;p&gt;You can now use &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-typescript&lt;/code&gt; to allow Babel to strip types similar to how &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-flow&lt;/code&gt; works!&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;presets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;typescript&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;We’re working on a guide for how to setup TypeScript and Babel with the TypeScript team, which should be finished before the official 7.0 release. TL;DR is that you setup TS with &lt;code class=&quot;highlighter-rouge&quot;&gt;--no-emit&lt;/code&gt; or use it in the editor/watch mode so that you can use preset-env and other Babel plugins.&lt;/p&gt;

&lt;h3 id=&quot;pure-annotation-in-specific-transforms-for-minifiers&quot;&gt;“Pure” Annotation in specific transforms for minifiers&lt;/h3&gt;

&lt;p&gt;After &lt;a href=&quot;https://github.com/babel/babel/pull/6209&quot;&gt;#6209&lt;/a&gt;, ES6 classes that are transpiled will have a &lt;code class=&quot;highlighter-rouge&quot;&gt;/*#__PURE__*/&lt;/code&gt; comment that minfiers like Uglify and babel-minify can use for dead code elimination. These annotations may expand to our helper functions as well.&lt;/p&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;C&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'a'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;C&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/*#__PURE__*/&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;_classCallCheck&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'a'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;-other-breaking-changes&quot;&gt;😎 Other Breaking Changes&lt;/h2&gt;

&lt;h3 id=&quot;removed-babel-preset-flow-from-babel-preset-react&quot;&gt;Removed &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-flow&lt;/code&gt; from &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-react&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;This was important because we got a lot of complaints from users that weren’t using any types/flow that they ended up writing invalid JS but there was no syntax error because they used the react preset.&lt;/p&gt;

&lt;p&gt;Also we have the TypeScript preset now, so it didn’t make sense to include &lt;code class=&quot;highlighter-rouge&quot;&gt;flow&lt;/code&gt; in the react preset itself anymore.&lt;/p&gt;

&lt;h3 id=&quot;integrations&quot;&gt;Integrations&lt;/h3&gt;

&lt;p&gt;Packages like &lt;code class=&quot;highlighter-rouge&quot;&gt;grunt-babel&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;gulp-babel&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;rollup-plugin-babel&lt;/code&gt;, etc all used to have &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core&lt;/code&gt; as a dependency.&lt;/p&gt;

&lt;p&gt;After v7, we plan to move &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core&lt;/code&gt; to be a peerDependency like &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-loader&lt;/code&gt; has. This lets all these packages not have to bump major versions when the &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core&lt;/code&gt; API hasn’t changed. Thus they are already published as &lt;code class=&quot;highlighter-rouge&quot;&gt;7.0.0&lt;/code&gt; since we don’t expect any further changes to those packages.&lt;/p&gt;

&lt;h2 id=&quot;meta&quot;&gt;Meta&lt;/h2&gt;

&lt;h3 id=&quot;5218-remove-babel-runtime-from-our-own-babel-dependencies&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5218&quot;&gt;#5218&lt;/a&gt; Remove &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-runtime&lt;/code&gt; from our own Babel dependencies&lt;/h3&gt;

&lt;p&gt;Babel itself doesn’t have that many external dependencies, but in 6.x &lt;a href=&quot;https://github.com/babel/babel/blob/958f72ddc28e2f5d02adf44eadd2b1265dd0fa4d/packages/babel-plugin-transform-es2015-arrow-functions/package.json#L12&quot;&gt;each package has a dependency on &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-runtime&lt;/code&gt;&lt;/a&gt; so that built-ins like Symbol, Map, Set, and others are available without needing a polyfill. By changing the minimum supported version of Node to v4 (where those built-ins are supported natively), we can drop the dependency entirely.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is an issue on npm 2 (we didn’t recommended its use with Babel 6) and older yarn, but not npm 3 due to its deduping behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With &lt;a href=&quot;https://github.com/facebookincubator/create-react-app&quot;&gt;Create React App&lt;/a&gt; the size of the node_modules folder changed drastically when babel-runtime was hoisted.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;node_modules&lt;/code&gt; for npm 3: ~120MB&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;node_modules&lt;/code&gt; for Yarn (&amp;lt;&lt;code class=&quot;highlighter-rouge&quot;&gt;0.21.0&lt;/code&gt;): ~518MB&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;node_modules&lt;/code&gt; for Yarn (&amp;lt;&lt;code class=&quot;highlighter-rouge&quot;&gt;0.21.0&lt;/code&gt;) with hoisted &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-runtime&lt;/code&gt;: ~157MB&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;node_modules&lt;/code&gt; for Yarn + &lt;a href=&quot;https://github.com/yarnpkg/yarn/pull/2676&quot;&gt;PR #2676&lt;/a&gt;: ~149MB (&lt;a href=&quot;https://twitter.com/bestander_nz/status/833696202436784128&quot;&gt;tweet&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So although this issue has been fixed “upstream” by using npm &amp;gt;= 3/later Yarn, we can do our part by simply dropping our own dependency on &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-runtime&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;5224-independent-publishing-of-experimental-packages&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5224&quot;&gt;#5224&lt;/a&gt; Independent Publishing of Experimental Packages&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;I mention this in &lt;a href=&quot;http://babeljs.io/blog/2016/12/07/the-state-of-babel&quot;&gt;The State of Babel&lt;/a&gt; in the &lt;code class=&quot;highlighter-rouge&quot;&gt;Versioning&lt;/code&gt; section. &lt;a href=&quot;https://github.com/babel/babylon/issues/275&quot;&gt;Github Issue&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You might remember that after Babel 6, Babel became a set of npm packages with its own ecosystem of custom presets and plugins.&lt;/p&gt;

&lt;p&gt;However since then, we’ve always used a “fixed/synchronized” versioning system (so that no package is on v7.0 or above). When we do a new release such as &lt;code class=&quot;highlighter-rouge&quot;&gt;v6.23.0&lt;/code&gt; only packages that have updated code in the source are published with the new version while the rest of the packages are left as is. This mostly works in practice because we use &lt;code class=&quot;highlighter-rouge&quot;&gt;^&lt;/code&gt; in our packages.&lt;/p&gt;

&lt;p&gt;Unfortunately this kind of system requires that a major version be released for all packages once a single package needs it. This either means we make a lot small breaking changes (unnecessary) or we batch lots of breaking changes into a single release. Instead, we want to differentiate between the experimental packages (Stage 0, etc) and everything else (es2015).&lt;/p&gt;

&lt;p&gt;This means that we intend to make major version bumps to any experimental proposal plugins when the spec changes rather than waiting to update all of Babel. So anything that is &amp;lt; Stage 4 would be open to breaking changes in the form of major version bumps and same with the Stage presets themselves if we don’t drop them entirely.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Say you are using preset-env (which keeps up to date and currently includes everything in es2015, es2016, es2017) + an experimental plugin. You also decide to use object-rest-spread because it’s cool.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;presets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;env&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;plugins&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;transform-object-rest-spread&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If the spec to an experimental proposal changes, we should be free to make a breaking change and make a major version bump for that plugin only. Because it only affects that plugin, it doesn’t affect anything else and people are free to update when possible. We just want to make sure that users update to the latest version of any experimental proposal when possible and provide the tools to do so automatically if that is reasonable as well.&lt;/p&gt;

&lt;h3 id=&quot;todos&quot;&gt;TODOs?&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;I believe the way we want to go about doing this is to move those packages into the &lt;code class=&quot;highlighter-rouge&quot;&gt;experimental/&lt;/code&gt; folder in our &lt;a href=&quot;https://github.com/babel/babel&quot;&gt;monorepo&lt;/a&gt; instead of in &lt;code class=&quot;highlighter-rouge&quot;&gt;packages/&lt;/code&gt;.
Then we should rename all proposals to &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-proposal-&lt;/code&gt; instead of &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-&lt;/code&gt;
Change our publish process (probably through Lerna) to publish the packages in &lt;code class=&quot;highlighter-rouge&quot;&gt;experimental/&lt;/code&gt; independently.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;-possible-deprecations&quot;&gt;💀 Possible Deprecations&lt;/h2&gt;

&lt;h3 id=&quot;deprecate-the-env-option-in-babelrc&quot;&gt;Deprecate the “env” option in &lt;code class=&quot;highlighter-rouge&quot;&gt;.babelrc&lt;/code&gt;&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/5276&quot;&gt;babel/babel#5276&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The “env” configuration option (not to be confused with babel-preset-env) has been a source of confusion for our users as seen by the numerous issues reported.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://babeljs.io/docs/usage/babelrc/#env-option&quot;&gt;current behavior&lt;/a&gt; is to merge the config values into the top level values which isn’t always intuitive such that developers end up putting nothing in the top level and just duplicating all the presets/plugins under separate envs.&lt;/p&gt;

&lt;p&gt;To eliminate the confusion (and help our power users), we’re considering dropping the env config option all together and recommending users use the proposed JS config format (see below).&lt;/p&gt;

&lt;h3 id=&quot;deprecate-es20xx-presets&quot;&gt;Deprecate ES20xx presets&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;We already deprecated preset-latest a while ago, and ES2016/ES2017 &lt;a href=&quot;https://twitter.com/left_pad/status/897483806499885057&quot;&gt;earlier&lt;/a&gt;
It’s annoying making a yearly preset (extra package/dependency, issues with npm package squatting unless we do scoped packages)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Developers shouldn’t even need to make the decision of what yearly preset to use? If we drop/deprecate these presets then everyone can use &lt;a href=&quot;https://github.com/babel/babel-preset-env&quot;&gt;babel-preset-env&lt;/a&gt; instead which will already update as the spec changes.&lt;/p&gt;

&lt;h2 id=&quot;-questions&quot;&gt;🤔 Questions&lt;/h2&gt;

&lt;h3 id=&quot;deprecaterenameremove-stage-x-presets&quot;&gt;&lt;del&gt;Deprecate/Rename/Remove Stage X presets&lt;/del&gt;&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;We’ll probably keep these and just make major version bumps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Many in the community (and TC39) have expressed concerns over the Stage X presets. I believe I just added them to have an easy migration path from Babel 5 to Babel 6 (used to be a “stage” option).&lt;/p&gt;

&lt;p&gt;While we want to have an easy to use tool, it turns out that many companies/developers use these “not yet JavaScript” presets all the time, and in production. “Stage 0” doesn’t really set the same tone as &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-dont-use-this-stage-0&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ariya just made an &lt;a href=&quot;https://twitter.com/AriyaHidayat/status/833797322786025472&quot;&gt;awesome poll&lt;/a&gt; that explains what I’m talking about&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Developers don’t actually know what features are in what version of JavaScript (and they shouldn’t have to know). However it is a problem when we all start thinking that “features” that are actually still proposals are in the spec already.&lt;/p&gt;

&lt;p&gt;Many open source projects (including Babel still 😝), tutorials, conference talks, etc all use &lt;code class=&quot;highlighter-rouge&quot;&gt;stage-0&lt;/code&gt;. React promotes the use of JSX, class properties (now Stage 3), object rest/spread (now Stage 3) and we all believe that it’s just JavaScript because Babel compiled it for them. So maybe removing this abstraction would help people understand more about what is going on and the tradeoffs one is making when choosing to use Stage X plugins.&lt;/p&gt;

&lt;p&gt;It also seems much easier to maintain your own preset than to have to update the Stage preset.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I often see people go “I want object rest, and that’s stage 2, so I enabled stage 2”. They now have a load of other experimental features enabled they might not know about and probably don’t need.
Also, as stages change over time then people who aren’t using shrinkwrap or yarn will get new features appearing, possibly without their knowledge. If a feature is canned they might even get one vanishing. @glenjamin&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;using-npm-scoped-packages&quot;&gt;Using npm Scoped Packages&lt;/h3&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Thoughts on &lt;a href=&quot;https://twitter.com/babeljs&quot;&gt;@babeljs&lt;/a&gt; using npm scoped packages for 7.0?&lt;/p&gt;&amp;mdash; Henry Zhu (@left_pad) &lt;a href=&quot;https://twitter.com/left_pad/status/821551189166878722&quot;&gt;January 18, 2017&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;Seems like most who understood what scoped packages are were in favor?&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Don’t have to worry about getting a certain package name (the reason why this was brought up in the first place).&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Many package names have been taken (preset-es2016, preset-es2017, 2020, 2040, etc). Can always ask to transfer but not always easy to do and can lead to users believing certain packages are official due to the naming.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;We need to migrate to new syntax&lt;/li&gt;
  &lt;li&gt;Still unsupported on certain non-npm tools (lock-in)&lt;/li&gt;
  &lt;li&gt;No download counts unless we alias back to old names&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sounds like we may want to defer, and in the very least it’s not a breaking change given it’s a name change.&lt;/p&gt;

&lt;h3 id=&quot;external-helpers-transform-runtime-babel-polyfill&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;external-helpers&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-runtime&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-polyfill&lt;/code&gt;&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;“regeneratorRuntime is not defined” - reported all the time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Basically we need a better solution around how to deal with built-ins/polyfills.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Developers don’t know what regenerator-runtime is, they just want to use generators/async functions.&lt;/li&gt;
  &lt;li&gt;Many developers are confused as to why a runtime is needed at all or why Babel doesn’t compile &lt;code class=&quot;highlighter-rouge&quot;&gt;Promise&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Object.assign&lt;/code&gt;, or some other built-in.&lt;/li&gt;
  &lt;li&gt;Developers are confused with the difference between &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-runtime&lt;/code&gt; the Babel plugin and the runtime itself, &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-runtime&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Complaints about generated code size since &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-polyfill&lt;/code&gt; includes all polyfills (although now we have &lt;a href=&quot;https://github.com/babel/babel-preset-env#usebuiltins&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;useBuiltIns&lt;/code&gt;&lt;/a&gt;) and no one knowing about &lt;code class=&quot;highlighter-rouge&quot;&gt;external-helpers&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Can we combine/replace these packages and have an easier, default experience?&lt;/p&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h2&gt;

&lt;p&gt;We want the community to upgrade and provide their feedback/reports. There will probably be a lot of initial activity which can be overwhelming so please be patient with us. We’d appreciate the help in helping triage, write docs/upgrade guides/tips, and codemods to help others upgrade more seamlessly. Because Babel touches a lot of the JavaScript ecosystem, it may not be as simple as simply updating one package because it could depend on other community Babel plugins on npm. We’re not going to just wait around for a month and hope people upgrade, there’s a lot of work to be done to make this happen without half the community still staying on 6.x next year. I’d not like to leave projects (and people) behind. So let us know what we can do to help, and I’d ask that you’d do the same for us and the rest of the community.&lt;/p&gt;

&lt;h2 id=&quot;project-sustainibility&quot;&gt;Project Sustainibility&lt;/h2&gt;

&lt;p&gt;Shoutout to my team at &lt;a href=&quot;https://www.behance.net&quot;&gt;Behance&lt;/a&gt; for allowing me to work on Babel part-time at work; we’re still basically the only company working to sustain Babel in any capacity on work time. I’m really glad to be able to support the project at work instead of only after work/weekends, and hope this can be the case for more maintainers in the future. (I hope we’ve been a good example of how companies can support the open source projects they use and not necessarily “own”).&lt;/p&gt;

&lt;p&gt;We don’t have enough in our Open Collective still to pay someone full time: I believe the highest donation we’ve gotten is $750 from Webflow, and highest monthly donation is $100 from various individuals/companies, so either we some work there or we work on getting more companies involved like AMP/Google have done (@jridgewell who recently joined our team is able to spend work time as well, and it’s made a big difference).&lt;/p&gt;

&lt;p&gt;Ask if your company can sponsor with our &lt;a href=&quot;https://opencollective.com/babel&quot;&gt;Open Collective&lt;/a&gt;, let us know what’s missing, how you can get involved. You don’t even have to have a specific reason to get involved. If you simply care about sustaining a project for the forseable future, just get your team plugged in and get involved.&lt;/p&gt;

&lt;h2 id=&quot;future&quot;&gt;Future&lt;/h2&gt;

&lt;p&gt;After 7.0: there’s a lot of potential avenues for us to explore (that we’ve all brought up years ago): separating traversal from plugins (async visitors?), immutable AST, syntax extensions? On the infra side: integrating with test262 and smoke tests, better github workflow to go from proposal to transform, codemod infrastructure for automatic upgrades, etc.&lt;/p&gt;

&lt;p&gt;Follow our meeting notes/discussions on &lt;a href=&quot;https://github.com/babel/notes&quot;&gt;babel/notes&lt;/a&gt; and get involved!&lt;/p&gt;

&lt;h2 id=&quot;thanks&quot;&gt;Thanks!&lt;/h2&gt;

&lt;p&gt;I’m hopeful that we can do the official release soon, but I’d like to mention that open source is sustained by consistent, day-to-day maintenance and not just a hyped-up release cycle where we just leave everyone else in the dust and move on so it may take a little longer as we wait to fixup bugs and upgrade the ecoystem.&lt;/p&gt;
</description>
        <pubDate>Tue, 12 Sep 2017 10:00:00 +0000</pubDate>
        <link>https://babeljs.io/blog/2017/09/12/planning-for-7.0</link>
        <guid isPermaLink="true">https://babeljs.io/blog/2017/09/12/planning-for-7.0</guid>
        
        
        <category>announcements</category>
        
      </item>
    
      <item>
        <title>Zero-config code transformation with babel-macros</title>
        <description>&lt;p&gt;Babel started out as a transpiler to let you write the latest version of the ECMAScript specification but ship to environments that don’t implement those features yet. But it has become much more than that. &lt;a href=&quot;https://tomdale.net/2017/09/compilers-are-the-new-frameworks/&quot;&gt;“Compilers are the New Frameworks”&lt;/a&gt; says &lt;a href=&quot;https://twitter.com/tomdale&quot;&gt;Tom Dale&lt;/a&gt; and I could not agree more. We’re seeing more and more compile-time optimizations for libraries and frameworks. I’m not talking about syntax extensions to the language, but simple code transformations that enable patterns that would be difficult to accomplish otherwise.&lt;/p&gt;

&lt;p&gt;One of my favorite things about compiler plugins is that you can use them to optimize the user experience and developer experience at the same time. (Read more about &lt;a href=&quot;https://medium.com/@kentcdodds/how-writing-custom-babel-and-eslint-plugins-can-increase-your-productivity-and-improve-user-fd6dd8076e26&quot;&gt;“How writing custom Babel &amp;amp; ESLint plugins can increase productivity &amp;amp; improve user experience”&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I have a few problems with Babel plugins though:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;They can lead to confusion because when looking at code in a project, you might not know that there’s a plugin transforming that code.&lt;/li&gt;
  &lt;li&gt;They have to be globally configured or configured out-of-band (in a &lt;code class=&quot;highlighter-rouge&quot;&gt;.babelrc&lt;/code&gt; or webpack config).&lt;/li&gt;
  &lt;li&gt;They can conflict in very confusing ways due to the fact that all babel plugins run simultaneously (on a single walk of Babel’s AST).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These problems could be solved if we could import Babel plugins and apply them directly to our code. This would mean the transformation is more explicit, we wouldn’t need to add them to configuration, and ordering can happen in the order the plugins are imported. Wouldn’t that be cool!?!?&lt;/p&gt;

&lt;h2 id=&quot;introducing-babel-macros-&quot;&gt;Introducing &lt;a href=&quot;https://github.com/kentcdodds/babel-macros&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt;&lt;/a&gt; 🎣&lt;/h2&gt;

&lt;p&gt;Guess what! A tool like this exists! &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt; is a new Babel plugin that allows you to do exactly what we’re talking about. It’s a “new” approach to code transformation. It enables you to have zero-config, importable code transformations. &lt;a href=&quot;https://github.com/threepointone/babel-macros&quot;&gt;The idea&lt;/a&gt; came from &lt;a href=&quot;https://twitter.com/threepointone&quot;&gt;Sunil Pai&lt;/a&gt; and caught my attention in &lt;a href=&quot;https://github.com/facebookincubator/create-react-app/issues/2730&quot;&gt;this create-react-app issue&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So what does it look like? Whelp! There are already a few &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt; packages out there you can try today!&lt;/p&gt;

&lt;p&gt;Here’s a real-world example of using &lt;a href=&quot;https://github.com/kentcdodds/preval.macro&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;preval.macro&lt;/code&gt;&lt;/a&gt; to inline an SVG in &lt;a href=&quot;https://github.com/kentcdodds/glamorous-website&quot;&gt;a universal application&lt;/a&gt; built with &lt;a href=&quot;https://github.com/zeit/next.js&quot;&gt;Next.js&lt;/a&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;preval&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'preval.macro'&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;glamorous&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'glamorous'&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;base64SearchSVG&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;preval&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;
  &lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fs&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'fs'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'path'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;svgString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;readFileSync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;__dirname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'svgs/search.svg'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'utf8'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;base64String&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;svgString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'base64'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;base64String&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;SearchBox&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;glamorous&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'algolia_searchbox'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;props&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;backgroundImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;data:image/svg+xml;base64,${base64SearchSVG}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// ...&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;What’s cool about this? Well, the alternative would look exactly like the example above except:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;It’s less explicit because there would be no &lt;code class=&quot;highlighter-rouge&quot;&gt;import preval from 'preval.macro'&lt;/code&gt; in the source code.&lt;/li&gt;
  &lt;li&gt;Have to add &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-preval&lt;/code&gt; to your babel configuration.&lt;/li&gt;
  &lt;li&gt;Need to update your ESLint config to allow for the &lt;code class=&quot;highlighter-rouge&quot;&gt;preval&lt;/code&gt; variable as a global.&lt;/li&gt;
  &lt;li&gt;If you misconfigured &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-preval&lt;/code&gt; you’d get a cryptic error like: &lt;code class=&quot;highlighter-rouge&quot;&gt;Uncaught ReferenceError: preval is not defined&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By using &lt;code class=&quot;highlighter-rouge&quot;&gt;preval.macro&lt;/code&gt; with &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt;, we don’t have any of those problems because:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The import is there and used explicitly.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt; needs to be added to your config, but only once, then you can use all the macros you’d like (even local macros!)&lt;/li&gt;
  &lt;li&gt;No need to update ESLint config because it’s explicit.&lt;/li&gt;
  &lt;li&gt;If you misconfigure &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt; then you’ll get &lt;a href=&quot;https://github.com/kentcdodds/babel-macros/blob/f7c9881ee22b19b3c53c93711af6a42895ba1c71/src/__tests__/__snapshots__/index.js.snap#L100&quot;&gt;a much more friendly error message&lt;/a&gt; that indicates what the actual problem is pointing you to documentation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;So what is it really? The TL;DR is that &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt; is a simpler way to write and use Babel transforms.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are already several &lt;a href=&quot;https://www.npmjs.com/browse/keyword/babel-macros&quot;&gt;published &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt;&lt;/a&gt; you can use, including &lt;a href=&quot;https://github.com/kentcdodds/preval.macro&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;preval.macro&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/kentcdodds/codegen.macro&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;codegen.macro&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/dralletje/idx.macro&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;idx.macro&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/emotion-js/emotion/blob/master/docs/babel-macros.md&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;emotion/macro&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/vinhlh/tagged-translations#via-babel-macros&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;tagged-translations/macro&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/mattphillips/babel-plugin-console#macros&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-console/scope.macro&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;https://github.com/threepointone/glamor/pull/312&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;glamor&lt;/code&gt; 🔜&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;I think we’ve only begun to scratch the surface of what &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt; can do. I’m hoping that we can land it in &lt;a href=&quot;https://github.com/facebookincubator/create-react-app/issues/2730&quot;&gt;create-react-app&lt;/a&gt; so folks using &lt;code class=&quot;highlighter-rouge&quot;&gt;create-react-app&lt;/code&gt; can have even more power with zero configuration. I’m really excited to see more Babel plugins expose a &lt;code class=&quot;highlighter-rouge&quot;&gt;macro&lt;/code&gt; in addition to the existing plugin functionality they already have. I can’t wait to see folks create macros that are specific to their project needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a macros is even easier than a regular Babel plugin&lt;/strong&gt;, but it does require a bit of knowledge around ASTs and Babel. If this is new to you, there are &lt;a href=&quot;https://kentcdodds.com/talks/#writing-custom-babel-and-eslint-plugins-with-asts&quot;&gt;a&lt;/a&gt;, &lt;a href=&quot;https://github.com/thejameskyle/babel-handbook&quot;&gt;few&lt;/a&gt;, &lt;a href=&quot;https://kentcdodds.com/workshops/#code-transformation-and-linting&quot;&gt;resources&lt;/a&gt; for you 😀&lt;/p&gt;

&lt;p&gt;Good luck to you all! 👋&lt;/p&gt;

&lt;p&gt;P.S. I should mention that language macros are not a new concept at all. Being able to teach a language new tricks has been around for a very long time. In fact, there’s already &lt;a href=&quot;http://sweetjs.org/&quot;&gt;such a tool for JavaScript&lt;/a&gt; and even &lt;a href=&quot;https://github.com/codemix/babel-plugin-macros&quot;&gt;one implemented as a Babel plugin already&lt;/a&gt;. &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt; takes a slightly different approach however. While macros have often been associated with defining new syntax for a language, that’s not the goal of &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt; at all. In the case of &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-macros&lt;/code&gt; it’s more about code transformations.&lt;/p&gt;
</description>
        <pubDate>Mon, 11 Sep 2017 11:00:00 +0000</pubDate>
        <link>https://babeljs.io/blog/2017/09/11/zero-config-with-babel-macros</link>
        <guid isPermaLink="true">https://babeljs.io/blog/2017/09/11/zero-config-with-babel-macros</guid>
        
        
        <category>announcements</category>
        
      </item>
    
      <item>
        <title>Contributing to Babel: Three Lessons to Remember</title>
        <description>&lt;p&gt;Getting to work your way around a new code base always poses its challenges, and Babel was no exception.&lt;/p&gt;

&lt;p&gt;I’ve been working with Babel as part of the Google Summer of Code 2017 program, working to update Babel transforms and the Babylon parser to accommodate changes to specifications and implementing new features.&lt;/p&gt;

&lt;p&gt;Here’s a few things I’ve learnt from my adventures so far.&lt;/p&gt;

&lt;h2 id=&quot;1-yes-communication-is-important&quot;&gt;1. Yes, communication is important&lt;/h2&gt;

&lt;p&gt;To start off with getting to know the codebase better, I combed through the open issues list on Babel and found a relatively easy one (&lt;a href=&quot;https://github.com/babel/babel/issues/5728&quot;&gt;issue #5728&lt;/a&gt;) to deal with.&lt;/p&gt;

&lt;p&gt;Just to make sure I knew what I was doing, I fired a quick question on the thread:&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; alt=&quot;My question asking for clarification&quot; src=&quot;/images/blog/2017-08-16-gsoc-karl-1/question.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After getting clarification, I set off to change the plugin to not throw “runtime” errors during transpilation, but only when the code is actually being run. One incriminating piece of code stuck out:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;violation&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;binding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;constantViolations&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;violation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;buildCodeFrameError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;messages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;readOnly&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now what needed to be done here was to actually insert a &lt;code class=&quot;highlighter-rouge&quot;&gt;throw&lt;/code&gt; statement into the generated code, which didn’t prove to be too difficult. However, there were still a few cases where runtime errors were being thrown elsewhere from code that wasn’t directly related to this file.&lt;/p&gt;

&lt;p&gt;Wanting to go and explore other parts of the Babel code base, I put that down for me to get on with later.&lt;/p&gt;

&lt;p&gt;Not too long after, I received a, well, interesting update on the issue… Wait what?&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; alt=&quot;Someone else had claimed the issue.&quot; src=&quot;/images/blog/2017-08-16-gsoc-karl-1/update.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I never actually said I was working on fixing the issue, but assumed that posting would have implied I was going to work on it.&lt;/p&gt;

&lt;p&gt;Oops.&lt;/p&gt;

&lt;h2 id=&quot;2-where-snapshot-testing-falls-short&quot;&gt;2. Where snapshot testing falls short&lt;/h2&gt;
&lt;p&gt;After setting off for another hunt, I stumbled across &lt;a href=&quot;https://github.com/babel/babel/issues/5656&quot;&gt;issue #5656&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;arguments-deoptimized-when-shadowed-in-nested-function&quot;&gt;Arguments deoptimized when shadowed in nested function&lt;/h3&gt;
  &lt;p&gt;This is a feature request (I think). Arguments are not optimized if an inner function shadows the name with a parameter (or rest parameters in my case).&lt;/p&gt;

  &lt;h4 id=&quot;input-code&quot;&gt;Input code&lt;/h4&gt;
  &lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;test_opt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;test_deopt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;…&lt;/p&gt;

  &lt;h4 id=&quot;expected-vs-current-behavior&quot;&gt;Expected vs. Current Behavior&lt;/h4&gt;
  &lt;p&gt;I’d expect the code to be optimizable to use .apply( thisArg, arguments ) throughout.
However, in test_deopt the outer …args gets copied just to be passed into the inner fn.
I can verify that the problem disappears if I rename either the …args of test_deopt or of the fn arrow function.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;whats-going-on-here&quot;&gt;What’s going on here?&lt;/h3&gt;
&lt;p&gt;Now what was happening was that this code would generate the following:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_console&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;apply&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;test_opt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;apply&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;test_deopt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_len&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_key&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_key&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_key&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// unnecessary loop&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;apply&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;apply&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;See that &lt;code class=&quot;highlighter-rouge&quot;&gt;for&lt;/code&gt; section there? Usually this is needed as the arguments object isn’t a real array — for example, if you tried to run &lt;code class=&quot;highlighter-rouge&quot;&gt;arguments.slice()&lt;/code&gt;, it would fail miserably.
However, in this case it’s only being passed to &lt;code class=&quot;highlighter-rouge&quot;&gt;Function.prototype.apply&lt;/code&gt;. Surprisingly enough, Babel already bothers to optimize this specific case, like in the &lt;code class=&quot;highlighter-rouge&quot;&gt;test_opt&lt;/code&gt; example above.&lt;/p&gt;

&lt;h3 id=&quot;trying-to-fix-it&quot;&gt;Trying to fix it&lt;/h3&gt;
&lt;p&gt;So what did I do? Adding the problem file as a new test case, I tried to see if I could get the output to reflect what I wanted.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; alt=&quot;Test failure of modified code&quot; src=&quot;/images/blog/2017-08-16-gsoc-karl-1/babel-test.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;“Why’s the test failing? Surely if I change it a little it will solve itself.”&lt;/p&gt;

&lt;p&gt;Despite spamming &lt;code class=&quot;highlighter-rouge&quot;&gt;make test-only&lt;/code&gt; and modifying the transforms of referenced identifiers within the code, any change just resulted in a different bunch of tests failing instead.&lt;/p&gt;

&lt;h3 id=&quot;the-chromium-debugger-is-fun&quot;&gt;The Chromium debugger is “fun”&lt;/h3&gt;
&lt;p&gt;Miserable, annoyed and confused, I bothered to fire up the Node.js inspector to step through what was going on.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; alt=&quot;Using the Chromium debugger&quot; src=&quot;/images/blog/2017-08-16-gsoc-karl-1/debugger-cropped.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After returning to my computer from a drink break, I’m gladly greeted to my hard disk light thrashing around and a practically hung computer.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; alt=&quot;Chromium process using more than 3GB of memory&quot; src=&quot;/images/blog/2017-08-16-gsoc-karl-1/chromium-task-manager.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Holding my computer together with judicious applications of &lt;kbd&gt;Alt&lt;/kbd&gt; + &lt;kbd&gt;SysRq&lt;/kbd&gt; + &lt;kbd&gt;F&lt;/kbd&gt;, I managed to work through the flow of things¹ and figure out how exactly the code worked.&lt;/p&gt;

&lt;p&gt;Even through all that, I still couldn’t see any reason why it was deciding to remove this “necessary” (so I thought) code that was being removed with my original fix.&lt;/p&gt;

&lt;h3 id=&quot;the-actual-problem&quot;&gt;The actual problem?&lt;/h3&gt;

&lt;p&gt;See the error shown above? That entire code in green wasn’t meant to be there, even though it was “expected”.&lt;/p&gt;

&lt;p&gt;Basically: the test was broken. &lt;em&gt;Great.&lt;/em&gt; :/&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5721&quot;&gt;The actual fix&lt;/a&gt; involved creating a &lt;code class=&quot;highlighter-rouge&quot;&gt;referencesRest&lt;/code&gt; function to make sure that the spread operator was actually being applied to the original parameter, rather than a variable in another scope masking the variable.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;¹: Turns out that adding a large folder to the DevTools workspace would leak memory until causing an OOM (&lt;a href=&quot;https://github.com/babel/babel/issues/5656#issuecomment-300139737&quot;&gt;bug I filed for this&lt;/a&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;so-why-do-we-use-snapshot-testing-then&quot;&gt;So why do we use snapshot testing then?!&lt;/h3&gt;

&lt;p&gt;Well first off, it’s far easier to create tests when all you need to do is ask Babel to run your test case to generate your expected file. This presents to us a low time cost option while protecting against a significant proportion of potential errors.&lt;/p&gt;

&lt;p&gt;Also, especially with the type of program Babel is, it would be far harder to test for in other ways. For example, we could check for specific nodes of the AST, but this takes far longer to write and is also prone to non-obvious breakage when your code attempts to change the way the transform is done.&lt;/p&gt;

&lt;p&gt;So, all in all, a few lessons here:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Make sure your tests are right in the first place—don’t be complacent!&lt;/li&gt;
  &lt;li&gt;Yes, the debugger is actually useful in seeing what goes on.&lt;/li&gt;
  &lt;li&gt;Sometimes things take time to work out—if you’re getting nowhere, take a break or work on something else.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;3-team-meetings&quot;&gt;3. Team meetings!&lt;/h2&gt;

&lt;p&gt;I know this kinda stretches the notion of an “issue”, but anyway :)&lt;/p&gt;

&lt;p&gt;When you’re working on a project with a bunch of other people, it’s always useful to catch up with one another and discuss areas which we need to work on.&lt;/p&gt;

&lt;p&gt;So how exactly do we go about doing that?!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ugh, meetings.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When you have a bunch of people spread across the world, finding ways to communicate is never easy, but regardless we would have to make do with our attempts at this feat.&lt;/p&gt;

&lt;h3 id=&quot;time-zones&quot;&gt;Time zones&lt;/h3&gt;
&lt;p&gt;When you’re dealing with a open source project spanning all across the globe, picking an appropriate hour quickly turns a rather involved exercise in bikeshedding.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; alt=&quot;World map of people who’ve attended our meetings&quot; src=&quot;/images/blog/2017-08-16-gsoc-karl-1/world-map.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Even with the vast spread between each of us, it seemed like we could just about manage to finally get something together.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; alt=&quot;Time zones discussed in 31 May 2017 meeting&quot; src=&quot;/images/blog/2017-08-16-gsoc-karl-1/time-zone-list.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Alas, this was not to last. Eventually, we ended up having to switch between two times every other week to accommodate other users (13:00 and 16:00 UTC), which meant that I was only able to attend once a fortnight.&lt;/p&gt;

&lt;p&gt;Despite this, we’ve managed to make significant progress with coordinating fixes to various parts that make up key changes to Babel, including support for TypeScript, changes to the order in which transform plugins run, as well as keeping up to date with changes from TC39.&lt;/p&gt;

&lt;h2 id=&quot;where-to-next&quot;&gt;Where to next?&lt;/h2&gt;

&lt;p&gt;We’re continuing to polish up Babel 7 for general consumption, with &lt;a href=&quot;https://babeljs.io/blog/2017/03/01/upgrade-to-babel-7&quot;&gt;a number of new features&lt;/a&gt; coming along with that.&lt;/p&gt;

&lt;p&gt;I’m working with a bunch of others to get support for updated &lt;a href=&quot;https://github.com/tc39/proposal-class-fields&quot;&gt;Class Fields&lt;/a&gt; specification proposal included into Babel so that people can test it out and provide feedback.&lt;/p&gt;

&lt;p&gt;Also, while I’m at it, I’d like to thank all of the Babel mentors and contributors for helping me out with peer reviews and providing guidance with proposals, all the way from first contact to today.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Looking to find out more about Babel? Hit up our &lt;a href=&quot;https://github.com/babel/babel/blob/master/CONTRIBUTING.md&quot;&gt;contributing page&lt;/a&gt; and join the &lt;a href=&quot;https://slack.babeljs.io&quot;&gt;Slack community&lt;/a&gt;!&lt;/p&gt;

&lt;h2 id=&quot;more-about-karl&quot;&gt;More about Karl&lt;/h2&gt;

&lt;p&gt;Karl Cheng is a &lt;a href=&quot;https://summerofcode.withgoogle.com/organizations/5842528113786880/#6600055503978496&quot;&gt;GSoC 2017&lt;/a&gt; student hailing from Sydney, Australia. Find out more about him on GitHub (&lt;a href=&quot;https://github.com/Qantas94Heavy&quot;&gt;Qantas94Heavy&lt;/a&gt;) and Twitter (&lt;a href=&quot;https://twitter.com/Qantas94Heavy&quot;&gt;@Qantas94Heavy&lt;/a&gt;)!&lt;/p&gt;

&lt;p&gt;Please check out our first post on &lt;a href=&quot;https://babeljs.io/blog/2017/08/09/babel-and-summer-of-code&quot;&gt;Summer of Code&lt;/a&gt; for more info!&lt;/p&gt;
</description>
        <pubDate>Wed, 16 Aug 2017 14:00:00 +0000</pubDate>
        <link>https://babeljs.io/blog/2017/08/16/contributing-to-babel-three-lessons-to-remember</link>
        <guid isPermaLink="true">https://babeljs.io/blog/2017/08/16/contributing-to-babel-three-lessons-to-remember</guid>
        
        
      </item>
    
      <item>
        <title>Personal Experiences at Babel #1 — A PR with Unusually High Number of Reviews</title>
        <description>&lt;p&gt;We landed the &lt;a href=&quot;https://github.com/babel/babylon/pull/587&quot;&gt;parser support&lt;/a&gt; for
&lt;a href=&quot;https://tc39.github.io/proposal-decorators/&quot;&gt;the stage-2 decorators spec&lt;/a&gt; last
week at Babylon — the parser for Babel. If you don’t know what a decorator is,
the gist of it is that a decorator gives some concise syntax to affect the
definition of a class or a class method which you decorate.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;frozen&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;configurable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;enumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;

  &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;throttle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;expensiveMethod&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;One of the more remarkable things about this PR was the number of reviews it
received&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/left_pad/status/877894712476258305&quot;&gt;&lt;img src=&quot;https://pbs.twimg.com/media/DC7oDlmXUAAa3nD.jpg&quot; alt=&quot;Screenshot of PR reviews on github&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perhaps this could be because decorators really are one of the much hyped about
features in JavaScript. Angular even considered making their own JS flavor
called AtScript before they decided to go with TypeScript since they love
decorators (or as they liked to call it “annotations”) so much.&lt;/p&gt;

&lt;p&gt;Well, there is more to the story. As I was recently discussing with a mentor,
reviewing PRs is a tough job. Reviewing PRs is comparably as hard as solving the
bug in the first place was. Apart from the technical aspect of reviewing — which
is ensuring that the bug is being fixed optimally (by perhaps even getting an
idea of how they would solve the issue and seeing how the submitted patch
compares to their idea) — there’s another big hindrance. A reviewer has to be
aware of the whole issue, the discussion surrounding it, and have familiarity
with the part of the codebase that the PR makes changes to.&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;When I initially joined Babel, and was not-so-familiar with the codebase, every
issue I encountered was almost instantly answered after I posted it in Babel’s
chatroom, which left me with the (wrong) impression that perhaps the maintainers
are some god-like figures who know it all and that everyone’s expected to adhere
to the same fictitious standards.&lt;/p&gt;

&lt;p&gt;Even after becoming familiar with the codebase, I was submitting PRs without
proper documentation under the assumption that it took me a while to solve the
issue and see all things, but if the reviewers see the code they’d instantly be
able to evaluate it just like they were answering my questions.&lt;/p&gt;

&lt;p&gt;Eh! Very wrong. Let me just bust this myth (assuming I’m not the only one who
has felt it). Even they (maintainers) won’t have all the answers at times, and
sometimes you’ll have to search for yourself — and that’s how it should be.&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;In open source, there are a lot of people who want to contribute, but are unable
to because they don’t know how to code / they don’t know how to present PRs /
they don’t know what the project wants / they don’t know what the maintainers
want / a ton of other things. A lot of times you’ll find help along the way,
but a lot of that is controlled by factors beyond your control.&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;One of the joys of getting your PR merged is not just the programming but
somehow making the project move forward in the way it is expected to be moved
forward. And doing that by somehow identifying what the project needs and being
able to deliver that.&lt;/p&gt;

&lt;p&gt;In order to merge this PR I had to find people and talk to them — people who use
decorators, people who are interested in seeing an implementation of decorators,
people who want to contribute to babel for decorators. After getting consensus
on how to move forward&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;, I had to go through the spec and all the existing
discussions surrounding it so that my understanding of the spec could be up to
speed with other people.&lt;/p&gt;

&lt;p&gt;And finally — the most important part which I think got this PR the number of
reviews that we saw — making it easy for people who’ll be reviewing my PR by
explaining everything they would need to get up to speed with the whole
situation. By chance, at the time the PR I made was able to satisfy some of the
criteria I mentioned earlier:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Making sure reviewers are aware of the whole issue (by mentioning in detail the
decisions I’ve taken so they don’t necessarily have to look at the code to
figure it out)&lt;/li&gt;
  &lt;li&gt;The discussion surrounding it (by mentioning alternate viewpoints on some of the
decisions so as to make it easier to compare them with the decisions made)&lt;/li&gt;
  &lt;li&gt;Explaining clearly my strategy to solve the problem (to assist the technical
aspect of reviewing — so that the reviewers can know what I’ve done and then see
the code rather than the other way around)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that’s what did it! (or so I think). So there’s the mystery unraveled — A PR
with unusually high number of reviews¹.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt;: I wanted to share my personal experience with this blog post,
not write a guide to be followed or a technical blog post. Therefore, some
statements which I make may not hold true in general or may be debatable, so
they should just be read in the context of the experience I narrate.&lt;/p&gt;

&lt;p&gt;Also note that if you’re looking for decorators support in Babel, we still have
a long way to go. This is just the parser and work on the transform (which
converts your code to functionally equivalent ES5) is yet to be done. But now
that we’ve made the decisions that needed to be made, things will move more
smoothly from here onwards.&lt;/p&gt;

&lt;h2 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;We have a shortage of manpower when it comes to reviewing PRs. It was also
recently discussed in one of our weekly meetings (&lt;a href=&quot;https://github.com/babel/notes/blob/master/2017-06/june-21.md#priority-topics&quot;&gt;link to the meeting
notes&lt;/a&gt;).
Perhaps you could help us with this. Drop by &lt;a href=&quot;https://slack.babeljs.io/&quot;&gt;our slack
chatroom&lt;/a&gt; and offer your help!&lt;/li&gt;
  &lt;li&gt;I feel that the myth stems from the fact that when you’re new to the project the
mentors definitely do know more about the project than you&lt;/li&gt;
  &lt;li&gt;(to illustrate) Some random factors which might affect the chances of you
getting help:
    &lt;ul&gt;
      &lt;li&gt;If someone was online who worked on the same thing when you post a question on
the chatroom&lt;/li&gt;
      &lt;li&gt;Someone who knows your doubt will take a lot of time to deal with and they
want to give you personal attention and not just throw information at you&lt;/li&gt;
      &lt;li&gt;Someone who’s able to gauge where you’re coming from, and so on.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;We’d been stuck for &lt;a href=&quot;https://github.com/babel/babel/issues/2645&quot;&gt;a while&lt;/a&gt; since
&lt;em&gt;a lot&lt;/em&gt; of people use a nonstandard implementation for decorators which came at
around the time the spec was in stage-0. The changes in the spec are not
backwards-compatible so we were unsure on how we should introduce support for
the new spec without causing much disruption for people who use Babel. We
finally decided that we’ll be introducing this PR as an opt-in to allow people to
migrate at their own pace.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;outro&quot;&gt;Outro&lt;/h2&gt;
&lt;p&gt;Peeyush Kushwaha is a &lt;a href=&quot;https://summerofcode.withgoogle.com/organizations/5842528113786880/#6632162202746880&quot;&gt;GSoC 2017&lt;/a&gt; student. Give him a follow on Twitter: &lt;a href=&quot;https://twitter.com/PeeyFTW&quot;&gt;@PeeyFTW&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;This was originally posted &lt;a href=&quot;https://medium.com/@peey/personal-experiences-at-babel-1-a-pr-with-unusually-high-number-of-reviews-5cb49ee71897&quot;&gt;here on medium&lt;/a&gt;. Please check out our first post on &lt;a href=&quot;https://babeljs.io/blog/2017/08/09/babel-and-summer-of-code&quot;&gt;Summer of Code&lt;/a&gt; for more info!&lt;/p&gt;
</description>
        <pubDate>Fri, 11 Aug 2017 12:00:00 +0000</pubDate>
        <link>https://babeljs.io/blog/2017/08/11/personal-experiences-at-babel-1-a-pr-with-unusually-high-number-of-reviews</link>
        <guid isPermaLink="true">https://babeljs.io/blog/2017/08/11/personal-experiences-at-babel-1-a-pr-with-unusually-high-number-of-reviews</guid>
        
        
      </item>
    
      <item>
        <title>Babel and Summer of Code 2017</title>
        <description>&lt;p&gt;For the first time, Babel is participating in &lt;em&gt;Summer of Code&lt;/em&gt;!
Although we forgot to make an announcement post earlier, here’s our progress update 😊&lt;/p&gt;

&lt;h2 id=&quot;what-is-it&quot;&gt;What is it?&lt;/h2&gt;

&lt;h3 id=&quot;google-summer-of-code&quot;&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code&lt;/a&gt;&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/organizations/5842528113786880/&quot;&gt;Babel’s Profile for GSoC&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;GSoC is an international annual program which pairs open source projects and university students! We work with the students on a project and Google pays them a stipend.&lt;/p&gt;

&lt;h4 id=&quot;peeyush-kushwaha-india&quot;&gt;Peeyush Kushwaha (India)&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Github: &lt;a href=&quot;https://github.com/peey&quot;&gt;@peey&lt;/a&gt;, Twitter: &lt;a href=&quot;https://twitter.com/peeyFTW&quot;&gt;@peeyFTW&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;karl-cheng-australia&quot;&gt;Karl Cheng (Australia)&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Github: &lt;a href=&quot;https://github.com/Qantas94Heavy&quot;&gt;@Qantas94Heavy&lt;/a&gt;, Twitter: &lt;a href=&quot;https://twitter.com/qantas94heavy&quot;&gt;@qantas94heavy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’re happy to be working with both Peeyush and Karl!&lt;/p&gt;

&lt;p&gt;Peeyush has already made a &lt;a href=&quot;https://github.com/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr+author%3Apeey+user%3Ababel+is%3Aboth&quot;&gt;bunch of PRs&lt;/a&gt; with improving documentation and bug fixes. In addition, he’s been focusing on the much desired &lt;a href=&quot;https://github.com/tc39/proposal-decorators&quot;&gt;decorators transform&lt;/a&gt;. We’ll be updating &lt;a href=&quot;https://github.com/babel/proposals/issues/11&quot;&gt;this issue&lt;/a&gt; with more progress.&lt;/p&gt;

&lt;p&gt;Karl has similarly made many &lt;a href=&quot;https://github.com/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr+author%3AQantas94Heavy+user%3Ababel+&quot;&gt;contributions already&lt;/a&gt;, and is now focusing on the private properties transform (now part of the &lt;a href=&quot;https://github.com/tc39/proposal-class-fields&quot;&gt;combined class properties proposal&lt;/a&gt;). We’ll be updating &lt;a href=&quot;https://github.com/babel/proposals/issues/12&quot;&gt;this issue&lt;/a&gt; with more progress.&lt;/p&gt;

&lt;p&gt;To track their work on these transforms and the progress of other specs/proposals, be sure to check out the &lt;a href=&quot;https://github.com/babel/proposals&quot;&gt;Babel TC39 Proposal Status Tracker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It’s been really amazing working with them the past 2 months! We’ve really enjoyed teaching, working, and learning with them on the project. Partnering with TC39 in making these Babel plugins a reality has also been helpful for everyone.&lt;/p&gt;

&lt;h3 id=&quot;rails-girls-summer-of-code&quot;&gt;Rails Girls Summer of Code&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://teams.railsgirlssummerofcode.org/teams/307&quot;&gt;Babel’s RGSoC Page&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;RGSoC is a similar program to GSOC: annual, global, pays a stipend, brings projects and newcomers together, with a focus on bringing diversity into Open Source.&lt;/p&gt;

&lt;h4 id=&quot;kara-de-la-marck-london&quot;&gt;Kara de la Marck (London)&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Github: &lt;a href=&quot;https://github.com/MarckK&quot;&gt;@MarckK&lt;/a&gt;, Twitter: &lt;a href=&quot;https://twitter.com/KaraMarck&quot;&gt;@KaraMarck&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;emma-deacon-london&quot;&gt;Emma Deacon (London)&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Github: &lt;a href=&quot;https://github.com/EmmaDeacon&quot;&gt;@EmmaDeacon&lt;/a&gt;, Twitter: &lt;a href=&quot;https://twitter.com/EmmaMDeacon&quot;&gt;@EmmaMDeacon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where RGSoC differs from GSoC is that it matches developers with team coaches in addition to the open source project’s  mentors. Pivotal London is working with Kara and Emma as their daily coworkers/supporters. We are lucky to have &lt;em&gt;seven&lt;/em&gt; awesome coaches from their organization to help them, while on our side we can leave feedback on issues/PRs in GitHub and in our Slack.&lt;/p&gt;

&lt;p&gt;We’re incredibly lucky to work with both Kara and Emma!&lt;/p&gt;

&lt;p&gt;They’re currently working on some codemods! Ideally we would have codemods to convert ES2015 to ES2016+ (&lt;a href=&quot;https://lebab.io/&quot;&gt;Lebab&lt;/a&gt;) and if necessary, codemods to remove dropped TC39 proposals. We’d also want to have codemods for our upcoming Babel 7 release for a easy/automated upgrade!&lt;/p&gt;

&lt;p&gt;In the meantime, they’ve already done all the necessary work to implement the new &lt;a href=&quot;https://github.com/tc39/proposal-optional-catch-binding&quot;&gt;optional catch binding&lt;/a&gt; proposal as a plugin! It was really cool to see that we had already released the Babel plugin before the TC39 meeting a few weeks ago! You can follow this &lt;a href=&quot;https://github.com/babel/proposals/issues/7&quot;&gt;issue&lt;/a&gt; for more information.&lt;/p&gt;

&lt;h2 id=&quot;why&quot;&gt;Why?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Participating in these programs means more developer exposure to participating in open source!&lt;/li&gt;
  &lt;li&gt;Helps us as a project onboard and mentor new contributors in a more formal, structured way. It helps us identify any issues with our code setup, and more importantly with our process (multiple timezones, different backgrounds) and culture.&lt;/li&gt;
  &lt;li&gt;Helps bring in different people into the project that otherwise may not have contributed to Babel or open source. The hope is that they continue to stick around or be involved in the open source community! We want to do our part to make open source a welcoming and diverse community, focusing on individuals first.&lt;/li&gt;
  &lt;li&gt;We get &lt;em&gt;four&lt;/em&gt; full time people working on our project for a whole summer! This is a great opportunity for each of them to work on high impact problems, and for us to be in a support role to help them succeed.&lt;/li&gt;
  &lt;li&gt;Hopefully it inspires some to get involved as a result of the program, and for others to step up as mentors/maintainers (ideally from the hundreds of top companies that use this project everyday) to bring people in.&lt;/li&gt;
  &lt;li&gt;Ultimately, this is just about building a community and making a great experience for our students/interns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It takes a lot of work to get involved in any community, and it’s up to the people aleady involved to make this as easy as possible to join in. It requires one to spend the time to meet people where they are at (in many ways), not just write code but to invest in others. A community is about the people, and open source is about the community.&lt;/p&gt;

&lt;p&gt;Participating in Summer of Code gives us a great opportunity to make this happen, and we’re continuously working on improving.&lt;/p&gt;

&lt;p&gt;Look at all the amazing work they’ve already done! We’re really excited for what’s to come and will do another post on our results and what we’ve learned.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Look out for next year’s &lt;a href=&quot;https://twitter.com/RailsGirlsSoC&quot;&gt;RGSoC&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/gsoc&quot;&gt;GSoC&lt;/a&gt; if you want to participate (for your own project, as a participant, or to help us out) &lt;em&gt;cough Sean&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;thanks&quot;&gt;Thanks&lt;/h2&gt;

&lt;p&gt;To my team at Behance/Adobe for allowing me to spend time at work maintaining Babel and participating in Summer of Code!&lt;/p&gt;

&lt;p&gt;Thanks to all the other helpers/maintainers (&lt;a href=&quot;https://github.com/existentialism&quot;&gt;Brian&lt;/a&gt;, &lt;a href=&quot;https://github.com/loganfsmyth&quot;&gt;Logan&lt;/a&gt;, &lt;a href=&quot;https://github.com/Kovensky&quot;&gt;Diogo&lt;/a&gt;, &lt;a href=&quot;https://github.com/xtuc&quot;&gt;Sven&lt;/a&gt;, &lt;a href=&quot;https://github.com/jridgewell&quot;&gt;Justin&lt;/a&gt;, &lt;a href=&quot;https://github.com/boopathi&quot;&gt;Boopathi&lt;/a&gt;), on Slack and GitHub issues! It can be a lot of work managing all the parts of an open source project, so we are glad to have the extra help!&lt;/p&gt;

&lt;p&gt;Huge shoutout to many &lt;a href=&quot;https://github.com/tc39&quot;&gt;TC39&lt;/a&gt; members like &lt;a href=&quot;https://twitter.com/littledan&quot;&gt;@littledan&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/bakkoting&quot;&gt;@bakkoting&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/ljharb&quot;&gt;@ljharb&lt;/a&gt; for helping review PRs, better inform/work on &lt;a href=&quot;https://github.com/babel/proposals&quot;&gt;babel/proposals&lt;/a&gt;, and discuss implementation/spec details in our Slack rooms! I know it’s a lot of work 🙂&lt;/p&gt;

&lt;p&gt;And thanks to &lt;a href=&quot;https://github.com/existentialism&quot;&gt;Brian&lt;/a&gt; again for help with editing!&lt;/p&gt;
</description>
        <pubDate>Wed, 09 Aug 2017 12:00:00 +0000</pubDate>
        <link>https://babeljs.io/blog/2017/08/09/babel-and-summer-of-code</link>
        <guid isPermaLink="true">https://babeljs.io/blog/2017/08/09/babel-and-summer-of-code</guid>
        
        
        <category>announcements</category>
        
      </item>
    
      <item>
        <title>Upgrade to Babel 7 (WIP)</title>
        <description>&lt;p&gt;Refer users to this document when upgrading to Babel 7 (currently alpha).&lt;/p&gt;

&lt;p&gt;Because not every breaking change will affect every project, we’ve sorted the sections by the likelihood of a change breaking tests when upgrading.&lt;/p&gt;

&lt;h2 id=&quot;all-of-babel&quot;&gt;All of Babel&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Support for Node.js 0.10 and 0.12 has been dropped &lt;a href=&quot;https://github.com/babel/babel/pull/5025&quot;&gt;#5025&lt;/a&gt;, &lt;a href=&quot;https://github.com/babel/babel/pull/5041&quot;&gt;#5041&lt;/a&gt;, &lt;a href=&quot;https://github.com/babel/babel/pull/5186&quot;&gt;#5186&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/level%20of%20awesomeness%3F-high-red.svg&quot; alt=&quot;high&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We highly encourage you to use a newer version of Node.js (LTS v4, LTS v6) since the previous versions are not maintained.
See &lt;a href=&quot;https://github.com/nodejs/LTS&quot;&gt;nodejs/LTS&lt;/a&gt; for more information.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This just means Babel &lt;em&gt;itself&lt;/em&gt; won’t run on older versions of Node. It can still &lt;em&gt;output&lt;/em&gt; code that runs on old Node.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;option-parsing&quot;&gt;Option parsing&lt;/h2&gt;

&lt;p&gt;Babel’s config options are stricter than in Babel 6. Where a comma-separated list for presets, e.g. &lt;code class=&quot;highlighter-rouge&quot;&gt;presets: 'es2015,es2016'&lt;/code&gt; technically worked before, it will now fail and need to be changed to an array &lt;a href=&quot;https://github.com/babel/babel/pull/5463&quot;&gt;#5463&lt;/a&gt;. This does not apply to the CLI, where &lt;code class=&quot;highlighter-rouge&quot;&gt;--presets es2015,es2016&lt;/code&gt; will certainly still work.&lt;/p&gt;

&lt;h2 id=&quot;resolving-string-based-config-values&quot;&gt;Resolving string-based config values&lt;/h2&gt;

&lt;p&gt;In Babel 6, values passed to Babel directly (not from a config file), were resolved relative to the files being compiled, which led to lots of confusion. In Babel 7, values are resolved consistently either relative to the config file that loaded them, or relative to the working directory.&lt;/p&gt;

&lt;p&gt;For &lt;code class=&quot;highlighter-rouge&quot;&gt;presets&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;plugins&lt;/code&gt; values, this change means that the CLI will behave nicely in cases such as&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;babel --presets es2015 ../file.js
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Assuming your &lt;code class=&quot;highlighter-rouge&quot;&gt;node_modules&lt;/code&gt; folder is in &lt;code class=&quot;highlighter-rouge&quot;&gt;.&lt;/code&gt;, in Babel 6 this would fail because the preset could not be found.&lt;/p&gt;

&lt;p&gt;This change also affects &lt;code class=&quot;highlighter-rouge&quot;&gt;only&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;ignore&lt;/code&gt; which will be expanded on next.&lt;/p&gt;

&lt;h2 id=&quot;path-based-only-and-ignore-patterns&quot;&gt;Path-based &lt;code class=&quot;highlighter-rouge&quot;&gt;only&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;ignore&lt;/code&gt; patterns&lt;/h2&gt;

&lt;p&gt;In Babel 6, &lt;code class=&quot;highlighter-rouge&quot;&gt;only&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;ignore&lt;/code&gt; were treated as a general matching string, rather than a filepath glob. This meant that for instance &lt;code class=&quot;highlighter-rouge&quot;&gt;*.foo.js&lt;/code&gt; would match &lt;code class=&quot;highlighter-rouge&quot;&gt;./**/*.foo.js&lt;/code&gt;, which was confusing and surprising to most users.&lt;/p&gt;

&lt;p&gt;In Babel 7, these are now treated as path-based glob patterns which can either be relative or absolute paths. This means that if you were using these patterns, you’ll probably need to at least add a &lt;code class=&quot;highlighter-rouge&quot;&gt;**/&lt;/code&gt; prefix to them now to ensure that your patterns match deeply into directories.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;only&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;ignore&lt;/code&gt; patterns &lt;em&gt;do&lt;/em&gt; still also work for directories, so you could also use &lt;code class=&quot;highlighter-rouge&quot;&gt;only: './tests'&lt;/code&gt; to only compile files in your &lt;code class=&quot;highlighter-rouge&quot;&gt;tests&lt;/code&gt; directory, with no need to use &lt;code class=&quot;highlighter-rouge&quot;&gt;**/*.js&lt;/code&gt; to match all nested files.&lt;/p&gt;

&lt;h2 id=&quot;babels-cli-commands&quot;&gt;Babel’s CLI commands&lt;/h2&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;--copy-files&lt;/code&gt; argument for the &lt;code class=&quot;highlighter-rouge&quot;&gt;babel&lt;/code&gt; command, which tells Babel to copy all files in a directory that Babel doesn’t know how to handle, will also now copy files that failed an &lt;code class=&quot;highlighter-rouge&quot;&gt;only&lt;/code&gt;/&lt;code class=&quot;highlighter-rouge&quot;&gt;ignore&lt;/code&gt; check, where before it would silently skip all ignored files.&lt;/p&gt;

&lt;h2 id=&quot;babel-preset-stage-3&quot;&gt;babel-preset-stage-3&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Remove Stage 4 plugins from Stage 3 &lt;a href=&quot;https://github.com/babel/babel/pull/5126&quot;&gt;#5126&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-high-red.svg&quot; alt=&quot;high&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These plugins were moved into their yearly presets after moving to Stage 4:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-syntax-trailing-function-commas&lt;/code&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-es2017&lt;/code&gt;)
&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-async-to-generator&lt;/code&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-es2017&lt;/code&gt;)
&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-exponentiation-operator&lt;/code&gt; (babel-preset-es2016)&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Instead of any yearly preset, we suggest that you use the newly created &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-env&lt;/code&gt; which uses the correct plugins based on your environment.&lt;/p&gt;

&lt;p&gt;Before:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;presets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;es2015&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;es2016&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;es2017&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;After:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;presets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;env&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;presets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;env&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;targets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;browsers&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;last 2 versions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;safari &amp;gt;= 7&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;See &lt;a href=&quot;/docs/plugins/preset-env/&quot;&gt;/docs/plugins/preset-env/&lt;/a&gt; for more information.&lt;/p&gt;

&lt;h2 id=&quot;spec-compliancy&quot;&gt;Spec Compliancy&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;A trailing comma cannot come after a RestElement in objects &lt;a href=&quot;https://github.com/babel/babylon/pull/290&quot;&gt;#290&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-medium-yellow.svg&quot; alt=&quot;medium&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is when you are using &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-object-rest-spread&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Before:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This will now throw a syntax error.&lt;/p&gt;

&lt;p&gt;After:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;babel-core&quot;&gt;babel-core&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core/register.js&lt;/code&gt; has been removed &lt;a href=&quot;https://github.com/babel/babel/pull/5132&quot;&gt;#5132&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg&quot; alt=&quot;low&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The deprecated usage of &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core/register&lt;/code&gt; has been removed in Babel 7; instead use the standalone package &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-register&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Install &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-register&lt;/code&gt; as a new dependency:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm install --save-dev babel-register
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Upgrading with Mocha:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mocha --compilers js:babel-core/register
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mocha --compilers js:babel-register
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;See &lt;a href=&quot;https://babeljs.io/docs/usage/babel-register/&quot;&gt;babel-register documentation&lt;/a&gt; for more information.&lt;/p&gt;

&lt;h2 id=&quot;babel-plugin-transform-class-constructor-call&quot;&gt;babel-plugin-transform-class-constructor-call&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;babel-plugin-transform-class-constructor-call has been removed &lt;a href=&quot;https://github.com/babel/babel/pull/5119&quot;&gt;#5119&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg&quot; alt=&quot;low&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;TC39 decided to drop this proposal.&lt;/p&gt;

&lt;p&gt;Before:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Point&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;nx&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;You can move your logic into the constructor or into a static method.&lt;/p&gt;

&lt;p&gt;Example with a static method:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Point&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;kr&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;secondConstructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;secondConstructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;See &lt;a href=&quot;/docs/plugins/transform-class-constructor-call/&quot;&gt;/docs/plugins/transform-class-constructor-call/&lt;/a&gt; for more information.&lt;/p&gt;

&lt;h2 id=&quot;babel-plugin-transform-es2015-template-literals&quot;&gt;babel-plugin-transform-es2015-template-literals&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Template Literals Revision updated &lt;a href=&quot;https://github.com/babel/babel/pull/5523&quot;&gt;#5523&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg&quot; alt=&quot;low&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;See the proposal for &lt;a href=&quot;https://tc39.github.io/proposal-template-literal-revision/&quot;&gt;Template Literals Revision&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It cause Babel 6 to throw &lt;code class=&quot;highlighter-rouge&quot;&gt;Bad character escape sequence (5:6)&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`\&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;unicode&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;55&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This has been fixed in Babel 7 and generates something like the following:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_taggedTemplateLiteral&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;strings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;raw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;freeze&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;defineProperties&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;strings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;raw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;freeze&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;raw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}));&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_templateObject&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_taggedTemplateLiteral&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([],&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;\\unicode and \\u{55}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_templateObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;babel&quot;&gt;babel&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Dropping the &lt;code class=&quot;highlighter-rouge&quot;&gt;babel&lt;/code&gt; package &lt;a href=&quot;https://github.com/babel/babel/pull/5293&quot;&gt;#5293&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg&quot; alt=&quot;low&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This package currently gives you an error message to install &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-cli&lt;/code&gt; instead in v6. We will just not publish a v7 version. It also doesn’t make sense if we switch to scoped package &lt;code class=&quot;highlighter-rouge&quot;&gt;babel&lt;/code&gt; -&amp;gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;@babel/babel&lt;/code&gt;?&lt;/p&gt;

&lt;h2 id=&quot;babel-generator&quot;&gt;babel-generator&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Dropping the &lt;code class=&quot;highlighter-rouge&quot;&gt;quotes&lt;/code&gt; option &lt;a href=&quot;https://github.com/babel/babel/pull/5154&quot;&gt;#5154&lt;/a&gt;] &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-none-brightgreen.svg&quot; alt=&quot;none&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you want formatting for compiled output you can use recast/prettier/escodegen/fork babel-generator.&lt;/p&gt;

&lt;p&gt;This option was only available through &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-generator&lt;/code&gt; explicitly until v6.18.0 when we exposed &lt;code class=&quot;highlighter-rouge&quot;&gt;parserOpts&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;generatorOpts&lt;/code&gt;. Because there was a bug in that release no one should’ve used this option in Babel itself.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Dropping the &lt;code class=&quot;highlighter-rouge&quot;&gt;flowUsesCommas&lt;/code&gt; option &lt;a href=&quot;https://github.com/babel/babel/pull/5123&quot;&gt;#5123&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-none-brightgreen.svg&quot; alt=&quot;none&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Currently there are 2 supported syntaxes (&lt;code class=&quot;highlighter-rouge&quot;&gt;,&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;;&lt;/code&gt;) in Flow Object Types.&lt;/p&gt;

&lt;p&gt;This change just makes babel-generator output &lt;code class=&quot;highlighter-rouge&quot;&gt;,&lt;/code&gt; instead of &lt;code class=&quot;highlighter-rouge&quot;&gt;;&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;babel-core-1&quot;&gt;babel-core&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Remove &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core/src/api/browser.js&lt;/code&gt; &lt;a href=&quot;https://github.com/babel/babel/pull/5124&quot;&gt;#5124&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-none-brightgreen.svg&quot; alt=&quot;none&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-browser&lt;/code&gt; was already removed in 6.0. If you need to use Babel in the browser or a non-Node environment, use &lt;a href=&quot;https://github.com/babel/babel-standalone&quot;&gt;babel-standalone&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 01 Mar 2017 11:00:00 +0000</pubDate>
        <link>https://babeljs.io/blog/2017/03/01/upgrade-to-babel-7</link>
        <guid isPermaLink="true">https://babeljs.io/blog/2017/03/01/upgrade-to-babel-7</guid>
        
        
        <category>announcements</category>
        
      </item>
    
      <item>
        <title>Upgrade to Babel 7 for Tool Authors (WIP)</title>
        <description>&lt;p&gt;Refer users to this document for those that create tools that depend on Babel (such as Babel plugins).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Also check out the &lt;a href=&quot;/blog/2017/03/01/upgrade-to-babel-7&quot;&gt;User Upgrade Guide&lt;/a&gt; for other relevant changes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;all-babel-packages&quot;&gt;All Babel packages&lt;/h2&gt;

&lt;h3 id=&quot;nodejs-support&quot;&gt;NodeJS support&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/level%20of%20awesomeness%3F-high-red.svg&quot; alt=&quot;high&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Support for Node.js 0.10 and 0.12 has been dropped as both of this versions are out of maintenance.&lt;/p&gt;

&lt;h3 id=&quot;export-changes&quot;&gt;Export changes&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-medium-yellow.svg&quot; alt=&quot;medium&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dropped use of &lt;code class=&quot;highlighter-rouge&quot;&gt;add-module-exports&lt;/code&gt; plugin on Babel packages.
This had to be used earlier to prevent a breaking change with our exports.
If you import a Babel package in a library you may need to use &lt;code class=&quot;highlighter-rouge&quot;&gt;.default&lt;/code&gt; when using &lt;code class=&quot;highlighter-rouge&quot;&gt;require&lt;/code&gt; rather than &lt;code class=&quot;highlighter-rouge&quot;&gt;import&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;babel-core&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;The publicly exposed but undocumented &lt;code class=&quot;highlighter-rouge&quot;&gt;Pipeline&lt;/code&gt; class has been removed. Best to use the transformation methods exposed from &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core&lt;/code&gt; directly &lt;a href=&quot;https://github.com/babel/babel/pull/5376&quot;&gt;babel/babel#5376&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;babel.util.*&lt;/code&gt; helper methods have been removed, and &lt;code class=&quot;highlighter-rouge&quot;&gt;util.EXTENSIONS&lt;/code&gt; has been moved to &lt;code class=&quot;highlighter-rouge&quot;&gt;babel.DEFAULT_EXTENSIONS&lt;/code&gt; &lt;a href=&quot;https://github.com/babel/babel/pull/5487&quot;&gt;babel/babel#5487&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Calls to &lt;code class=&quot;highlighter-rouge&quot;&gt;babel.transform&lt;/code&gt; or any other transform function may return &lt;code class=&quot;highlighter-rouge&quot;&gt;null&lt;/code&gt; if the file matched an &lt;code class=&quot;highlighter-rouge&quot;&gt;ignore&lt;/code&gt; pattern or failed to match an &lt;code class=&quot;highlighter-rouge&quot;&gt;only&lt;/code&gt; pattern &lt;a href=&quot;https://github.com/babel/babel/pull/5487&quot;&gt;babel/babel#5487&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;opts.basename&lt;/code&gt; option exposed on &lt;code class=&quot;highlighter-rouge&quot;&gt;state.file.opts&lt;/code&gt; has been removed. If you need it, best to build it from &lt;code class=&quot;highlighter-rouge&quot;&gt;opts.filename&lt;/code&gt; yourself &lt;a href=&quot;https://github.com/babel/babel/pull/5467&quot;&gt;babel/babel#5467&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;babylon&quot;&gt;Babylon&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Removed the &lt;code class=&quot;highlighter-rouge&quot;&gt;*&lt;/code&gt; plugin option &lt;a href=&quot;https://github.com/babel/babylon/pull/301&quot;&gt;#301&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg&quot; alt=&quot;low&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This was first added in v6.14.1 (Nov 17, 2016) so it’s unlikely anyone was using this.&lt;/p&gt;

&lt;p&gt;This catch-all option was removed; instead you should specifically decide which plugins you want to activate.&lt;/p&gt;

&lt;p&gt;We thought it would be a good idea for tools so they wouldn’t have to constantly update their config but it also means we can’t easily make a breaking change.&lt;/p&gt;

&lt;p&gt;Before:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;babylon&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;*&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;You can get the old behavior using:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;babylon&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;asyncGenerators&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;classProperties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;decorators&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;doExpressions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;dynamicImport&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;exportExtensions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;flow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;functionBind&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;functionSent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;jsx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;objectRestSpread&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;See Babylon’s &lt;a href=&quot;https://babeljs.io/docs/core-packages/babylon/#api-plugins&quot;&gt;plugin options&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Removed &lt;code class=&quot;highlighter-rouge&quot;&gt;classConstructorCall&lt;/code&gt; plugin &lt;a href=&quot;https://github.com/babel/babylon/pull/291&quot;&gt;#291&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg&quot; alt=&quot;low&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;babel-traverse&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-traverse&lt;/code&gt;&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;getFunctionParent&lt;/code&gt; will no longer return &lt;code class=&quot;highlighter-rouge&quot;&gt;Program&lt;/code&gt;, please use &lt;code class=&quot;highlighter-rouge&quot;&gt;getProgramParent&lt;/code&gt; instead &lt;a href=&quot;https://github.com/babel/babel/pull/5923&quot;&gt;#5923&lt;/a&gt;. &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg&quot; alt=&quot;low&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It doesn’t make sense that a function named &lt;code class=&quot;highlighter-rouge&quot;&gt;getFunctionParent&lt;/code&gt; also returns the Program, so that was removed.&lt;/p&gt;

&lt;p&gt;To get the equivalent behavior, you’ll need to make a change like&lt;/p&gt;

&lt;div class=&quot;language-diff highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gd&quot;&gt;- path.scope.getFunctionParent()
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+ path.scope.getFunctionParent() || path.scope.getProgramParent()
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Path replacement/removal APIs now return an array of new paths &lt;img src=&quot;https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg&quot; alt=&quot;low&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For instance, using &lt;code class=&quot;highlighter-rouge&quot;&gt;Path#insertBefore&lt;/code&gt;, or &lt;code class=&quot;highlighter-rouge&quot;&gt;Path#replaceWith&lt;/code&gt; will now always return an array of the newly inserted/replaced paths.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;node&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;nullLiteral&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;replaced&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;replaceWith&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;node&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// =&amp;gt; true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This is especially useful when inserting serveral nodes into some higher-up scope, since you can immediately call the &lt;code class=&quot;highlighter-rouge&quot;&gt;Path&lt;/code&gt; APIs on the node’s new &lt;code class=&quot;highlighter-rouge&quot;&gt;Path&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;findParent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* some selection criteria */&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;helperPaths&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;unshiftContainer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;body&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;helpers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// helperPaths can now be referenced, manipulated, etc.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;ast-changes&quot;&gt;AST changes&lt;/h2&gt;

&lt;h3 id=&quot;tokens-removed&quot;&gt;Tokens removed&lt;/h3&gt;

&lt;p&gt;In previous versions &lt;code class=&quot;highlighter-rouge&quot;&gt;tokens&lt;/code&gt; were always attached to the AST on the top-level. In the latests version of babylon we removed this behavior and made it disabled by default to improve the performance of the parser. All usages in babel itself have been remove and &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-generator&lt;/code&gt; is not using the tokens anymore for pretty printing.&lt;/p&gt;

&lt;p&gt;If your babel-plugin uses &lt;code class=&quot;highlighter-rouge&quot;&gt;tokens&lt;/code&gt; at the moment, evaluate if it is still necessary and try to remove the usage if possible. If your plugin really depends on getting tokens you can reactivate it but please only consider this if there is no other way as this will hurt users performance.&lt;/p&gt;

&lt;p&gt;To activate you need to set the &lt;code class=&quot;highlighter-rouge&quot;&gt;tokens&lt;/code&gt; option of babylon to true. You can do this directly from your plugin.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;manipulateOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;opts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parserOpts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;parserOpts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tokens&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;renamed&quot;&gt;Renamed&lt;/h3&gt;

&lt;p&gt;The following nodes have been renamed:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Name 6.x&lt;/th&gt;
      &lt;th&gt;Name 7.x&lt;/th&gt;
      &lt;th&gt;Example&lt;/th&gt;
      &lt;th&gt;PR&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;ExistentialTypeParam&lt;/td&gt;
      &lt;td&gt;ExistsTypeAnnotation&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;type A = B&amp;lt;*&amp;gt;;&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/babel/babylon/pull/322&quot;&gt;#322&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;NumericLiteralTypeAnnotation&lt;/td&gt;
      &lt;td&gt;NumberLiteralTypeAnnotation&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;type T = 0;&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/babel/babylon/pull/332&quot;&gt;#332&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Besides the AST-Nodes also all the functions in &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-type&lt;/code&gt; have been renamed.&lt;/p&gt;

&lt;div class=&quot;language-diff highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; import * as t from &quot;babel-types&quot;;

 return {
&lt;span class=&quot;gd&quot;&gt;-  ExistentialTypeParam(path) {
-    const parent = path.findParent((path) =&amp;gt; path.isExistentialTypeParam());
-    t.isExistentialTypeParam(parent);
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+  ExistsTypeAnnotation(path) {
+    const parent = path.findParent((path) =&amp;gt; path.isExistsTypeAnnotation());
+    t.isExistsTypeAnnotation(parent);
&lt;/span&gt;
&lt;span class=&quot;gd&quot;&gt;-    return t.existentialTypeParam();
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+    return t.existsTypeAnnotation();
&lt;/span&gt;   },
&lt;span class=&quot;gd&quot;&gt;-  NumericLiteralTypeAnnotation(path) {
-    const parent = path.findParent((path) =&amp;gt; path.isNumericLiteralTypeAnnotation());
-    t.isNumericLiteralTypeAnnotation(parent);
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+  NumberLiteralTypeAnnotation(path) {
+    const parent = path.findParent((path) =&amp;gt; path.isNumberLiteralTypeAnnotation());
+    t.isNumberLiteralTypeAnnotation(parent);
&lt;/span&gt;
&lt;span class=&quot;gd&quot;&gt;-    return t.numericLiteralTypeAnnotation();
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+    return t.numberLiteralTypeAnnotation();
&lt;/span&gt;   }
 };
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;replaced&quot;&gt;Replaced&lt;/h3&gt;

&lt;p&gt;On the following AST-Nodes the value of the field &lt;code class=&quot;highlighter-rouge&quot;&gt;variance&lt;/code&gt; has been changed from a simple string value to be its own AST-Node called &lt;code class=&quot;highlighter-rouge&quot;&gt;Variance&lt;/code&gt;. &lt;a href=&quot;https://github.com/babel/babylon/pull/333&quot;&gt;#333&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The field is only available when enabling the &lt;code class=&quot;highlighter-rouge&quot;&gt;flow&lt;/code&gt; plugin in babylon.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;ObjectProperty&lt;/li&gt;
  &lt;li&gt;ObjectMethod&lt;/li&gt;
  &lt;li&gt;AssignmentProperty&lt;/li&gt;
  &lt;li&gt;ClassMethod&lt;/li&gt;
  &lt;li&gt;ClassProperty&lt;/li&gt;
  &lt;li&gt;Property&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The type of the new &lt;code class=&quot;highlighter-rouge&quot;&gt;Variance&lt;/code&gt; node looks like this:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;VarianceNode&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Variance&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;kind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;plus&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;minus&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-diff highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; return {
   Property({ node }) {
&lt;span class=&quot;gd&quot;&gt;-    if (node.variance === &quot;plus&quot;) {
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+    if (node.variance.kind === &quot;plus&quot;) {
&lt;/span&gt;       ...
&lt;span class=&quot;gd&quot;&gt;-    } else if (node.variance === &quot;minus&quot;) {
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+    } else if (node.variance.kind === &quot;minus&quot;) {
&lt;/span&gt;       ...
     }
   }
 };
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;location-changes&quot;&gt;Location changes&lt;/h3&gt;

&lt;p&gt;The location info of &lt;code class=&quot;highlighter-rouge&quot;&gt;ObjectTypeIndexer&lt;/code&gt; has been changed to not include semicolons. This was done to align with the flow-parser and have the same location information. &lt;a href=&quot;https://github.com/babel/babylon/pull/228&quot;&gt;#228&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-diff highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; {
   &quot;type&quot;: &quot;ObjectTypeIndexer&quot;,
   &quot;start&quot;: 9,
&lt;span class=&quot;gd&quot;&gt;-  &quot;end&quot;: 29,
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+  &quot;end&quot;: 28,
&lt;/span&gt;   &quot;loc&quot;: {
     &quot;start&quot;: {
       &quot;line&quot;: 1,
       &quot;column&quot;: 9,
     },
     &quot;end&quot;: {
       &quot;line&quot;: 1,
&lt;span class=&quot;gd&quot;&gt;-      &quot;column&quot;: 29
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+      &quot;column&quot;: 28
&lt;/span&gt;     }
   }
 }
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;removal&quot;&gt;Removal&lt;/h3&gt;

&lt;h4 id=&quot;forawaitstatement&quot;&gt;ForAwaitStatement&lt;/h4&gt;

&lt;p&gt;The AST-Node &lt;code class=&quot;highlighter-rouge&quot;&gt;ForAwaitStatement&lt;/code&gt; has been removed and is replace with the field &lt;code class=&quot;highlighter-rouge&quot;&gt;await&lt;/code&gt; in the &lt;code class=&quot;highlighter-rouge&quot;&gt;ForOfStatement&lt;/code&gt; node &lt;a href=&quot;https://github.com/babel/babylon/pull/349&quot;&gt;#349&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-diff highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; interface ForOfStatement &amp;lt;: ForInStatement {
   type: &quot;ForOfStatement&quot;;
&lt;span class=&quot;gi&quot;&gt;+  await: boolean;
&lt;/span&gt; }
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-diff highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; return {
&lt;span class=&quot;gd&quot;&gt;-  ForAwaitStatement(path) {
-    ...
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+  ForOfStatement(path) {
+    if (path.node.await) {
+      ...
+    }
&lt;/span&gt;   }
 };
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h4 id=&quot;restproperty--spreadproperty&quot;&gt;RestProperty &amp;amp; SpreadProperty&lt;/h4&gt;

&lt;p&gt;The two AST-Nodes &lt;code class=&quot;highlighter-rouge&quot;&gt;RestProperty&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;SpreadProperty&lt;/code&gt; have been removed in favor of reusing &lt;code class=&quot;highlighter-rouge&quot;&gt;RestElement&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;SpreadElement&lt;/code&gt; &lt;a href=&quot;https://github.com/babel/babylon/pull/384&quot;&gt;#384&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-diff highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; return {
   SpreadElement(path) {
&lt;span class=&quot;gd&quot;&gt;-    ...
-  },
-  SpreadProperty(path) {
-    ...
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+    if (path.parentPath.isObjectExpression()) {
+      ...
+    } else if (path.parentPath.isArrayExpression()) {
+      ...
+    }
&lt;/span&gt;   },
   RestElement(path) {
&lt;span class=&quot;gd&quot;&gt;-    ...
-  },
-  RestProperty(path) {
-    ...
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+    if (path.parentPath.isObjectPattern()) {
+      ...
+    } else if (path.parentPath.isArrayPattern()) {
+      ...
+    }
&lt;/span&gt;   }
 };
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;See our &lt;a href=&quot;https://github.com/babel/babel/pull/5317&quot;&gt;upgrade PR for Babel&lt;/a&gt; and the &lt;a href=&quot;https://github.com/babel/babylon/blob/7.0/ast/spec.md&quot;&gt;Babylon AST spec&lt;/a&gt; for more information.&lt;/p&gt;
</description>
        <pubDate>Wed, 01 Mar 2017 11:00:00 +0000</pubDate>
        <link>https://babeljs.io/blog/2017/03/01/upgrade-to-babel-7-for-tool-authors</link>
        <guid isPermaLink="true">https://babeljs.io/blog/2017/03/01/upgrade-to-babel-7-for-tool-authors</guid>
        
        
        <category>announcements</category>
        
      </item>
    
      <item>
        <title>6.23.0 Released</title>
        <description>&lt;p&gt;In this release: multiple improvements to the &lt;code class=&quot;highlighter-rouge&quot;&gt;react-constant-elements&lt;/code&gt; plugin by &lt;a href=&quot;https://github.com/STRML&quot;&gt;@STRML&lt;/a&gt;, some codegen optimizations, and lots of bug fixes! Thanks to &lt;a href=&quot;https://github.com/loganfsmyth&quot;&gt;@loganfsmyth&lt;/a&gt; for the release + reviews!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Shoutouts to &lt;a href=&quot;https://github.com/xtina-starr&quot;&gt;@xtina-starr&lt;/a&gt;, &lt;a href=&quot;https://github.com/finkef&quot;&gt;@finkef&lt;/a&gt;, &lt;a href=&quot;https://github.com/chitchu&quot;&gt;@chitchu&lt;/a&gt;, &lt;a href=&quot;https://github.com/yongxu&quot;&gt;@yongxu&lt;/a&gt;, &lt;a href=&quot;https://github.com/jwbay&quot;&gt;@jwbay&lt;/a&gt;, &lt;a href=&quot;https://github.com/hex13&quot;&gt;@hex13&lt;/a&gt; for their first PRs! 🎉&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Check out &lt;a href=&quot;https://github.com/babel/babel/releases/tag/v6.23.0&quot;&gt;GitHub&lt;/a&gt; for the whole changelog.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;I’ll be writing up the 7.0 post (our current progress) soon so look out for that! We want to do whatever we can to make it easy for both end-users and plugin/tool authors to upgrade seamlessly: whether it be a beta period for the release, a &lt;a href=&quot;https://github.com/babel/babel.github.io/pull/1146&quot;&gt;7.0 upgrade guide&lt;/a&gt;, codemods if necessary, a bot to automatically upgrade your OSS project from 6 to 7, or any other suggestions you can give us!&lt;/p&gt;

&lt;p&gt;Since not everyone realises, I wanted to re-iterate again that our &lt;a href=&quot;https://github.com/babel/babel#team&quot;&gt;team&lt;/a&gt; is still a small group of volunteers. There’s no company sponsor or even anyone working on it full time.&lt;/p&gt;

&lt;p&gt;We’d love for you to contribute (especially not code!), so please reach out to us! More designers, technical writers/editors, and teachers for our website would be amazing.&lt;/p&gt;

&lt;p&gt;And in other news, Babel has been accepted as a &lt;a href=&quot;https://teams.railsgirlssummerofcode.org/projects/177-babel&quot;&gt;Rails Girls Summer of Code&lt;/a&gt; project as well as waiting to hear back as a mentor organization for &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code&lt;/a&gt;!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;-new-feature&quot;&gt;🚀 New Feature&lt;/h2&gt;

&lt;h3 id=&quot;5236-transform-es2015-block-scoping-add-option-throwifclosurerequired-to-throw-on-slow-code-spicyj&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5236&quot;&gt;#5236&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-es2015-block-scoping&lt;/code&gt;: Add option &lt;code class=&quot;highlighter-rouge&quot;&gt;throwIfClosureRequired&lt;/code&gt; to throw on slow code. (&lt;a href=&quot;https://github.com/spicyj&quot;&gt;@spicyj&lt;/a&gt;)&lt;/h3&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;plugins&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;transform-es2015-block-scoping&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;throwIfClosureRequired&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;In cases such as the following, it is impossible to rewrite let/const without adding an additional function and closure while transforming:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;In extremely performance-sensitive code, this can be undesirable. If &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;throwIfClosureRequired&quot;: true&lt;/code&gt; is set, Babel throws when transforming these patterns instead of automatically adding an additional function.&lt;/p&gt;

&lt;h3 id=&quot;4812-transform-react-constant-elements-support-pure-expressions-strml&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/4812&quot;&gt;#4812&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-react-constant-elements&lt;/code&gt;: Support pure expressions (&lt;a href=&quot;https://github.com/STRML&quot;&gt;@STRML&lt;/a&gt;)&lt;/h3&gt;

&lt;p&gt;Adds a &lt;code class=&quot;highlighter-rouge&quot;&gt;path.isPure()&lt;/code&gt; check to the plugin.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The expression will remain in the hoisted code, even though it could be statically evaluated. UglifyJS/Babili will take care of that in many cases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;OFFSET&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;React&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;tabIndex&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;OFFSET&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;    &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Out&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;OFFSET&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;tabIndex&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;OFFSET&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;
&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;React&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Deopt&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As noted in &lt;a href=&quot;https://github.com/facebook/react/issues/3226&quot;&gt;facebook/react#3226&lt;/a&gt;, it’s not safe to reuse elements with mutable props.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;5288-babel-preset-flow-add-new-preset-thejameskyle&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5288&quot;&gt;#5288&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-flow&lt;/code&gt;: Add new preset (&lt;a href=&quot;https://github.com/thejameskyle&quot;&gt;@thejameskyle&lt;/a&gt;)&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-flow&lt;/code&gt; just includes &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-flow-strip-types&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Before (still valid)&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;plugins&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;transform-flow-strip-types&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;After&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;presets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;flow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;FYI: the React preset still includes the flow plugin by default (we might change it when TS support is added)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/simnalamburt&quot;&gt;@simnalamburt&lt;/a&gt; for giving us the package name!&lt;/p&gt;

&lt;h3 id=&quot;5230-babel-traverse-add-extra-sibling-methods-chitchu&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5230&quot;&gt;#5230&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-traverse&lt;/code&gt;: Add extra sibling methods (&lt;a href=&quot;https://github.com/chitchu&quot;&gt;@chitchu&lt;/a&gt;)&lt;/h3&gt;

&lt;p&gt;For plugin authors: there’s already a &lt;code class=&quot;highlighter-rouge&quot;&gt;path.getSibling(number)&lt;/code&gt;, so we’re adding a few helper methods.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getPrevSibling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// path.getSibling(path.parentPath.key - 1)&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getNextSibling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// path.getSibling(path.parentPath.key + 1)&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getAllPrevSiblings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// returns Array&amp;lt;NodePath&amp;gt; of previous siblings&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getAllNextSiblings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// returns Array&amp;lt;NodePath&amp;gt; of next siblings&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;-bug-fixes&quot;&gt;🐛 Bug Fixes&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Because alsmot every bug fix can be an opportunity to learn more about JavaScript and how the tool that you use works, I would check out some of the PRs!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;5298-fix-loose-transform-es2015-for-of-with-label-jridgewell&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5298&quot;&gt;#5298&lt;/a&gt; Fix loose &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-es2015-for-of&lt;/code&gt; with label. (&lt;a href=&quot;https://github.com/jridgewell&quot;&gt;@jridgewell&lt;/a&gt;)&lt;/h3&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// previously, the label was completely dropped&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;5153-transform-react-constant-elements-hoisting-fixes-strml&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5153&quot;&gt;#5153&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-react-constant-elements&lt;/code&gt;: Hoisting fixes (&lt;a href=&quot;https://github.com/STRML&quot;&gt;@STRML&lt;/a&gt;)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;Better hoisting inside variable declarations&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;bar&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;bar&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;renderFoo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;baz&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;baz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;/&amp;gt;, baz = &quot;baz&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;
&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;renderFoo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;bar&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;bar&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;renderFoo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;baz&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;baz&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;_ref2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;baz&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;baz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;
&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;renderFoo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Hoisting with Higher Order Components&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;HOC&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;component&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Parent&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;className&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;parent&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Child&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/div&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Child&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;className&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;child&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;ChildTextContent&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/div&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;Child&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;HOC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Child&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;HOC&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;component&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Parent&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;className&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;child&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;ChildTextContent&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;
&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Child&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;Child&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;HOC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Child&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;className&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;parent&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Child&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/div&amp;gt;;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;5143-transform-react-constant-elements-fix-pathhoister-hoisting-jsx-member-expressions-on-this-strml&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5143&quot;&gt;#5143&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-react-constant-elements&lt;/code&gt;: Fix &lt;code class=&quot;highlighter-rouge&quot;&gt;PathHoister&lt;/code&gt; hoisting JSX member expressions on &lt;code class=&quot;highlighter-rouge&quot;&gt;this&lt;/code&gt; (&lt;a href=&quot;https://github.com/STRML&quot;&gt;@STRML&lt;/a&gt;)&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;this.component /&amp;gt;&lt;/code&gt; was previously hoisted outside its own function (doesn’t make sense because otherwise &lt;code class=&quot;highlighter-rouge&quot;&gt;this&lt;/code&gt; would be &lt;code class=&quot;highlighter-rouge&quot;&gt;undefined&lt;/code&gt;)&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;component&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;div&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;component&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;component&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;div&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;component&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;5030-transform-do-expressions-prevent-multiple-return-statements-in-a-loop-when-replacing-expressions-existentialism&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5030&quot;&gt;#5030&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-do-expressions&lt;/code&gt;: Prevent multiple return statements in a loop when replacing expressions. (&lt;a href=&quot;https://github.com/existentialism&quot;&gt;@existentialism&lt;/a&gt;)&lt;/h3&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;parentPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s1&quot;&gt;'a'&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s1&quot;&gt;'b'&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ret&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;parentPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;_ret&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'a'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;_ret&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'b'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ret&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// previously had an extra return&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;5260-babel-register-fix-a-typeerror-with-the-cache-xtuc&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5260&quot;&gt;#5260&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-register&lt;/code&gt;: Fix a TypeError with the cache. (&lt;a href=&quot;https://github.com/xtuc&quot;&gt;@xtuc&lt;/a&gt;)&lt;/h3&gt;

&lt;h3 id=&quot;5206-babel-traverse-deopt-evaluation-of-undefined-with-a-local-binding-boopathi&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5206&quot;&gt;#5206&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-traverse&lt;/code&gt;: Deopt evaluation of undefined with a local binding (&lt;a href=&quot;https://github.com/boopathi&quot;&gt;@boopathi&lt;/a&gt;)&lt;/h3&gt;

&lt;p&gt;If &lt;code class=&quot;highlighter-rouge&quot;&gt;undefined&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;NaN&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Infinity&lt;/code&gt; are redefined, deopt.&lt;/p&gt;

&lt;h3 id=&quot;5195-babel-plugin-transform-runtime-dont-compile-certain-symbol-properties-taion&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5195&quot;&gt;#5195&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-transform-runtime&lt;/code&gt;: Don’t compile certain symbol properties. (&lt;a href=&quot;https://github.com/taion&quot;&gt;@taion&lt;/a&gt;)&lt;/h3&gt;

&lt;p&gt;Don’t pull in the individual &lt;code class=&quot;highlighter-rouge&quot;&gt;Symbol.asyncIterator&lt;/code&gt;/&lt;code class=&quot;highlighter-rouge&quot;&gt;Symbol.observable&lt;/code&gt; polyfills and pull in the full &lt;code class=&quot;highlighter-rouge&quot;&gt;Symbol&lt;/code&gt; polyfill instead.&lt;/p&gt;

&lt;h3 id=&quot;5258-babel-check-if-it-is-installed-globally-and-displays-correct-cli-message-xtina-starr&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5258&quot;&gt;#5258&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;babel&lt;/code&gt;: Check if it is installed globally and displays correct cli message. (&lt;a href=&quot;https://github.com/xtina-starr&quot;&gt;@xtina-starr&lt;/a&gt;)&lt;/h3&gt;

&lt;p&gt;Now if you install &lt;code class=&quot;highlighter-rouge&quot;&gt;babel&lt;/code&gt; the error message will display either &lt;code class=&quot;highlighter-rouge&quot;&gt;-g&lt;/code&gt; or not.&lt;/p&gt;

&lt;h3 id=&quot;5270-babel-generator-emit-parens-for-await-of-ternary-expressions-erikdesjardins&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5270&quot;&gt;#5270&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-generator&lt;/code&gt;: Emit parens for await of ternary expressions. (&lt;a href=&quot;https://github.com/erikdesjardins&quot;&gt;@erikdesjardins&lt;/a&gt;)&lt;/h3&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;asdf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;5193-babel-generator-fix-missing-parens-when-functionexpression-is-a-tag-in-a-template-string-existentialism&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5193&quot;&gt;#5193&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-generator&lt;/code&gt;: Fix missing parens when &lt;code class=&quot;highlighter-rouge&quot;&gt;FunctionExpression&lt;/code&gt; is a tag in a template string. (&lt;a href=&quot;https://github.com/existentialism&quot;&gt;@existentialism&lt;/a&gt;)&lt;/h3&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{})&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;``&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(){}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;``&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;5235-transform-es2015-modules-commonjs-limit-export-node-default-assignment-stack-size-4323-mattste&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5235&quot;&gt;#5235&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-es2015-modules-commonjs&lt;/code&gt;: Limit export node default assignment stack size #4323. (&lt;a href=&quot;https://github.com/mattste&quot;&gt;@mattste&lt;/a&gt;)&lt;/h3&gt;

&lt;p&gt;An interesting issue when importing/exporting a lot!&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;foo1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;foo2&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;foo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// assume ... is 100 imports/exports&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;foo1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;foo2&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Part of the generated code looks like:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Foo6&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Foo5&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Thus with a file that &lt;a href=&quot;https://github.com/callemall/material-ui/blob/c9af9606bcea6551ceaadc2f6430d629eb679e84/src/svg-icons/index.js&quot;&gt;exports a lot of modules&lt;/a&gt; it creates so many nested assignment nodes in the AST the code generator errors with &lt;code class=&quot;highlighter-rouge&quot;&gt;Maximum call stack size exceeded&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The solution is to break up the expression into sets of 100.&lt;/p&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo100&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// split by 100&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo99&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo98&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;undefined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;5255-babel-generator-use-trim-instead-of-lodashtrimend-for-codegen-performance-jwbay&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5255&quot;&gt;#5255&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-generator&lt;/code&gt;: Use &lt;code class=&quot;highlighter-rouge&quot;&gt;trim&lt;/code&gt; instead of &lt;code class=&quot;highlighter-rouge&quot;&gt;lodash/trimEnd&lt;/code&gt; for codegen performance (&lt;a href=&quot;https://github.com/jwbay&quot;&gt;@jwbay&lt;/a&gt;)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;lodash/trimEnd&lt;/code&gt; executes a regex against potentially massive strings which can freeze node. (106ms vs. 5ms)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;5050-babel-traverse-rewrite-hub-as-an-interface-yongxu&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/5050&quot;&gt;#5050&lt;/a&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-traverse&lt;/code&gt;: Rewrite &lt;code class=&quot;highlighter-rouge&quot;&gt;Hub&lt;/code&gt; as an interface (&lt;a href=&quot;https://github.com/yongxu&quot;&gt;@yongxu&lt;/a&gt;)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;This was reverted due to an incompatible change to babel-core&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are a few cases where &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-traverse&lt;/code&gt; can’t be used standalone so this removes some code that tied &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-traverse&lt;/code&gt; to &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core&lt;/code&gt;’s implementation.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;-committers-20&quot;&gt;🌏 Committers: 20&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Andres Suarez (&lt;a href=&quot;https://github.com/zertosh&quot;&gt;zertosh&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Ben Alpert (&lt;a href=&quot;https://github.com/spicyj&quot;&gt;spicyj&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Boopathi Rajaa (&lt;a href=&quot;https://github.com/boopathi&quot;&gt;boopathi&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Brian Ng (&lt;a href=&quot;https://github.com/existentialism&quot;&gt;existentialism&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Christina (&lt;a href=&quot;https://github.com/xtina-starr&quot;&gt;xtina-starr&lt;/a&gt;) First PR!&lt;/li&gt;
  &lt;li&gt;Erik Desjardins (&lt;a href=&quot;https://github.com/erikdesjardins&quot;&gt;erikdesjardins&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Fabian Finke (&lt;a href=&quot;https://github.com/finkef&quot;&gt;finkef&lt;/a&gt;) First PR!&lt;/li&gt;
  &lt;li&gt;Henry Zhu (&lt;a href=&quot;https://github.com/hzoo&quot;&gt;hzoo&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Jimmy Jia (&lt;a href=&quot;https://github.com/taion&quot;&gt;taion&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Justin Ridgewell (&lt;a href=&quot;https://github.com/jridgewell&quot;&gt;jridgewell&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Logan Smyth (&lt;a href=&quot;https://github.com/loganfsmyth&quot;&gt;loganfsmyth&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Matt Stewart (&lt;a href=&quot;https://github.com/mattste&quot;&gt;mattste&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Samuel Reed (&lt;a href=&quot;https://github.com/STRML&quot;&gt;STRML&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Sergey Rubanov (&lt;a href=&quot;https://github.com/chicoxyzzy&quot;&gt;chicoxyzzy&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Sven SAULEAU (&lt;a href=&quot;https://github.com/xtuc&quot;&gt;xtuc&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Vicente Jr Yuchitcho (&lt;a href=&quot;https://github.com/chitchu&quot;&gt;chitchu&lt;/a&gt;) First PR!&lt;/li&gt;
  &lt;li&gt;Yongxu Ren (&lt;a href=&quot;https://github.com/yongxu&quot;&gt;yongxu&lt;/a&gt;) First PR!&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jwbay&quot;&gt;jwbay&lt;/a&gt; First PR!&lt;/li&gt;
  &lt;li&gt;james kyle (&lt;a href=&quot;https://github.com/thejameskyle&quot;&gt;thejameskyle&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Łukasz Lityński (&lt;a href=&quot;https://github.com/hex13&quot;&gt;hex13&lt;/a&gt;) First PR!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out &lt;a href=&quot;https://github.com/babel/babel/releases/tag/v6.23.0&quot;&gt;Github&lt;/a&gt; for the whole changelog!&lt;/p&gt;
</description>
        <pubDate>Mon, 13 Feb 2017 20:00:00 +0000</pubDate>
        <link>https://babeljs.io/blog/2017/02/13/6.23.0</link>
        <guid isPermaLink="true">https://babeljs.io/blog/2017/02/13/6.23.0</guid>
        
        
        <category>announcements</category>
        
      </item>
    
      <item>
        <title>The State of Babel</title>
        <description>&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://babeljs.io/blog/2016/12/07/the-state-of-babel#some-history&quot;&gt;Some History&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://babeljs.io/blog/2016/12/07/the-state-of-babel#current-status&quot;&gt;Current Status&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://babeljs.io/blog/2016/12/07/the-state-of-babel#the-future&quot;&gt;The Future&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://babeljs.io/blog/2016/12/07/the-state-of-babel#community&quot;&gt;Community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Previous issues: &lt;a href=&quot;https://github.com/babel/babel/issues/4130&quot;&gt;Babel Roadmap #4130&lt;/a&gt;, &lt;a href=&quot;https://github.com/babel/babel/issues/2168&quot;&gt;6.0 #2168&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Please check out the &lt;a href=&quot;https://babeljs.io/blog/2016/12/07/the-state-of-babel#community&quot;&gt;Community&lt;/a&gt; section if nothing else.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Also published as part of &lt;a href=&quot;https://twitter.com/kosamari&quot;&gt;Mariko Kosaka’s&lt;/a&gt; 2016 &lt;a href=&quot;http://web.advent.today/&quot;&gt;Web Advent Calendar&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;some-history&quot;&gt;Some History&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/kittens&quot;&gt;Sebastian&lt;/a&gt; created “6to5” in September of 2014. Interestingly enough, he made it to scratch an itch he had with understanding programming languages and how they work. You might have assumed whoever created the project already knew how compilers worked and understood JavaScript perfectly… but you would be wrong! Check out his post for a great read of his story: &lt;a href=&quot;https://medium.com/@sebmck/2015-in-review-51ac7035e272#.jdoo279bl&quot;&gt;~2015 in Review&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;6to5 did exactly that: easily turn ES6 code into ES5 code. When 6to5 became Babel as mentioned in &lt;a href=&quot;https://babeljs.io/blog/2015/02/15/not-born-to-die&quot;&gt;Not Born to Die&lt;/a&gt;, it became a platform: a suite of tools designed to create the next generation of JavaScript tooling. No longer did it just compile ES6 to ES5, it allowed developers to build tools on top of it.&lt;/p&gt;

&lt;p&gt;Here are some of our milestones:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;In &lt;a href=&quot;https://babeljs.io/blog/2015/03/31/5.0.0&quot;&gt;5.0.0&lt;/a&gt;, Babel aligned more with the &lt;a href=&quot;https://tc39.github.io/process-document/&quot;&gt;TC39 process&lt;/a&gt; by introducing &lt;code class=&quot;highlighter-rouge&quot;&gt;stages&lt;/code&gt;, added a &lt;code class=&quot;highlighter-rouge&quot;&gt;.babelrc&lt;/code&gt; config option, and created a plugin system for custom transforms.&lt;/li&gt;
  &lt;li&gt;In &lt;a href=&quot;https://babeljs.io/blog/2015/10/29/6.0.0&quot;&gt;6.0.0&lt;/a&gt;, Babel became modular (a pretty controversial idea at the time). This was a huge change that led to opt-in functionality (no defaults) and the concept of &lt;code class=&quot;highlighter-rouge&quot;&gt;Presets&lt;/code&gt; and Plugin Options.
    &lt;ul&gt;
      &lt;li&gt;As mentioned in his article, Sebastian joined Facebook in July 2015 and worked on the entire development of Babel 6 on company time.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/blob/master/CHANGELOG.md#638-6313&quot;&gt;6.3.13&lt;/a&gt; Sebastian extracted our &lt;a href=&quot;https://github.com/babel/babel/blob/master/doc/design/monorepo.md&quot;&gt;monorepo&lt;/a&gt; build/publish tools into what is now &lt;a href=&quot;https://github.com/lerna/lerna&quot;&gt;Lerna&lt;/a&gt;. (What’s funny is &lt;a href=&quot;https://github.com/thejameskyle&quot;&gt;James&lt;/a&gt; rewrote it 3 times and I had to review everything)
    &lt;ul&gt;
      &lt;li&gt;After this was around when both Sebastian and James got burned out on Babel, and a few contributors stepped up.&lt;/li&gt;
      &lt;li&gt;We struggled to find direction and deal with the bugs/requests coming in but we got a lot of stuff done!&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/releases/tag/v6.13.0&quot;&gt;6.13.0&lt;/a&gt; finally added &lt;a href=&quot;http://babeljs.io/docs/plugins/#plugin-preset-options&quot;&gt;Preset Options&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://babeljs.io/blog/2016/08/24/6.14.0&quot;&gt;6.14.0&lt;/a&gt; added a &lt;a href=&quot;http://babeljs.io/docs/plugins/preset-latest/&quot;&gt;latest-preset&lt;/a&gt; that keeps up to date with the yearly JavaScript specification.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://babeljs.io/blog/2016/09/28/6.16.0&quot;&gt;6.16.0&lt;/a&gt; allowed changing out the parser or code-generator.&lt;/li&gt;
  &lt;li&gt;In August, we released &lt;a href=&quot;https://babeljs.io/blog/2016/08/30/babili&quot;&gt;Babili, a minifier based on Babel&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;In September, we released the first version of &lt;a href=&quot;https://github.com/babel/babel-preset-env&quot;&gt;babel-preset-env&lt;/a&gt; (read on for details).&lt;/li&gt;
  &lt;li&gt;After a year on &lt;a href=&quot;https://twitter.com/sebmck/status/667097915605708804&quot;&gt;Phabricator&lt;/a&gt;, we moved back to to &lt;a href=&quot;https://twitter.com/left_pad/status/773619871074648064&quot;&gt;GitHub issues&lt;/a&gt; thanks solely to &lt;a href=&quot;https://github.com/danez&quot;&gt;@danez&lt;/a&gt; and his amazing (and underappreciated) work.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;If you’re using Babel, let us know with a &lt;a href=&quot;https://github.com/babel/babel.github.io/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr+is%3Aclosed+%22New+User%3A%22&quot;&gt;PR&lt;/a&gt; to our &lt;a href=&quot;http://babeljs.io/users/&quot;&gt;users page&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-core&lt;/code&gt; is downloaded over 5 million times per month and almost 60 million times total and used at huge companies like Facebook/Netflix/Airbnb and other OSS projects like React/Yarn.&lt;/p&gt;

&lt;p&gt;Thanks everyone for your continued support! We want to continue acting as the foundation of the JavaScript toolchain: compilation, linting, minification, codemods, code coverage, etc.&lt;/p&gt;

&lt;h2 id=&quot;current-status&quot;&gt;Current Status&lt;/h2&gt;

&lt;p&gt;If you’re interested in helping out please check out the issues linked below!&lt;/p&gt;

&lt;h3 id=&quot;maintaining-babel-plugins-for-each-proposal-in-tc39-starting-from-stage-0&quot;&gt;Maintaining Babel plugins &lt;a href=&quot;https://github.com/tc39/proposals&quot;&gt;for each proposal in TC39&lt;/a&gt; starting from Stage 0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/tc39&quot;&gt;TC39&lt;/a&gt; stands for Ecma International, Technical Committee 39: it’s the committee that makes JavaScript.&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;&lt;a href=&quot;https://twitter.com/b0rk&quot;&gt;@b0rk&lt;/a&gt; Short answers:&lt;br /&gt;&lt;br /&gt;Who&amp;#39;s there? Engine implementors, developers, a handful of academics and theorists, and &lt;a href=&quot;https://twitter.com/BrendanEich&quot;&gt;@BrendanEich&lt;/a&gt;.&lt;/p&gt;&amp;mdash; Yehuda Katz (@wycats) &lt;a href=&quot;https://twitter.com/wycats/status/803821500394598401&quot;&gt;November 30, 2016&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Babel uses &lt;a href=&quot;http://babeljs.io/docs/plugins/#stage-x-experimental-presets-&quot;&gt;TC39’s concept of stages&lt;/a&gt; to categorize its experimental plugins. Users should be able to easily use features before they are all implemented in browsers in &lt;a href=&quot;https://tc39.github.io/process-document/&quot;&gt;stage 4 of the TC39 process&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Babel is fundamental in the process given its place in the ecosystem: it is significantly easier for a developer to update a &lt;code class=&quot;highlighter-rouge&quot;&gt;.babelrc&lt;/code&gt; file than a browser flag and much faster to write a Babel plugin than to implement the feature natively in the browser. This is the core of Babel.&lt;/p&gt;

&lt;p&gt;But the proposals process involves significant iteration: proposals can change in syntax or even get dropped. Because TC39 meets every 2 months, plugins should be updated as least as often as each change in stage so that users can be in sync.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Early feedback to the proposal champion and committee is extremely valuable although it is recommended to use Stage 0/1/2 features with caution.
Although companies like Facebook take advantage of these kinds of features, they have created codemods to allow easy change.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;There isn’t enough time or resources to maintain each plugin, especially when there are spec updates.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Some transforms are simply out of date such as decorators. Logan had to port the previous spec &lt;a href=&quot;https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy&quot;&gt;babel-plugin-transform-decorators-legacy&lt;/a&gt; for Babel 6 and we haven’t had anyone able to rewrite it for the updated spec.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/3473&quot;&gt;babel/babel#3473 - Async iteration proposal&lt;/a&gt; wasn’t merged for so long because we just didn’t have time to review it. By the time it was merged it had already moved
from stage 2 to stage 3.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;Next we’re going to be working with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/littledan&quot;&gt;Daniel Ehrenberg&lt;/a&gt; on &lt;a href=&quot;https://github.com/tc39/proposal-private-fields&quot;&gt;Private Fields (Stage 2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/wycats&quot;&gt;Yehuda Katz&lt;/a&gt; on &lt;a href=&quot;http://tc39.github.io/proposal-decorators/&quot;&gt;Class and Property Decorators (Stage 2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mathiasbynens.be/&quot;&gt;Mathias Bynens&lt;/a&gt; on &lt;a href=&quot;https://github.com/tc39/proposal-regexp-unicode-property-escapes&quot;&gt;Unicode Property Escapes in Regular Expressions (Stage 2)&lt;/a&gt; via &lt;a href=&quot;https://github.com/babel/babel/pull/3683&quot;&gt;babel/babel#3683&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Relevant Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Should we create a codemod for Stage X proposals at the same time as creating the actual transform?&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/4408&quot;&gt;Private Fields&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/2645&quot;&gt;Decorators Proposal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Check out &lt;a href=&quot;https://thefeedbackloop.xyz/tc39-november-2016-day-1/&quot;&gt;thefeedbackloop.xyz&lt;/a&gt; for more info on TC39!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;maintaining-other-ecosystem-plugins-jsxflow&quot;&gt;Maintaining other ecosystem plugins: JSX/Flow&lt;/h3&gt;

&lt;p&gt;Babel is vital to the &lt;a href=&quot;https://reactjs.org&quot;&gt;React&lt;/a&gt; and &lt;a href=&quot;https://flowtype.org/&quot;&gt;Flow&lt;/a&gt; ecosystems, and we work closely with the relevant teams at Facebook.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://babeljs.io/docs/plugins/#react&quot;&gt;React plugins&lt;/a&gt;, &lt;a href=&quot;https://babeljs.io/docs/plugins/preset-react/&quot;&gt;React preset&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;These cover the main &lt;code class=&quot;highlighter-rouge&quot;&gt;JSX&lt;/code&gt; transform, development plugins, and optimizations.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://babeljs.io/docs/plugins/transform-flow-strip-types&quot;&gt;Flow plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Relevant Issue Labels:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aissue%20is%3Aopen%20label%3A%22react%22%20&quot;&gt;babel/babel: React issues&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/facebook/react/labels/Component%3A%20Optimizing%20Compiler&quot;&gt;facebook/react: Optimizing Compiler&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;babel-preset-env-autoprefixer-for-babel&quot;&gt;&lt;a href=&quot;https://github.com/babel/babel-preset-env&quot;&gt;babel-preset-env&lt;/a&gt; (“autoprefixer” for Babel)&lt;/h3&gt;

&lt;p&gt;JavaScript compilation is a moving target: There are yearly updates to the spec, browser vendors are constantly updating to that spec, and users may drop support for earlier browsers. At first glance, there doesn’t seem to be a fixed target for what we should compile our JavaScript down to.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/588473/19214029/58deebce-8d48-11e6-9004-ee3fbcb75d8b.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The &lt;a href=&quot;https://github.com/kangax/&quot;&gt;compat-table&lt;/a&gt; is updated constantly and is used for this preset.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is where &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-env&lt;/code&gt; comes in: it’s a Babel preset that automatically determines the correct Babel plugins to use based on the provided environments.&lt;/p&gt;

&lt;p&gt;Its goal is both simplicity in use and efficiency in output: you only need to worry about your target environments to be able to take advantage of native code. The preset decides for you the required plugins.&lt;/p&gt;

&lt;h4 id=&quot;some-example-configs&quot;&gt;Some example configs&lt;/h4&gt;

&lt;p&gt;Targeting Chrome 55 + last 2 versions of other browsers via &lt;a href=&quot;https://github.com/ai/browserslist&quot;&gt;browserslist&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;presets&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;env&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;targets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;chrome&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;55&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;browsers&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;last 2 versions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Targeting the current Node.js version (uses &lt;code class=&quot;highlighter-rouge&quot;&gt;process.versions.node&lt;/code&gt;)&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;presets&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;env&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;targets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;node&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;current&quot;&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Chrome 55 &lt;code class=&quot;highlighter-rouge&quot;&gt;useBuiltIns&lt;/code&gt; + webpack 2&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;presets&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;env&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;targets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;chrome&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;55&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;modules&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;useBuiltIns&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;In&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;babel-polyfill&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Out (different based on environment)&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;core-js/modules/es7.string.pad-start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;core-js/modules/es7.string.pad-end&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Relevant Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Next big feature: apply the same idea of preset-env to polyfills as well &lt;a href=&quot;https://github.com/babel/babel-preset-env/issues/20&quot;&gt;babel/babel-preset-env#20&lt;/a&gt; with corresponding PR in &lt;a href=&quot;https://github.com/babel/babel-preset-env/pull/56&quot;&gt;babel/babel-preset-env#56&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel-preset-env/issues/26&quot;&gt;Using browserslist&lt;/a&gt; and &lt;a href=&quot;https://github.com/babel/babel-preset-env/pull/51&quot;&gt;PR&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ai/browserslist/issues/75&quot;&gt;“Node.js versions support” in Browserlist&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kangax/compat-table/issues/711&quot;&gt;Publish runnable tests &amp;amp; browser data to npm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;linting-via-babel-eslint&quot;&gt;Linting via &lt;a href=&quot;https://github.com/babel/babel-eslint&quot;&gt;babel-eslint&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; alt=&quot;example of eslint&quot; src=&quot;/images/blog/2016-12-07-the-state-of-babel/eslint.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;ESLint doesn’t support new language features until they reach Stage 4 of the proposals process. For this reason we maintain &lt;a href=&quot;https://github.com/babel/babel-eslint&quot;&gt;babel-eslint&lt;/a&gt; (a custom ESLint parser) so you can continue to lint JavaScript with experimental syntax.&lt;/p&gt;

&lt;p&gt;This project was one of the hardest projects to work on: because it is just a compatibility layer between Babel and ESLint there is inherently a constant need for updates when either projects update and a high risk of unexpected changes due to monkey-patching. It was unfortunate to get issues like &lt;a href=&quot;https://github.com/babel/babel-eslint/issues/243&quot;&gt;babel/babel-eslint#243&lt;/a&gt; or &lt;a href=&quot;https://github.com/babel/babel-eslint/issues/267&quot;&gt;babel/babel-eslint#267&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To that end, we’d like to lessen the maintenance burden of this project by improving our scope and traversal interop with ESLint. It might even be interesting to be able to write ESLint rules using babel APIs or vice versa?&lt;/p&gt;

&lt;p&gt;Relevant Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/1829&quot;&gt;Previous Linting APIs Discussion&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel-eslint/issues/62&quot;&gt;Running smoke tests on ESLint&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel-eslint/issues/88&quot;&gt;babel/babel-eslint#88&lt;/a&gt; is still relevant now&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;minification&quot;&gt;Minification&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babili&quot;&gt;Babili&lt;/a&gt; is our new Babel-powered minifier, enabling you to produce minified code while targeting the latest browsers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Mangler&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;program&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;program&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;program&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Mangler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Out&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// ES2015 code -&amp;gt; Babili -&amp;gt; Minified ES2015 Code&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;program&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Check out our &lt;a href=&quot;http://babeljs.io/blog/2016/08/30/babili&quot;&gt;blog post&lt;/a&gt; for more info.&lt;/p&gt;

&lt;p&gt;Since it was recently released, we’re looking for some new contributors! There’s a lot of small bugs and things that could be improved for those looking for a new project to help out with!&lt;/p&gt;

&lt;h3 id=&quot;codemods--refactoring--eslint---fix&quot;&gt;Codemods / Refactoring / &lt;code class=&quot;highlighter-rouge&quot;&gt;eslint --fix&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;A &lt;code class=&quot;highlighter-rouge&quot;&gt;codemod&lt;/code&gt; is a tool-assisted code modification; a fancy find-and-replace.&lt;/p&gt;

&lt;p&gt;If you wanted to change &lt;code class=&quot;highlighter-rouge&quot;&gt;merge({})&lt;/code&gt; to &lt;code class=&quot;highlighter-rouge&quot;&gt;Object.assign({})&lt;/code&gt; (and maybe later &lt;a href=&quot;https://github.com/sebmarkbage/ecmascript-rest-spread&quot;&gt;object rest&lt;/a&gt;) you might do a regex replace. But you don’t want to replace the other parts of the code that also might be called &lt;code class=&quot;highlighter-rouge&quot;&gt;merge&lt;/code&gt; such as imports/exports, strings, comments, and local variables. To do it safely you’ll want something more powerful that only changes the specific code you need.&lt;/p&gt;

&lt;p&gt;Although Babel already handles transforming code into other code, it doesn’t really care about the styling of the input code as a compiler. After using Babel with its default options to do a codemod, &lt;code class=&quot;highlighter-rouge&quot;&gt;git diff&lt;/code&gt; looks really messy.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href=&quot;https://github.com/benjamn/recast&quot;&gt;Recast&lt;/a&gt;: a tool that preserves the formatting of unmodified code while also pretty-printing any new AST nodes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/588473/16584612/04a82078-428b-11e6-9f79-a665eef848ea.gif&quot; alt=&quot;recast&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In the screenshot above, the top-left pane is the input code and the bottom-right pane is the output code after the babel plugin is run. In this case it’s preserving the whitespace of the input code when possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By passing in &lt;a href=&quot;https://github.com/benjamn/recast&quot;&gt;Recast&lt;/a&gt; in the options, Babel can power the future of codemods.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;.babelrc&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;parserOpts&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;parser&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;recast&quot;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;generatorOpts&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;generator&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;recast&quot;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Run the relevant Babel transform(s) on the source code and overwrite it:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;babel src -d src
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This feature was just made possible so we’re looking forward to making it easier to use and seeing the transformations it can enable. Check out the &lt;a href=&quot;https://babeljs.io/blog/2016/09/28/6.16.0#-new-feature&quot;&gt;6.16.0 blog post&lt;/a&gt; for more info!&lt;/p&gt;

&lt;p&gt;Other relevant projects: &lt;a href=&quot;https://github.com/facebook/jscodeshift&quot;&gt;JSCodeshift&lt;/a&gt;, &lt;a href=&quot;https://github.com/cpojer/js-codemod&quot;&gt;js-codemod&lt;/a&gt;, &lt;a href=&quot;https://github.com/lebab/lebab&quot;&gt;Lebab&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Relevant Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lebab/lebab/issues/138&quot;&gt;Rewriting Lebab as a Babel transformer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/facebook/jscodeshift/issues/168&quot;&gt;Babel integration with jscodeshift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;code-coverage--instrumentation&quot;&gt;Code Coverage / Instrumentation&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://istanbul.js.org/assets/browser.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We want to support tools like &lt;a href=&quot;https://github.com/istanbuljs/nyc&quot;&gt;nyc&lt;/a&gt; and &lt;a href=&quot;https://github.com/istanbuljs/babel-plugin-istanbul&quot;&gt;babel-plugin-istanbul&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;plugin-ecosystem&quot;&gt;Plugin Ecosystem&lt;/h3&gt;

&lt;p&gt;Thanks to our vibrant community, new plugins are constantly being created: whether it be a new way to write your &lt;a href=&quot;https://github.com/zeit/styled-jsx&quot;&gt;css in jsx&lt;/a&gt; or &lt;a href=&quot;https://github.com/speedskater/babel-plugin-rewire&quot;&gt;rewire your tests&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Currently there are &amp;gt; 1200 &lt;a href=&quot;https://www.npmjs.com/search?q=babel-plugin-&quot;&gt;babel-plugins on npm&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We’ve had some interesting discussions on how we can grow and support the plugin ecosystem. We could try to watch all the repos but that is obviously overwhelming.&lt;/p&gt;

&lt;p&gt;It might be interesting to create some bots to automate a few tasks: create specific Babel plugins/ESLint rules for babel-plugins, write codemods to update API changes, and integrate plugins into our smoke test.&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;&lt;a href=&quot;https://twitter.com/jaredforsyth&quot;&gt;@jaredforsyth&lt;/a&gt; &lt;a href=&quot;https://twitter.com/reactjs&quot;&gt;@reactjs&lt;/a&gt; My five minute POC ☺️ &lt;a href=&quot;https://t.co/v74UFHsSJG&quot;&gt;https://t.co/v74UFHsSJG&lt;/a&gt; &lt;a href=&quot;https://t.co/B3YwVWkH5g&quot;&gt;pic.twitter.com/B3YwVWkH5g&lt;/a&gt;&lt;/p&gt;&amp;mdash; Henry Zhu (@left_pad) &lt;a href=&quot;https://twitter.com/left_pad/status/805971589430968320&quot;&gt;December 6, 2016&lt;/a&gt;&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Should we create a newsletter for new/useful plugins?&lt;/li&gt;
  &lt;li&gt;How can we teach people about plugins and how to write them?&lt;/li&gt;
  &lt;li&gt;How can we make &lt;a href=&quot;http://astexplorer.net/&quot;&gt;ASTExplorer&lt;/a&gt; better?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;documentation-this-website&quot;&gt;Documentation (this website!)&lt;/h3&gt;

&lt;p&gt;Docs contributions have definitely been lacking in the &lt;a href=&quot;https://github.com/babel/babel.github.io/graphs/contributors&quot;&gt;last year&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However just recently we’ve done a lot of awesome stuff:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Daniel15&quot;&gt;@Daniel15&lt;/a&gt; has been maintaining &lt;a href=&quot;https://github.com/babel/babel-standalone&quot;&gt;babel-standalone&lt;/a&gt; which we use in the REPL and has some automation when new releases get out.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/maxiloc&quot;&gt;@maxiloc&lt;/a&gt; added search functionality via Algolia via &lt;a href=&quot;https://github.com/babel/babel.github.io/pull/977&quot;&gt;#977&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ve also added new collaborators:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/STRML&quot;&gt;@STRML&lt;/a&gt;: Added Discourse to all github pages via &lt;a href=&quot;https://github.com/babel/babel.github.io/pull/875&quot;&gt;#875&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/xtuc&quot;&gt;@xtuc&lt;/a&gt;: Added support for reading the README from the babel repo so we don’t have to sync 2 copies of docs via &lt;a href=&quot;https://github.com/babel/babel.github.io/pull/990&quot;&gt;#990&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fredericmarx&quot;&gt;@fredericmarx&lt;/a&gt;: Added support for a copy to clipboard button for code snippets via &lt;a href=&quot;https://github.com/babel/babel.github.io/pull/998&quot;&gt;#998&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/seedofjoy&quot;&gt;@seedofjoy&lt;/a&gt;: Added a resize ability for the REPL via &lt;a href=&quot;https://github.com/babel/babel.github.io/pull/1003&quot;&gt;#1003&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some Ideas&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;All plugins should have examples. Can also embed &lt;a href=&quot;https://runkit.com/home&quot;&gt;RunKit&lt;/a&gt; or the REPL.&lt;/li&gt;
  &lt;li&gt;Update FAQ with common errors&lt;/li&gt;
  &lt;li&gt;API docs / make &lt;a href=&quot;https://github.com/thejameskyle/babel-handbook&quot;&gt;babel-handbook&lt;/a&gt; better&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Relevant Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel.github.io/issues/930&quot;&gt;Reorganizing the docs layout&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel.github.io/issues/831&quot;&gt;Showcase community plugins&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel.github.io/issues/27&quot;&gt;Adding a resources page&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel.github.io/issues/994&quot;&gt;Learn ES2015: teach others about ES2015+&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel.github.io/issues/59&quot;&gt;REPL: adding example dropdowns&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel.github.io/issues/92&quot;&gt;REPL: supporting all options&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel.github.io/issues/858&quot;&gt;REPL: allow the REPL to import any community plugin from npm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fkling/astexplorer/issues/70&quot;&gt;REPL: Use ASTexplorer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fkling/astexplorer/issues/166&quot;&gt;ASTexplorer: Real Time collaboration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-future&quot;&gt;The Future&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;NOTE: Everything below can be changed or dropped. Some might be already in the works and others are just suggestions that need a proper discussion/champion.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Priority should be determined on what the community needs: not because it would be nice to have.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;plugin-api-changes&quot;&gt;&lt;a href=&quot;https://github.com/babel/notes/blob/master/2016-08/august-01.md#potential-api-changes-for-traversal&quot;&gt;Plugin API Changes&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;There is a lot of confusion around how plugins/presets interact regarding ordering. This results in bugs and issues with the config which require users to place plugins before/after others in a non-intuitive way.&lt;/p&gt;

&lt;p&gt;We’re currently discussing API changes that could reduce the confusion. However, since this is a fundamental change to the core of Babel, it might take a while to figure out the best approach.&lt;/p&gt;

&lt;h3 id=&quot;versioning&quot;&gt;Versioning&lt;/h3&gt;

&lt;p&gt;Since Babel 6 we’ve used a &lt;a href=&quot;https://github.com/lerna/lerna#how-it-works&quot;&gt;“fixed” mode of versioning&lt;/a&gt; via Lerna. This is what allows us to release multiple packages at the same time all under the same version (if that package changes). This is nice because you don’t have to manually set a version for each package but everything moves together. The only time this could cause an error is when one on the packages makes a breaking change: then every package also will bump major versions.&lt;/p&gt;

&lt;p&gt;This is explained more in &lt;a href=&quot;https://github.com/babel/notes/blob/master/2016-07/july-31.md#future-of-babels-release-process-and-its-ecosystem&quot;&gt;babel/notes&lt;/a&gt; but we still need to figure out the best plan of action for the project.&lt;/p&gt;

&lt;p&gt;What happens when we need to update a Stage 0 spec to Stage 1 and it’s a breaking change to the parser? Are we just going to bump the major version, wait to batch some changes up, or figure out how to do it via multiple versions of plugins?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/4950&quot;&gt;Discussion Issue&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;changing-the-mindset-around-stage-x-presets&quot;&gt;Changing the Mindset Around Stage X Presets&lt;/h4&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;My rule of thumb on how I decide what future features to transpile:&lt;br /&gt;&amp;quot;Could I reasonably codemod this if it changes?&amp;quot;&lt;br /&gt;Don&amp;#39;t do it otherwise.&lt;/p&gt;&amp;mdash; Kent C. Dodds (@kentcdodds) &lt;a href=&quot;https://twitter.com/kentcdodds/status/803815749416456196&quot;&gt;November 30, 2016&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Relevant Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/4914&quot;&gt;Should we rename the stage x presets to explain more that they are “experimental”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;speed&quot;&gt;Speed&lt;/h4&gt;

&lt;p&gt;Performance is a feature! Other things can be more of a priority at times (bug fixes, spec compliancy, etc) but it’s still important in a few different aspects.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How can we reduce the size/time of install, especially for a project with multiple packages? (this is helped by &lt;a href=&quot;https://yarnpkg.com&quot;&gt;yarn&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;How can we parse faster?&lt;/li&gt;
  &lt;li&gt;How can we make faster plugins (and measure them individually)?&lt;/li&gt;
  &lt;li&gt;How can we generate the transformed code faster?&lt;/li&gt;
  &lt;li&gt;How can we generate code that runs fast in the browser (https://fhinkel.github.io/six-speed/)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you to read the compiled output and see issues, then report it and ask for help in making a PR!&lt;/p&gt;

&lt;p&gt;Previous Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/1486&quot;&gt;Speeeeed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/3283&quot;&gt;Amazing PR to improve babel-generator by @gzzhanghao&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;possible-typescript-support&quot;&gt;Possible TypeScript Support?&lt;/h3&gt;

&lt;p&gt;Maybe Babel could learn to understand TypeScript syntax (like we do with Flow)? We could add a plugin to strip TypeScript types for better interop.&lt;/p&gt;

&lt;p&gt;This would mean parsing TypeScript specific syntax and stripping it out. However TypeScript does have non-type syntax, so for things like &lt;code class=&quot;highlighter-rouge&quot;&gt;enum&lt;/code&gt; we will would have to discuss more.&lt;/p&gt;

&lt;h3 id=&quot;use-type-information&quot;&gt;Use Type Information?&lt;/h3&gt;

&lt;p&gt;Integrate with a type system such as Flow/TypeScript to make optimizations. This just means that Babel should be able to gain the knowledge through those tools that an identifier &lt;code class=&quot;highlighter-rouge&quot;&gt;arr&lt;/code&gt; is actually an &lt;code class=&quot;highlighter-rouge&quot;&gt;Array&lt;/code&gt; or not.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There are a few plugins that actually do type checking: &lt;a href=&quot;https://github.com/codemix/babel-plugin-typecheck&quot;&gt;babel-plugin-typecheck&lt;/a&gt; and &lt;a href=&quot;https://github.com/gcanti/babel-plugin-tcomb&quot;&gt;babel-plugin-tcomb&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/653&quot;&gt;Previous Issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;taking-in-a-dependency-graph--operate-multi-file&quot;&gt;Taking in a Dependency Graph / Operate Multi-file?&lt;/h3&gt;

&lt;p&gt;Then we could integrate with other tools like Webpack better. This would allow cross file transformations or whole codebase optimizations. The main reason for this would be for the minifier (being able to remove properties based on checking the usage across the whole application) or for example providing errors for missing/invalid import/exports.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/4949&quot;&gt;Discussion Issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;parser-errors&quot;&gt;Parser Errors&lt;/h3&gt;

&lt;p&gt;Better error messages from the parser like in &lt;a href=&quot;http://elm-lang.org/blog/compiler-errors-for-humans&quot;&gt;Compiler Errors for Humans&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;babel-eslint@7.1.1: now adds the code frame when there&amp;#39;s a parser error! &lt;a href=&quot;https://t.co/yoxRpGXq5E&quot;&gt;pic.twitter.com/yoxRpGXq5E&lt;/a&gt;&lt;/p&gt;&amp;mdash; Henry Zhu (@left_pad) &lt;a href=&quot;https://twitter.com/left_pad/status/799388723896946692&quot;&gt;November 17, 2016&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;It is obvious that we all want to see helpful errors!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We can do better inference/guessing on user intention to prevent vague errors. Let us know in what cases that happens!&lt;/p&gt;

&lt;p&gt;Relevant Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babylon/pull/125&quot;&gt;#125 Better message when using &lt;code class=&quot;highlighter-rouge&quot;&gt;await&lt;/code&gt; in a non-async function&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babylon/issues/169&quot;&gt;#169 Better message for a syntax error when a plugin isn’t enabled&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babylon/issues/212&quot;&gt;#212 Better message for using super when not using a non-object method&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;babel-init&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel-init&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Basically a way to set up Babel more easily like &lt;a href=&quot;https://github.com/facebookincubator/create-react-app&quot;&gt;create-react-app&lt;/a&gt; does.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Set up a &lt;code class=&quot;highlighter-rouge&quot;&gt;.babelrc&lt;/code&gt; from scratch, prompt with questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Possible Idea:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ask about target environments (browsers, node) and pass to &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-preset-env&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Ask about experimental features (add specific plugins)&lt;/li&gt;
  &lt;li&gt;Update the &lt;code class=&quot;highlighter-rouge&quot;&gt;babel&lt;/code&gt; npm package to do something again: Make it the default/opt-in/opinionated &lt;code class=&quot;highlighter-rouge&quot;&gt;babel&lt;/code&gt; that Babel 5 was. It can default to using &lt;code class=&quot;highlighter-rouge&quot;&gt;env&lt;/code&gt; and say the &lt;code class=&quot;highlighter-rouge&quot;&gt;latest 2 browsers&lt;/code&gt; (without any config).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Relevant Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/3977&quot;&gt;CLI (babel init) command&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/4951&quot;&gt;Repurpose &lt;code class=&quot;highlighter-rouge&quot;&gt;babel&lt;/code&gt; npm package&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;run-tc39test262&quot;&gt;Run &lt;a href=&quot;https://github.com/tc39/test262&quot;&gt;tc39/test262&lt;/a&gt;&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;test262 tests conformance to the continually maintained draft future ECMAScript standard found at &lt;a href=&quot;http://tc39.github.io/ecma262/&quot;&gt;tc39.github.io/ecma262&lt;/a&gt;, together with any Stage 3 or later TC39 proposals. It is maintained by Tom Care (&lt;a href=&quot;https://github.com/tcare&quot;&gt;@tcare&lt;/a&gt;) with significant contributions from many in the ECMAScript community.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Running the official spec tests against Babel can make sure we comply to the spec or at least know when we don’t. We’ll want to figure out how to do filtering on things we can’t compile (proxy, TCO, etc) and set up an easy way to check failing tests and file issues and PRs for them.&lt;/p&gt;

&lt;p&gt;Relevant Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kangax/compat-table/issues/830&quot;&gt;Adding test262 to compat-table&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bakkot/test262-web-runner/&quot;&gt;Running test262 on the web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;smokeintegration-tests&quot;&gt;Smoke/Integration Tests&lt;/h3&gt;

&lt;p&gt;It would be useful to either have a reverse &lt;a href=&quot;https://greenkeeper.io&quot;&gt;Greenkeeper&lt;/a&gt; or to run tests with master branch of Babel so that we can catch any major regressions before any release (node has the &lt;a href=&quot;https://github.com/nodejs/citgm&quot;&gt;citgm project&lt;/a&gt; for this). In theory we would want to take the biggest open source projects that use Babel and run their tests.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/motiz88/babel-smoke-tests&quot;&gt;motiz88/babel-smoke-tests&lt;/a&gt; is a good start! It would also be great if there’s already something like this out there!&lt;/p&gt;

&lt;h3 id=&quot;program-analysis&quot;&gt;Program Analysis&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Program_slicing&quot;&gt;Program Slicing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was a great talk by &lt;a href=&quot;https://twitter.com/inconshreveable&quot;&gt;Alan Shreve&lt;/a&gt; called &lt;a href=&quot;https://www.youtube.com/watch?v=dSqLt8BgbRQ&quot;&gt;“Idealized Commit Logs: Code Simplification via Program Slicing”&lt;/a&gt; which inspired @kentcdodds to try it out in JavaScript via &lt;a href=&quot;http://slides.com/kentcdodds/faster-javascript#/&quot;&gt;slice-js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The general idea is that we have a lot of tools to help us write code but not a lot for helping us understand/read code. You can think of code-slicing as a form of targeted dead-code elimination.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/3189688/Screen_Shot_2016-11-02_at_11.46.25_PM.png&quot; alt=&quot;slice-js&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A program slice basically cuts away from the source code the code that isn’t used for a test case that you run. If there are lots of if statements and loops that aren’t run during your usecase then it won’t show up in the program slice.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Semantic (AST aware) Grepping tool?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Similar to &lt;a href=&quot;http://www.graspjs.com/&quot;&gt;graspjs&lt;/a&gt;, I think it would be interesting to be able to do a find-replace with the input being an AST. It would allow us to create other analysis tools: the ability to find all IIFE’s in our code, the number of times a method is called, or even how many Classes we have in our codebase.&lt;/p&gt;

&lt;h3 id=&quot;babel---settings&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;babel --settings&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;This command would print out all info (also when erroring). It would also include performance metrics on how long each plugin takes.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/2960&quot;&gt;Discussion Issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;parser-unity&quot;&gt;Parser Unity&lt;/h3&gt;

&lt;p&gt;There have also been some discussions around parser/AST unity, in &lt;a href=&quot;https://github.com/TheLarkInn/js-parser-discussions&quot;&gt;TheLarkInn/js-parser-discussions&lt;/a&gt; and previously with &lt;a href=&quot;https://github.com/estree/estree&quot;&gt;ESTree&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Unfortunately with Babel 6, we have “forked” and have a few differences in &lt;a href=&quot;https://github.com/babel/babylon#output&quot;&gt;our AST&lt;/a&gt; than ESTree. Babel aims to support stage x features while other parsers may only want to support stage 4 features. We all might prioritize certain things more than others regarding spec compliancy, performance, stage x features, error messages, extensibility, releases, etc. However it’s important for us to be open to breaking changes that may lead to better interop and a better community.&lt;/p&gt;

&lt;h3 id=&quot;sweetjs-interop&quot;&gt;Sweet.js Interop?&lt;/h3&gt;

&lt;p&gt;Previous &lt;a href=&quot;https://github.com/babel/babel/issues/568#issuecomment-71716260&quot;&gt;issue&lt;/a&gt;. Maybe we can just figure out how to have better interop instead?&lt;/p&gt;

&lt;h3 id=&quot;nodejs-support&quot;&gt;Node.js Support&lt;/h3&gt;

&lt;p&gt;Should we drop support according to the EOL of Node.js versions? How long should we wait to do this in general?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Do we want to continue to support our users who haven’t updated yet?&lt;/li&gt;
  &lt;li&gt;There are certain transforms/PRs that are blocked by this, due to tools that have also dropped older versions.&lt;/li&gt;
  &lt;li&gt;Many other build-time projects like ESLint have done so already.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Are we going to make a major version just for this or plan out other changes in addition?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/4315&quot;&gt;Discussion Issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;babel-5-to-6-transition--upgrade-paths&quot;&gt;Babel 5 to 6 transition / Upgrade Paths&lt;/h3&gt;

&lt;p&gt;Babel 6 was really difficult for the community to upgrade to. The initial release was a bit rushed. Although we did have a &lt;a href=&quot;http://babeljs.io/blog/2015/10/29/6.0.0&quot;&gt;6.0 release post&lt;/a&gt;, a &lt;a href=&quot;http://babeljs.io/blog/2015/10/31/setting-up-babel-6&quot;&gt;setup guide&lt;/a&gt; soon after, a even a &lt;a href=&quot;http://babeljs.io/blog/2015/11/03/babel-doctor&quot;&gt;tool (now deprecated)&lt;/a&gt; to help with the transition it was still difficult for users to understand the changes.&lt;/p&gt;

&lt;p&gt;There are still &lt;a href=&quot;https://libraries.io/npm/babel-core/usage&quot;&gt;a good amount of users on Babel 5&lt;/a&gt; that we don’t want to leave behind. What can we do to help them upgrade? What steps do we need to take in the future to make sure the same thing doesn’t happen with a Babel 7? Are there other projects/communities we should be reaching out to and helping?&lt;/p&gt;

&lt;p&gt;Relevant Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ember-cli/ember-cli/issues/5015&quot;&gt;ember-cli Babel 6.0 Issue&lt;/a&gt; needs help!&lt;/li&gt;
  &lt;li&gt;Any others?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;what-else&quot;&gt;What else?&lt;/h3&gt;

&lt;p&gt;Anything else not already brought up here? Please send us a tweet &lt;a href=&quot;https://twitter.com/babeljs&quot;&gt;@babeljs&lt;/a&gt;, a message on our slack (join at &lt;a href=&quot;https://slack.babeljs.io&quot;&gt;https://slack.babeljs.io/&lt;/a&gt;, comment on this post, or create an discussion issue in our repo!)&lt;/p&gt;

&lt;p&gt;Are there projects or communities we should partner with more? How can we make the contributing experience more welcome? What can we do to make the development process more transparent?&lt;/p&gt;

&lt;h2 id=&quot;community&quot;&gt;Community&lt;/h2&gt;

&lt;p&gt;Old Issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/1347&quot;&gt;Call for Contributors!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/issues/1888&quot;&gt;Being Prepared for Getting Hit by a Bus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You might think that as &lt;a href=&quot;https://npm-stat.com/charts.html?package=babel-core&amp;amp;from=2015-02-07&amp;amp;to=2016-12-07&quot;&gt;a project gets more widely used&lt;/a&gt; that more people show up to help out. But like most OSS projects that aren’t backed by a company, there is a constant issue with maintenance and sustainability; people get burned out, move on to other cool projects, or get busy with work/family/etc.&lt;/p&gt;

&lt;p&gt;Like James describes in &lt;a href=&quot;https://medium.com/@thejameskyle/dear-javascript-7e14ffcae36c&quot;&gt;Dear Javascript&lt;/a&gt;, the current Babel team is pretty small.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Babel isn’t a company, a special team at Facebook, or corporate-funded OSS project. It’s a community-driven effort currently held up by a few people and we want that to grow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So if you’re interested in contributing to a tool you use, we’re hoping this could be the one!&lt;/p&gt;

&lt;h3 id=&quot;what-issues-should-i-look-at-or-contribute-to&quot;&gt;What issues should I look at or contribute to?&lt;/h3&gt;

&lt;p&gt;Many of our projects have both &lt;a href=&quot;https://github.com/babel/babel/labels/beginner-friendly&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;beginner-friendly&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://github.com/babel/babel/labels/help-wanted&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;help-wanted&lt;/code&gt;&lt;/a&gt; labels. You can also check out &lt;a href=&quot;https://github.com/babel/babel/labels/discussion&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;discussion&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;team&quot;&gt;Team&lt;/h3&gt;

&lt;p&gt;Our core team is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hzoo&quot;&gt;Henry Zhu, @hzoo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/loganfsmyth&quot;&gt;Logan Smyth, @loganfsmyth&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/danez&quot;&gt;Daniel Tschinder, @danez&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And just in the last 3 months a lot more collaborators:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/motiz88&quot;&gt;Moti Zilberman, @motiz88&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/danharper&quot;&gt;Dan Harper, @danharper&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kaicataldo&quot;&gt;Kai Cataldo, @kaicataldo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/DrewML&quot;&gt;Andrew Levine, @drewml&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/existentialism&quot;&gt;Brian Ng, @existentialism&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Kovensky&quot;&gt;Diogo Franco, @kovensky&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Babili core team:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kangax&quot;&gt;Juriy Zaytsev, @kangax&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/boopathi&quot;&gt;Boopathi Rajaa, @boopathi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As mentioned above we have a lot of website collaborators:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/daniel15&quot;&gt;Daniel Lo Nigro, @daniel15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/STRML&quot;&gt;Samuel Reed, @STRML&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/xtuc&quot;&gt;Sven SAULEAU, @xtuc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fredericmarx&quot;&gt;Frederic Marx, @fredericmarx&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/seedofjoy&quot;&gt;Igor Mozharovsky, @seedofjoy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inactive but still a resource:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kittens&quot;&gt;Sebastian McKenzie, @kittens&lt;/a&gt; - Yarn&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/thejameskyle&quot;&gt;James Kyle, @thejameskyle&lt;/a&gt; - Flow/Yarn&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/amasad&quot;&gt;Amjad Masad, @amasad&lt;/a&gt; - &lt;a href=&quot;https://repl.it/&quot;&gt;repl.it&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jmm&quot;&gt;Jesse McCarthy, @jmm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;how-can-i-contact-the-team&quot;&gt;How can I contact the team?&lt;/h3&gt;

&lt;h4 id=&quot;github&quot;&gt;GitHub&lt;/h4&gt;

&lt;p&gt;For bug reports/PRs you can check our &lt;a href=&quot;https://github.com/babel/&quot;&gt;repositories&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;twitter&quot;&gt;Twitter&lt;/h4&gt;

&lt;p&gt;You can ping us on Twitter with &lt;a href=&quot;https://twitter.com/babeljs&quot;&gt;@babeljs&lt;/a&gt; - or mention us individually.&lt;/p&gt;

&lt;p&gt;I myself joined Twitter to be able to talk with users and help out. Being able to post new features and changelogs is really useful and can help give us feedback!&lt;/p&gt;

&lt;h4 id=&quot;slack&quot;&gt;Slack&lt;/h4&gt;

&lt;p&gt;We have a relatively active community on there!&lt;/p&gt;

&lt;p&gt;You’ll find a lot of awesome community members willing to help such as &lt;a href=&quot;https://github.com/ljharb&quot;&gt;Jordan Harband, @ljharb&lt;/a&gt;, &lt;a href=&quot;https://github.com/kovensky&quot;&gt;Diogo Franco, @kovensky&lt;/a&gt;, &lt;a href=&quot;https://github.com/taion&quot;&gt;Jimmy Jia, @taion&lt;/a&gt;, &lt;a href=&quot;https://github.com/zloirock&quot;&gt;Denis Pushkarev, @zloirock&lt;/a&gt; and more!&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;If you haven&amp;#39;t joined our slack yet: please join at &lt;a href=&quot;https://t.co/h3m7l9jkrg&quot;&gt;https://t.co/h3m7l9jkrg&lt;/a&gt;. Check out development/plugins to see what&amp;#39;s up! &lt;a href=&quot;https://t.co/f1CKaV8G6G&quot;&gt;pic.twitter.com/f1CKaV8G6G&lt;/a&gt;&lt;/p&gt;&amp;mdash; Babel (@babeljs) &lt;a href=&quot;https://twitter.com/babeljs/status/793223871080136705&quot;&gt;October 31, 2016&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;If you just have questions join &lt;a href=&quot;https://babeljs.slack.com/messages/discussion/&quot;&gt;#discussion&lt;/a&gt; and if you want to help or listen in check out &lt;a href=&quot;https://babeljs.slack.com/messages/development/&quot;&gt;#development&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We try not to discuss in private if there’s no need to: I myself usually post the issues/PRs I’m working on for people to review and talk about.&lt;/p&gt;

&lt;h4 id=&quot;other&quot;&gt;Other&lt;/h4&gt;

&lt;p&gt;How else can we interact with the community? Should we go and start meetups, go to conferences, or manage hackathons?&lt;/p&gt;

&lt;p&gt;How can we make Babel sustainable? Should we setup a &lt;a href=&quot;https://opencollective.com/opensource&quot;&gt;Open Collective&lt;/a&gt; or seek a foundation? Should we pay for a &lt;a href=&quot;https://medium.com/open-collective/wanted-a-product-manager-for-open-source-projects-bf19bcd680f5#.awwsg684n&quot;&gt;project manager&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Let us know your thoughts! What do you want out of Babel?&lt;/p&gt;

&lt;hr /&gt;

&lt;blockquote&gt;
  &lt;p&gt;See typos/issues? Please send a PR or comment on &lt;a href=&quot;https://github.com/babel/babel.github.io/pull/1014&quot;&gt;babel/babel.github.io#1014&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If anything we want to let you know that many of us got our start with Babel in order to learn JavaScript rather than helping because we already knew it. Personally, I knew nothing about compilers and had just learned what ES6 was when I found the project. I got here because of a tiny bit of curiosity and &lt;a href=&quot;https://medium.com/@hzoo/ossthanks-some-thoughts-d0267706c2c6#.lcga2ggrw&quot;&gt;some encouragement from a lot of people&lt;/a&gt;. I want to carry that forward and hope that we can all succeed together.&lt;/p&gt;

&lt;p&gt;Thanks so much for reading!&lt;/p&gt;

&lt;p&gt;Henry Zhu (&lt;a href=&quot;https://github.com/hzoo&quot;&gt;@hzoo&lt;/a&gt;) (&lt;a href=&quot;https://twitter.com/left_pad&quot;&gt;@left_pad&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Thanks to way too many folks for their review and thoughts: @DrewML, @mrjoelkemp, @kentcdodds, @existentialism, @jdalton, @gaearon, @nolanlawson, @jayphelps, @montogeek, @TheLarkInn, @jasonLaster, @benjamn, @addyosmani, @Daniel15, @loganfsmyth, @gr2m, @mathiasbynens, @chicoxyzzy, @bvaughn, @bcoe.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        <pubDate>Wed, 07 Dec 2016 14:30:00 +0000</pubDate>
        <link>https://babeljs.io/blog/2016/12/07/the-state-of-babel</link>
        <guid isPermaLink="true">https://babeljs.io/blog/2016/12/07/the-state-of-babel</guid>
        
        
        <category>announcements</category>
        
      </item>
    
      <item>
        <title>6.19.0 Released</title>
        <description>&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;object-rest-spread&lt;/code&gt; works standalone and a few new plugin options APIs were added!&lt;/p&gt;

&lt;h2 id=&quot;v6190-summary-2016-11-16&quot;&gt;v6.19.0 Summary (2016-11-16)&lt;/h2&gt;

&lt;h2 id=&quot;-new-feature&quot;&gt;🚀 New Feature&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/4755&quot;&gt;#4755&lt;/a&gt; Make &lt;code class=&quot;highlighter-rouge&quot;&gt;object-rest-spread&lt;/code&gt; work as an independent plugin. (&lt;a href=&quot;https://github.com/hzoo&quot;&gt;@hzoo&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This rewrite fixes a long standing issue where the &lt;code class=&quot;highlighter-rouge&quot;&gt;object-rest-spread&lt;/code&gt; plugin was depending on 2 other plugins to compile &lt;code class=&quot;highlighter-rouge&quot;&gt;RestProperty&lt;/code&gt; properly.&lt;/p&gt;

&lt;p&gt;This fix important given the assumption that plugins should be independent and is vital for the use of &lt;a href=&quot;https://github.com/babel/babel-preset-env/&quot;&gt;babel-preset-env&lt;/a&gt; since new environments support destructuring natively.&lt;/p&gt;

&lt;p&gt;In&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Out&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// remove the `...b`&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_objectWithoutProperties&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// use the helper&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;It’s interesting to see all the places where you can destructure!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;RestProperty&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Parameters&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// VariableDeclaration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// ExportNamedDeclaration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// CatchClause&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// AssignmentExpression&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[])&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// ForXStatement&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;SpreadProperty&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// ObjectExpression&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/4544&quot;&gt;#4544&lt;/a&gt; Add the &lt;code class=&quot;highlighter-rouge&quot;&gt;spec&lt;/code&gt; option to &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;transform-class-properties&quot;&lt;/code&gt;. (&lt;a href=&quot;https://github.com/motiz88&quot;&gt;@motiz88&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Class properties will use &lt;code class=&quot;highlighter-rouge&quot;&gt;Object.defineProperty&lt;/code&gt; instead of a simple &lt;code class=&quot;highlighter-rouge&quot;&gt;this.x = y&lt;/code&gt;.
Static fields are will use &lt;code class=&quot;highlighter-rouge&quot;&gt;value: undefined&lt;/code&gt; even if they are not initialized.&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;plugins&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;transform-class-properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;spec&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;In&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kr&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;baz&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'guy'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Out&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;_classCallCheck&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;baz&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'guy'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Out w/ &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;spec&quot;: true&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;babelHelpers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;classCallCheck&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;_initialiseProps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;defineProperty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;bar&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;enumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;writable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;undefined&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_initialiseProps&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;defineProperty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;bar&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;enumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;writable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;foo&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/4836&quot;&gt;#4836&lt;/a&gt; Add path utilities &lt;code class=&quot;highlighter-rouge&quot;&gt;path.isAncestor&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;path.isDescendant&lt;/code&gt;. (&lt;a href=&quot;https://github.com/boopathi&quot;&gt;@boopathi&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;We’ve added 2 similar “ancestry” path methods to &lt;code class=&quot;highlighter-rouge&quot;&gt;path.findParent&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;programPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;numberPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;traverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ast&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;Program&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;programPath&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;NumberPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;numberPath&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;programPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;isAncestor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;numberPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// true&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;numberPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;isDescendant&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;programPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/4835&quot;&gt;#4835&lt;/a&gt; Add &lt;code class=&quot;highlighter-rouge&quot;&gt;clearCache&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;clearPath&lt;/code&gt; as separate APIs under traverse. (&lt;a href=&quot;https://github.com/boopathi&quot;&gt;@boopathi&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;traverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clearCache&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// clears both path's and scope cache&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;traverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clearCache&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clearPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;traverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clearCache&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clearScope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/4827&quot;&gt;#4827&lt;/a&gt; Add &lt;code class=&quot;highlighter-rouge&quot;&gt;jsonCompatibleStrings&lt;/code&gt; option to &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-generator&lt;/code&gt;. (&lt;a href=&quot;https://github.com/kangax&quot;&gt;@kangax&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;generatorOpts&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;jsonCompatibleStrings&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// defaults to false&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Set to true for the generator to use &lt;code class=&quot;highlighter-rouge&quot;&gt;jsesc&lt;/code&gt; with &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;json&quot;: true&lt;/code&gt;. This will make it print &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;\u00A9&quot;&lt;/code&gt; vs. &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;©&quot;&lt;/code&gt;;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/3547&quot;&gt;#3547&lt;/a&gt; Added &lt;code class=&quot;highlighter-rouge&quot;&gt;flowCommaSeparator&lt;/code&gt; to &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-generator&lt;/code&gt;. (&lt;a href=&quot;https://github.com/sampepose&quot;&gt;@sampepose&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;generatorOpts&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;flowCommaSeparator&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// defaults to false&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Currently there are 2 supported syntaxes (&lt;code class=&quot;highlighter-rouge&quot;&gt;,&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;;&lt;/code&gt;) in Flow Object Types. The use of commas is in line with the more popular style and matches how objects are defined in Javascript, making it a bit more natural to write.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;param1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;param2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;param1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;param2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/3553&quot;&gt;#3553&lt;/a&gt; Add &lt;code class=&quot;highlighter-rouge&quot;&gt;t.isNodesEquivalent&lt;/code&gt;. (&lt;a href=&quot;https://github.com/hzoo&quot;&gt;@hzoo&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;assert&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;isNodesEquivalent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1 + 1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1+1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/4789&quot;&gt;#4789&lt;/a&gt; Support stage-2 &lt;code class=&quot;highlighter-rouge&quot;&gt;import()&lt;/code&gt; as contextual import in &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-es2015-modules-systemjs&lt;/code&gt;. (&lt;a href=&quot;https://github.com/guybedford&quot;&gt;@guybedford&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;You’ll want to add the &lt;code class=&quot;highlighter-rouge&quot;&gt;stage-2&lt;/code&gt; preset or explicitly include &lt;code class=&quot;highlighter-rouge&quot;&gt;babel-plugin-syntax-dynamic-import&lt;/code&gt; (not enabled by default).&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;lazyLoadOperation&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'./x'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;-bug-fixes&quot;&gt;🐛 Bug Fixes&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/4830&quot;&gt;#4830&lt;/a&gt; Will print the shorter of the &lt;code class=&quot;highlighter-rouge&quot;&gt;NumericLiteral&lt;/code&gt;s if using the &lt;code class=&quot;highlighter-rouge&quot;&gt;minified&lt;/code&gt; option. (&lt;a href=&quot;https://github.com/shinew&quot;&gt;@shinew&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/4832&quot;&gt;#4832&lt;/a&gt; Fix &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-es2015-modules-systemjs&lt;/code&gt; to ensure consistent modules iteration. (&lt;a href=&quot;https://github.com/guybedford&quot;&gt;@guybedford&lt;/a&gt;)&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// should be imported first&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// second&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/pull/4813&quot;&gt;#4813&lt;/a&gt; Fix &lt;code class=&quot;highlighter-rouge&quot;&gt;binding&lt;/code&gt; kind of destructured variables relating to &lt;code class=&quot;highlighter-rouge&quot;&gt;transform-react-constant-elements&lt;/code&gt; (&lt;a href=&quot;https://github.com/STRML&quot;&gt;@STRML&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Fixes an issue with destructuring parameters being hoisted incorrectly.&lt;/p&gt;

&lt;p&gt;Input&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Component&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Output&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_ref&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Component&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;
&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_ref2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;-committers-10&quot;&gt;🌏 Committers: 10&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Boopathi Rajaa (&lt;a href=&quot;https://github.com/boopathi&quot;&gt;boopathi&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Guy Bedford (&lt;a href=&quot;https://github.com/guybedford&quot;&gt;guybedford&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Henry Zhu (&lt;a href=&quot;https://github.com/hzoo&quot;&gt;hzoo&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Juriy Zaytsev (&lt;a href=&quot;https://github.com/kangax&quot;&gt;kangax&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Moti Zilberman (&lt;a href=&quot;https://github.com/motiz88&quot;&gt;motiz88&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Sam Pepose (&lt;a href=&quot;https://github.com/sampepose&quot;&gt;sampepose&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Samuel Reed (&lt;a href=&quot;https://github.com/STRML&quot;&gt;STRML&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Scott Stern (&lt;a href=&quot;https://github.com/sstern6&quot;&gt;sstern6&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Shine Wang (&lt;a href=&quot;https://github.com/shinew&quot;&gt;shinew&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;lion (&lt;a href=&quot;https://github.com/lion-man44&quot;&gt;lion-man44&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;Check out &lt;a href=&quot;https://github.com/babel/babel/releases/tag/v6.19.0&quot;&gt;Github&lt;/a&gt; for the whole changelog!&lt;/p&gt;
</description>
        <pubDate>Wed, 16 Nov 2016 11:00:00 +0000</pubDate>
        <link>https://babeljs.io/blog/2016/11/16/6.19.0</link>
        <guid isPermaLink="true">https://babeljs.io/blog/2016/11/16/6.19.0</guid>
        
        
        <category>announcements</category>
        
      </item>
    
  </channel>
</rss>
