diff --git a/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js b/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js index 5fa0a21dba..6412dbe5af 100644 --- a/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js +++ b/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js @@ -1,13 +1,13 @@ const polyfillSource = "babel-polyfill"; export default function ({ types: t }) { - function addImport(polyfill) { + function createImportDeclaration(polyfill) { let declar = t.importDeclaration([], t.stringLiteral(`core-js/modules/${polyfill}`)); declar._blockHoist = 3; return declar; } - function addRequire(polyfill) { + function createRequireStatement(polyfill) { return t.expressionStatement( t.callExpression( t.identifier("require"), @@ -38,7 +38,9 @@ export default function ({ types: t }) { return; } - let imports = state.opts.polyfills.map((p) => addImport(p)); + let imports = state.opts.polyfills + .filter((el, i, arr) => arr.indexOf(el) === i) + .map((p) => createImportDeclaration(p)); path.replaceWithMultiple(imports); } }, @@ -58,7 +60,9 @@ to the "transform-polyfill-require" plugin return; } - let requires = state.opts.polyfills.map((p) => addRequire(p)); + let requires = state.opts.polyfills + .filter((el, i, arr) => arr.indexOf(el) === i) + .map((p) => createRequireStatement(p)); bodyPath.replaceWithMultiple(requires); } }); diff --git a/experimental/babel-preset-env/test/fixtures/plugin-options/filters-duplicates/actual.js b/experimental/babel-preset-env/test/fixtures/plugin-options/filters-duplicates/actual.js new file mode 100644 index 0000000000..d3984c50aa --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/plugin-options/filters-duplicates/actual.js @@ -0,0 +1 @@ +import "babel-polyfill"; diff --git a/experimental/babel-preset-env/test/fixtures/plugin-options/filters-duplicates/expected.js b/experimental/babel-preset-env/test/fixtures/plugin-options/filters-duplicates/expected.js new file mode 100644 index 0000000000..6a01cbb4c3 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/plugin-options/filters-duplicates/expected.js @@ -0,0 +1,2 @@ +import "core-js/modules/es6.typed.data-view"; +import "core-js/modules/es6.reflect.apply"; diff --git a/experimental/babel-preset-env/test/fixtures/plugin-options/filters-duplicates/options.json b/experimental/babel-preset-env/test/fixtures/plugin-options/filters-duplicates/options.json new file mode 100644 index 0000000000..66aa332f3b --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/plugin-options/filters-duplicates/options.json @@ -0,0 +1,11 @@ +{ + "plugins": [ + ["../../../../lib/transformPolyfillRequirePlugin", { + "polyfills": [ + "es6.typed.data-view", + "es6.typed.data-view", + "es6.reflect.apply" + ] + }] + ] +}