forked from TypeStrong/ts-node
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtsconfigs.ts
38 lines (36 loc) · 1.26 KB
/
tsconfigs.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import type { TSCommon, TSInternal } from './ts-compiler-types';
const nodeMajor = parseInt(process.versions.node.split('.')[0], 10);
/**
* return parsed JSON of the bundled @tsconfig/bases config appropriate for the
* running version of nodejs
* @internal
*/
export function getDefaultTsconfigJsonForNodeVersion(ts: TSCommon): any {
const tsInternal = ts as any as TSInternal;
if (nodeMajor >= 20) {
const config = require('@tsconfig/node20/tsconfig.json');
if (configCompatible(config)) return config;
}
if (nodeMajor >= 18) {
const config = require('@tsconfig/node18/tsconfig.json');
if (configCompatible(config)) return config;
}
if (nodeMajor >= 16) {
const config = require('@tsconfig/node16/tsconfig.json');
if (configCompatible(config)) return config;
}
return require('@tsconfig/node14/tsconfig.json');
// Verify that tsconfig target and lib options are compatible with TypeScript compiler
function configCompatible(config: {
compilerOptions: {
lib: string[];
target: string;
};
}) {
return (
typeof (ts.ScriptTarget as any)[config.compilerOptions.target.toUpperCase()] === 'number' &&
tsInternal.libs &&
config.compilerOptions.lib.every((lib) => tsInternal.libs!.includes(lib))
);
}
}