mirror of
https://github.com/ezolenko/rollup-plugin-typescript2.git
synced 2025-12-08 19:06:16 +00:00
- _.endsWith -> String.endsWith
- _.concat -> Array.concat
- _.each -> Array.forEach
- _.filter -> Array.filter
- _.map -> Array.map
- _.some -> Array.some
- _.has -> `key in Object`
- _.defaults -> Object.assign
- _.get -> `?.` and `??` (optional chaining and nullish coalescing)
- refactor: replace fairly complicated `expandIncludeWithDirs` func to
just use a few simple `forEach`s
- not as FP anymore, more imperative, but much simpler to read IMO
- refactor: add a `getDiagnostics` helper to DRY up some code
- also aids readability IMO
- a few places are still using lodash, but this paves the way toward
removing it or replacing it with much smaller individual deps
- _.compact still used because Array.filter heavily complicates the
type-checking currently
- _.isFunction still used because while it's a one-liner natively,
need to import a function in several places
- also the package `lodash.isFunction` is lodash v3 and quite
different from the v4 implementation, so couldn't replace with it
unfortunately
- _.merge is a deep merge, so there's no native version of this
- but we may remove deep merges entirely in the future (as tsconfig
doesn't quite perform a deep merge), or could replace this with a
smaller `lodash.merge` package or similar
- see also https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore
58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
import { tsModule } from "./tsproxy";
|
|
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)
|
|
{
|
|
const fileName = tsModule.findConfigFile(pluginOptions.cwd, tsModule.sys.fileExists, pluginOptions.tsconfig);
|
|
|
|
// if the value was provided, but no file, fail hard
|
|
if (pluginOptions.tsconfig !== undefined && !fileName)
|
|
throw new Error(`rpt2: failed to open '${fileName}'`);
|
|
|
|
let loadedConfig: any = {};
|
|
let baseDir = pluginOptions.cwd;
|
|
let configFileName;
|
|
let pretty = false;
|
|
if (fileName)
|
|
{
|
|
const text = tsModule.sys.readFile(fileName);
|
|
if (text === undefined)
|
|
throw new Error(`rpt2: failed to read '${fileName}'`);
|
|
|
|
const result = tsModule.parseConfigFileTextToJson(fileName, text);
|
|
pretty = result.config?.pretty ?? pretty;
|
|
|
|
if (result.error !== undefined)
|
|
{
|
|
printDiagnostics(context, convertDiagnostic("config", [result.error]), pretty);
|
|
throw new Error(`rpt2: 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, fileName };
|
|
}
|