babel-node.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. case "--inspect":
  30. case "--inspect-brk":
  31. args.unshift(arg);
  32. break;
  33. case "-gc":
  34. args.unshift("--expose-gc");
  35. break;
  36. case "--nolazy":
  37. args.unshift(flag);
  38. break;
  39. default:
  40. if (v8Flags.indexOf(getNormalizedV8Flag(flag)) >= 0 || arg.indexOf("--trace") === 0) {
  41. args.unshift(arg);
  42. } else {
  43. args.push(arg);
  44. }
  45. break;
  46. }
  47. });
  48. if (argSeparator > -1) {
  49. args = args.concat(userArgs);
  50. }
  51. try {
  52. var kexec = require("kexec");
  53. kexec(process.argv[0], args);
  54. } catch (err) {
  55. if (err.code !== "MODULE_NOT_FOUND") throw err;
  56. var child_process = require("child_process");
  57. var proc = child_process.spawn(process.argv[0], args, { stdio: "inherit" });
  58. proc.on("exit", function (code, signal) {
  59. process.on("exit", function () {
  60. if (signal) {
  61. process.kill(process.pid, signal);
  62. } else {
  63. process.exit(code);
  64. }
  65. });
  66. });
  67. }
  68. });