diff --git a/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js b/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js index a95339606c..674bdf8112 100644 --- a/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js +++ b/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js @@ -2,14 +2,8 @@ // or if more than one is found const polyfillSource = "babel-polyfill"; -let numPolyfillImports = 0; export default function ({ types: t }) { - function checkNumPolyfillImports() { - numPolyfillImports++; - return numPolyfillImports > 1; - } - function addImport(polyfill) { let declar = t.importDeclaration([], t.stringLiteral(`core-js/modules/${polyfill}`)); declar._blockHoist = 3; @@ -41,7 +35,8 @@ export default function ({ types: t }) { ImportDeclaration(path, state) { if (path.node.specifiers.length === 0 && path.node.source.value === polyfillSource) { - if (checkNumPolyfillImports()) { + this.numPolyfillImports++; + if (this.numPolyfillImports > 1) { path.remove(); return; } @@ -53,19 +48,19 @@ export default function ({ types: t }) { Program(path, state) { if (!state.opts.polyfills) { throw path.buildCodeFrameError(` -"polyfills" option not correctly passed -to the transform-polyfill-require plugin -in babel-preset-env +There was an issue in "babel-preset-env" such that +the "polyfills" option was not correctly passed +to the "transform-polyfill-require" plugin `); } path.get("body").forEach((bodyPath) => { if (isRequire(bodyPath, polyfillSource)) { - if (checkNumPolyfillImports()) { + this.numPolyfillImports++; + if (this.numPolyfillImports > 1) { path.remove(); return; } - let requires = state.opts.polyfills.map((p) => addRequire(p)); bodyPath.replaceWithMultiple(requires); } @@ -75,6 +70,9 @@ in babel-preset-env return { name: "transform-polyfill-require", - visitor: isPolyfillImport + visitor: isPolyfillImport, + pre() { + this.numPolyfillImports = 0; + } }; } diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-chrome-55/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-chrome-55/actual.js deleted file mode 100644 index cb706b1a18..0000000000 --- a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-chrome-55/actual.js +++ /dev/null @@ -1 +0,0 @@ -1 ** 2; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-chrome-55/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-chrome-55/expected.js deleted file mode 100644 index cb706b1a18..0000000000 --- a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-chrome-55/expected.js +++ /dev/null @@ -1 +0,0 @@ -1 ** 2; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-import/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-import/actual.js new file mode 100644 index 0000000000..7d70ec7d7b --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-import/actual.js @@ -0,0 +1,2 @@ +import "babel-polyfill"; +1 ** 2; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-import/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-import/expected.js new file mode 100644 index 0000000000..2a549c9084 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-import/expected.js @@ -0,0 +1,8 @@ +import "core-js/modules/es6.typed.data-view"; +import "core-js/modules/es6.reflect.apply"; +import "core-js/modules/es6.reflect.own-keys"; +import "core-js/modules/es6.symbol.iterator"; +import "core-js/modules/es6.symbol.species"; +import "core-js/modules/es6.array.from"; + +1 ** 2; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-chrome-55/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-import/options.json similarity index 86% rename from experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-chrome-55/options.json rename to experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-import/options.json index 5199920de8..de09fa3f05 100644 --- a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-chrome-55/options.json +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-import/options.json @@ -2,7 +2,7 @@ "presets": [ ["../../../../lib", { "targets": { - "chrome": 54 + "chrome": 55 }, "modules": false, "useBuiltIns": true diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-multiple-imports/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-multiple-imports/actual.js new file mode 100644 index 0000000000..0ceedeffbd --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-multiple-imports/actual.js @@ -0,0 +1,3 @@ +import "babel-polyfill"; +import "babel-polyfill"; +1 ** 2; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-multiple-imports/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-multiple-imports/expected.js new file mode 100644 index 0000000000..63154103bd --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-multiple-imports/expected.js @@ -0,0 +1,8 @@ +import "core-js/modules/es6.typed.data-view"; +import "core-js/modules/es6.reflect.apply"; +import "core-js/modules/es6.reflect.own-keys"; +import "core-js/modules/es6.symbol.iterator"; +import "core-js/modules/es6.symbol.species"; +import "core-js/modules/es6.array.from"; + +1 ** 2; \ No newline at end of file diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-multiple-imports/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-multiple-imports/options.json new file mode 100644 index 0000000000..de09fa3f05 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-multiple-imports/options.json @@ -0,0 +1,11 @@ +{ + "presets": [ + ["../../../../lib", { + "targets": { + "chrome": 55 + }, + "modules": false, + "useBuiltIns": true + }] + ] +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-require/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-require/actual.js new file mode 100644 index 0000000000..e17e21f341 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-require/actual.js @@ -0,0 +1,3 @@ +require("babel-polyfill"); + +1 ** 2; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-require/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-require/expected.js new file mode 100644 index 0000000000..68b7a9e2db --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-require/expected.js @@ -0,0 +1,13 @@ +require("core-js/modules/es6.typed.data-view"); + +require("core-js/modules/es6.reflect.apply"); + +require("core-js/modules/es6.reflect.own-keys"); + +require("core-js/modules/es6.symbol.iterator"); + +require("core-js/modules/es6.symbol.species"); + +require("core-js/modules/es6.array.from"); + +1 ** 2; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-require/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-require/options.json new file mode 100644 index 0000000000..de09fa3f05 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-require/options.json @@ -0,0 +1,11 @@ +{ + "presets": [ + ["../../../../lib", { + "targets": { + "chrome": 55 + }, + "modules": false, + "useBuiltIns": true + }] + ] +}