UNPKG

7.45 kBJavaScriptView Raw
1"use strict";
2
3var _commander = _interopRequireDefault(require("commander"));
4
5var _module = _interopRequireDefault(require("module"));
6
7var _util = require("util");
8
9var _path = _interopRequireDefault(require("path"));
10
11var _repl = _interopRequireDefault(require("repl"));
12
13var babel = _interopRequireWildcard(require("@babel/core"));
14
15var _vm = _interopRequireDefault(require("vm"));
16
17require("core-js/stable");
18
19require("regenerator-runtime/runtime");
20
21var _register = _interopRequireDefault(require("@babel/register"));
22
23function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
24
25function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
26
27function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
29const program = new _commander.default.Command("babel-node");
30
31function collect(value, previousValue) {
32 if (typeof value !== "string") return previousValue;
33 const values = value.split(",");
34 return previousValue ? previousValue.concat(values) : values;
35}
36
37program.option("-e, --eval [script]", "Evaluate script");
38program.option("--no-babelrc", "Specify whether or not to use .babelrc and .babelignore files");
39program.option("-r, --require [module]", "Require module");
40program.option("-p, --print [code]", "Evaluate script and print result");
41program.option("-o, --only [globs]", "A comma-separated list of glob patterns to compile", collect);
42program.option("-i, --ignore [globs]", "A comma-separated list of glob patterns to skip compiling", collect);
43program.option("-x, --extensions [extensions]", "List of extensions to hook into [.es6,.js,.es,.jsx,.mjs]", collect);
44program.option("--config-file [path]", "Path to the babel config file to use. Defaults to working directory babel.config.js");
45program.option("--env-name [name]", "The name of the 'env' to use when loading configs and plugins. " + "Defaults to the value of BABEL_ENV, or else NODE_ENV, or else 'development'.");
46program.option("--root-mode [mode]", "The project-root resolution mode. " + "One of 'root' (the default), 'upward', or 'upward-optional'.");
47program.option("-w, --plugins [string]", "", collect);
48program.option("-b, --presets [string]", "", collect);
49program.version("7.13.0");
50program.usage("[options] [ -e script | script.js ] [arguments]");
51program.parse(process.argv);
52const babelOptions = {
53 caller: {
54 name: "@babel/node"
55 },
56 extensions: program.extensions,
57 ignore: program.ignore,
58 only: program.only,
59 plugins: program.plugins,
60 presets: program.presets,
61 configFile: program.configFile,
62 envName: program.envName,
63 rootMode: program.rootMode,
64 babelrc: program.babelrc === true ? undefined : program.babelrc
65};
66
67for (const key of Object.keys(babelOptions)) {
68 if (babelOptions[key] === undefined) {
69 delete babelOptions[key];
70 }
71}
72
73(0, _register.default)(babelOptions);
74
75const replPlugin = ({
76 types: t
77}) => ({
78 visitor: {
79 ModuleDeclaration(path) {
80 throw path.buildCodeFrameError("Modules aren't supported in the REPL");
81 },
82
83 VariableDeclaration(path) {
84 if (path.node.kind !== "var") {
85 throw path.buildCodeFrameError("Only `var` variables are supported in the REPL");
86 }
87 },
88
89 Program(path) {
90 if (path.get("body").some(child => child.isExpressionStatement())) return;
91 path.pushContainer("body", t.expressionStatement(t.identifier("undefined")));
92 }
93
94 }
95});
96
97const _eval = function (code, filename) {
98 code = code.trim();
99 if (!code) return undefined;
100 code = babel.transform(code, {
101 filename: filename,
102 presets: program.presets,
103 plugins: (program.plugins || []).concat([replPlugin])
104 }).code;
105 return _vm.default.runInThisContext(code, {
106 filename: filename
107 });
108};
109
110if (program.eval || program.print) {
111 let code = program.eval;
112 if (!code || code === true) code = program.print;
113 global.__filename = "[eval]";
114 global.__dirname = process.cwd();
115 const module = new _module.default(global.__filename);
116 module.filename = global.__filename;
117 module.paths = _module.default._nodeModulePaths(global.__dirname);
118 global.exports = module.exports;
119 global.module = module;
120 global.require = module.require.bind(module);
121
122 const result = _eval(code, global.__filename);
123
124 if (program.print) {
125 const output = typeof result === "string" ? result : (0, _util.inspect)(result);
126 process.stdout.write(output + "\n");
127 }
128} else {
129 if (program.args.length) {
130 let args = process.argv.slice(2);
131 let i = 0;
132 let ignoreNext = false;
133 args.some(function (arg, i2) {
134 if (ignoreNext) {
135 ignoreNext = false;
136 return;
137 }
138
139 if (arg[0] === "-") {
140 const parsedOption = program.options.find(option => {
141 return option.long === arg || option.short === arg;
142 });
143
144 if (parsedOption === undefined) {
145 return;
146 }
147
148 const optionName = parsedOption.attributeName();
149 const parsedArg = program[optionName];
150
151 if (optionName === "require" || parsedArg && parsedArg !== true) {
152 ignoreNext = true;
153 }
154 } else {
155 i = i2;
156 return true;
157 }
158 });
159 args = args.slice(i);
160 requireArgs();
161 const filename = args[0];
162
163 if (!_path.default.isAbsolute(filename)) {
164 args[0] = _path.default.join(process.cwd(), filename);
165 }
166
167 process.argv = ["node"].concat(args);
168 process.execArgv.push(__filename);
169
170 _module.default.runMain();
171 } else {
172 requireArgs();
173 replStart();
174 }
175}
176
177function requireArgs() {
178 if (program.require) {
179 require((((v, w) => (v = v.split("."), w = w.split("."), +v[0] > +w[0] || v[0] == w[0] && +v[1] >= +w[1]))(process.versions.node, "8.9") ? require.resolve : (r, {
180 paths: [b]
181 }, M = require("module")) => {
182 let f = M._findPath(r, M._nodeModulePaths(b).concat(b));
183
184 if (f) return f;
185 f = new Error(`Cannot resolve module '${r}'`);
186 f.code = "MODULE_NOT_FOUND";
187 throw f;
188 })(program.require, {
189 paths: [process.cwd()]
190 }));
191 }
192}
193
194function replStart() {
195 const replServer = _repl.default.start({
196 prompt: "babel > ",
197 input: process.stdin,
198 output: process.stdout,
199 eval: replEval,
200 useGlobal: true,
201 preview: true
202 });
203
204 {
205 replServer.setupHistory == null ? void 0 : replServer.setupHistory(process.env.NODE_REPL_HISTORY, () => {});
206 }
207}
208
209function replEval(code, context, filename, callback) {
210 let err;
211 let result;
212
213 try {
214 if (code[0] === "(" && code[code.length - 1] === ")") {
215 code = code.slice(1, -1);
216 }
217
218 result = _eval(code, filename);
219 } catch (e) {
220 err = e;
221 }
222
223 callback(err, result);
224}
\No newline at end of file