From ae3dfda1d64f6c6d3499720b5b390f731ee394bf Mon Sep 17 00:00:00 2001 From: Mikhail Shustov Date: Tue, 28 Mar 2017 00:43:18 +0200 Subject: [PATCH] separate default builtins for platforms (#226) --- .../babel-preset-env/src/default-includes.js | 2 +- experimental/babel-preset-env/src/index.js | 14 +++++++++++--- .../babel-preset-env/src/normalize-options.js | 4 ++-- .../preset-options/use-builtins-node-web/actual.js | 1 + .../use-builtins-node-web/expected.js | 7 +++++++ .../use-builtins-node-web/options.json | 13 +++++++++++++ .../preset-options/use-builtins-node/actual.js | 1 + .../preset-options/use-builtins-node/expected.js | 4 ++++ .../preset-options/use-builtins-node/options.json | 12 ++++++++++++ 9 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/actual.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/expected.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/options.json create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/actual.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/expected.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/options.json diff --git a/experimental/babel-preset-env/src/default-includes.js b/experimental/babel-preset-env/src/default-includes.js index 77477580e7..f632800034 100644 --- a/experimental/babel-preset-env/src/default-includes.js +++ b/experimental/babel-preset-env/src/default-includes.js @@ -1,4 +1,4 @@ -export default [ +export const defaultWebIncludes = [ "web.timers", "web.immediate", "web.dom.iterable" diff --git a/experimental/babel-preset-env/src/index.js b/experimental/babel-preset-env/src/index.js index ae26ecf8e3..5544ba9945 100644 --- a/experimental/babel-preset-env/src/index.js +++ b/experimental/babel-preset-env/src/index.js @@ -1,6 +1,6 @@ import browserslist from "browserslist"; import builtInsList from "../data/built-ins.json"; -import defaultInclude from "./default-includes"; +import { defaultWebIncludes } from "./default-includes"; import moduleTransformations from "./module-transformations"; import normalizeOptions, { getElectronChromeVersion } from "./normalize-options.js"; import pluginList from "../data/plugins.json"; @@ -139,7 +139,7 @@ const logPlugin = (plugin, targets, list) => { }; const filterItem = (targets, exclusions, list, item) => { - const isDefault = defaultInclude.indexOf(item) >= 0; + const isDefault = defaultWebIncludes.indexOf(item) >= 0; const notExcluded = exclusions.indexOf(item) === -1; if (isDefault) return notExcluded; @@ -161,6 +161,14 @@ export const transformIncludesAndExcludes = (opts) => ({ builtIns: opts.filter((opt) => opt.match(/^(es\d+|web)\./)) }); +function getPlatformSpecificDefaultFor(targets) { + const targetNames = Object.keys(targets); + const isAnyTarget = !targetNames.length; + const isWebTarget = targetNames.some((name) => name !== "node"); + + return (isAnyTarget || isWebTarget) ? defaultWebIncludes : []; +} + export default function buildPreset(context, opts = {}) { const validatedOptions = normalizeOptions(opts); const { debug, loose, moduleType, useBuiltIns } = validatedOptions; @@ -181,7 +189,7 @@ export default function buildPreset(context, opts = {}) { polyfillTargets = getBuiltInTargets(targets); const filterBuiltIns = filterItem.bind(null, polyfillTargets, exclude.builtIns, builtInsList); polyfills = Object.keys(builtInsList) - .concat(defaultInclude) + .concat(getPlatformSpecificDefaultFor(polyfillTargets)) .filter(filterBuiltIns) .concat(include.builtIns); } diff --git a/experimental/babel-preset-env/src/normalize-options.js b/experimental/babel-preset-env/src/normalize-options.js index 4ceaeecc0d..061d89917c 100644 --- a/experimental/babel-preset-env/src/normalize-options.js +++ b/experimental/babel-preset-env/src/normalize-options.js @@ -1,7 +1,7 @@ import invariant from "invariant"; import { electronToChromium } from "electron-to-chromium"; import builtInsList from "../data/built-ins.json"; -import defaultInclude from "./default-includes"; +import { defaultWebIncludes } from "./default-includes"; import moduleTransformations from "./module-transformations"; import pluginFeatures from "../data/plugin-features"; @@ -9,7 +9,7 @@ const validIncludesAndExcludes = [ ...Object.keys(pluginFeatures), ...Object.keys(moduleTransformations).map((m) => moduleTransformations[m]), ...Object.keys(builtInsList), - ...defaultInclude + ...defaultWebIncludes, ]; let hasBeenWarned = false; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/actual.js new file mode 100644 index 0000000000..d3984c50aa --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/actual.js @@ -0,0 +1 @@ +import "babel-polyfill"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/expected.js new file mode 100644 index 0000000000..66f45200d6 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/expected.js @@ -0,0 +1,7 @@ +import "core-js/modules/es7.string.pad-start"; +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"; +import "regenerator-runtime/runtime"; + diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/options.json new file mode 100644 index 0000000000..7d156cdc08 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node-web/options.json @@ -0,0 +1,13 @@ +{ + "presets": [ + ["../../../../lib", { + "targets": { + "chrome": 55, + "node": 7.6, + "uglify": true + }, + "modules": false, + "useBuiltIns": true + }] + ] +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/actual.js new file mode 100644 index 0000000000..d3984c50aa --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/actual.js @@ -0,0 +1 @@ +import "babel-polyfill"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/expected.js new file mode 100644 index 0000000000..5f61c3daf8 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/expected.js @@ -0,0 +1,4 @@ +import "core-js/modules/es7.string.pad-start"; +import "core-js/modules/es7.string.pad-end"; +import "regenerator-runtime/runtime"; + diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/options.json new file mode 100644 index 0000000000..cc2666d58a --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-node/options.json @@ -0,0 +1,12 @@ +{ + "presets": [ + ["../../../../lib", { + "targets": { + "node": 7.6, + "uglify": true + }, + "modules": false, + "useBuiltIns": true + }] + ] +}