From de3597983a6f3fec92395caf0d6b892ba545573e Mon Sep 17 00:00:00 2001 From: Artem Yavorsky Date: Wed, 15 Nov 2017 22:13:59 +0200 Subject: [PATCH] [preset-env] Exclude transform-typeof-symbol with `loose` option. (#6831) --- experimental/babel-preset-env/src/index.js | 25 ++++++++++++++++--- .../loose-typeof-symbol/actual.js | 1 + .../loose-typeof-symbol/expected.js | 1 + .../loose-typeof-symbol/options.json | 7 ++++++ .../actual.js | 1 + .../expected.js | 3 +++ .../options.json | 8 ++++++ 7 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/actual.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/expected.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/options.json create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/actual.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/expected.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/options.json diff --git a/experimental/babel-preset-env/src/index.js b/experimental/babel-preset-env/src/index.js index ac1457690a..b9ad693828 100644 --- a/experimental/babel-preset-env/src/index.js +++ b/experimental/babel-preset-env/src/index.js @@ -111,12 +111,25 @@ const getPlatformSpecificDefaultFor = (targets: Targets): ?Array => { return isAnyTarget || isWebTarget ? defaultWebIncludes : null; }; +const getOptionSpecificExcludesFor = ({ + loose, +}: { + loose: boolean, +}): Array => { + const defaultExcludes = []; + if (loose) { + defaultExcludes.push("transform-typeof-symbol"); + } + return defaultExcludes; +}; + const filterItems = ( list, includes, excludes, targets, - defaultItems, + defaultIncludes, + defaultExcludes, ): Set => { const result = new Set(); @@ -135,8 +148,12 @@ const filterItems = ( } } - if (defaultItems) { - defaultItems.forEach(item => !excludes.has(item) && result.add(item)); + if (defaultIncludes) { + defaultIncludes.forEach(item => !excludes.has(item) && result.add(item)); + } + + if (defaultExcludes) { + defaultExcludes.forEach(item => !includes.has(item) && result.delete(item)); } return result; @@ -187,6 +204,8 @@ export default function buildPreset( include.plugins, exclude.plugins, transformTargets, + null, + getOptionSpecificExcludesFor({ loose }), ); let polyfills; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/actual.js new file mode 100644 index 0000000000..6d69e92eaa --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/actual.js @@ -0,0 +1 @@ +typeof Symbol(); diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/expected.js new file mode 100644 index 0000000000..6d69e92eaa --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/expected.js @@ -0,0 +1 @@ +typeof Symbol(); diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/options.json new file mode 100644 index 0000000000..ad68441695 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/loose-typeof-symbol/options.json @@ -0,0 +1,7 @@ +{ + "presets": [ + ["../../../../lib", { + "loose": true + }] + ] +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/actual.js new file mode 100644 index 0000000000..6d69e92eaa --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/actual.js @@ -0,0 +1 @@ +typeof Symbol(); diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/expected.js new file mode 100644 index 0000000000..9128c9a7f2 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/expected.js @@ -0,0 +1,3 @@ +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +_typeof(Symbol()); \ No newline at end of file diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/options.json new file mode 100644 index 0000000000..6a0801273e --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/loose-with-typeof-symbol-includes/options.json @@ -0,0 +1,8 @@ +{ + "presets": [ + ["../../../../lib", { + "loose": true, + "include": ["transform-typeof-symbol"] + }] + ] +}