diff --git a/experimental/babel-preset-env/CHANGELOG.md b/experimental/babel-preset-env/CHANGELOG.md index cadc79ca41..5e0ee9997d 100644 --- a/experimental/babel-preset-env/CHANGELOG.md +++ b/experimental/babel-preset-env/CHANGELOG.md @@ -1,5 +1,46 @@ # Changelog +## v1.3.3 (2017-04-07) + +### :bug: Bug Fix + +- Support electron version in a string format ([#252](https://github.com/babel/babel-preset-env/pull/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](https://github.com/babel/babel-preset-env/pull/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). + +### :rocket: New Feature + +- Allow use `babel-plugin-` prefix for include and exclude ([#242](https://github.com/babel/babel-preset-env/pull/242)) (@yavorsky) + +The `include` and `exclude` options now allow both prefixed (`babel-plugin-transform-es2015-spread`) +and prefix-less (`transform-es2015-spread`) plugin names. + +### :memo: Documentation + +- Note babel plugin prefix handling in include/exclude ([#245](https://github.com/babel/babel-preset-env/pull/245)) (@existentialism) +- Fix README: debug option shows info in stdout. ([#236](https://github.com/babel/babel-preset-env/pull/236)) (@Gerhut) + +### :house: Internal + +- Add simple smoke-test ([#240](https://github.com/babel/babel-preset-env/pull/240)) (@existentialism) +- Add prepublish script (@existentialism) + +## v1.3.2 (2017-03-30) + +- Fixed an issue with a broken publish + +## v1.3.1 (2017-03-30) + +- Fixed a regression with missing files due to `.npmignore`. + ## v1.3.0 (2017-03-30) ### :bug: Bug Fix diff --git a/experimental/babel-preset-env/README.md b/experimental/babel-preset-env/README.md index f086a7e2d2..5fa7067307 100644 --- a/experimental/babel-preset-env/README.md +++ b/experimental/babel-preset-env/README.md @@ -156,7 +156,11 @@ Outputs the targets/plugins used and the version specified in [plugin data versi An array of plugins to always include. -Valid options include any of the [babel plugins](https://github.com/babel/babel-preset-env/blob/master/data/plugin-features.js) or [built-ins](https://github.com/babel/babel-preset-env/blob/master/data/built-in-features.js), such as `transform-es2015-arrow-functions`, `map`, `set`, or `object.assign`. +Valid options include any: + +- [Babel plugins](https://github.com/babel/babel-preset-env/blob/master/data/plugin-features.js) - both with (`babel-plugin-transform-es2015-spread`) and without prefix (`transform-es2015-spread`) are supported. + +- [Built-ins](https://github.com/babel/babel-preset-env/blob/master/data/built-in-features.js), such as `map`, `set`, or `object.assign`. This option is useful if there is a bug in a native implementation, or a combination of a non-supported feature + a supported one doesn't work. diff --git a/experimental/babel-preset-env/data/plugin-features.js b/experimental/babel-preset-env/data/plugin-features.js index 82d0e9df87..fef5180525 100644 --- a/experimental/babel-preset-env/data/plugin-features.js +++ b/experimental/babel-preset-env/data/plugin-features.js @@ -1,5 +1,10 @@ module.exports = { // es2015 + "check-es2015-constants": { + features: [ + "const", + ], + }, "transform-es2015-arrow-functions": { features: [ "arrow functions", @@ -27,11 +32,6 @@ module.exports = { "object literal extensions / computed properties", ], }, - "check-es2015-constants": { - features: [ - "const", - ], - }, "transform-es2015-destructuring": { features: [ "destructuring, assignment", diff --git a/experimental/babel-preset-env/data/plugins.json b/experimental/babel-preset-env/data/plugins.json index 604a79fdac..5a0d3a54af 100644 --- a/experimental/babel-preset-env/data/plugins.json +++ b/experimental/babel-preset-env/data/plugins.json @@ -1,4 +1,14 @@ { + "check-es2015-constants": { + "chrome": "49", + "edge": "14", + "firefox": "51", + "safari": "10", + "node": "6", + "ios": "10", + "opera": "36", + "electron": "1" + }, "transform-es2015-arrow-functions": { "chrome": "47", "edge": "13", @@ -50,16 +60,6 @@ "opera": "31", "electron": "0.31" }, - "check-es2015-constants": { - "chrome": "49", - "edge": "14", - "firefox": "51", - "safari": "10", - "node": "6", - "ios": "10", - "opera": "36", - "electron": "1" - }, "transform-es2015-destructuring": { "chrome": "51", "edge": "15", diff --git a/experimental/babel-preset-env/src/normalize-options.js b/experimental/babel-preset-env/src/normalize-options.js index 59304cd312..0f3b755604 100644 --- a/experimental/babel-preset-env/src/normalize-options.js +++ b/experimental/babel-preset-env/src/normalize-options.js @@ -33,6 +33,11 @@ export const validateIncludesAndExcludes = (opts = [], type) => { return opts; }; +export const normalizePluginName = plugin => + plugin.replace(/^babel-plugin-/, ""); + +export const normalizePluginNames = plugins => plugins.map(normalizePluginName); + export const checkDuplicateIncludeExcludes = (include = [], exclude = []) => { const duplicates = include.filter(opt => exclude.indexOf(opt) >= 0); @@ -79,6 +84,14 @@ export const validateUseBuiltInsOption = (builtInsOpt = true) => { }; export default function normalizeOptions(opts) { + if (opts.exclude) { + opts.exclude = normalizePluginNames(opts.exclude); + } + + if (opts.whitelist || opts.include) { + opts.include = normalizePluginNames(opts.whitelist || opts.include); + } + checkDuplicateIncludeExcludes(opts.include, opts.exclude); return { diff --git a/experimental/babel-preset-env/test/debug-fixtures/builtins-uglify/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/builtins-uglify/stdout.txt index 309441c93c..4297323234 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/builtins-uglify/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/builtins-uglify/stdout.txt @@ -9,12 +9,12 @@ Using targets: Modules transform: false Using plugins: + check-es2015-constants {"uglify":true} transform-es2015-arrow-functions {"uglify":true} transform-es2015-block-scoped-functions {"uglify":true} transform-es2015-block-scoping {"uglify":true} transform-es2015-classes {"uglify":true} transform-es2015-computed-properties {"uglify":true} - check-es2015-constants {"uglify":true} transform-es2015-destructuring {"uglify":true} transform-es2015-duplicate-keys {"uglify":true} transform-es2015-for-of {"uglify":true} diff --git a/experimental/babel-preset-env/test/debug-fixtures/builtins/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/builtins/stdout.txt index ea235b1337..97ffb88348 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/builtins/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/builtins/stdout.txt @@ -10,12 +10,12 @@ Using targets: Modules transform: commonjs Using plugins: + check-es2015-constants {"ie":"10"} transform-es2015-arrow-functions {"ie":"10"} transform-es2015-block-scoped-functions {"ie":"10"} transform-es2015-block-scoping {"ie":"10"} transform-es2015-classes {"ie":"10"} transform-es2015-computed-properties {"ie":"10"} - check-es2015-constants {"ie":"10"} transform-es2015-destructuring {"ie":"10","node":"6"} transform-es2015-duplicate-keys {"ie":"10"} transform-es2015-for-of {"ie":"10","node":"6"} diff --git a/experimental/babel-preset-env/test/debug-fixtures/electron/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/electron/stdout.txt index c4919b2e87..1d3da440a5 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/electron/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/electron/stdout.txt @@ -15,8 +15,8 @@ Using targets: Modules transform: commonjs Using plugins: - transform-es2015-block-scoping {"electron":"0.36"} check-es2015-constants {"electron":"0.36"} + transform-es2015-block-scoping {"electron":"0.36"} transform-es2015-destructuring {"electron":"0.36"} transform-es2015-for-of {"electron":"0.36"} transform-es2015-function-name {"electron":"0.36"} diff --git a/experimental/babel-preset-env/test/debug-fixtures/specific-targets/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/specific-targets/stdout.txt index 8b126383d7..2fed28174c 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/specific-targets/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/specific-targets/stdout.txt @@ -13,12 +13,12 @@ Using targets: Modules transform: commonjs Using plugins: + check-es2015-constants {"edge":"13","firefox":"49","ie":"10","ios":"9","safari":"7"} transform-es2015-arrow-functions {"ie":"10","ios":"9","safari":"7"} transform-es2015-block-scoped-functions {"ie":"10","ios":"9","safari":"7"} transform-es2015-block-scoping {"edge":"13","firefox":"49","ie":"10","ios":"9","safari":"7"} transform-es2015-classes {"ie":"10","ios":"9","safari":"7"} transform-es2015-computed-properties {"ie":"10","safari":"7"} - check-es2015-constants {"edge":"13","firefox":"49","ie":"10","ios":"9","safari":"7"} transform-es2015-destructuring {"edge":"13","firefox":"49","ie":"10","ios":"9","safari":"7"} transform-es2015-duplicate-keys {"ie":"10","safari":"7"} transform-es2015-for-of {"edge":"13","firefox":"49","ie":"10","ios":"9","safari":"7"} diff --git a/experimental/babel-preset-env/test/debug-fixtures/versions-decimals/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/versions-decimals/stdout.txt index 25a05c319e..2154f000cc 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/versions-decimals/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/versions-decimals/stdout.txt @@ -19,12 +19,12 @@ Using targets: Modules transform: commonjs Using plugins: + check-es2015-constants {"electron":"0.36","ie":"10"} transform-es2015-arrow-functions {"ie":"10"} transform-es2015-block-scoped-functions {"ie":"10"} transform-es2015-block-scoping {"electron":"0.36","ie":"10"} transform-es2015-classes {"ie":"10"} transform-es2015-computed-properties {"ie":"10"} - check-es2015-constants {"electron":"0.36","ie":"10"} transform-es2015-destructuring {"electron":"0.36","node":"6.1","ie":"10"} transform-es2015-duplicate-keys {"ie":"10"} transform-es2015-for-of {"electron":"0.36","node":"6.1","ie":"10"} diff --git a/experimental/babel-preset-env/test/debug-fixtures/versions-strings/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/versions-strings/stdout.txt index a61cd69940..4912c46e74 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/versions-strings/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/versions-strings/stdout.txt @@ -10,12 +10,12 @@ Using targets: Modules transform: commonjs Using plugins: + check-es2015-constants {"ie":"10"} transform-es2015-arrow-functions {"ie":"10"} transform-es2015-block-scoped-functions {"ie":"10"} transform-es2015-block-scoping {"ie":"10"} transform-es2015-classes {"ie":"10"} transform-es2015-computed-properties {"ie":"10"} - check-es2015-constants {"ie":"10"} transform-es2015-destructuring {"ie":"10"} transform-es2015-duplicate-keys {"ie":"10"} transform-es2015-for-of {"ie":"10"} diff --git a/experimental/babel-preset-env/test/fixtures/sanity/check-es2015-constants/exec.js b/experimental/babel-preset-env/test/fixtures/sanity/check-es2015-constants/exec.js new file mode 100644 index 0000000000..26dd9d7713 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/sanity/check-es2015-constants/exec.js @@ -0,0 +1,2 @@ +const one = 123; +one = 432; diff --git a/experimental/babel-preset-env/test/fixtures/sanity/check-es2015-constants/options.json b/experimental/babel-preset-env/test/fixtures/sanity/check-es2015-constants/options.json new file mode 100644 index 0000000000..25bb3f6508 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/sanity/check-es2015-constants/options.json @@ -0,0 +1,6 @@ +{ + "presets": [ + ["../../../../lib"] + ], + "throws": "\"one\" is read-only" +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/transform-duplicate-keys/actual.js b/experimental/babel-preset-env/test/fixtures/sanity/transform-duplicate-keys/actual.js similarity index 100% rename from experimental/babel-preset-env/test/fixtures/preset-options/transform-duplicate-keys/actual.js rename to experimental/babel-preset-env/test/fixtures/sanity/transform-duplicate-keys/actual.js diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/transform-duplicate-keys/expected.js b/experimental/babel-preset-env/test/fixtures/sanity/transform-duplicate-keys/expected.js similarity index 100% rename from experimental/babel-preset-env/test/fixtures/preset-options/transform-duplicate-keys/expected.js rename to experimental/babel-preset-env/test/fixtures/sanity/transform-duplicate-keys/expected.js diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/transform-duplicate-keys/options.json b/experimental/babel-preset-env/test/fixtures/sanity/transform-duplicate-keys/options.json similarity index 100% rename from experimental/babel-preset-env/test/fixtures/preset-options/transform-duplicate-keys/options.json rename to experimental/babel-preset-env/test/fixtures/sanity/transform-duplicate-keys/options.json diff --git a/experimental/babel-preset-env/test/normalize-options.spec.js b/experimental/babel-preset-env/test/normalize-options.spec.js index e75f26e3df..c91401dcc3 100644 --- a/experimental/babel-preset-env/test/normalize-options.spec.js +++ b/experimental/babel-preset-env/test/normalize-options.spec.js @@ -8,9 +8,34 @@ const { validateIncludesAndExcludes, validateLooseOption, validateModulesOption, + normalizePluginNames, } = normalizeOptions; describe("normalize-options", () => { + describe("normalizeOptions", () => { + it("should return normalized `include` and `exclude`", () => { + const normalized = normalizeOptions.default({ + include: [ + "babel-plugin-transform-es2015-spread", + "transform-es2015-classes", + ], + }); + assert.deepEqual(normalized.include, [ + "transform-es2015-spread", + "transform-es2015-classes", + ]); + }); + + it("should throw if duplicate names in `include` and `exclude`", () => { + const normalizeWithSameIncludes = () => { + normalizeOptions.default({ + include: ["babel-plugin-transform-es2015-spread"], + exclude: ["transform-es2015-spread"], + }); + }; + assert.throws(normalizeWithSameIncludes, Error); + }); + }); describe("validateLooseOption", () => { it("`undefined` option returns false", () => { assert(validateLooseOption() === false); @@ -57,6 +82,27 @@ describe("normalize-options", () => { }); }); + describe("normalizePluginNames", function() { + it("should drop `babel-plugin-` prefix if needed", function() { + assert.deepEqual( + normalizePluginNames([ + "babel-plugin-transform-es2015-object-super", + "transform-es2015-parameters", + ]), + ["transform-es2015-object-super", "transform-es2015-parameters"], + ); + }); + + it("should not throw if no duplicate names in both", function() { + assert.doesNotThrow( + () => { + checkDuplicateIncludeExcludes(["transform-regenerator"], ["map"]); + }, + Error, + ); + }); + }); + describe("validateModulesOption", () => { it("`undefined` option returns commonjs", () => { assert(validateModulesOption() === "commonjs");