UNPKG

4.99 kBJavaScriptView Raw
1"use strict";
2
3var _pathIsAbsolute = require("path-is-absolute");
4
5var _pathIsAbsolute2 = _interopRequireDefault(_pathIsAbsolute);
6
7var _commander = require("commander");
8
9var _commander2 = _interopRequireDefault(_commander);
10
11var _module2 = require("module");
12
13var _module3 = _interopRequireDefault(_module2);
14
15var _util = require("util");
16
17var _path = require("path");
18
19var _path2 = _interopRequireDefault(_path);
20
21var _repl = require("repl");
22
23var _repl2 = _interopRequireDefault(_repl);
24
25var _babelCore = require("babel-core");
26
27var babel = _interopRequireWildcard(_babelCore);
28
29var _vm = require("vm");
30
31var _vm2 = _interopRequireDefault(_vm);
32
33require("babel-polyfill");
34
35var _babelRegister = require("babel-register");
36
37var _babelRegister2 = _interopRequireDefault(_babelRegister);
38
39function _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; } }
40
41function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
42
43var program = new _commander2.default.Command("babel-node");
44
45program.option("-e, --eval [script]", "Evaluate script");
46program.option("-p, --print [code]", "Evaluate script and print result");
47program.option("-o, --only [globs]", "");
48program.option("-i, --ignore [globs]", "");
49program.option("-x, --extensions [extensions]", "List of extensions to hook into [.es6,.js,.es,.jsx]");
50program.option("-w, --plugins [string]", "", _babelCore.util.list);
51program.option("-b, --presets [string]", "", _babelCore.util.list);
52
53var pkg = require("../package.json");
54program.version(pkg.version);
55program.usage("[options] [ -e script | script.js ] [arguments]");
56program.parse(process.argv);
57
58(0, _babelRegister2.default)({
59 extensions: program.extensions,
60 ignore: program.ignore,
61 only: program.only,
62 plugins: program.plugins,
63 presets: program.presets
64});
65
66var replPlugin = function replPlugin(_ref) {
67 var t = _ref.types;
68 return {
69 visitor: {
70 ModuleDeclaration: function ModuleDeclaration(path) {
71 throw path.buildCodeFrameError("Modules aren't supported in the REPL");
72 },
73 VariableDeclaration: function VariableDeclaration(path) {
74 if (path.node.kind !== "var") {
75 throw path.buildCodeFrameError("Only `var` variables are supported in the REPL");
76 }
77 },
78 Program: function Program(path) {
79 if (path.get("body").some(function (child) {
80 return child.isExpressionStatement();
81 })) return;
82
83 path.pushContainer("body", t.expressionStatement(t.identifier("undefined")));
84 }
85 }
86 };
87};
88
89var _eval = function _eval(code, filename) {
90 code = code.trim();
91 if (!code) return undefined;
92
93 code = babel.transform(code, {
94 filename: filename,
95 presets: program.presets,
96 plugins: (program.plugins || []).concat([replPlugin])
97 }).code;
98
99 return _vm2.default.runInThisContext(code, {
100 filename: filename
101 });
102};
103
104if (program.eval || program.print) {
105 var code = program.eval;
106 if (!code || code === true) code = program.print;
107
108 global.__filename = "[eval]";
109 global.__dirname = process.cwd();
110
111 var _module = new _module3.default(global.__filename);
112 _module.filename = global.__filename;
113 _module.paths = _module3.default._nodeModulePaths(global.__dirname);
114
115 global.exports = _module.exports;
116 global.module = _module;
117 global.require = _module.require.bind(_module);
118
119 var result = _eval(code, global.__filename);
120 if (program.print) {
121 var output = typeof result === "string" ? result : (0, _util.inspect)(result);
122 process.stdout.write(output + "\n");
123 }
124} else {
125 if (program.args.length) {
126 var args = process.argv.slice(2);
127
128 var i = 0;
129 var ignoreNext = false;
130 args.some(function (arg, i2) {
131 if (ignoreNext) {
132 ignoreNext = false;
133 return;
134 }
135
136 if (arg[0] === "-") {
137 var parsedArg = program[arg.slice(2)];
138 if (parsedArg && parsedArg !== true) {
139 ignoreNext = true;
140 }
141 } else {
142 i = i2;
143 return true;
144 }
145 });
146 args = args.slice(i);
147
148 var filename = args[0];
149 if (!(0, _pathIsAbsolute2.default)(filename)) args[0] = _path2.default.join(process.cwd(), filename);
150
151 process.argv = ["node"].concat(args);
152 process.execArgv.unshift(__filename);
153
154 _module3.default.runMain();
155 } else {
156 replStart();
157 }
158}
159
160function replStart() {
161 _repl2.default.start({
162 prompt: "> ",
163 input: process.stdin,
164 output: process.stdout,
165 eval: replEval,
166 useGlobal: true
167 });
168}
169
170function replEval(code, context, filename, callback) {
171 var err = void 0;
172 var result = void 0;
173
174 try {
175 if (code[0] === "(" && code[code.length - 1] === ")") {
176 code = code.slice(1, -1);
177 }
178
179 result = _eval(code, filename);
180 } catch (e) {
181 err = e;
182 }
183
184 callback(err, result);
185}
\No newline at end of file