TypeStrong / ts-node

TypeScript execution and REPL for node.js
https://typestrong.org/ts-node
MIT License
12.91k stars 534 forks source link

Cryptic error on invalid tsconfig.json, e.g. if attempting to extend nonexistent tsconfig file #2111

Open dandv opened 8 months ago

dandv commented 8 months ago

Search Terms

Function: [nodejs.util.inspect.custom]

Expected Behavior

This bug arose after I renamed a base tsconfig-base.json file, and the tsconfig.json in my monorepo subdir was doing an "extends": "../tsconfig-base.json". The tsconfig.json was syntactically valid, but ../tsconfig-base.json was not found. Turns out that any error with tsconfig.json will produce the cryptic error below.

Actual Behavior

$ node --loader=ts-node/esm -e 'console.log(1)'

node:internal/process/esm_loader:40
      internalBinding('errors').triggerUncaughtException(
                                ^
[Object: null prototype] {
  [Symbol(nodejs.util.inspect.custom)]: [Function: [nodejs.util.inspect.custom]]
}

Node.js v18.19.0

Steps to reproduce the problem

  1. Create an invalid tsconfig.json, e.g. { 1 }
  2. Run node --loader=ts-node/esm -e 'console.log(1)'

Specifications

SanderPs commented 2 months ago

I am having exactly the same problem...

ts-node version: 10.9.2 node version: v22.8.0 TypeScript version: 5.5.4

So I turned on "Caught Exceptions" as breakpoint in VSCode and then it breaks here:

image

(in \node_modules\ts-node\dist\index.js)

The error object looks like this:

{
  diagnosticCodes: [
    5023,
    5023,
    5023,
  ],
  diagnosticText: "error TS5023: Unknown compiler option 'experimentalSpecifierResolution'.\r\nerror TS5023: Unknown compiler option 'transpileOnly'.\r\nerror TS5023: Unknown compiler option 'esm'.\r\n",
  message: "⨯ Unable to compile TypeScript:\nerror TS5023: Unknown compiler option 'experimentalSpecifierResolution'.\r\nerror TS5023: Unknown compiler option 'transpileOnly'.\r\nerror TS5023: Unknown compiler option 'esm'.\r\n"
}

But the output in the terminal is:

> node --loader ts-node/esm tests/first.ts
Debugger attached.

node:internal/modules/run_main:123
    triggerUncaughtException(
    ^
Waiting for the debugger to disconnect...
[Object: null prototype] {
  [Symbol(nodejs.util.inspect.custom)]: [Function: [nodejs.util.inspect.custom]]
}

Node.js v22.8.0

So I - obviously - made a mistake in my tsconfig.ts for "ts-node", but ts-node should just show that.

SanderPs commented 1 month ago

I should probably add that I run this in a "Javascript Debug Terminal" in VSCode, hence the "Debugger attached." message.