Cryptic error on invalid tsconfig.json, e.g. if attempting to extend nonexistent tsconfig file
dandv opened this issue · comments
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
- Create an invalid
tsconfig.json
, e.g.{ 1 }
- Run
node --loader=ts-node/esm -e 'console.log(1)'
Specifications
- ts-node version: 10.9.1
- node version: 18.19.0
- TypeScript version: 5.3.3
- tsconfig.json, if you're using one:
{ 1 }
- package.json:
{ "type": "module" }
- Operating system and version: Fedora Linux 38
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:
(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.
I should probably add that I run this in a "Javascript Debug Terminal" in VSCode, hence the "Debugger attached." message.