From 414acf5fda79a049b403bcfd48f4dc244e3857b1 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Wed, 2 Nov 2016 11:57:26 -0400 Subject: [PATCH] Change default behavior to act the same as babel-preset-latest (#33) * Do not throw on empty options, and default to latest preset * fix lint --- experimental/babel-preset-env/.eslintignore | 1 + experimental/babel-preset-env/README.md | 34 ++++++------------- experimental/babel-preset-env/package.json | 6 ++-- experimental/babel-preset-env/src/index.js | 30 ++++------------ .../preset-options/empty-options/actual.js | 1 + .../preset-options/empty-options/expected.js | 3 ++ .../preset-options/empty-options/options.json | 5 +++ .../preset-options/modules-false/actual.js | 2 +- .../preset-options/modules-false/expected.js | 2 +- .../preset-options/modules-false/options.json | 1 - .../preset-options/no-options/actual.js | 1 + .../preset-options/no-options/expected.js | 3 ++ .../preset-options/no-options/options.json | 5 +++ .../preset-options/whitelist/actual.js | 2 +- .../preset-options/whitelist/expected.js | 6 ++-- 15 files changed, 46 insertions(+), 56 deletions(-) create mode 100644 experimental/babel-preset-env/.eslintignore create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/empty-options/actual.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/empty-options/expected.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/empty-options/options.json create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/no-options/actual.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/no-options/expected.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/no-options/options.json diff --git a/experimental/babel-preset-env/.eslintignore b/experimental/babel-preset-env/.eslintignore new file mode 100644 index 0000000000..116caa1278 --- /dev/null +++ b/experimental/babel-preset-env/.eslintignore @@ -0,0 +1 @@ +fixtures diff --git a/experimental/babel-preset-env/README.md b/experimental/babel-preset-env/README.md index a3c8ffda02..307ce56ef6 100644 --- a/experimental/babel-preset-env/README.md +++ b/experimental/babel-preset-env/README.md @@ -18,6 +18,8 @@ This should be straightforward to do in most cases. There might be cases were pl #### Support all plugins in Babel that are considered `latest` +> Default behavior without options is the same as `babel-preset-latest`. + [#14](https://github.com/babel/babel-preset-env/issues/14) - It won't include `stage-x` plugins. env will support all plugins in what we consider the latest version of Javascript (by matching what we do in [`babel-preset-latest`](http://babeljs.io/docs/plugins/preset-latest/)). #### Determine the lowest common denominator of plugins to be included in the preset @@ -55,28 +57,13 @@ Currently: "chrome, edge, firefox, safari, ie, node". > If your config is a js file, also do `"node": parseFloat(process.versions.node)` -* `loose` (boolean) - Enable "loose" transformations for any plugins in this preset that allow them (Disabled by default). -* `modules` - Enable transformation of ES6 module syntax to another module type (Enabled by default to `"commonjs"`). +* `loose` (boolean) - Enable "loose" transformations for any plugins in this preset that allow them (Defaults to `false`). +* `modules` - Enable transformation of ES6 module syntax to another module type (Defaults to `"commonjs"`). * Can be `false` to not transform modules, or one of `["amd", "umd", "systemjs", "commonjs"]`. -* `debug` (boolean) - `console.log` out the targets and plugins being used as well as the version specified in `/data/plugins.json`. +* `debug` (boolean) - `console.log` out the targets and plugins being used as well as the version specified in `/data/plugins.json`. (Defaults to `false`) * `whitelist` (Array) - Enable a whitelist of plugins to always include. (Defaults to `[]`) * Useful if there is a bug in a native implementation, or a combination of a non-supported feature + a supported one doesn't work. (Ex: Node 4 supports native classes but not spread) -```js -{ - "presets": [ - ["env", { - "targets": { - "chrome": 52, - "browsers": "last 2 safari versions" - }, - "loose": true, - "modules": false - }] - ] -} -``` - ### Example ```js @@ -85,11 +72,9 @@ export class A {} ``` ```js -// default is to run all transforms +// default is to run all transforms (acts as babel-preset-latest) { - "presets": [ - ["env", {}] - ] + "presets": ["env"] } // ... @@ -118,14 +103,15 @@ exports.A = A; ``` ```js -// target chrome 52 with webpack 2/rollup +// target chrome 52 with webpack 2/rollup and loose mode { "presets": [ ["env", { "targets": { "chrome": 52 }, - "modules": false + "modules": false, + "loose": true }] ] } diff --git a/experimental/babel-preset-env/package.json b/experimental/babel-preset-env/package.json index d33e80aa16..3e2473ce4f 100644 --- a/experimental/babel-preset-env/package.json +++ b/experimental/babel-preset-env/package.json @@ -14,9 +14,8 @@ "lint": "eslint scripts src test", "fix": "eslint scripts src test --fix", "ci": "npm run test", - "prepublish": "npm run build", "changelog": "git log `git describe --tags --abbrev=0`..HEAD --pretty=format:' * %s (%an)' | grep -v 'Merge pull request'", - "test": "mocha ./test --compilers js:babel-register" + "test": "npm run build && mocha ./test --compilers js:babel-register" }, "dependencies": { "babel-plugin-check-es2015-constants": "^6.3.13", @@ -85,6 +84,9 @@ }, "rules": { "max-len": 0 + }, + "env": { + "mocha": true } } } diff --git a/experimental/babel-preset-env/src/index.js b/experimental/babel-preset-env/src/index.js index 7028ed720d..674b902452 100644 --- a/experimental/babel-preset-env/src/index.js +++ b/experimental/babel-preset-env/src/index.js @@ -26,7 +26,7 @@ export const isPluginRequired = (supportedEnvironments, plugin) => { if (targetEnvironments.length === 0) { return true; } const isRequiredForEnvironments = targetEnvironments - .filter(environment => { + .filter((environment) => { // Feature is not implemented in that environment if (!plugin[environment]) { return true; } @@ -43,7 +43,7 @@ export const isPluginRequired = (supportedEnvironments, plugin) => { return isRequiredForEnvironments.length > 0 ? true : false; }; -const isBrowsersQueryValid = browsers => { +const isBrowsersQueryValid = (browsers) => { return typeof browsers === "string" || Array.isArray(browsers); }; @@ -64,7 +64,7 @@ const mergeBrowsers = (fromQuery, fromTarget) => { }, fromQuery); }; -const getTargets = targetOpts => { +const getTargets = (targetOpts = {}) => { const browserOpts = targetOpts.browsers; if (isBrowsersQueryValid(browserOpts)) { const queryBrowsers = getLowestVersions(browserslist(browserOpts)); @@ -113,23 +113,7 @@ export const validateWhitelistOption = (whitelistOpt = []) => { return whitelistOpt; }; -export default function buildPreset(context, opts) { - if (!opts.targets) { - throw new Error( -` -babel-preset-env requires a "targets" option: -{ - "presets": [ - ["env", { - "targets": { - "chrome": 50 - } - }] - ] -} -`); - } - +export default function buildPreset(context, opts = {}) { const loose = validateLooseOption(opts.loose); const moduleType = validateModulesOption(opts.modules); const whitelist = validateWhitelistOption(opts.whitelist); @@ -137,7 +121,7 @@ babel-preset-env requires a "targets" option: const debug = opts.debug; let transformations = Object.keys(pluginList) - .filter(pluginName => isPluginRequired(targets, pluginList[pluginName])); + .filter((pluginName) => isPluginRequired(targets, pluginList[pluginName])); if (debug) { console.log(""); @@ -146,7 +130,7 @@ babel-preset-env requires a "targets" option: console.log("Using plugins:"); console.log(""); console.log(`module: ${moduleType}`); - transformations.forEach(transform => { + transformations.forEach((transform) => { let envList = pluginList[transform]; let filteredList = Object.keys(targets) .reduce((a, b) => { @@ -157,7 +141,7 @@ babel-preset-env requires a "targets" option: }); } - transformations = [...transformations, ...whitelist].map(pluginName => { + transformations = [...transformations, ...whitelist].map((pluginName) => { return [require(`babel-plugin-${pluginName}`), { loose }]; }); diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/empty-options/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/empty-options/actual.js new file mode 100644 index 0000000000..ba2d7615b7 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/empty-options/actual.js @@ -0,0 +1 @@ +const a = "1"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/empty-options/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/empty-options/expected.js new file mode 100644 index 0000000000..b298c5e19d --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/empty-options/expected.js @@ -0,0 +1,3 @@ +"use strict"; + +var a = "1"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/empty-options/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/empty-options/options.json new file mode 100644 index 0000000000..df639ff3c2 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/empty-options/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + ["../../../../lib", {}] + ] +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/actual.js index f6fb17cdfa..4b992e32e1 100644 --- a/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/actual.js +++ b/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/actual.js @@ -1 +1 @@ -import a from 'a'; +import a from "a"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/expected.js index f6fb17cdfa..4b992e32e1 100644 --- a/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/expected.js +++ b/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/expected.js @@ -1 +1 @@ -import a from 'a'; +import a from "a"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/options.json index 5434899542..1f29c71c16 100644 --- a/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/options.json +++ b/experimental/babel-preset-env/test/fixtures/preset-options/modules-false/options.json @@ -1,7 +1,6 @@ { "presets": [ ["../../../../lib", { - "targets": {}, "modules": false }] ] diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/no-options/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/no-options/actual.js new file mode 100644 index 0000000000..ba2d7615b7 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/no-options/actual.js @@ -0,0 +1 @@ +const a = "1"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/no-options/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/no-options/expected.js new file mode 100644 index 0000000000..b298c5e19d --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/no-options/expected.js @@ -0,0 +1,3 @@ +"use strict"; + +var a = "1"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/no-options/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/no-options/options.json new file mode 100644 index 0000000000..84a75e8721 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/no-options/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + "../../../../lib" + ] +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/whitelist/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/whitelist/actual.js index f6fb17cdfa..4b992e32e1 100644 --- a/experimental/babel-preset-env/test/fixtures/preset-options/whitelist/actual.js +++ b/experimental/babel-preset-env/test/fixtures/preset-options/whitelist/actual.js @@ -1 +1 @@ -import a from 'a'; +import a from "a"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/whitelist/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/whitelist/expected.js index 64d01c5b22..30b4a43e11 100644 --- a/experimental/babel-preset-env/test/fixtures/preset-options/whitelist/expected.js +++ b/experimental/babel-preset-env/test/fixtures/preset-options/whitelist/expected.js @@ -1,7 +1,7 @@ -'use strict'; +"use strict"; -var _a = require('a'); +var _a = require("a"); var _a2 = _interopRequireDefault(_a); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } \ No newline at end of file +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }