1 | "use strict";
|
2 |
|
3 | var _pathIsAbsolute = require("path-is-absolute");
|
4 |
|
5 | var _pathIsAbsolute2 = _interopRequireDefault(_pathIsAbsolute);
|
6 |
|
7 | var _commander = require("commander");
|
8 |
|
9 | var _commander2 = _interopRequireDefault(_commander);
|
10 |
|
11 | var _module2 = require("module");
|
12 |
|
13 | var _module3 = _interopRequireDefault(_module2);
|
14 |
|
15 | var _util = require("util");
|
16 |
|
17 | var _path = require("path");
|
18 |
|
19 | var _path2 = _interopRequireDefault(_path);
|
20 |
|
21 | var _repl = require("repl");
|
22 |
|
23 | var _repl2 = _interopRequireDefault(_repl);
|
24 |
|
25 | var _babelCore = require("babel-core");
|
26 |
|
27 | var babel = _interopRequireWildcard(_babelCore);
|
28 |
|
29 | var _vm = require("vm");
|
30 |
|
31 | var _vm2 = _interopRequireDefault(_vm);
|
32 |
|
33 | require("babel-polyfill");
|
34 |
|
35 | var _babelRegister = require("babel-register");
|
36 |
|
37 | var _babelRegister2 = _interopRequireDefault(_babelRegister);
|
38 |
|
39 | 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; } }
|
40 |
|
41 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
42 |
|
43 | var program = new _commander2.default.Command("babel-node");
|
44 |
|
45 | program.option("-e, --eval [script]", "Evaluate script");
|
46 | program.option("-p, --print [code]", "Evaluate script and print result");
|
47 | program.option("-o, --only [globs]", "");
|
48 | program.option("-i, --ignore [globs]", "");
|
49 | program.option("-x, --extensions [extensions]", "List of extensions to hook into [.es6,.js,.es,.jsx]");
|
50 | program.option("-w, --plugins [string]", "", _babelCore.util.list);
|
51 | program.option("-b, --presets [string]", "", _babelCore.util.list);
|
52 |
|
53 | var pkg = require("../package.json");
|
54 | program.version(pkg.version);
|
55 | program.usage("[options] [ -e script | script.js ] [arguments]");
|
56 | program.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 |
|
66 | var 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 |
|
89 | var _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 |
|
104 | if (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 |
|
160 | function replStart() {
|
161 | _repl2.default.start({
|
162 | prompt: "> ",
|
163 | input: process.stdin,
|
164 | output: process.stdout,
|
165 | eval: replEval,
|
166 | useGlobal: true
|
167 | });
|
168 | }
|
169 |
|
170 | function 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 |