1 | import { tsModule } from "./tsproxy";
|
2 | import * as tsTypes from "typescript";
|
3 | import { IContext } from "./context";
|
4 | import { dirname } from "path";
|
5 | import { printDiagnostics } from "./print-diagnostics";
|
6 | import { convertDiagnostic } from "./tscache";
|
7 | import { getOptionsOverrides } from "./get-options-overrides";
|
8 | import { IOptions } from "./ioptions";
|
9 | import * as _ from "lodash";
|
10 | import { checkTsConfig } from "./check-tsconfig";
|
11 | import { getOptionsDefaults } from "./get-option-defaults";
|
12 |
|
13 | export function parseTsConfig(context: IContext, pluginOptions: IOptions): tsTypes.ParsedCommandLine
|
14 | {
|
15 | const fileName = tsModule.findConfigFile(process.cwd(), tsModule.sys.fileExists, pluginOptions.tsconfig);
|
16 |
|
17 |
|
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 | }
|