Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement transform support for using declarations #15633

Merged
merged 22 commits into from May 24, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
43 changes: 34 additions & 9 deletions packages/babel-plugin-transform-runtime/scripts/build-dist.js
Expand Up @@ -12,6 +12,8 @@ import corejs2Definitions from "./runtime-corejs2-definitions.js";
import corejs3Definitions from "./runtime-corejs3-definitions.js";

import presetEnv from "@babel/preset-env";
import polyfillCorejs2 from "babel-plugin-polyfill-corejs2";
import polyfillCorejs3 from "babel-plugin-polyfill-corejs3";

const require = createRequire(import.meta.url);
const runtimeVersion = require("@babel/runtime/package.json").version;
Expand All @@ -21,10 +23,29 @@ function outputFile(filePath, data) {
fs.writeFileSync(filePath, data);
}

function corejsVersion(pkgName, depName) {
return require(`../../${pkgName}/package.json`).dependencies[depName];
}

writeHelpers("@babel/runtime");
writeHelpers("@babel/runtime-corejs2", { corejs: 2 });
writeHelpers("@babel/runtime-corejs2", {
polyfillProvider: [
polyfillCorejs2,
{
method: "usage-pure",
version: corejsVersion("babel-runtime-corejs2", "core-js"),
},
],
});
writeHelpers("@babel/runtime-corejs3", {
corejs: { version: 3, proposals: true },
polyfillProvider: [
polyfillCorejs3,
{
method: "usage-pure",
version: corejsVersion("babel-runtime-corejs3", "core-js-pure"),
proposals: true,
},
],
});

writeCoreJS({
Expand Down Expand Up @@ -119,7 +140,7 @@ function writeHelperFile(
pkgDirname,
helperPath,
helperName,
{ esm, corejs }
{ esm, polyfillProvider }
) {
const fileName = `${helperName}.js`;
const filePath = esm
Expand All @@ -129,13 +150,16 @@ function writeHelperFile(

outputFile(
fullPath,
buildHelper(runtimeName, pkgDirname, fullPath, helperName, { esm, corejs })
buildHelper(runtimeName, pkgDirname, fullPath, helperName, {
esm,
polyfillProvider,
})
);

return esm ? `./helpers/esm/${fileName}` : `./helpers/${fileName}`;
}

function writeHelpers(runtimeName, { corejs } = {}) {
function writeHelpers(runtimeName, { polyfillProvider } = {}) {
const pkgDirname = getRuntimeRoot(runtimeName);
const helperSubExports = {};
for (const helperName of helpers.list) {
Expand All @@ -145,14 +169,14 @@ function writeHelpers(runtimeName, { corejs } = {}) {
pkgDirname,
helperPath,
helperName,
{ esm: false, corejs }
{ esm: false, polyfillProvider }
);
const esm = writeHelperFile(
runtimeName,
pkgDirname,
helperPath,
helperName,
{ esm: true, corejs }
{ esm: true, polyfillProvider }
);

// Node.js versions >=13.0.0, <13.7.0 support the `exports` field but
Expand Down Expand Up @@ -215,7 +239,7 @@ function buildHelper(
pkgDirname,
helperFilename,
helperName,
{ esm, corejs }
{ esm, polyfillProvider }
) {
const tree = t.program([], [], esm ? "module" : "script");
const dependencies = {};
Expand Down Expand Up @@ -245,7 +269,8 @@ function buildHelper(
filename: helperFilename,
presets: [[presetEnv, { modules: false }]],
plugins: [
[transformRuntime, { corejs, version: runtimeVersion }],
polyfillProvider,
[transformRuntime, { version: runtimeVersion }],
buildRuntimeRewritePlugin(runtimeName, helperName),
esm ? null : addDefaultCJSExport,
].filter(Boolean),
Expand Down
6 changes: 3 additions & 3 deletions packages/babel-runtime-corejs2/helpers/esm/iterableToArray.js
@@ -1,6 +1,6 @@
import _Symbol from "@babel/runtime-corejs2/core-js/symbol";
import _Symbol$iterator from "@babel/runtime-corejs2/core-js/symbol/iterator";
import _Array$from from "@babel/runtime-corejs2/core-js/array/from";
import _Symbol from "core-js/library/fn/symbol.js";
import _Symbol$iterator from "core-js/library/fn/symbol/iterator.js";
import _Array$from from "core-js/library/fn/array/from.js";
export default function _iterableToArray(iter) {
if (typeof _Symbol !== "undefined" && iter[_Symbol$iterator] != null || iter["@@iterator"] != null) return _Array$from(iter);
}
6 changes: 3 additions & 3 deletions packages/babel-runtime-corejs2/helpers/iterableToArray.js
@@ -1,6 +1,6 @@
var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");
var _Symbol$iterator = require("@babel/runtime-corejs2/core-js/symbol/iterator");
var _Array$from = require("@babel/runtime-corejs2/core-js/array/from");
var _Symbol = require("core-js/library/fn/symbol.js");
var _Symbol$iterator = require("core-js/library/fn/symbol/iterator.js");
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a side effect of using babel-plugin-polyfill-corejs2 directly, but it's good: there is one less "proxy file" that does nothing other than re-exporting another file.

var _Array$from = require("core-js/library/fn/array/from.js");
function _iterableToArray(iter) {
if (typeof _Symbol !== "undefined" && iter[_Symbol$iterator] != null || iter["@@iterator"] != null) return _Array$from(iter);
}
Expand Down
4 changes: 2 additions & 2 deletions packages/babel-runtime-corejs2/helpers/typeof.js
@@ -1,5 +1,5 @@
var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");
var _Symbol$iterator = require("@babel/runtime-corejs2/core-js/symbol/iterator");
var _Symbol = require("core-js/library/fn/symbol.js");
var _Symbol$iterator = require("core-js/library/fn/symbol/iterator.js");
function _typeof(obj) {
"@babel/helpers - typeof";

Expand Down
13 changes: 7 additions & 6 deletions packages/babel-runtime-corejs3/helpers/dispose.js
@@ -1,17 +1,18 @@
var _Object$create = require("@babel/runtime-corejs3/core-js/object/create");
var _Promise = require("@babel/runtime-corejs3/core-js/promise");
var _SuppressedError = require("core-js-pure/features/suppressed-error.js");
var _Object$create = require("core-js-pure/features/object/create.js");
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now this is polyfilled :)

var _Promise = require("core-js-pure/features/promise/index.js");
function dispose_SuppressedError(suppressed, error) {
return dispose_SuppressedError = function dispose_SuppressedError(suppressed, error) {
return "undefined" != typeof _SuppressedError ? dispose_SuppressedError = _SuppressedError : (dispose_SuppressedError = function dispose_SuppressedError(suppressed, error) {
this.suppressed = suppressed, this.error = error, this.stack = new Error().stack;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it possible we're doing dead code elimination here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We minify helpers before injecting polyfills and not after, however any users bundling our helpers in a client-side bundle will usually re-minify them (all bundlers minify the end bundle, and not just the individual chunks) and this will be very easily eliminated :)

}, dispose_SuppressedError.prototype = _Object$create(Error.prototype, {
constructor: {
value: dispose_SuppressedError,
writable: !0,
configurable: !0
}
}), new dispose_SuppressedError(suppressed, error);
})), new dispose_SuppressedError(suppressed, error);
}
function _dispose(stack, error, hasError, SuppressedError) {
function _dispose(stack, error, hasError) {
function next() {
if (0 !== stack.length) {
var r = stack.pop();
Expand All @@ -26,7 +27,7 @@ function _dispose(stack, error, hasError, SuppressedError) {
if (hasError) throw error;
}
function err(e) {
return error = hasError ? new (SuppressedError || dispose_SuppressedError)(e, error) : e, hasError = !0, next();
return error = hasError ? new dispose_SuppressedError(e, error) : e, hasError = !0, next();
}
return next();
}
Expand Down
8 changes: 4 additions & 4 deletions packages/babel-runtime/helpers/dispose.js
@@ -1,15 +1,15 @@
function dispose_SuppressedError(suppressed, error) {
return dispose_SuppressedError = function dispose_SuppressedError(suppressed, error) {
return "undefined" != typeof SuppressedError ? dispose_SuppressedError = SuppressedError : (dispose_SuppressedError = function dispose_SuppressedError(suppressed, error) {
this.suppressed = suppressed, this.error = error, this.stack = new Error().stack;
}, dispose_SuppressedError.prototype = Object.create(Error.prototype, {
constructor: {
value: dispose_SuppressedError,
writable: !0,
configurable: !0
}
}), new dispose_SuppressedError(suppressed, error);
})), new dispose_SuppressedError(suppressed, error);
}
function _dispose(stack, error, hasError, SuppressedError) {
function _dispose(stack, error, hasError) {
function next() {
if (0 !== stack.length) {
var r = stack.pop();
Expand All @@ -24,7 +24,7 @@ function _dispose(stack, error, hasError, SuppressedError) {
if (hasError) throw error;
}
function err(e) {
return error = hasError ? new (SuppressedError || dispose_SuppressedError)(e, error) : e, hasError = !0, next();
return error = hasError ? new dispose_SuppressedError(e, error) : e, hasError = !0, next();
}
return next();
}
Expand Down