1 | #!/usr/bin/env node
|
2 | "use strict";
|
3 | Object.defineProperty(exports, "__esModule", { value: true });
|
4 | exports.bootstrap = exports.main = void 0;
|
5 | const path_1 = require("path");
|
6 | const util_1 = require("util");
|
7 | const Module = require("module");
|
8 | let arg;
|
9 | const util_2 = require("./util");
|
10 | const repl_1 = require("./repl");
|
11 | const index_1 = require("./index");
|
12 | const node_internal_modules_cjs_helpers_1 = require("../dist-raw/node-internal-modules-cjs-helpers");
|
13 | const spawn_child_1 = require("./child/spawn-child");
|
14 | const configuration_1 = require("./configuration");
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | function main(argv = process.argv.slice(2), entrypointArgs = {}) {
|
25 | const args = parseArgv(argv, entrypointArgs);
|
26 | const state = {
|
27 | shouldUseChildProcess: false,
|
28 | isInChildProcess: false,
|
29 | isCli: true,
|
30 | tsNodeScript: __filename,
|
31 | parseArgvResult: args,
|
32 | };
|
33 | return bootstrap(state);
|
34 | }
|
35 | exports.main = main;
|
36 |
|
37 | function bootstrap(state) {
|
38 | if (!state.phase2Result) {
|
39 | state.phase2Result = phase2(state);
|
40 | if (state.shouldUseChildProcess && !state.isInChildProcess) {
|
41 |
|
42 |
|
43 | return (0, spawn_child_1.callInChild)(state);
|
44 | }
|
45 | }
|
46 | if (!state.phase3Result) {
|
47 | state.phase3Result = phase3(state);
|
48 | if (state.shouldUseChildProcess && !state.isInChildProcess) {
|
49 |
|
50 |
|
51 | return (0, spawn_child_1.callInChild)(state);
|
52 | }
|
53 | }
|
54 | return phase4(state);
|
55 | }
|
56 | exports.bootstrap = bootstrap;
|
57 | function parseArgv(argv, entrypointArgs) {
|
58 | arg !== null && arg !== void 0 ? arg : (arg = require('arg'));
|
59 |
|
60 |
|
61 |
|
62 |
|
63 | entrypointArgs = { ...entrypointArgs };
|
64 | for (const key of Object.keys(entrypointArgs)) {
|
65 | entrypointArgs[key.replace(/([a-z])-([a-z])/g, (_$0, $1, $2) => `${$1}${$2.toUpperCase()}`)] = entrypointArgs[key];
|
66 | }
|
67 | const args = {
|
68 | ...entrypointArgs,
|
69 | ...arg({
|
70 |
|
71 | '--eval': String,
|
72 | '--interactive': Boolean,
|
73 | '--print': Boolean,
|
74 | '--require': [String],
|
75 |
|
76 | '--help': Boolean,
|
77 | '--cwdMode': Boolean,
|
78 | '--scriptMode': Boolean,
|
79 | '--version': arg.COUNT,
|
80 | '--showConfig': Boolean,
|
81 | '--esm': Boolean,
|
82 |
|
83 | '--cwd': String,
|
84 | '--files': Boolean,
|
85 | '--compiler': String,
|
86 | '--compilerOptions': util_2.parse,
|
87 | '--project': String,
|
88 | '--ignoreDiagnostics': [String],
|
89 | '--ignore': [String],
|
90 | '--transpileOnly': Boolean,
|
91 | '--transpiler': String,
|
92 | '--swc': Boolean,
|
93 | '--typeCheck': Boolean,
|
94 | '--compilerHost': Boolean,
|
95 | '--pretty': Boolean,
|
96 | '--skipProject': Boolean,
|
97 | '--skipIgnore': Boolean,
|
98 | '--preferTsExts': Boolean,
|
99 | '--logError': Boolean,
|
100 | '--emit': Boolean,
|
101 | '--scope': Boolean,
|
102 | '--scopeDir': String,
|
103 | '--noExperimentalReplAwait': Boolean,
|
104 | '--experimentalSpecifierResolution': String,
|
105 |
|
106 | '-e': '--eval',
|
107 | '-i': '--interactive',
|
108 | '-p': '--print',
|
109 | '-r': '--require',
|
110 | '-h': '--help',
|
111 | '-s': '--script-mode',
|
112 | '-v': '--version',
|
113 | '-T': '--transpileOnly',
|
114 | '-H': '--compilerHost',
|
115 | '-I': '--ignore',
|
116 | '-P': '--project',
|
117 | '-C': '--compiler',
|
118 | '-D': '--ignoreDiagnostics',
|
119 | '-O': '--compilerOptions',
|
120 | '--dir': '--cwd',
|
121 |
|
122 | '--cwd-mode': '--cwdMode',
|
123 | '--script-mode': '--scriptMode',
|
124 | '--show-config': '--showConfig',
|
125 | '--compiler-options': '--compilerOptions',
|
126 | '--ignore-diagnostics': '--ignoreDiagnostics',
|
127 | '--transpile-only': '--transpileOnly',
|
128 | '--type-check': '--typeCheck',
|
129 | '--compiler-host': '--compilerHost',
|
130 | '--skip-project': '--skipProject',
|
131 | '--skip-ignore': '--skipIgnore',
|
132 | '--prefer-ts-exts': '--preferTsExts',
|
133 | '--log-error': '--logError',
|
134 | '--scope-dir': '--scopeDir',
|
135 | '--no-experimental-repl-await': '--noExperimentalReplAwait',
|
136 | '--experimental-specifier-resolution': '--experimentalSpecifierResolution',
|
137 | }, {
|
138 | argv,
|
139 | stopAtPositional: true,
|
140 | }),
|
141 | };
|
142 |
|
143 |
|
144 |
|
145 | const { '--cwd': cwdArg, '--help': help = false, '--scriptMode': scriptMode, '--cwdMode': cwdMode, '--version': version = 0, '--showConfig': showConfig, '--require': argsRequire = [], '--eval': code = undefined, '--print': print = false, '--interactive': interactive = false, '--files': files, '--compiler': compiler, '--compilerOptions': compilerOptions, '--project': project, '--ignoreDiagnostics': ignoreDiagnostics, '--ignore': ignore, '--transpileOnly': transpileOnly, '--typeCheck': typeCheck, '--transpiler': transpiler, '--swc': swc, '--compilerHost': compilerHost, '--pretty': pretty, '--skipProject': skipProject, '--skipIgnore': skipIgnore, '--preferTsExts': preferTsExts, '--logError': logError, '--emit': emit, '--scope': scope = undefined, '--scopeDir': scopeDir = undefined, '--noExperimentalReplAwait': noExperimentalReplAwait, '--experimentalSpecifierResolution': experimentalSpecifierResolution, '--esm': esm, _: restArgs, } = args;
|
146 | return {
|
147 |
|
148 | argv: process.argv,
|
149 | restArgs,
|
150 | cwdArg,
|
151 | help,
|
152 | scriptMode,
|
153 | cwdMode,
|
154 | version,
|
155 | showConfig,
|
156 | argsRequire,
|
157 | code,
|
158 | print,
|
159 | interactive,
|
160 | files,
|
161 | compiler,
|
162 | compilerOptions,
|
163 | project,
|
164 | ignoreDiagnostics,
|
165 | ignore,
|
166 | transpileOnly,
|
167 | typeCheck,
|
168 | transpiler,
|
169 | swc,
|
170 | compilerHost,
|
171 | pretty,
|
172 | skipProject,
|
173 | skipIgnore,
|
174 | preferTsExts,
|
175 | logError,
|
176 | emit,
|
177 | scope,
|
178 | scopeDir,
|
179 | noExperimentalReplAwait,
|
180 | experimentalSpecifierResolution,
|
181 | esm,
|
182 | };
|
183 | }
|
184 | function phase2(payload) {
|
185 | const { help, version, cwdArg, esm } = payload.parseArgvResult;
|
186 | if (help) {
|
187 | console.log(`
|
188 | Usage: ts-node [options] [ -e script | script.ts ] [arguments]
|
189 |
|
190 | Options:
|
191 |
|
192 | -e, --eval [code] Evaluate code
|
193 | -p, --print Print result of \`--eval\`
|
194 | -r, --require [path] Require a node module before execution
|
195 | -i, --interactive Opens the REPL even if stdin does not appear to be a terminal
|
196 |
|
197 | --esm Bootstrap with the ESM loader, enabling full ESM support
|
198 | --swc Use the faster swc transpiler
|
199 |
|
200 | -h, --help Print CLI usage
|
201 | -v, --version Print module version information. -vvv to print additional information
|
202 | --showConfig Print resolved configuration and exit
|
203 |
|
204 | -T, --transpileOnly Use TypeScript's faster \`transpileModule\` or a third-party transpiler
|
205 | -H, --compilerHost Use TypeScript's compiler host API
|
206 | -I, --ignore [pattern] Override the path patterns to skip compilation
|
207 | -P, --project [path] Path to TypeScript JSON project file
|
208 | -C, --compiler [name] Specify a custom TypeScript compiler
|
209 | --transpiler [name] Specify a third-party, non-typechecking transpiler
|
210 | -D, --ignoreDiagnostics [code] Ignore TypeScript warnings by diagnostic code
|
211 | -O, --compilerOptions [opts] JSON object to merge with compiler options
|
212 |
|
213 | --cwd Behave as if invoked within this working directory.
|
214 | --files Load \`files\`, \`include\` and \`exclude\` from \`tsconfig.json\` on startup
|
215 | --pretty Use pretty diagnostic formatter (usually enabled by default)
|
216 | --cwdMode Use current directory instead of <script.ts> for config resolution
|
217 | --skipProject Skip reading \`tsconfig.json\`
|
218 | --skipIgnore Skip \`--ignore\` checks
|
219 | --emit Emit output files into \`.ts-node\` directory
|
220 | --scope Scope compiler to files within \`scopeDir\`. Anything outside this directory is ignored.
|
221 | --scopeDir Directory for \`--scope\`
|
222 | --preferTsExts Prefer importing TypeScript files over JavaScript files
|
223 | --logError Logs TypeScript errors to stderr instead of throwing exceptions
|
224 | --noExperimentalReplAwait Disable top-level await in REPL. Equivalent to node's --no-experimental-repl-await
|
225 | --experimentalSpecifierResolution [node|explicit]
|
226 | Equivalent to node's --experimental-specifier-resolution
|
227 | `);
|
228 | process.exit(0);
|
229 | }
|
230 |
|
231 | if (version === 1) {
|
232 | console.log(`v${index_1.VERSION}`);
|
233 | process.exit(0);
|
234 | }
|
235 | const cwd = cwdArg ? (0, path_1.resolve)(cwdArg) : process.cwd();
|
236 |
|
237 |
|
238 | if (esm)
|
239 | payload.shouldUseChildProcess = true;
|
240 | return {
|
241 | cwd,
|
242 | };
|
243 | }
|
244 | function phase3(payload) {
|
245 | const { emit, files, pretty, transpileOnly, transpiler, noExperimentalReplAwait, typeCheck, swc, compilerHost, ignore, preferTsExts, logError, scriptMode, cwdMode, project, skipProject, skipIgnore, compiler, ignoreDiagnostics, compilerOptions, argsRequire, scope, scopeDir, esm, experimentalSpecifierResolution, } = payload.parseArgvResult;
|
246 | const { cwd } = payload.phase2Result;
|
247 |
|
248 |
|
249 |
|
250 |
|
251 |
|
252 |
|
253 | const { entryPointPath } = getEntryPointInfo(payload);
|
254 | const preloadedConfig = (0, configuration_1.findAndReadConfig)({
|
255 | cwd,
|
256 | emit,
|
257 | files,
|
258 | pretty,
|
259 | transpileOnly: (transpileOnly !== null && transpileOnly !== void 0 ? transpileOnly : transpiler != null) ? true : undefined,
|
260 | experimentalReplAwait: noExperimentalReplAwait ? false : undefined,
|
261 | typeCheck,
|
262 | transpiler,
|
263 | swc,
|
264 | compilerHost,
|
265 | ignore,
|
266 | logError,
|
267 | projectSearchDir: getProjectSearchDir(cwd, scriptMode, cwdMode, entryPointPath),
|
268 | project,
|
269 | skipProject,
|
270 | skipIgnore,
|
271 | compiler,
|
272 | ignoreDiagnostics,
|
273 | compilerOptions,
|
274 | require: argsRequire,
|
275 | scope,
|
276 | scopeDir,
|
277 | preferTsExts,
|
278 | esm,
|
279 | experimentalSpecifierResolution: experimentalSpecifierResolution,
|
280 | });
|
281 |
|
282 |
|
283 | if (preloadedConfig.options.esm)
|
284 | payload.shouldUseChildProcess = true;
|
285 | return { preloadedConfig };
|
286 | }
|
287 |
|
288 |
|
289 |
|
290 |
|
291 |
|
292 |
|
293 |
|
294 |
|
295 |
|
296 |
|
297 |
|
298 |
|
299 |
|
300 |
|
301 |
|
302 | function getEntryPointInfo(state) {
|
303 | const { code, interactive, restArgs } = state.parseArgvResult;
|
304 | const { cwd } = state.phase2Result;
|
305 | const { isCli } = state;
|
306 |
|
307 |
|
308 |
|
309 | const executeEval = code != null && !(interactive && restArgs.length);
|
310 | const executeEntrypoint = !executeEval && restArgs.length > 0;
|
311 | const executeRepl = !executeEntrypoint &&
|
312 | (interactive || (process.stdin.isTTY && !executeEval));
|
313 | const executeStdin = !executeEval && !executeRepl && !executeEntrypoint;
|
314 | |
315 |
|
316 |
|
317 |
|
318 | const entryPointPath = executeEntrypoint
|
319 | ? isCli
|
320 | ? (0, path_1.resolve)(cwd, restArgs[0])
|
321 | : (0, path_1.resolve)(restArgs[0])
|
322 | : undefined;
|
323 | return {
|
324 | executeEval,
|
325 | executeEntrypoint,
|
326 | executeRepl,
|
327 | executeStdin,
|
328 | entryPointPath,
|
329 | };
|
330 | }
|
331 | function phase4(payload) {
|
332 | var _a, _b, _c, _d, _e, _f, _g;
|
333 | const { isInChildProcess, tsNodeScript } = payload;
|
334 | const { version, showConfig, restArgs, code, print, argv } = payload.parseArgvResult;
|
335 | const { cwd } = payload.phase2Result;
|
336 | const { preloadedConfig } = payload.phase3Result;
|
337 | const { entryPointPath, executeEntrypoint, executeEval, executeRepl, executeStdin, } = getEntryPointInfo(payload);
|
338 | let evalStuff;
|
339 | let replStuff;
|
340 | let stdinStuff;
|
341 | let evalAwarePartialHost = undefined;
|
342 | if (executeEval) {
|
343 | const state = new repl_1.EvalState((0, path_1.join)(cwd, repl_1.EVAL_FILENAME));
|
344 | evalStuff = {
|
345 | state,
|
346 | repl: (0, repl_1.createRepl)({
|
347 | state,
|
348 | composeWithEvalAwarePartialHost: evalAwarePartialHost,
|
349 | ignoreDiagnosticsThatAreAnnoyingInInteractiveRepl: false,
|
350 | }),
|
351 | };
|
352 | ({ evalAwarePartialHost } = evalStuff.repl);
|
353 |
|
354 | const module = (evalStuff.module = new Module(repl_1.EVAL_NAME));
|
355 | module.filename = evalStuff.state.path;
|
356 | module.paths = Module._nodeModulePaths(cwd);
|
357 | }
|
358 | if (executeStdin) {
|
359 | const state = new repl_1.EvalState((0, path_1.join)(cwd, repl_1.STDIN_FILENAME));
|
360 | stdinStuff = {
|
361 | state,
|
362 | repl: (0, repl_1.createRepl)({
|
363 | state,
|
364 | composeWithEvalAwarePartialHost: evalAwarePartialHost,
|
365 | ignoreDiagnosticsThatAreAnnoyingInInteractiveRepl: false,
|
366 | }),
|
367 | };
|
368 | ({ evalAwarePartialHost } = stdinStuff.repl);
|
369 |
|
370 | const module = (stdinStuff.module = new Module(repl_1.STDIN_NAME));
|
371 | module.filename = stdinStuff.state.path;
|
372 | module.paths = Module._nodeModulePaths(cwd);
|
373 | }
|
374 | if (executeRepl) {
|
375 | const state = new repl_1.EvalState((0, path_1.join)(cwd, repl_1.REPL_FILENAME));
|
376 | replStuff = {
|
377 | state,
|
378 | repl: (0, repl_1.createRepl)({
|
379 | state,
|
380 | composeWithEvalAwarePartialHost: evalAwarePartialHost,
|
381 | }),
|
382 | };
|
383 | ({ evalAwarePartialHost } = replStuff.repl);
|
384 | }
|
385 |
|
386 | const service = (0, index_1.createFromPreloadedConfig)({
|
387 |
|
388 |
|
389 | ...preloadedConfig,
|
390 | options: {
|
391 | ...preloadedConfig.options,
|
392 | readFile: (_a = evalAwarePartialHost === null || evalAwarePartialHost === void 0 ? void 0 : evalAwarePartialHost.readFile) !== null && _a !== void 0 ? _a : undefined,
|
393 | fileExists: (_b = evalAwarePartialHost === null || evalAwarePartialHost === void 0 ? void 0 : evalAwarePartialHost.fileExists) !== null && _b !== void 0 ? _b : undefined,
|
394 | tsTrace: index_1.DEFAULTS.tsTrace,
|
395 | },
|
396 | });
|
397 | (0, index_1.register)(service);
|
398 | if (isInChildProcess)
|
399 | require('./child/child-loader').lateBindHooks((0, index_1.createEsmHooks)(service));
|
400 |
|
401 | replStuff === null || replStuff === void 0 ? void 0 : replStuff.repl.setService(service);
|
402 | evalStuff === null || evalStuff === void 0 ? void 0 : evalStuff.repl.setService(service);
|
403 | stdinStuff === null || stdinStuff === void 0 ? void 0 : stdinStuff.repl.setService(service);
|
404 |
|
405 | if (version === 2) {
|
406 | console.log(`ts-node v${index_1.VERSION}`);
|
407 | console.log(`node ${process.version}`);
|
408 | console.log(`compiler v${service.ts.version}`);
|
409 | process.exit(0);
|
410 | }
|
411 | if (version >= 3) {
|
412 | console.log(`ts-node v${index_1.VERSION} ${(0, path_1.dirname)(__dirname)}`);
|
413 | console.log(`node ${process.version}`);
|
414 | console.log(`compiler v${service.ts.version} ${(_c = service.compilerPath) !== null && _c !== void 0 ? _c : ''}`);
|
415 | process.exit(0);
|
416 | }
|
417 | if (showConfig) {
|
418 | const ts = service.ts;
|
419 | if (typeof ts.convertToTSConfig !== 'function') {
|
420 | console.error('Error: --showConfig requires a typescript versions >=3.2 that support --showConfig');
|
421 | process.exit(1);
|
422 | }
|
423 | let moduleTypes = undefined;
|
424 | if (service.options.moduleTypes) {
|
425 |
|
426 | const showRelativeTo = (0, path_1.dirname)(service.configFilePath);
|
427 | moduleTypes = {};
|
428 | for (const [key, value] of Object.entries(service.options.moduleTypes)) {
|
429 | moduleTypes[(0, path_1.relative)(showRelativeTo, (0, path_1.resolve)((_d = service.options.optionBasePaths) === null || _d === void 0 ? void 0 : _d.moduleTypes, key))] = value;
|
430 | }
|
431 | }
|
432 | const json = {
|
433 | ['ts-node']: {
|
434 | ...service.options,
|
435 | require: ((_e = service.options.require) === null || _e === void 0 ? void 0 : _e.length)
|
436 | ? service.options.require
|
437 | : undefined,
|
438 | moduleTypes,
|
439 | optionBasePaths: undefined,
|
440 | compilerOptions: undefined,
|
441 | project: (_f = service.configFilePath) !== null && _f !== void 0 ? _f : service.options.project,
|
442 | },
|
443 | ...ts.convertToTSConfig(service.config, (_g = service.configFilePath) !== null && _g !== void 0 ? _g : (0, path_1.join)(cwd, 'ts-node-implicit-tsconfig.json'), service.ts.sys),
|
444 | };
|
445 | console.log(
|
446 |
|
447 |
|
448 |
|
449 | JSON.stringify(json, null, 2));
|
450 | process.exit(0);
|
451 | }
|
452 |
|
453 | process.execArgv.push(tsNodeScript, ...argv.slice(2, argv.length - restArgs.length));
|
454 |
|
455 | process.argv = [process.argv[1]]
|
456 | .concat(executeEntrypoint ? [entryPointPath] : [])
|
457 | .concat(restArgs.slice(executeEntrypoint ? 1 : 0));
|
458 |
|
459 | if (executeEntrypoint) {
|
460 | if (payload.isInChildProcess &&
|
461 | (0, util_2.versionGteLt)(process.versions.node, '18.6.0')) {
|
462 |
|
463 | require('../dist-raw/runmain-hack.js').run(entryPointPath);
|
464 | }
|
465 | else {
|
466 | Module.runMain();
|
467 | }
|
468 | }
|
469 | else {
|
470 |
|
471 |
|
472 | if (executeEval) {
|
473 | (0, node_internal_modules_cjs_helpers_1.addBuiltinLibsToObject)(global);
|
474 | evalAndExitOnTsError(evalStuff.repl, evalStuff.module, code, print, 'eval');
|
475 | }
|
476 | if (executeRepl) {
|
477 | replStuff.repl.start();
|
478 | }
|
479 | if (executeStdin) {
|
480 | let buffer = code || '';
|
481 | process.stdin.on('data', (chunk) => (buffer += chunk));
|
482 | process.stdin.on('end', () => {
|
483 | evalAndExitOnTsError(stdinStuff.repl, stdinStuff.module, buffer,
|
484 |
|
485 | print, 'stdin');
|
486 | });
|
487 | }
|
488 | }
|
489 | }
|
490 |
|
491 |
|
492 |
|
493 | function getProjectSearchDir(cwd, scriptMode, cwdMode, scriptPath) {
|
494 |
|
495 | if (scriptMode && cwdMode) {
|
496 | throw new TypeError('--cwd-mode cannot be combined with --script-mode');
|
497 | }
|
498 | if (scriptMode && !scriptPath) {
|
499 | throw new TypeError('--script-mode must be used with a script name, e.g. `ts-node --script-mode <script.ts>`');
|
500 | }
|
501 | const doScriptMode = scriptMode === true ? true : cwdMode === true ? false : !!scriptPath;
|
502 | if (doScriptMode) {
|
503 |
|
504 |
|
505 |
|
506 |
|
507 |
|
508 |
|
509 |
|
510 | const exts = ['.js', '.jsx', '.ts', '.tsx'];
|
511 | const extsTemporarilyInstalled = [];
|
512 | for (const ext of exts) {
|
513 | if (!(0, util_2.hasOwnProperty)(require.extensions, ext)) {
|
514 | extsTemporarilyInstalled.push(ext);
|
515 | require.extensions[ext] = function () { };
|
516 | }
|
517 | }
|
518 | try {
|
519 | return (0, path_1.dirname)(requireResolveNonCached(scriptPath));
|
520 | }
|
521 | finally {
|
522 | for (const ext of extsTemporarilyInstalled) {
|
523 | delete require.extensions[ext];
|
524 | }
|
525 | }
|
526 | }
|
527 | return cwd;
|
528 | }
|
529 | const guaranteedNonexistentDirectoryPrefix = (0, path_1.resolve)(__dirname, 'doesnotexist');
|
530 | let guaranteedNonexistentDirectorySuffix = 0;
|
531 |
|
532 |
|
533 |
|
534 |
|
535 |
|
536 |
|
537 |
|
538 | function requireResolveNonCached(absoluteModuleSpecifier) {
|
539 |
|
540 |
|
541 |
|
542 |
|
543 | const isSupportedNodeVersion = (0, util_2.versionGteLt)(process.versions.node, '12.2.0');
|
544 | if (!isSupportedNodeVersion)
|
545 | return require.resolve(absoluteModuleSpecifier);
|
546 | const { dir, base } = (0, path_1.parse)(absoluteModuleSpecifier);
|
547 | const relativeModuleSpecifier = `./${base}`;
|
548 | const req = (0, util_2.createRequire)((0, path_1.join)(dir, 'imaginaryUncacheableRequireResolveScript'));
|
549 | return req.resolve(relativeModuleSpecifier, {
|
550 | paths: [
|
551 | `${guaranteedNonexistentDirectoryPrefix}${guaranteedNonexistentDirectorySuffix++}`,
|
552 | ...(req.resolve.paths(relativeModuleSpecifier) || []),
|
553 | ],
|
554 | });
|
555 | }
|
556 |
|
557 |
|
558 |
|
559 | function evalAndExitOnTsError(replService, module, code, isPrinted, filenameAndDirname) {
|
560 | let result;
|
561 | (0, repl_1.setupContext)(global, module, filenameAndDirname);
|
562 | try {
|
563 | result = replService.evalCode(code);
|
564 | }
|
565 | catch (error) {
|
566 | if (error instanceof index_1.TSError) {
|
567 | console.error(error);
|
568 | process.exit(1);
|
569 | }
|
570 | throw error;
|
571 | }
|
572 | if (isPrinted) {
|
573 | console.log(typeof result === 'string'
|
574 | ? result
|
575 | : (0, util_1.inspect)(result, { colors: process.stdout.isTTY }));
|
576 | }
|
577 | }
|
578 | if (require.main === module) {
|
579 | main();
|
580 | }
|
581 |
|
\ | No newline at end of file |