_babel-node.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. "use strict";
  2. var _pathIsAbsolute = require("path-is-absolute");
  3. var _pathIsAbsolute2 = _interopRequireDefault(_pathIsAbsolute);
  4. var _commander = require("commander");
  5. var _commander2 = _interopRequireDefault(_commander);
  6. var _module2 = require("module");
  7. var _module3 = _interopRequireDefault(_module2);
  8. var _util = require("util");
  9. var _path = require("path");
  10. var _path2 = _interopRequireDefault(_path);
  11. var _repl = require("repl");
  12. var _repl2 = _interopRequireDefault(_repl);
  13. var _babelCore = require("babel-core");
  14. var babel = _interopRequireWildcard(_babelCore);
  15. var _vm = require("vm");
  16. var _vm2 = _interopRequireDefault(_vm);
  17. var _lodash = require("lodash");
  18. var _lodash2 = _interopRequireDefault(_lodash);
  19. require("babel-polyfill");
  20. var _babelRegister = require("babel-register");
  21. var _babelRegister2 = _interopRequireDefault(_babelRegister);
  22. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  23. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  24. var program = new _commander2.default.Command("babel-node");
  25. program.option("-e, --eval [script]", "Evaluate script");
  26. program.option("-p, --print [code]", "Evaluate script and print result");
  27. program.option("-o, --only [globs]", "");
  28. program.option("-i, --ignore [globs]", "");
  29. program.option("-x, --extensions [extensions]", "List of extensions to hook into [.es6,.js,.es,.jsx]");
  30. program.option("-w, --plugins [string]", "", _babelCore.util.list);
  31. program.option("-b, --presets [string]", "", _babelCore.util.list);
  32. var pkg = require("../package.json");
  33. program.version(pkg.version);
  34. program.usage("[options] [ -e script | script.js ] [arguments]");
  35. program.parse(process.argv);
  36. (0, _babelRegister2.default)({
  37. extensions: program.extensions,
  38. ignore: program.ignore,
  39. only: program.only,
  40. plugins: program.plugins,
  41. presets: program.presets
  42. });
  43. var replPlugin = function replPlugin() {
  44. return {
  45. visitor: {
  46. ModuleDeclaration: function ModuleDeclaration(path) {
  47. throw path.buildCodeFrameError("Modules aren't supported in the REPL");
  48. },
  49. VariableDeclaration: function VariableDeclaration(path) {
  50. if (path.node.kind !== "var") {
  51. throw path.buildCodeFrameError("Only `var` variables are supported in the REPL");
  52. }
  53. }
  54. }
  55. };
  56. };
  57. var _eval = function _eval(code, filename) {
  58. code = code.trim();
  59. if (!code) return undefined;
  60. code = babel.transform(code, {
  61. filename: filename,
  62. presets: program.presets,
  63. plugins: (program.plugins || []).concat([replPlugin])
  64. }).code;
  65. return _vm2.default.runInThisContext(code, {
  66. filename: filename
  67. });
  68. };
  69. if (program.eval || program.print) {
  70. var code = program.eval;
  71. if (!code || code === true) code = program.print;
  72. global.__filename = "[eval]";
  73. global.__dirname = process.cwd();
  74. var _module = new _module3.default(global.__filename);
  75. _module.filename = global.__filename;
  76. _module.paths = _module3.default._nodeModulePaths(global.__dirname);
  77. global.exports = _module.exports;
  78. global.module = _module;
  79. global.require = _module.require.bind(_module);
  80. var result = _eval(code, global.__filename);
  81. if (program.print) {
  82. var output = _lodash2.default.isString(result) ? result : (0, _util.inspect)(result);
  83. process.stdout.write(output + "\n");
  84. }
  85. } else {
  86. if (program.args.length) {
  87. (function () {
  88. var args = process.argv.slice(2);
  89. var i = 0;
  90. var ignoreNext = false;
  91. _lodash2.default.each(args, function (arg, i2) {
  92. if (ignoreNext) {
  93. ignoreNext = false;
  94. return;
  95. }
  96. if (arg[0] === "-") {
  97. var parsedArg = program[arg.slice(2)];
  98. if (parsedArg && parsedArg !== true) {
  99. ignoreNext = true;
  100. }
  101. } else {
  102. i = i2;
  103. return false;
  104. }
  105. });
  106. args = args.slice(i);
  107. var filename = args[0];
  108. if (!(0, _pathIsAbsolute2.default)(filename)) args[0] = _path2.default.join(process.cwd(), filename);
  109. process.argv = ["node"].concat(args);
  110. process.execArgv.unshift(__filename);
  111. _module3.default.runMain();
  112. })();
  113. } else {
  114. replStart();
  115. }
  116. }
  117. function replStart() {
  118. _repl2.default.start({
  119. prompt: "> ",
  120. input: process.stdin,
  121. output: process.stdout,
  122. eval: replEval,
  123. useGlobal: true
  124. });
  125. }
  126. function replEval(code, context, filename, callback) {
  127. var err = void 0;
  128. var result = void 0;
  129. try {
  130. if (code[0] === "(" && code[code.length - 1] === ")") {
  131. code = code.slice(1, -1);
  132. }
  133. result = _eval(code, filename);
  134. } catch (e) {
  135. err = e;
  136. }
  137. callback(err, result);
  138. }