babel-node.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. "use strict";
  2. var _path = require("path");
  3. var _child_process = require("child_process");
  4. var _url = require("url");
  5. var _v8flags = require("v8flags");
  6. var _splitArgs = require("./split-args.js");
  7. var _programSetup = require("./program-setup.js");
  8. function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
  9. function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
  10. function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
  11. function getV8Flags() {
  12. function getNormalizedV8Flag(arg) {
  13. const matches = /--(?:no)?(.+)/.exec(arg);
  14. if (matches) {
  15. return `--${matches[1].replace(/_/g, "-")}`;
  16. }
  17. return arg;
  18. }
  19. return new Promise((resolve, reject) => {
  20. _v8flags((err, flags) => {
  21. if (err) {
  22. reject(err);
  23. return;
  24. }
  25. const flagsSet = new Set(flags.map(getNormalizedV8Flag));
  26. resolve(test => flagsSet.has(getNormalizedV8Flag(test)) || (process.allowedNodeEnvironmentFlags || require("node-environment-flags")).has(test));
  27. });
  28. });
  29. }
  30. const babelNodePath = _path.join(_path.dirname(__filename), "_babel-node");
  31. _asyncToGenerator(function* () {
  32. {
  33. const args = [babelNodePath];
  34. let babelArgs = process.argv.slice(2);
  35. let userArgs;
  36. const argSeparator = babelArgs.indexOf("--");
  37. if (argSeparator > -1) {
  38. userArgs = babelArgs.slice(argSeparator);
  39. babelArgs = babelArgs.slice(0, argSeparator);
  40. }
  41. const isV8flag = yield getV8Flags();
  42. for (let i = 0; i < babelArgs.length; i++) {
  43. const arg = babelArgs[i];
  44. const flag = arg.split("=")[0];
  45. if (flag === "-d") {
  46. args.unshift("--debug");
  47. continue;
  48. } else if (flag === "-gc") {
  49. args.unshift("--expose-gc");
  50. continue;
  51. } else if (flag === "-r" || flag === "--require") {
  52. args.push(flag);
  53. args.push(babelArgs[++i]);
  54. } else if (flag === "debug" || flag === "inspect" || isV8flag(flag)) {
  55. args.unshift(arg);
  56. } else {
  57. args.push(arg);
  58. }
  59. }
  60. if (argSeparator > -1) {
  61. args.push(...userArgs);
  62. }
  63. yield spawn(args);
  64. }
  65. })().catch(err => {
  66. console.error(err);
  67. process.exitCode = 1;
  68. });
  69. function spawn(_x) {
  70. return _spawn.apply(this, arguments);
  71. }
  72. function _spawn() {
  73. _spawn = _asyncToGenerator(function* (args) {
  74. try {
  75. const {
  76. default: kexec
  77. } = yield Promise.resolve().then(() => _interopRequireWildcard(require("kexec")));
  78. kexec(process.argv[0], args);
  79. } catch (err) {
  80. if (err.code !== "ERR_MODULE_NOT_FOUND" && err.code !== "MODULE_NOT_FOUND" && err.code !== "UNDECLARED_DEPENDENCY") {
  81. throw err;
  82. }
  83. const shouldPassthroughIPC = process.send !== undefined;
  84. const proc = _child_process.spawn(process.argv[0], args, {
  85. stdio: shouldPassthroughIPC ? ["inherit", "inherit", "inherit", "ipc"] : "inherit"
  86. });
  87. proc.on("exit", function (code, signal) {
  88. process.on("exit", function () {
  89. if (signal) {
  90. process.kill(process.pid, signal);
  91. } else {
  92. process.exitCode = code != null ? code : undefined;
  93. }
  94. });
  95. });
  96. if (shouldPassthroughIPC) {
  97. proc.on("message", message => process.send(message));
  98. }
  99. process.on("SIGINT", () => proc.kill("SIGINT"));
  100. process.on("SIGTERM", () => proc.kill("SIGTERM"));
  101. }
  102. });
  103. return _spawn.apply(this, arguments);
  104. }
  105. //# sourceMappingURL=babel-node.js.map