Skip to content

Commit

Permalink
Inline regeneratorRuntime as a normal helper (#14538)
Browse files Browse the repository at this point in the history
Co-authored-by: Babel Bot <babel-bot@users.noreply.github.com>
  • Loading branch information
nicolo-ribaudo and babel-bot committed May 19, 2022
1 parent e57d081 commit e0a2a71
Show file tree
Hide file tree
Showing 88 changed files with 1,243 additions and 173 deletions.
26 changes: 16 additions & 10 deletions Gulpfile.mjs
Expand Up @@ -145,7 +145,14 @@ function generateTraverseHelpers(helperKind) {
);
}

function generateRuntimeHelpers() {
async function generateRuntimeHelpers() {
await generateHelpers(
`./packages/babel-helpers/scripts/generate-regenerator-runtime.js`,
`./packages/babel-helpers/src/helpers`,
"regeneratorRuntime.js",
"@babel/helpers -> regeneratorRuntime"
);

return generateHelpers(
`./packages/babel-helpers/scripts/generate-helpers.js`,
`./packages/babel-helpers/src/`,
Expand Down Expand Up @@ -340,6 +347,7 @@ function buildRollup(packages, targetBrowsers) {
include: [
/node_modules/,
"packages/babel-runtime/regenerator/**",
"packages/babel-runtime/helpers/*.js",
"packages/babel-preset-env/data/*.js",
// Rollup doesn't read export maps, so it loads the cjs fallback
"packages/babel-compat-data/*.js",
Expand All @@ -365,6 +373,7 @@ function buildRollup(packages, targetBrowsers) {
babelHelpers: "bundled",
extends: "./babel.config.js",
extensions: [".ts", ".js", ".mjs", ".cjs"],
ignore: ["packages/babel-runtime/helpers/*.js"],
}),
rollupNodeResolve({
extensions: [".ts", ".js", ".mjs", ".cjs", ".json"],
Expand Down Expand Up @@ -575,15 +584,12 @@ gulp.task(
"build",
gulp.series(
"build-vendor",
gulp.parallel("build-rollup", "build-babel", "generate-runtime-helpers"),
gulp.parallel(
"generate-standalone",
gulp.series(
"generate-type-helpers",
// rebuild @babel/types since type-helpers may be changed
"build-babel"
)
)
gulp.parallel("build-rollup", "build-babel"),
gulp.parallel("generate-type-helpers", "generate-runtime-helpers"),
// rebuild @babel/types and @babel/helpers since
// type-helpers and generated helpers may be changed
"build-babel",
"generate-standalone"
)
);

Expand Down
19 changes: 10 additions & 9 deletions Makefile
Expand Up @@ -188,15 +188,16 @@ prepublish:
IS_PUBLISH=true $(MAKE) test

new-version-checklist:
# @echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
# @echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
# @echo "!!!!!! !!!!!!"
# @echo "!!!!!! Write any message that should !!!!!!"
# @echo "!!!!!! block the release here !!!!!!"
# @echo "!!!!!! !!!!!!"
# @echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
# @echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
# @exit 1
@echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
@echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
@echo "!!!!!! !!!!!!"
@echo "!!!!!! Update the regeneratorRuntime helper version !!!!!!"
@echo "!!!!!! in generate-regenerator-runtime.js !!!!!!"
@echo "!!!!!! and re-build the runtime helpers !!!!!!"
@echo "!!!!!! !!!!!!"
@echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
@echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
@exit 1

new-version:
$(MAKE) new-version-checklist
Expand Down
Expand Up @@ -13,9 +13,9 @@ var Foo = /*#__PURE__*/function () {
babelHelpers.createClass(Foo, [{
key: "bar",
value: function () {
var _bar = babelHelpers.asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var _bar = babelHelpers.asyncToGenerator( /*#__PURE__*/babelHelpers.regeneratorRuntime().mark(function _callee() {
var baz;
return regeneratorRuntime.wrap(function _callee$(_context) {
return babelHelpers.regeneratorRuntime().wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
Expand Down Expand Up @@ -46,17 +46,17 @@ function foo() {
}

function _foo() {
_foo = babelHelpers.asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
_foo = babelHelpers.asyncToGenerator( /*#__PURE__*/babelHelpers.regeneratorRuntime().mark(function _callee3() {
var bar, _bar2;

return regeneratorRuntime.wrap(function _callee3$(_context3) {
return babelHelpers.regeneratorRuntime().wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_bar2 = function _bar4() {
_bar2 = babelHelpers.asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
_bar2 = babelHelpers.asyncToGenerator( /*#__PURE__*/babelHelpers.regeneratorRuntime().mark(function _callee2() {
var baz;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
return babelHelpers.regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
Expand Down
Expand Up @@ -20,8 +20,7 @@
"@babel/helper-check-duplicate-nodes": "workspace:^",
"@babel/helper-fixtures": "workspace:^",
"@jridgewell/trace-mapping": "^0.3.8",
"quick-lru": "5.1.0",
"regenerator-runtime": "^0.13.7"
"quick-lru": "5.1.0"
},
"devDependencies": {
"@types/jest": "^27.4.1"
Expand Down
Expand Up @@ -55,15 +55,6 @@ function createContext() {
const moduleCache = Object.create(null);
contextModuleCache.set(context, moduleCache);

// Initialize the test context with the polyfill, and then freeze the global to prevent implicit
// global creation in tests, which could cause things to bleed between tests.
runModuleInTestContext(
"regenerator-runtime",
fileURLToPath(import.meta.url),
context,
moduleCache,
);

// Populate the "babelHelpers" global with Babel's helper utilities.
runCacheableScriptInTestContext(
path.join(
Expand Down
3 changes: 3 additions & 0 deletions packages/babel-helpers/package.json
Expand Up @@ -20,7 +20,10 @@
"@babel/types": "workspace:^"
},
"devDependencies": {
"@babel/generator": "workspace:^",
"@babel/helper-plugin-test-runner": "workspace:^",
"@babel/parser": "workspace:^",
"regenerator-runtime": "^0.13.9",
"terser": "^5.9.0"
},
"engines": {
Expand Down
4 changes: 2 additions & 2 deletions packages/babel-helpers/scripts/generate-helpers.js
@@ -1,7 +1,7 @@
import fs from "fs";
import { join } from "path";
import { URL, fileURLToPath } from "url";
import { minify } from "terser"; // eslint-disable-line
import { minify } from "terser"; // eslint-disable-line import/no-extraneous-dependencies

const HELPERS_FOLDER = new URL("../src/helpers", import.meta.url);
const IGNORED_FILES = new Set(["package.json"]);
Expand All @@ -17,7 +17,7 @@ import template from "@babel/template";
function helper(minVersion, source) {
return Object.freeze({
minVersion,
ast: () => template.program.ast(source),
ast: () => template.program.ast(source, { preserveComments: true }),
})
}
Expand Down
64 changes: 64 additions & 0 deletions packages/babel-helpers/scripts/generate-regenerator-runtime.js
@@ -0,0 +1,64 @@
/* eslint-disable import/no-extraneous-dependencies */

import fs from "fs";
import { createRequire } from "module";

const [parse, generate] = await Promise.all([
import("@babel/parser").then(ns => ns.parse),
import("@babel/generator").then(ns => ns.default.default),
]).catch(error =>
Promise.reject(
new Error(
"Before running generate-helpers.js you must compile @babel/parser and @babel/generator.",
{ cause: error }
)
)
);

const REGENERATOR_RUNTIME_IN_FILE = fs.readFileSync(
createRequire(import.meta.url).resolve("regenerator-runtime"),
"utf8"
);

const MIN_VERSION = "7.17.9";

const HEADER = `/* @minVersion ${MIN_VERSION} */
/*
* This file is auto-generated! Do not modify it directly.
* To re-generate, update the regenerator-runtime dependency of
* @babel/helpers and run 'yarn gulp generate-runtime-helpers'.
*/
/* eslint-disable */
`;

const COPYRIGHT = `/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */`;

export default function generateRegeneratorRuntimeHelper() {
const ast = parse(REGENERATOR_RUNTIME_IN_FILE, { sourceType: "script" });

const factoryFunction = ast.program.body[0].declarations[0].init.callee;
factoryFunction.type = "FunctionDeclaration";
factoryFunction.id = { type: "Identifier", name: "_regeneratorRuntime" };
factoryFunction.params = [];
factoryFunction.body.body.unshift(
...stmts(`
${COPYRIGHT}
_regeneratorRuntime = function () { return exports; };
var exports = {};
`)
);

const { code } = generate({
type: "ExportDefaultDeclaration",
declaration: factoryFunction,
});

return HEADER + code;
}

function stmts(code) {
return parse(`function _() { ${code} }`, {
sourceType: "script",
}).program.body[0].body.body;
}

0 comments on commit e0a2a71

Please sign in to comment.