generate-regenerator-runtime.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import fs from "fs";
  2. import { createRequire } from "module";
  3. const [parse, generate] = await Promise.all([
  4. import("@babel/parser").then(ns => ns.parse),
  5. import("@babel/generator").then(ns => ns.default.default || ns.default),
  6. ]).catch(error => {
  7. console.error(error);
  8. throw new Error(
  9. "Before running generate-helpers.js you must compile @babel/parser and @babel/generator.",
  10. { cause: error }
  11. );
  12. });
  13. const REGENERATOR_RUNTIME_IN_FILE = fs.readFileSync(
  14. createRequire(import.meta.url).resolve("regenerator-runtime"),
  15. "utf8"
  16. );
  17. const MIN_VERSION = "7.18.0";
  18. const HEADER = `/* @minVersion ${MIN_VERSION} */
  19. /*
  20. * This file is auto-generated! Do not modify it directly.
  21. * To re-generate, update the regenerator-runtime dependency of
  22. * @babel/helpers and run 'yarn gulp generate-runtime-helpers'.
  23. */
  24. /* eslint-disable */
  25. `;
  26. const COPYRIGHT = `/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */`;
  27. export default function generateRegeneratorRuntimeHelper() {
  28. const ast = parse(REGENERATOR_RUNTIME_IN_FILE, { sourceType: "script" });
  29. const factoryFunction = ast.program.body[0].declarations[0].init.callee;
  30. factoryFunction.type = "FunctionDeclaration";
  31. factoryFunction.id = { type: "Identifier", name: "_regeneratorRuntime" };
  32. factoryFunction.params = [];
  33. factoryFunction.body.body.unshift(
  34. ...stmts(`
  35. ${COPYRIGHT}
  36. _regeneratorRuntime = function () { return exports; };
  37. var exports = {};
  38. `)
  39. );
  40. const { code } = generate({
  41. type: "ExportDefaultDeclaration",
  42. declaration: factoryFunction,
  43. });
  44. return HEADER + code;
  45. }
  46. function stmts(code) {
  47. return parse(`function _() { ${code} }`, {
  48. sourceType: "script",
  49. }).program.body[0].body.body;
  50. }