From 7127330f02b423d9cb0555b3d2a24dbccbc149b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 5 Mar 2020 02:35:31 +0100 Subject: [PATCH] Allow using `preset-env` with newer versions of `compat-data` (#11201) * Use ~ for preset-env's @babel/compat-data dependency * Revert "Use ~ for preset-env's @babel/compat-data dependency" This reverts commit e7d57c7894095d381670cddfbbce06bd2a480a32. * Allow using `preset-env` with newer versions of `compat-data` --- packages/babel-preset-env/src/index.js | 2 +- packages/babel-preset-env/src/normalize-options.js | 2 +- .../babel-preset-env/src/plugins-compat-data.js | 13 +++++++++++++ packages/babel-preset-env/test/index.spec.js | 10 ++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 packages/babel-preset-env/src/plugins-compat-data.js diff --git a/packages/babel-preset-env/src/index.js b/packages/babel-preset-env/src/index.js index 8ff9d72e5caf..ea4c449283a8 100644 --- a/packages/babel-preset-env/src/index.js +++ b/packages/babel-preset-env/src/index.js @@ -6,7 +6,7 @@ import getOptionSpecificExcludesFor from "./get-option-specific-excludes"; import { removeUnnecessaryItems } from "./filter-items"; import moduleTransformations from "./module-transformations"; import normalizeOptions from "./normalize-options"; -import pluginList from "@babel/compat-data/plugins"; +import pluginList from "./plugins-compat-data"; import { proposalPlugins, pluginSyntaxMap } from "../data/shipped-proposals"; import overlappingPlugins from "@babel/compat-data/overlapping-plugins"; diff --git a/packages/babel-preset-env/src/normalize-options.js b/packages/babel-preset-env/src/normalize-options.js index 667805bb5703..212beb51a043 100644 --- a/packages/babel-preset-env/src/normalize-options.js +++ b/packages/babel-preset-env/src/normalize-options.js @@ -4,7 +4,7 @@ import findSuggestion from "levenary"; import invariant from "invariant"; import { coerce, SemVer } from "semver"; import corejs2Polyfills from "@babel/compat-data/corejs2-built-ins"; -import pluginsList from "@babel/compat-data/plugins"; +import pluginsList from "./plugins-compat-data"; import moduleTransformations from "./module-transformations"; import { TopLevelOptions, ModulesOption, UseBuiltInsOption } from "./options"; import { defaultWebIncludes } from "./polyfills/corejs2/get-platform-specific-default"; diff --git a/packages/babel-preset-env/src/plugins-compat-data.js b/packages/babel-preset-env/src/plugins-compat-data.js new file mode 100644 index 000000000000..14c9a97c4278 --- /dev/null +++ b/packages/babel-preset-env/src/plugins-compat-data.js @@ -0,0 +1,13 @@ +// @flow + +import plugins from "@babel/compat-data/plugins"; +import availablePlugins from "./available-plugins"; + +const filtered = {}; +for (const plugin of Object.keys(plugins)) { + if (Object.hasOwnProperty.call(availablePlugins, plugin)) { + filtered[plugin] = plugins[plugin]; + } +} + +export { filtered as default }; diff --git a/packages/babel-preset-env/test/index.spec.js b/packages/babel-preset-env/test/index.spec.js index ded00e6c2e14..f275da47abf2 100644 --- a/packages/babel-preset-env/test/index.spec.js +++ b/packages/babel-preset-env/test/index.spec.js @@ -15,6 +15,9 @@ const removeRegeneratorEntryPlugin = require("../lib/polyfills/regenerator/entry .default; const transformations = require("../lib/module-transformations").default; +const compatData = require("@babel/compat-data/plugins"); +const availablePlugins = require("../lib/available-plugins").default; + describe("babel-preset-env", () => { describe("transformIncludesAndExcludes", () => { it("should return in transforms array", () => { @@ -248,4 +251,11 @@ describe("babel-preset-env", () => { }); }); }); + + it("available-plugins is in sync with @babel/compat-data", () => { + const arrAvailablePlugins = Object.keys(availablePlugins).sort(); + const arrCompatData = Object.keys(compatData).sort(); + + expect(arrAvailablePlugins).toEqual(expect.arrayContaining(arrCompatData)); + }); });