mirror of
https://github.com/hanzoai/babel.git
synced 2026-09-24 16:56:45 +00:00
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import fs from "node:fs";
|
|
import type * as t from "@babel/types";
|
|
|
|
const [parse, generate] = await Promise.all([
|
|
import("@babel/parser").then(ns => ns.parse),
|
|
import("@babel/generator").then(ns => ns.default),
|
|
]).catch(error => {
|
|
console.error(error);
|
|
throw new Error(
|
|
"Before running generate-helpers.js you must compile @babel/parser and @babel/generator.",
|
|
{ cause: error }
|
|
);
|
|
});
|
|
|
|
const REGENERATOR_RUNTIME_IN_FILE = fs.readFileSync(
|
|
import.meta.resolve("regenerator-runtime"),
|
|
"utf8"
|
|
);
|
|
|
|
const MIN_VERSION = "7.18.0";
|
|
|
|
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] as t.VariableDeclaration).declarations[0]
|
|
.init as t.CallExpression
|
|
).callee as t.FunctionExpression;
|
|
// @ts-expect-error Manipulating the AST
|
|
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: string) {
|
|
return (
|
|
parse(`function _() { ${code} }`, {
|
|
sourceType: "script",
|
|
}).program.body[0] as t.FunctionDeclaration
|
|
).body.body;
|
|
}
|