List Core JS polyfills for browserslist environments (#16356)
parent
9f1bd1e085
commit
a209fadf18
|
@ -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) =>
|
||||||
|
`<details>\n<summary><h4>${heading}</h4></summary>\n`;
|
||||||
|
const detailsClose = "</details>\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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
|
||||||
});
|
|
||||||
}
|
|
Loading…
Reference in New Issue