- Update compat table to fix two small issues (#445) (@danez)
ES2015 destructuring is not fully supported in Edge 15 and the polyfill required again. es6.math.imul
is supported on Android as of version 4.4
- Add polyfills for ES6 static Object methods (#441) (@danez)
Functions such as Object.keys
, Object.freeze
, ... do already exist in ES5, but their behaviour changed in ES2015. babel-preset-env
with builtIns: true
now adds the core-js polyfills for this methods if the browser only supports the ES5 variant of the method (like IE11 for example)
- Normalize module format of plugins/built-ins data (#376) (@rtsao)
- Bump compat-table for node8 support (#363) (@existentialism)
We updated our mappings to support native trailing function commas and string paddings in Node.js 8+.
- Handle
chromeandroid
browserslist value (#367) (@yavorsky)
We added support for using browserslist's chromeandroid
in targets
.
- Tweak uglify option docs (#368) (@existentialism)
Thanks to @graingert and @pfiaux for pointing out some needed updates to the uglify-js
-related docs.
- Ensure explicit targets always override browsers key targets (#346) (@existentialism)
browser
targets should be overridden by explicit targets, and we inadvertently broke this when we landed string version support.
- Compile with loose mode (#322) (@existentialism)
- Support target versions as strings (#321) (@existentialism)
We were originally waiting on 2.x for a breaking change, but since node v7.10 and other targets are causing some pain, we decided to land a backwards compatible version.
- Backport: use preset-env and remove flow-strip-types (#324) (@yavorsky)
- Bump electron-to-chromium (#329) (@existentialism)
- Tweak version mappings to match compat-table updates (#323) (@existentialism)
- Bump browserslist (#319) (@existentialism)
- Bump compat-table (#307) (@existentialism)
- Add debug-fixtures and test/tmp to .eslintignore (#305) (@yavorsky)
- Support
spec
option (#98) (@Kovensky)
Added an option to enable more spec compliant, but potentially slower, transformations for any plugins in this preset that support them.
- Bump compat-table for Edge 15 support (#273) (@existentialism)
We updated our mappings so that you can get native support for async/await and other goodies when targeting Edge 15!
- Add Android browser to name map (#270) (@existentialism)
Fixed a bug that was ignoring Android targets in browserslist queries (for example: "Android >= 4").
- Clarify note about loading polyfills only once (#282) (@darahak)
- Add a reminder about include/exclude options (#275) (@existentialism)
- Support electron version in a string format (#252) (@yavorsky)
Adding electron as a target was an inadvertent breaking change as it no longer allowed string versions. We added an exception for now, even though it is inconsistent with other versions. Just as a note, the upcoming version 2.x will allow both number and string versions.
- Ensure const-check plugin order (#257) (@existentialism)
We now force the const-es2015-check
plugin to run first (so that it can
correctly report issues before they get transpiled away).
- Allow use
babel-plugin-
prefix for include and exclude (#242) (@yavorsky)
The include
and exclude
options now allow both prefixed (babel-plugin-transform-es2015-spread
)
and prefix-less (transform-es2015-spread
) plugin names.
- Note babel plugin prefix handling in include/exclude (#245) (@existentialism)
- Fix README: debug option shows info in stdout. (#236) (@Gerhut)
- Add simple smoke-test (#240) (@existentialism)
- Add prepublish script (@existentialism)
- Fixed an issue with a broken publish
- Fixed a regression with missing files due to
.npmignore
.
- Add check for ArrayBuffer[Symbol.species] (#233) (@existentialism)
We now properly check for Symbol.species
support in ArrayBuffer and include the
polyfill if necessary. This should, as a side effect, fix ArrayBuffer-related
errors on IE9.
- Fill data with electron as a target. (#229) (@yavorsky)
We've simplified things by adding electron
as a target instead of doing a bunch of
things at runtime. Electron targets should now also be displayed in the debug output.
- separate default builtins for platforms (#226) (@restrry)
If you are targeting the node
environment exclusively, the always-included web polyfills
(like dom.iterable
, and a few others) will now no longer be included.
- remove deprecated projects (#223) [skip ci] (@stevemao)
- npmignore: Add related to build data and codecov. (#216) (@yavorsky)
- Refactor browser data parsing to handle families (#208) (@existentialism)
When parsing plugin data, we weren't properly handling browser families. This caused
transform-es2015-block-scoping
and other plugins to be incorrectly added for Edge >= 12.
(s/o to @mgol for the the report and review!)
- Add typed array methods to built-ins features. (#198) (@yavorsky)
Fixes an issue where some TypedArray features were not being polyfilled properly. (s/o to @alippai for the report!)
- Fixed minor typo in readme (#199) (@bl4ckdu5t)
- Add built-ins, better links, compat-table url, etc (#195) (@yavorsky)
- Change CONTRIBUTING.md to use absolute paths (#194) (@aaronang)
- Bump plugins (#201) (@yavorsky)
- Enable code coverage (#200) (@alxpy)
- Increase mocha timeout to 10s (#202) (@yavorsky)
- Add transform-duplicate-keys mapping (#192) (@existentialism)
Our plugin data was missing a mapping for the transform-duplicate-keys
plugin which caused it to never be included. (s/o to @Timer for the report!)
- Clarify reasons for the uglify option in README.md (#188) (@mikegreiling)
- Add uglify as a target (#178) (@yavorsky)
Support for uglify
as a target is now available! This will enable all plugins and, as a result, fully compiles your code to ES5. Note, that useBuiltIns will work as before, and only the polyfills that your other target(s) need will be included.
{
"presets": [
["env", {
"targets": {
"chrome": 55,
"uglify": true
},
"useBuiltIns": true,
"modules": false
}]
]
}
- Respect older versions in invert equals map (#180) (@danez)
Fixes a number of bugs that caused some incorrect and/or missing environment data when parsing compat-table
.
This release primarily upgrades compat-table
, which adds support for async on Node 7.6!
- Fix hasBeenWarned condition. (#175) (@yavorsky)
- Add yarn example. (#174) (@yavorsky)
- Bump compat-table (#177) (@existentialism)
- Add electron version exception test (#176) (@existentialism)
- Drop use of lodash/intersection from checkDuplicateIncludeExcludes (#173) (@existentialism)
- Add tests for debug output (#156) (@existentialism)
Since we've (mostly @yavorsky) have fixed a number of bugs recently with the debug
option output, we added the ability to assert stdout matches what we expect. Read the updated CONTRIBUTING.md for more info.
- Fixes #143. Log correct targets. (#155) (@yavorsky)
This fixes a bug in the debug
output where incorrect target(s) were being displayed for why a particular plugin/preset was being included.
Given targets:
{
"firefox": 52,
"node": 7.4
}
Before:
Using plugins:
transform-es2015-destructuring {"node":6.5}
transform-es2015-for-of {"node":6.5}
transform-es2015-function-name {"node":6.5}
transform-es2015-literals {"node":4}
transform-exponentiation-operator {"firefox":52}
syntax-trailing-function-commas {"firefox":52}
After:
Using plugins:
transform-es2015-destructuring {"firefox":52}
transform-es2015-for-of {"firefox":52}
transform-es2015-function-name {"firefox":52}
transform-es2015-literals {"firefox":52}
transform-exponentiation-operator {"node":7.4}
syntax-trailing-function-commas {"node":7.4}
- Fix compat-table link in contributing.md (@existentialism)
- Update README examples to fix website (#151) (@existentialism)
- Fix few typos (#146) (@existentialism)
- Add configuration example to clarify
debug: true
(#138) (@yavorsky) - Fix CHANGELOG’s v1.1.8 updates typo. (#136) (@yavorsky)
- README: Update
debug: true
example. (#138) (@yavorsky)
- update compat (#169) (@hzoo)
- Use external Electron to Chromium library (#144) (@Kilian)
- Update yarn lockfile (#152) (@existentialism)
- Extract option normalization into independant file (#125) (@baer)
- Update yarnfile (#145) (@baer)
- devDeps: eslint-config-babel v5.0.0 (#139) (@kaicataldo)
- Update compat-table, build data (#135) (@hzoo)
- Debug: Transformations before logs. (#128) (@yavorsky)
Makes sure that all transformations on targets
(such as exclude
/include
) are run before logging out with the debug
option. Fixes (#127).
- Remove unnecessary extension. (#131) (@roman-yakobnyuk)
- Include yarn.lock and update CI. (#124) (@existentialism)
Had a publishing issue in the previous release.
- Explicitly resolve lowest browser version. (#121) (@brokenmass)
{
"targets": {
"browsers": ["ios >= 6"] // was resolving to {ios: 10} rather than {ios: 6}
}
}
- Show error if target version is not a number. (#107) (@existentialism)
{
"presets": [
["env", {
"targets": {
"chrome": "52", // will error since it's not a number,
"chrome": 52 // correct!
}
}]
]
}
- Fix targets for the
debug
option. (#109) (@yavorsky)
Now it prints the transformed targets/environments rather than the browsers query.
Using targets:
{
"chrome": 53,
"ie": 10,
"node": 6
}
Modules transform: false
Using plugins:
transform-es2015-arrow-functions {"chrome":47,"node":6}
transform-es2015-block-scoped-functions {"chrome":41,"ie":11,"node":4}
Using polyfills:
es6.typed.uint8-clamped-array {"chrome":5,"node":0.12}
es6.map {"chrome":51,"node":6.5}
v1.1.2-v1.1.4
The new exclude
/include
options weren't working correctly for built-ins. (#102).
Also fixes an issue with debug option.
Regression with the previous release due to using Object.values
(ES2017). This wasn't caught because we are using babel-register to run tests and includes polyfills so it didn't fail on CI even though we have Node 0.10 as an env. Looking into fixing this to prevent future issues.
- Add
exclude
option, renamewhitelist
toinclude
(#89) (@hzoo)
Example:
{
"presets": [
["env", {
"targets": {
"browsers": ["last 2 versions", "safari >= 7"]
},
"include": ["transform-es2015-arrow-functions"],
"exclude": [
"transform-regenerator",
"transform-async-to-generator",
"map"
],
"useBuiltIns": true
}]
]
}
"exclude": ["transform-regenerator"]
doesn't transform generators and removes regeneratorRuntime
from being imported.
"exclude": ["transform-async-to-generator"]
doesn't use the built-in async-to-gen transform so you can use something like fast-async.
"exclude": ["map"]
doesn't include the Map
polyfill if you know you aren't using it in your code (w/ useBuiltIns
). (We will figure out a way to automatically do this #84).
If you pass a wrong plugin it will error: valid options for include/exclude
are in /data/plugin-features.js and /data/built-in-features.js (without the es6.
)
- Optimize result filtration. (#77) (@yavorsky)
- Update eslint config to align with other babel projects (#79) (@baer)
- Update pathnames to avoid uppercase (#80) (@baer)
- Refactor build data for clarity/consistency (#81) (@baer)
- Update linting rules to cover all js (#82) (@baer)
- Cleanup lib before rebuilding (#87) (@baer)
- Move linting dependency to be dev only (#88) (@baer)
- Fix issue with Object.getOwnPropertySymbols (#71) (@existentialism)
Was requiring the wrong module kinda of like in v1.0.1:
https://github.com/zloirock/core-js#ecmascript-6-symbol
-import "core-js/modules/es6.object.get-own-property-symbols";
The test is just a part of Symbol
.
We were outputting an invalid path for regenerator
!
+import "regenerator-runtime/runtime";
-import "core-js/modules/regenerator-runtime/runtime"-
- Add
useBuiltIns
option (#56) (@hzoo), (@yavorsky), (@existentialism)
A way to apply babel-preset-env
for polyfills (via `"babel-polyfill"``).
This option will apply a new Babel plugin that replaces
require("babel-polyfill")
with the individual requires forbabel-polyfill
based on the target environments.
Install
npm install babel-polyfill --save
In
import "babel-polyfill"; // create an entry js file that contains this
// or
import "core-js";
Out (different based on environment)
// chrome 55
import "core-js/modules/es7.string.pad-start"; // haha left_pad
import "core-js/modules/es7.string.pad-end";
import "core-js/modules/web.timers";
import "core-js/modules/web.immediate";
import "core-js/modules/web.dom.iterable";
.babelrc
Usage
{
"presets": [
["env", {
"targets": {
"electron": 1.4
},
"modules": false, // webpack 2
"useBuiltIns": true // new option
}]
]
}
Also looking to make an easier integration point via Webpack with this method. Please reach out if you have ideas!
- Support Electron (#55) (@paulcbetts)
Electron is also an environment, so Paul went ahead and added support for this!
.babelrc
Usage
{
"presets": [ ["env", {"targets": { "electron": 1.4 }}]]
}
Currently we are manually updating the data in /data/electron-to-chromium.js, but @kevinsawicki says we could generate the data from atom-shell/dist/index.json as well! (Someone should make a PR 😄)
- Support Opera (#48) (Henry Zhu)
Was as simple as modifying the chrome version and subtracting 13! (so chrome 54 = opera 41)
{
"presets": [
["env", {
"targets": {
"opera": 41
}
}]
]
}
- Only print the debug info once (#46 (Henry Zhu)
When using the debug
option it was printing the data for each file processed rather than once.
{
"presets": [
["env", {
"debug": true
}]
]
}
- hardcode a current node version option (#35) (Henry Zhu)
{
"presets": [
["env", {
"targets": {
"node": "current" // parseFloat(process.versions.node)
}
}]
]
}
- add 'whitelist' option (#31) (Henry Zhu)
{
"presets": [
["env", {
"targets": {
"chrome": 52
},
"whitelist": ["transform-es2015-arrow-functions"]
}]
]
}
- Add more aliases (Henry Zhu)
- Update plugin data: firefox 52 supports async/await! (#29) (Henry Zhu)
- Use compat-table equals option (#36) (Henry Zhu)
Compute and use compat-table
equivalents
{
"safari6": "phantom",
"chrome44": "iojs",
"chrome50": "node64",
"chrome51": "node65",
"chrome54": "node7",
"chrome30": "android44",
"chrome37": "android50",
"chrome39": "android51",
"safari7": "ios7",
"safari71_8": "ios8",
"safari9": "ios9",
"safari10": "ios10",
"chrome50": "node6"
}
- Change default behavior to act the same as babel-preset-latest (#33) (Henry Zhu)
{ "presets": ["env"] } // should act the same as babel-preset-latest
- Add fixture helper for tests (#28) (Henry Zhu)