From a209fadf1883e85ab4a1f7a6cfe65692687b0fff Mon Sep 17 00:00:00 2001 From: Steve Repsher Date: Mon, 1 May 2023 08:47:57 -0400 Subject: [PATCH] List Core JS polyfills for browserslist environments (#16356) --- build-scripts/list-plugins-and-polyfills.js | 59 +++++++++++++++++++++ build-scripts/list-preset-env-plugins.js | 30 ----------- 2 files changed, 59 insertions(+), 30 deletions(-) create mode 100755 build-scripts/list-plugins-and-polyfills.js delete mode 100755 build-scripts/list-preset-env-plugins.js diff --git a/build-scripts/list-plugins-and-polyfills.js b/build-scripts/list-plugins-and-polyfills.js new file mode 100755 index 0000000000..a0978e6dba --- /dev/null +++ b/build-scripts/list-plugins-and-polyfills.js @@ -0,0 +1,59 @@ +#!/usr/bin/env node +// Script to print Babel plugins and Core JS polyfills that will be used by browserslist environments + +import { version as babelVersion } from "@babel/core"; +import presetEnv from "@babel/preset-env"; +import compilationTargets from "@babel/helper-compilation-targets"; +import coreJSCompat from "core-js-compat"; +import { logPlugin } from "@babel/preset-env/lib/debug.js"; +import { babelOptions } from "./bundle.cjs"; + +const detailsOpen = (heading) => + `
\n

${heading}

\n`; +const detailsClose = "
\n"; + +const dummyAPI = { + version: babelVersion, + assertVersion: () => {}, + caller: (callback) => + callback({ + name: "Dummy Bundler", + supportsStaticESM: true, + supportsDynamicImport: true, + supportsTopLevelAwait: true, + supportsExportNamespaceFrom: true, + }), + targets: () => ({}), +}; + +for (const buildType of ["Modern", "Legacy"]) { + const browserslistEnv = buildType.toLowerCase(); + const babelOpts = babelOptions({ latestBuild: browserslistEnv === "modern" }); + const presetEnvOpts = babelOpts.presets[0][1]; + + // Invoking preset-env in debug mode will log the included plugins + console.log(detailsOpen(`${buildType} Build Babel Plugins`)); + presetEnv.default(dummyAPI, { + ...presetEnvOpts, + browserslistEnv, + debug: true, + }); + console.log(detailsClose); + + // Manually log the Core-JS polyfills using the same technique + if (presetEnvOpts.useBuiltIns) { + console.log(detailsOpen(`${buildType} Build Core-JS Polyfills`)); + const targets = compilationTargets.default(babelOpts?.targets, { + browserslistEnv, + }); + const polyfillList = coreJSCompat({ targets }).list; + console.log( + "The following %i polyfills may be injected by Babel:\n", + polyfillList.length + ); + for (const polyfill of polyfillList) { + logPlugin(polyfill, targets, coreJSCompat.data); + } + console.log(detailsClose); + } +} diff --git a/build-scripts/list-preset-env-plugins.js b/build-scripts/list-preset-env-plugins.js deleted file mode 100755 index 5e869a4ef1..0000000000 --- a/build-scripts/list-preset-env-plugins.js +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env node -// Script to print Babel plugins that will be used by browserslist environments - -import { version as babelVersion } from "@babel/core"; -import presetEnv from "@babel/preset-env"; -import { babelOptions } from "./bundle.cjs"; - -const dummyAPI = { - version: babelVersion, - assertVersion: () => {}, - caller: (callback) => - callback({ - name: "Dummy Bundler", - supportsStaticESM: true, - supportsDynamicImport: true, - supportsTopLevelAwait: true, - supportsExportNamespaceFrom: true, - }), - targets: () => ({}), -}; - -for (const browserslistEnv of ["modern", "legacy"]) { - console.log("\nBrowsersList Environment = %s\n", browserslistEnv); - presetEnv.default(dummyAPI, { - ...babelOptions({ latestBuild: browserslistEnv === "modern" }) - .presets[0][1], - browserslistEnv, - debug: true, - }); -}