babel-node.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. "use strict";
  2. var getV8Flags = require("v8flags");
  3. var path = require("path");
  4. var args = [path.join(__dirname, "_babel-node")];
  5. var babelArgs = process.argv.slice(2);
  6. var userArgs = void 0;
  7. var argSeparator = babelArgs.indexOf("--");
  8. if (argSeparator > -1) {
  9. userArgs = babelArgs.slice(argSeparator);
  10. babelArgs = babelArgs.slice(0, argSeparator);
  11. }
  12. function getNormalizedV8Flag(arg) {
  13. var matches = arg.match(/--(.+)/);
  14. if (matches) {
  15. return "--" + matches[1].replace(/-/g, "_");
  16. }
  17. return arg;
  18. }
  19. getV8Flags(function (err, v8Flags) {
  20. babelArgs.forEach(function (arg) {
  21. var flag = arg.split("=")[0];
  22. switch (flag) {
  23. case "-d":
  24. args.unshift("--debug");
  25. break;
  26. case "debug":
  27. case "--debug":
  28. case "--debug-brk":
  29. args.unshift(arg);
  30. break;
  31. case "-gc":
  32. args.unshift("--expose-gc");
  33. break;
  34. case "--inspect":
  35. case "--nolazy":
  36. args.unshift(flag);
  37. break;
  38. default:
  39. if (v8Flags.indexOf(getNormalizedV8Flag(flag)) >= 0 || arg.indexOf("--trace") === 0) {
  40. args.unshift(arg);
  41. } else {
  42. args.push(arg);
  43. }
  44. break;
  45. }
  46. });
  47. if (argSeparator > -1) {
  48. args = args.concat(userArgs);
  49. }
  50. try {
  51. var kexec = require("kexec");
  52. kexec(process.argv[0], args);
  53. } catch (err) {
  54. if (err.code !== "MODULE_NOT_FOUND") throw err;
  55. var child_process = require("child_process");
  56. var proc = child_process.spawn(process.argv[0], args, { stdio: "inherit" });
  57. proc.on("exit", function (code, signal) {
  58. process.on("exit", function () {
  59. if (signal) {
  60. process.kill(process.pid, signal);
  61. } else {
  62. process.exit(code);
  63. }
  64. });
  65. });
  66. }
  67. });