mirror of
https://github.com/ezolenko/rollup-plugin-typescript2.git
synced 2025-12-08 19:06:16 +00:00
59 lines
2.2 KiB
TypeScript
59 lines
2.2 KiB
TypeScript
import { tsModule } from "./tsproxy";
|
|
import * as tsTypes from "typescript";
|
|
import { IContext } from "./context";
|
|
import { dirname } from "path";
|
|
import { printDiagnostics } from "./print-diagnostics";
|
|
import { convertDiagnostic } from "./tscache";
|
|
import { getOptionsOverrides } from "./get-options-overrides";
|
|
import { IOptions } from "./ioptions";
|
|
import * as _ from "lodash";
|
|
import { checkTsConfig } from "./check-tsconfig";
|
|
|
|
export function parseTsConfig(context: IContext, pluginOptions: IOptions): tsTypes.ParsedCommandLine
|
|
{
|
|
const fileName = tsModule.findConfigFile(process.cwd(), tsModule.sys.fileExists, pluginOptions.tsconfig);
|
|
|
|
// if the value was provided, but no file, fail hard
|
|
if (pluginOptions.tsconfig !== undefined && !fileName)
|
|
throw new Error(`failed to open '${fileName}'`);
|
|
|
|
let loadedConfig: any = {};
|
|
let baseDir = process.cwd();
|
|
let configFileName;
|
|
let pretty = false;
|
|
if (fileName)
|
|
{
|
|
const text = tsModule.sys.readFile(fileName);
|
|
if (text === undefined)
|
|
throw new Error(`failed to read '${fileName}'`);
|
|
|
|
const result = tsModule.parseConfigFileTextToJson(fileName, text);
|
|
pretty = _.get(result.config, "pretty", pretty);
|
|
|
|
if (result.error !== undefined)
|
|
{
|
|
printDiagnostics(context, convertDiagnostic("config", [result.error]), pretty);
|
|
throw new Error(`failed to parse '${fileName}'`);
|
|
}
|
|
|
|
loadedConfig = result.config;
|
|
baseDir = dirname(fileName);
|
|
configFileName = fileName;
|
|
}
|
|
|
|
const mergedConfig = {};
|
|
_.merge(mergedConfig, pluginOptions.tsconfigDefaults, loadedConfig, pluginOptions.tsconfigOverride);
|
|
|
|
const preParsedTsConfig = tsModule.parseJsonConfigFileContent(mergedConfig, tsModule.sys, baseDir, getOptionsOverrides(pluginOptions), configFileName);
|
|
const compilerOptionsOverride = getOptionsOverrides(pluginOptions, preParsedTsConfig);
|
|
const parsedTsConfig = tsModule.parseJsonConfigFileContent(mergedConfig, tsModule.sys, baseDir, compilerOptionsOverride, configFileName);
|
|
|
|
checkTsConfig(parsedTsConfig);
|
|
printDiagnostics(context, convertDiagnostic("config", parsedTsConfig.errors), pretty);
|
|
|
|
context.debug(`built-in options overrides: ${JSON.stringify(compilerOptionsOverride, undefined, 4)}`);
|
|
context.debug(`parsed tsconfig: ${JSON.stringify(parsedTsConfig, undefined, 4)}`);
|
|
|
|
return parsedTsConfig;
|
|
}
|