UNPKG

2.09 kBPlain TextView Raw
1import { tsModule } from "./tsproxy";
2import * as tsTypes from "typescript";
3import { IContext } from "./context";
4import { dirname } from "path";
5import { printDiagnostics } from "./print-diagnostics";
6import { convertDiagnostic } from "./tscache";
7import { getOptionsOverrides } from "./get-options-overrides";
8import { IOptions } from "./ioptions";
9import * as _ from "lodash";
10import { checkTsConfig } from "./check-tsconfig";
11import { getOptionsDefaults } from "./get-option-defaults";
12
13export function parseTsConfig(context: IContext, pluginOptions: IOptions): tsTypes.ParsedCommandLine
14{
15 const fileName = tsModule.findConfigFile(process.cwd(), tsModule.sys.fileExists, pluginOptions.tsconfig);
16
17 // if the value was provided, but no file, fail hard
18 if (pluginOptions.tsconfig !== undefined && !fileName)
19 throw new Error(`failed to open '${fileName}'`);
20
21 let loadedConfig: any = {};
22 let baseDir = process.cwd();
23 let configFileName;
24 if (fileName)
25 {
26 const text = tsModule.sys.readFile(fileName);
27 if (text === undefined)
28 throw new Error(`failed to read '${fileName}'`);
29
30 const result = tsModule.parseConfigFileTextToJson(fileName, text);
31
32 if (result.error !== undefined)
33 {
34 printDiagnostics(context, convertDiagnostic("config", [result.error]), _.get(result.config, "pretty", false));
35 throw new Error(`failed to parse '${fileName}'`);
36 }
37
38 loadedConfig = result.config;
39 baseDir = dirname(fileName);
40 configFileName = fileName;
41 }
42
43 const mergedConfig = {};
44 _.merge(mergedConfig, getOptionsDefaults(), pluginOptions.tsconfigDefaults, loadedConfig, pluginOptions.tsconfigOverride);
45
46 const compilerOptionsOverride = getOptionsOverrides(pluginOptions, mergedConfig);
47 const parsedTsConfig = tsModule.parseJsonConfigFileContent(mergedConfig, tsModule.sys, baseDir, compilerOptionsOverride, configFileName);
48
49 checkTsConfig(parsedTsConfig);
50
51 context.debug(`built-in options overrides: ${JSON.stringify(compilerOptionsOverride, undefined, 4)}`);
52 context.debug(`parsed tsconfig: ${JSON.stringify(parsedTsConfig, undefined, 4)}`);
53
54 return parsedTsConfig;
55}