UNPKG

typedoc

Version:

Create api documentation for TypeScript projects.

60 lines (59 loc) 1.94 kB
import ts from "typescript"; import { isFile, isDir, readFile } from "./fs.js"; import { createRequire } from "module"; export function findTsConfigFile(path) { let fileToRead = path; if (isDir(fileToRead)) { fileToRead = ts.findConfigFile(path, isFile); } if (!fileToRead || !isFile(fileToRead)) { return; } return fileToRead; } // We don't need recursive read checks because that would cause a diagnostic // when reading the tsconfig for compiler options, which happens first, and we bail before // doing this in that case. export function getTypeDocOptionsFromTsConfig(file) { const readResult = ts.readConfigFile(file, readFile); const result = {}; if (readResult.error) { return result; } if ("extends" in readResult.config) { const resolver = createRequire(file); const extended = Array.isArray(readResult.config.extends) ? readResult.config.extends.map(String) : [String(readResult.config.extends)]; for (const extendedFile of extended) { let resolvedParent; try { resolvedParent = resolver.resolve(extendedFile); } catch { continue; } Object.assign(result, getTypeDocOptionsFromTsConfig(resolvedParent)); } } if ("typedocOptions" in readResult.config) { Object.assign(result, readResult.config.typedocOptions); } return result; } const tsConfigCache = {}; export function readTsConfig(path, logger) { if (tsConfigCache[path]) { return tsConfigCache[path]; } const parsed = ts.getParsedCommandLineOfConfigFile(path, {}, { ...ts.sys, onUnRecoverableConfigFileDiagnostic: logger.diagnostic.bind(logger), }); if (!parsed) { return; } logger.diagnostics(parsed.errors); tsConfigCache[path] = parsed; return parsed; }