You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.8 KiB
64 lines
1.8 KiB
/* 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.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].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; |
|
}
|
|
|