/
tsconfigs.ts
40 lines (38 loc) · 1.28 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
39
40
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 >= 16) {
const config = require('@tsconfig/node16/tsconfig.json');
if (configCompatible(config)) return config;
}
if (nodeMajor >= 14) {
const config = require('@tsconfig/node14/tsconfig.json');
if (configCompatible(config)) return config;
}
if (nodeMajor >= 12) {
const config = require('@tsconfig/node12/tsconfig.json');
if (configCompatible(config)) return config;
}
return require('@tsconfig/node10/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))
);
}
}