From 8e2aa8299197afffa441c48c441c7842bbce7e43 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Tue, 6 Dec 2016 14:31:16 -0500 Subject: [PATCH] also transform 'core-js' --- experimental/babel-preset-env/README.md | 9 +++++++++ .../src/transformPolyfillRequirePlugin.js | 12 +++++++----- .../test/fixtures/preset-options/core-js/actual.js | 1 + .../test/fixtures/preset-options/core-js/expected.js | 2 ++ .../fixtures/preset-options/core-js/options.json | 11 +++++++++++ .../fixtures/preset-options/no-transform/actual.js | 2 ++ .../fixtures/preset-options/no-transform/expected.js | 2 ++ .../preset-options/no-transform/options.json | 11 +++++++++++ 8 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/core-js/actual.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/core-js/expected.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/core-js/options.json create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/no-transform/actual.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/no-transform/expected.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/no-transform/options.json diff --git a/experimental/babel-preset-env/README.md b/experimental/babel-preset-env/README.md index 6a2f4ee669..704bb2f964 100644 --- a/experimental/babel-preset-env/README.md +++ b/experimental/babel-preset-env/README.md @@ -126,6 +126,9 @@ Defaults to `false`. A way to apply `babel-preset-env` for polyfills (via "babel-polyfill"). +> NOTE: This does not currently polyfill experimental/stage-x built-ins like the regular "babel-polyfill" does. +> This will only work with npm >= 3 (which should be used with Babel 6 anyway) + ``` npm install babel-polyfill --save ``` @@ -151,6 +154,12 @@ import "core-js/modules/es6.symbol.species"; import "core-js/modules/es6.array.from"; ``` +> This will also work for "core-js" directly (`import "core-js";`) + +``` +npm install core-js --save +``` + --- ## Examples diff --git a/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js b/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js index 6412dbe5af..16af0c7be1 100644 --- a/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js +++ b/experimental/babel-preset-env/src/transformPolyfillRequirePlugin.js @@ -1,4 +1,6 @@ -const polyfillSource = "babel-polyfill"; +function isPolyfillSource(value) { + return value === "babel-polyfill" || value === "core-js"; +} export default function ({ types: t }) { function createImportDeclaration(polyfill) { @@ -18,20 +20,20 @@ export default function ({ types: t }) { ); } - function isRequire(path, source) { + function isRequire(path) { return t.isExpressionStatement(path.node) && t.isCallExpression(path.node.expression) && t.isIdentifier(path.node.expression.callee) && path.node.expression.callee.name === "require" && path.node.expression.arguments.length === 1 && t.isStringLiteral(path.node.expression.arguments[0]) && - path.node.expression.arguments[0].value === source; + isPolyfillSource(path.node.expression.arguments[0].value); } const isPolyfillImport = { ImportDeclaration(path, state) { if (path.node.specifiers.length === 0 && - path.node.source.value === polyfillSource) { + isPolyfillSource(path.node.source.value)) { this.numPolyfillImports++; if (this.numPolyfillImports > 1) { path.remove(); @@ -53,7 +55,7 @@ to the "transform-polyfill-require" plugin `); } path.get("body").forEach((bodyPath) => { - if (isRequire(bodyPath, polyfillSource)) { + if (isRequire(bodyPath)) { this.numPolyfillImports++; if (this.numPolyfillImports > 1) { path.remove(); diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/core-js/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/core-js/actual.js new file mode 100644 index 0000000000..c3fee8a175 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/core-js/actual.js @@ -0,0 +1 @@ +import "core-js"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/core-js/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/core-js/expected.js new file mode 100644 index 0000000000..531f909e8e --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/core-js/expected.js @@ -0,0 +1,2 @@ +import "core-js/modules/es7.string.pad-start"; +import "core-js/modules/es7.string.pad-end"; \ No newline at end of file diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/core-js/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/core-js/options.json new file mode 100644 index 0000000000..de09fa3f05 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/core-js/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/no-transform/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/no-transform/actual.js new file mode 100644 index 0000000000..31f2d79f9a --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/no-transform/actual.js @@ -0,0 +1,2 @@ +import "not-core-js"; +import "not-babel-polyfill"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/no-transform/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/no-transform/expected.js new file mode 100644 index 0000000000..e6e20a7905 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/no-transform/expected.js @@ -0,0 +1,2 @@ +import "not-core-js"; +import "not-babel-polyfill"; \ No newline at end of file diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/no-transform/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/no-transform/options.json new file mode 100644 index 0000000000..de09fa3f05 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/no-transform/options.json @@ -0,0 +1,11 @@ +{ + "presets": [ + ["../../../../lib", { + "targets": { + "chrome": 55 + }, + "modules": false, + "useBuiltIns": true + }] + ] +}