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 the module: "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:
|
if (tsConfigPath) { |
|
compilerOptions = JSON5.parse(fs.readFileSync(tsConfigPath, "utf8")) |
|
} else { |
|
compilerOptions = ts.getDefaultCompilerOptions() |
|
} |
|
|
|
let result = ts.transpileModule(content, sanitizeTSConfig(compilerOptions)) |
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.
Describe the bug
When using the built-in native TypeScript transpiler, the
extendsfield is not supported and only the explicitcompilerOptionsare 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/node16tsconfig.jsonextending that config:{ "extends": "@tsconfig/node16/tsconfig.json" }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.
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.