Artem Yavorsky c4fd05c0c2 Spec compatibility for template literals. (#5791)
* Spec compatibility for template literals.

* Update preset-es2015 `spec` expected case.

* Prevent array mutability by replacing `shift`.

* Fix condition for single item.

* Group concats to ensure toPrimitive sequence.

* Update function test case.

* Add semi for function test case.

* Simplify concat call expressions creating.

* Fix some cases with multiple idengifiers.

* Add test case with different literals.

* Add test case for `Symbol()` and toPrimitive order

* Add actual literal case.

* Add minNodeVersion to template literals order.

* Flip the logical expression.

* Update README for template literals spec option.

* docs [skip ci]
2017-06-05 08:53:10 -04:00

91 lines
1.3 KiB
Markdown

# babel-plugin-transform-es2015-template-literals
> Compile ES2015 template literals to ES5
## Example
**In**
```javascript
`foo${bar}`;
```
**Out**
```javascript
"foo" + bar;
```
## Installation
```sh
npm install --save-dev babel-plugin-transform-es2015-template-literals
```
## Usage
### Via `.babelrc` (Recommended)
**.babelrc**
Without options:
```json
{
"plugins": ["transform-es2015-template-literals"]
}
```
With options:
```json
{
"plugins": [
["transform-es2015-template-literals", {
"loose": true,
"spec": true
}]
]
}
```
### Via CLI
```sh
babel --plugins transform-es2015-template-literals script.js
```
### Via Node API
```javascript
require("babel-core").transform("code", {
plugins: ["transform-es2015-template-literals"]
});
```
## Options
### `loose`
`boolean`, defaults to `false`.
In loose mode, tagged template literal objects aren't frozen.
### `spec`
`boolean`, defaults to `false`.
This option combines all template literal expressions and quasis with `String.prototype.concat`. It will handle cases with `Symbol.toPrimitive` correctly and throw correctly if template literal expression is a `Symbol()`. See [babel/babel#5791](https://github.com/babel/babel/pull/5791).
**In**
```javascript
`foo${bar}baz${quux}${1}`;
```
**Out**
```javascript
"foo".concat(bar, "baz").concat(quux, 1);
```