diff --git a/build-scripts/bundle.cjs b/build-scripts/bundle.cjs index e5b41979ca8e..ec800f9f57df 100644 --- a/build-scripts/bundle.cjs +++ b/build-scripts/bundle.cjs @@ -100,6 +100,7 @@ module.exports.babelOptions = ({ latestBuild, isProdBuild, isTestBuild }) => ({ useBuiltIns: latestBuild ? false : "entry", corejs: latestBuild ? false : { version: "3.32", proposals: true }, bugfixes: true, + shippedProposals: true, }, ], "@babel/preset-typescript", diff --git a/build-scripts/list-plugins-and-polyfills.js b/build-scripts/list-plugins-and-polyfills.js index a0978e6dba75..abda2ca1ed2d 100755 --- a/build-scripts/list-plugins-and-polyfills.js +++ b/build-scripts/list-plugins-and-polyfills.js @@ -6,6 +6,8 @@ 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"; +// eslint-disable-next-line import/no-relative-packages +import shippedPolyfills from "../node_modules/babel-plugin-polyfill-corejs3/lib/shipped-proposals.js"; import { babelOptions } from "./bundle.cjs"; const detailsOpen = (heading) => @@ -26,6 +28,22 @@ const dummyAPI = { targets: () => ({}), }; +// Generate filter function based on proposal/method inputs +// Copied and adapted from babel-plugin-polyfill-corejs3/esm/index.mjs +const polyfillFilter = (method, proposals, shippedProposals) => (name) => { + if (proposals || method === "entry-global") return true; + if (shippedProposals && shippedPolyfills.default.has(name)) { + return true; + } + if (name.startsWith("esnext.")) { + const esName = `es.${name.slice(7)}`; + // If its imaginative esName is not in latest compat data, it means the proposal is not stage 4 + return esName in coreJSCompat.data; + } + return true; +}; + +// Log the plugins and polyfills for each build environment for (const buildType of ["Modern", "Legacy"]) { const browserslistEnv = buildType.toLowerCase(); const babelOpts = babelOptions({ latestBuild: browserslistEnv === "modern" }); @@ -46,7 +64,13 @@ for (const buildType of ["Modern", "Legacy"]) { const targets = compilationTargets.default(babelOpts?.targets, { browserslistEnv, }); - const polyfillList = coreJSCompat({ targets }).list; + const polyfillList = coreJSCompat({ targets }).list.filter( + polyfillFilter( + `${presetEnvOpts.useBuiltIns}-global`, + presetEnvOpts?.corejs?.proposals, + presetEnvOpts?.shippedProposals + ) + ); console.log( "The following %i polyfills may be injected by Babel:\n", polyfillList.length