[BUG] tsconfig.json "extends" field not parsed by transpiler #1283
Description
Describe the bug
When using the built-in native TypeScript transpiler, the extends
field is not supported and only the explicit compilerOptions
are used. This field is sometimes used in monorepos to extend a shared config, or to extend one of the official "base" templates.
To Reproduce
Steps to reproduce the behavior:
0. Install a base config: npm install @tsconfig/node16
- Create a
tsconfig.json
extending that config:
{
"extends": "@tsconfig/node16/tsconfig.json"
}
- Create a Dangerfile which tries to use non-commonjs features:
import { exec } from "child_process";
- Try to run Danger with
danger ci
. It will report an error like "cannot use import outside a module", as themodule: "commonjs"
option from the base config does not get inherited correctly.
Expected behavior
Danger should support all official methods of configuring tsconfig.json.
software | version |
---|---|
danger.js | 11.0.7 |
node | v16.15.0 |
npm | 8.5.5 |
Operating System | macOS 12.4 |
Additional context
I believe the bug is because Danger's transpiler directly loads the tsconfig file contents and passes it to ts.transpileModule
:
danger-js/source/runner/runners/utils/transpiler.ts
Lines 128 to 134 in 630f2a4
This can be fixed by using the TypeScript APIs for parsing the config options. For example, in ts-node
:
https://github.com/TypeStrong/ts-node/blob/14323f9d00d5c7051ac09b944c7f423e442145ea/src/configuration.ts#L301-L317
Some of the other functions in this file, like lookupTSConfig
, can also use the native APIs instead.