# Changelog > **Tags:** > - :boom: [Breaking Change] > - :eyeglasses: [Spec Compliancy] > - :rocket: [New Feature] > - :bug: [Bug Fix] > - :memo: [Documentation] > - :house: [Internal] > - :nail_care: [Polish] > Semver Policy: https://github.com/babel/babylon#semver _Note: Gaps between patch versions are faulty, broken or test releases._ See the [Babel Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) for the pre-6.8.0 version Changelog. ## v6.13.1 (2016-10-26) ### 💅 Polish - Use rollup for bundling to speed up startup time ([#190](https://github.com/babel/babylon/pull/190)) ([@drewml](https://github.com/DrewML)) ```js const babylon = require('babylon'); const ast = babylon.parse('var foo = "lol";'); ``` With that test case, there was a ~95ms savings by removing the need for node to build/traverse the dependency graph. **Without bundling** ![image](https://cloud.githubusercontent.com/assets/5233399/19420264/3133497e-93ad-11e6-9a6a-2da59c4f5c13.png) **With bundling** ![image](https://cloud.githubusercontent.com/assets/5233399/19420267/388f556e-93ad-11e6-813e-7c5c396be322.png) - add clean command [skip ci] ([#201](https://github.com/babel/babylon/pull/201)) (Henry Zhu) - add ForAwaitStatement (async generator already added) [skip ci] ([#196](https://github.com/babel/babylon/pull/196)) (Henry Zhu) ## v6.13.0 (2016-10-21) ### 👓 Spec Compliancy Property variance type annotations for Flow plugin ([#161](https://github.com/babel/babylon/pull/161)) (Sam Goldman) > See https://flowtype.org/docs/variance.html for more information ```js type T = { +p: T }; interface T { -p: T }; declare class T { +[k:K]: V }; class T { -[k:K]: V }; class C2 { +p: T = e }; ``` Raise error on duplicate definition of __proto__ ([#183](https://github.com/babel/babylon/pull/183)) (Moti Zilberman) ```js ({ __proto__: 1, __proto__: 2 }) // Throws an error now ``` ### :bug: Bug Fix Flow: Allow class properties to be named `static` ([#184](https://github.com/babel/babylon/pull/184)) (Moti Zilberman) ```js declare class A { static: T; } ``` Allow "async" as identifier for object literal property shorthand ([#187](https://github.com/babel/babylon/pull/187)) (Andrew Levine) ```js var foo = { async, bar }; ``` ### :nail_care: Polish Fix flowtype and add inType to state ([#189](https://github.com/babel/babylon/pull/189)) (Daniel Tschinder) > This improves the performance slightly (because of hidden classes) ### :house: Internal Fix .gitattributes line ending setting ([#191](https://github.com/babel/babylon/pull/191)) (Moti Zilberman) Increase test coverage ([#175](https://github.com/babel/babylon/pull/175) (Moti Zilberman) Readd missin .eslinignore for IDEs (Daniel Tschinder) Error on missing expected.json fixture in CI ([#188](https://github.com/babel/babylon/pull/188)) (Moti Zilberman) Add .gitattributes and .editorconfig for LF line endings ([#179](https://github.com/babel/babylon/pull/179)) (Moti Zilberman) Fixes two tests that are failing after the merge of #172 ([#177](https://github.com/babel/babylon/pull/177)) (Moti Zilberman) ## v6.12.0 (2016-10-14) ### 👓 Spec Compliancy Implement import() syntax ([#163](https://github.com/babel/babylon/pull/163)) (Jordan Gensler) #### Dynamic Import - Proposal Repo: https://github.com/domenic/proposal-dynamic-import - Championed by [@domenic](https://github.com/domenic) - stage-2 - [sept-28 tc39 notes](https://github.com/rwaldron/tc39-notes/blob/master/es7/2016-09/sept-28.md#113a-import) > This repository contains a proposal for adding a "function-like" import() module loading syntactic form to JavaScript ```js import(`./section-modules/${link.dataset.entryModule}.js`) .then(module => { module.loadPageInto(main); }) ``` Add EmptyTypeAnnotation ([#171](https://github.com/babel/babylon/pull/171)) (Sam Goldman) #### EmptyTypeAnnotation Just wasn't covered before. ```js type T = empty; ``` ### :bug: Bug Fix Fix crash when exporting with destructuring and sparse array ([#170](https://github.com/babel/babylon/pull/170)) (Jeroen Engels) ```js // was failing due to sparse array export const { foo: [ ,, qux7 ] } = bar; ``` Allow keyword in Flow object declaration property names with type parameters ([#146](https://github.com/babel/babylon/pull/146)) (Dan Harper) ```js declare class X { foobar(): void; static foobar(): void; } ``` Allow keyword in object/class property names with Flow type parameters ([#145](https://github.com/babel/babylon/pull/145)) (Dan Harper) ```js class Foo { delete(item: T): T { return item; } } ``` Allow typeAnnotations for yield expressions ([#174](https://github.com/babel/babylon/pull/174))) (Daniel Tschinder) ```js function *foo() { const x = (yield 5: any); } ``` ### :nail_care: Polish Annotate more errors with expected token ([#172](https://github.com/babel/babylon/pull/172))) (Moti Zilberman) ```js // Unexpected token, expected ; (1:6) { set 1 } ``` ### :house: Internal Remove kcheck ([#173](https://github.com/babel/babylon/pull/173))) (Daniel Tschinder) Also run flow, linting, babel tests on seperate instances (add back node 0.10) ## v6.11.6 (2016-10-12) ### :bug: Bug Fix/Regression Fix crash when exporting with destructuring and sparse array ([#170](https://github.com/babel/babylon/pull/170)) (Jeroen Engels) ```js // was failing with `Cannot read property 'type' of null` because of null identifiers export const { foo: [ ,, qux7 ] } = bar; ``` ## v6.11.5 (2016-10-12) ### :eyeglasses: Spec Compliancy Fix: Check for duplicate named exports in exported destructuring assignments ([#144](https://github.com/babel/babylon/pull/144)) (Kai Cataldo) ```js // `foo` has already been exported. Exported identifiers must be unique. (2:20) export function foo() {}; export const { a: [{foo}] } = bar; ``` Fix: Check for duplicate named exports in exported rest elements/properties ([#164](https://github.com/babel/babylon/pull/164)) (Kai Cataldo) ```js // `foo` has already been exported. Exported identifiers must be unique. (2:22) export const foo = 1; export const [bar, ...foo] = baz; ``` ### :bug: Bug Fix Fix: Allow identifier `async` for default param in arrow expression ([#165](https://github.com/babel/babylon/pull/165)) (Kai Cataldo) ```js // this is ok now const test = ({async = true}) => {}; ``` ### :nail_care: Polish Babylon will now print out the token it's expecting if there's a `SyntaxError` ([#150](https://github.com/babel/babylon/pull/150)) (Daniel Tschinder) ```bash # So in the case of a missing ending curly (`}`) Module build failed: SyntaxError: Unexpected token, expected } (30:0) 28 | } 29 | > 30 | | ^ ``` ## v6.11.4 (2016-10-03) Temporary rollback for erroring on trailing comma with spread (#154) (Henry Zhu) ## v6.11.3 (2016-10-01) ### :eyeglasses: Spec Compliancy Add static errors for object rest (#149) ([@danez](https://github.com/danez)) > https://github.com/sebmarkbage/ecmascript-rest-spread Object rest copies the *rest* of properties from the right hand side `obj` starting from the left to right. ```js let { x, y, ...z } = { x: 1, y: 2, z: 3 }; // x = 1 // y = 2 // z = { z: 3 } ``` #### New Syntax Errors: **SyntaxError**: The rest element has to be the last element when destructuring (1:10) ```bash > 1 | let { ...x, y, z } = { x: 1, y: 2, z: 3}; | ^ # Previous behavior: # x = { x: 1, y: 2, z: 3 } # y = 2 # z = 3 ``` Before, this was just a more verbose way of shallow copying `obj` since it doesn't actually do what you think. **SyntaxError**: Cannot have multiple rest elements when destructuring (1:13) ```bash > 1 | let { x, ...y, ...z } = { x: 1, y: 2, z: 3}; | ^ # Previous behavior: # x = 1 # y = { y: 2, z: 3 } # z = { y: 2, z: 3 } ``` Before y and z would just be the same value anyway so there is no reason to need to have both. **SyntaxError**: A trailing comma is not permitted after the rest element (1:16) ```js let { x, y, ...z, } = obj; ``` The rationale for this is that the use case for trailing comma is that you can add something at the end without affecting the line above. Since a RestProperty always has to be the last property it doesn't make sense. --- get / set are valid property names in default assignment (#142) ([@jezell](https://github.com/jezell)) ```js // valid function something({ set = null, get = null }) {} ``` ## v6.11.2 (2016-09-23) ### Bug Fix - [#139](https://github.com/babel/babylon/issues/139) Don't do the duplicate check if not an identifier (#140) @hzoo ```js // regression with duplicate export check SyntaxError: ./typography.js: `undefined` has already been exported. Exported identifiers must be unique. (22:13) 20 | 21 | export const { rhythm } = typography; > 22 | export const { TypographyStyle } = typography ``` Bail out for now, and make a change to account for destructuring in the next release. ## 6.11.1 (2016-09-22) ### Bug Fix - [#137](https://github.com/babel/babylon/pull/137) - Fix a regression with duplicate exports - it was erroring on all keys in `Object.prototype`. @danez ```javascript export toString from './toString'; ``` ```bash `toString` has already been exported. Exported identifiers must be unique. (1:7) > 1 | export toString from './toString'; | ^ 2 | ``` ## 6.11.0 (2016-09-22) ### Spec Compliancy (will break CI) - Disallow duplicate named exports ([#107](https://github.com/babel/babylon/pull/107)) @kaicataldo ```js // Only one default export allowed per module. (2:9) export default function() {}; export { foo as default }; // Only one default export allowed per module. (2:0) export default {}; export default function() {}; // `Foo` has already been exported. Exported identifiers must be unique. (2:0) export { Foo }; export class Foo {}; ``` ### New Feature (Syntax) - Add support for computed class property names ([#121](https://github.com/babel/babylon/pull/121)) @motiz88 ```js // AST interface ClassProperty <: Node { type: "ClassProperty"; key: Identifier; value: Expression; computed: boolean; // added } ``` ```js // with "plugins": ["classProperties"] class Foo { [x] ['y'] } class Bar { [p] [m] () {} } ``` ### Bug Fix - Fix `static` property falling through in the declare class Flow AST ([#135](https://github.com/babel/babylon/pull/135)) @danharper ```js declare class X { a: number; static b: number; // static c: number; // this was being marked as static in the AST as well } ``` ### Polish - Rephrase "assigning/binding to rvalue" errors to include context ([#119](https://github.com/babel/babylon/pull/119)) @motiz88 ```js // Used to error with: // SyntaxError: Assigning to rvalue (1:0) // Now: // Invalid left-hand side in assignment expression (1:0) 3 = 4 // Invalid left-hand side in for-in statement (1:5) for (+i in {}); ``` ### Internal - Fix call to `this.parseMaybeAssign` with correct arguments ([#133](https://github.com/babel/babylon/pull/133)) @danez - Add semver note to changelog ([#131](https://github.com/babel/babylon/pull/131)) @hzoo ## 6.10.0 (2016-09-19) > We plan to include some spec compliancy bugs in patch versions. An example was the multiple default exports issue. ### Spec Compliancy * Implement ES2016 check for simple parameter list in strict mode ([#106](https://github.com/babel/babylon/pull/106)) (Timothy Gu) > It is a Syntax Error if ContainsUseStrict of FunctionBody is true and IsSimpleParameterList of FormalParameters is false. https://tc39.github.io/ecma262/2016/#sec-function-definitions-static-semantics-early-errors More Context: [tc39-notes](https://github.com/rwaldron/tc39-notes/blob/master/es7/2015-07/july-29.md#611-the-scope-of-use-strict-with-respect-to-destructuring-in-parameter-lists) For example: ```js // this errors because it uses destructuring and default parameters // in a function with a "use strict" directive function a([ option1, option2 ] = []) { "use strict"; } ``` The solution would be to use a top level "use strict" or to remove the destructuring or default parameters when using a function + "use strict" or to. ### New Feature * Exact object type annotations for Flow plugin ([#104](https://github.com/babel/babylon/pull/104)) (Basil Hosmer) Added to flow in https://github.com/facebook/flow/commit/c710c40aa2a115435098d6c0dfeaadb023cd39b8 Looks like: ```js var a : {| x: number, y: string |} = { x: 0, y: 'foo' }; ``` ### Bug Fixes * Include `typeParameter` location in `ArrowFunctionExpression` ([#126](https://github.com/babel/babylon/pull/126)) (Daniel Tschinder) * Error on invalid flow type annotation with default assignment ([#122](https://github.com/babel/babylon/pull/122)) (Dan Harper) * Fix Flow return types on arrow functions ([#124](https://github.com/babel/babylon/pull/124)) (Dan Harper) ### Misc * Add tests for export extensions ([#127](https://github.com/babel/babylon/pull/127)) (Daniel Tschinder) * Fix Contributing guidelines [skip ci] (Daniel Tschinder) ## 6.9.2 (2016-09-09) The only change is to remove the `babel-runtime` dependency by compiling with Babel's ES2015 loose mode. So using babylon standalone should be smaller. ## 6.9.1 (2016-08-23) This release contains mainly small bugfixes but also updates babylons default mode to es2017. The features for `exponentiationOperator`, `asyncFunctions` and `trailingFunctionCommas` which previously needed to be activated via plugin are now enabled by default and the plugins are now no-ops. ### Bug Fixes - Fix issues with default object params in async functions ([#96](https://github.com/babel/babylon/pull/96)) @danez - Fix issues with flow-types and async function ([#95](https://github.com/babel/babylon/pull/95)) @danez - Fix arrow functions with destructuring, types & default value ([#94](https://github.com/babel/babylon/pull/94)) @danharper - Fix declare class with qualified type identifier ([#97](https://github.com/babel/babylon/pull/97)) @danez - Remove exponentiationOperator, asyncFunctions, trailingFunctionCommas plugins and enable them by default ([#98](https://github.com/babel/babylon/pull/98)) @danez ## 6.9.0 (2016-08-16) ### New syntax support - Add JSX spread children ([#42](https://github.com/babel/babylon/pull/42)) @calebmer (Be aware that React is not going to support this syntax) ```js
{...todos.map(todo => )}
``` - Add support for declare module.exports ([#72](https://github.com/babel/babylon/pull/72)) @danez ```js declare module "foo" { declare module.exports: {} } ``` ### New Features - If supplied, attach filename property to comment node loc. ([#80](https://github.com/babel/babylon/pull/80)) @divmain - Add identifier name to node loc field ([#90](https://github.com/babel/babylon/pull/90)) @kittens ### Bug Fixes - Fix exponential operator to behave according to spec ([#75](https://github.com/babel/babylon/pull/75)) @danez - Fix lookahead to not add comments to arrays which are not cloned ([#76](https://github.com/babel/babylon/pull/76)) @danez - Fix accidental fall-through in Flow type parsing. ([#82](https://github.com/babel/babylon/pull/82)) @xiemaisi - Only allow declares inside declare module ([#73](https://github.com/babel/babylon/pull/73)) @danez - Small fix for parsing type parameter declarations ([#83](https://github.com/babel/babylon/pull/83)) @gabelevi - Fix arrow param locations with flow types ([#57](https://github.com/babel/babylon/pull/57)) @danez - Fixes SyntaxError position with flow optional type ([#65](https://github.com/babel/babylon/pull/65)) @danez ### Internal - Add codecoverage to tests @danez - Fix tests to not save expected output if we expect the test to fail @danez - Make a shallow clone of babel for testing @danez - chore(package): update cross-env to version 2.0.0 ([#77](https://github.com/babel/babylon/pull/77)) @greenkeeperio-bot - chore(package): update ava to version 0.16.0 ([#86](https://github.com/babel/babylon/pull/86)) @greenkeeperio-bot - chore(package): update babel-plugin-istanbul to version 2.0.0 ([#89](https://github.com/babel/babylon/pull/89)) @greenkeeperio-bot - chore(package): update nyc to version 8.0.0 ([#88](https://github.com/babel/babylon/pull/88)) @greenkeeperio-bot ## 6.8.4 (2016-07-06) ### Bug Fixes - Fix the location of params, when flow and default value used ([#68](https://github.com/babel/babylon/pull/68)) @danez ## 6.8.3 (2016-07-02) ### Bug Fixes - Fix performance regression introduced in 6.8.2 with conditionals ([#63](https://github.com/babel/babylon/pull/63)) @danez ## 6.8.2 (2016-06-24) ### Bug Fixes - Fix parse error with yielding jsx elements in generators `function* it() { yield ; }` ([#31](https://github.com/babel/babylon/pull/31)) @eldereal - When cloning nodes do not clone its comments ([#24](https://github.com/babel/babylon/pull/24)) @danez - Fix parse errors when using arrow functions with an spread element and return type `(...props): void => {}` ([#10](https://github.com/babel/babylon/pull/10)) @danez - Fix leading comments added from previous node ([#23](https://github.com/babel/babylon/pull/23)) @danez - Fix parse errors with flow's optional arguments `(arg?) => {}` ([#19](https://github.com/babel/babylon/pull/19)) @danez - Support negative numeric type literals @kittens - Remove line terminator restriction after await keyword @kittens - Remove grouped type arrow restriction as it seems flow no longer has it @kittens - Fix parse error with generic methods that have the name `get` or `set` `class foo { get() {} }` ([#55](https://github.com/babel/babylon/pull/55)) @vkurchatkin - Fix parse error with arrow functions that have flow type parameter declarations `(x: T): T => x;` ([#54](https://github.com/babel/babylon/pull/54)) @gabelevi ### Documentation - Document AST differences from ESTree ([#41](https://github.com/babel/babylon/pull/41)) @nene - Move ast spec from babel/babel ([#46](https://github.com/babel/babylon/pull/46)) @hzoo ### Internal - Enable skipped tests ([#16](https://github.com/babel/babylon/pull/16)) @danez - Add script to test latest version of babylon with babel ([#21](https://github.com/babel/babylon/pull/21)) @danez - Upgrade test runner ava @kittens - Add missing generate-identifier-regex script @kittens - Rename parser context types @kittens - Add node v6 to travis testing @hzoo - Update to Unicode v9 ([#45](https://github.com/babel/babylon/pull/45)) @mathiasbynens ## 6.8.1 (2016-06-06) ### New Feature - Parse type parameter declarations with defaults like `type Foo = T` ### Bug Fixes - Type parameter declarations need 1 or more type parameters. - The existential type `*` is not a valid type parameter. - The existential type `*` is a primary type ### Spec Compliancy - The param list for type parameter declarations now consists of `TypeParameter` nodes - New `TypeParameter` AST Node (replaces using the `Identifier` node before) ``` interface TypeParameter <: Node { bound: TypeAnnotation; default: TypeAnnotation; name: string; variance: "plus" | "minus"; } ``` ## 6.8.0 (2016-05-02) #### New Feature ##### Parse Method Parameter Decorators ([#12](https://github.com/babel/babylon/pull/12)) > [Method Parameter Decorators](https://goo.gl/8MmCMG) is now a TC39 [stage 0 proposal](https://github.com/tc39/ecma262/blob/master/stage0.md). Examples: ```js class Foo { constructor(@foo() x, @bar({ a: 123 }) @baz() y) {} } export default function func(@foo() x, @bar({ a: 123 }) @baz() y) {} var obj = { method(@foo() x, @bar({ a: 123 }) @baz() y) {} }; ``` ##### Parse for-await statements (w/ `asyncGenerators` plugin) ([#17](https://github.com/babel/babylon/pull/17)) There is also a new node type, `ForAwaitStatement`. > [Async generators and for-await](https://github.com/tc39/proposal-async-iteration) are now a [stage 2 proposal](https://github.com/tc39/ecma262#current-proposals). Example: ```js async function f() { for await (let x of y); } ```