diff --git a/packages/babel-preset-env/src/normalize-options.js b/packages/babel-preset-env/src/normalize-options.js index 75144356e1..77ea2cd0cf 100644 --- a/packages/babel-preset-env/src/normalize-options.js +++ b/packages/babel-preset-env/src/normalize-options.js @@ -76,7 +76,7 @@ const validBrowserslistTargets = [ ]; export const normalizePluginName = (plugin: string): string => - plugin.replace(/^babel-plugin-/, ""); + plugin.replace(/^(@babel\/|babel-)(plugin-)?/, ""); export const checkDuplicateIncludeExcludes = ( include: Array = [], diff --git a/packages/babel-preset-env/test/fixtures/preset-options/include-scoped/input.mjs b/packages/babel-preset-env/test/fixtures/preset-options/include-scoped/input.mjs new file mode 100644 index 0000000000..4e6a6de653 --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/preset-options/include-scoped/input.mjs @@ -0,0 +1 @@ +class Foo {} diff --git a/packages/babel-preset-env/test/fixtures/preset-options/include-scoped/options.json b/packages/babel-preset-env/test/fixtures/preset-options/include-scoped/options.json new file mode 100644 index 0000000000..e990f37eb8 --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/preset-options/include-scoped/options.json @@ -0,0 +1,14 @@ +{ + "presets": [ + [ + "../../../../lib", + { + "targets": { + "chrome": 61 + }, + "include": ["@babel/plugin-transform-classes"], + "modules": false + } + ] + ] +} diff --git a/packages/babel-preset-env/test/fixtures/preset-options/include-scoped/output.mjs b/packages/babel-preset-env/test/fixtures/preset-options/include-scoped/output.mjs new file mode 100644 index 0000000000..0040583f47 --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/preset-options/include-scoped/output.mjs @@ -0,0 +1,5 @@ +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +let Foo = function Foo() { + _classCallCheck(this, Foo); +}; diff --git a/packages/babel-preset-env/test/normalize-options.spec.js b/packages/babel-preset-env/test/normalize-options.spec.js index 7a0f481f7b..fa08252160 100644 --- a/packages/babel-preset-env/test/normalize-options.spec.js +++ b/packages/babel-preset-env/test/normalize-options.spec.js @@ -12,11 +12,30 @@ describe("normalize-options", () => { describe("normalizeOptions", () => { it("should return normalized `include` and `exclude`", () => { const normalized = normalizeOptions.default({ - include: ["babel-plugin-transform-spread", "transform-classes"], + include: [ + "babel-plugin-transform-spread", + "transform-classes", + "@babel/plugin-transform-unicode-regex", + "@babel/transform-block-scoping", + ], + exclude: [ + "babel-plugin-transform-for-of", + "transform-parameters", + "@babel/plugin-transform-regenerator", + "@babel/transform-new-target", + ], }); expect(normalized.include).toEqual([ "transform-spread", "transform-classes", + "transform-unicode-regex", + "transform-block-scoping", + ]); + expect(normalized.exclude).toEqual([ + "transform-for-of", + "transform-parameters", + "transform-regenerator", + "transform-new-target", ]); }); @@ -25,15 +44,26 @@ describe("normalize-options", () => { expect(normalized).toBe("prefix-babel-plugin-postfix"); }); - it("should throw if duplicate names in `include` and `exclude`", () => { - const normalizeWithSameIncludes = () => { - normalizeOptions.default({ - include: ["babel-plugin-transform-spread"], - exclude: ["transform-spread"], - }); - }; - expect(normalizeWithSameIncludes).toThrow(); - }); + test.each` + include | exclude + ${["babel-plugin-transform-spread"]} | ${["transform-spread"]} + ${["@babel/plugin-transform-spread"]} | ${["transform-spread"]} + ${["transform-spread"]} | ${["babel-plugin-transform-spread"]} + ${["transform-spread"]} | ${["@babel/plugin-transform-spread"]} + ${["babel-plugin-transform-spread"]} | ${["@babel/plugin-transform-spread"]} + ${["@babel/plugin-transform-spread"]} | ${["babel-plugin-transform-spread"]} + ${["@babel/plugin-transform-spread"]} | ${["@babel/transform-spread"]} + ${["@babel/transform-spread"]} | ${["@babel/plugin-transform-spread"]} + ${["babel-plugin-transform-spread"]} | ${["@babel/transform-spread"]} + ${["@babel/transform-spread"]} | ${["babel-plugin-transform-spread"]} + `( + "should throw if with includes $include and excludes $exclude", + ({ include, exclude }) => { + expect(() => + normalizeOptions.default({ include, exclude }), + ).toThrowError(/were found in both/); + }, + ); }); describe("Config format validation", () => {