1 | "use strict";
|
2 |
|
3 | var _commander = _interopRequireDefault(require("commander"));
|
4 |
|
5 | var _module = _interopRequireDefault(require("module"));
|
6 |
|
7 | var _util = require("util");
|
8 |
|
9 | var _path = _interopRequireDefault(require("path"));
|
10 |
|
11 | var _repl = _interopRequireDefault(require("repl"));
|
12 |
|
13 | var babel = _interopRequireWildcard(require("@babel/core"));
|
14 |
|
15 | var _vm = _interopRequireDefault(require("vm"));
|
16 |
|
17 | require("core-js/stable");
|
18 |
|
19 | require("regenerator-runtime/runtime");
|
20 |
|
21 | var _register = _interopRequireDefault(require("@babel/register"));
|
22 |
|
23 | function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
24 |
|
25 | function _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 |
|
27 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
28 |
|
29 | const program = new _commander.default.Command("babel-node");
|
30 |
|
31 | function collect(value, previousValue) {
|
32 | if (typeof value !== "string") return previousValue;
|
33 | const values = value.split(",");
|
34 | return previousValue ? previousValue.concat(values) : values;
|
35 | }
|
36 |
|
37 | program.option("-e, --eval [script]", "Evaluate script");
|
38 | program.option("--no-babelrc", "Specify whether or not to use .babelrc and .babelignore files");
|
39 | program.option("-r, --require [module]", "Require module");
|
40 | program.option("-p, --print [code]", "Evaluate script and print result");
|
41 | program.option("-o, --only [globs]", "A comma-separated list of glob patterns to compile", collect);
|
42 | program.option("-i, --ignore [globs]", "A comma-separated list of glob patterns to skip compiling", collect);
|
43 | program.option("-x, --extensions [extensions]", "List of extensions to hook into [.es6,.js,.es,.jsx,.mjs]", collect);
|
44 | program.option("--config-file [path]", "Path to the babel config file to use. Defaults to working directory babel.config.js");
|
45 | program.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'.");
|
46 | program.option("--root-mode [mode]", "The project-root resolution mode. " + "One of 'root' (the default), 'upward', or 'upward-optional'.");
|
47 | program.option("-w, --plugins [string]", "", collect);
|
48 | program.option("-b, --presets [string]", "", collect);
|
49 | program.version("7.13.0");
|
50 | program.usage("[options] [ -e script | script.js ] [arguments]");
|
51 | program.parse(process.argv);
|
52 | const 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 |
|
67 | for (const key of Object.keys(babelOptions)) {
|
68 | if (babelOptions[key] === undefined) {
|
69 | delete babelOptions[key];
|
70 | }
|
71 | }
|
72 |
|
73 | (0, _register.default)(babelOptions);
|
74 |
|
75 | const 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 |
|
97 | const _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 |
|
110 | if (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 |
|
177 | function 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 |
|
194 | function 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 |
|
209 | function 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 |