babel/packages/babel-plugin-transform-es2015-template-literals
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
..
2017-03-25 21:46:16 -04:00
2017-05-31 17:11:39 -04:00

babel-plugin-transform-es2015-template-literals

Compile ES2015 template literals to ES5

Example

In

`foo${bar}`;

Out

"foo" + bar;

Installation

npm install --save-dev babel-plugin-transform-es2015-template-literals

Usage

.babelrc

Without options:

{
  "plugins": ["transform-es2015-template-literals"]
}

With options:

{
  "plugins": [
    ["transform-es2015-template-literals", {
      "loose": true,
      "spec": true
    }]
  ]
}

Via CLI

babel --plugins transform-es2015-template-literals script.js

Via Node API

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.

In

`foo${bar}baz${quux}${1}`;

Out

"foo".concat(bar, "baz").concat(quux, 1);