fix(build): reuse TypeScript config host
This commit is contained in:
@@ -2,20 +2,10 @@ import { lstat, readdir, rm } from 'node:fs/promises'
|
|||||||
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path'
|
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path'
|
||||||
import { fileURLToPath } from 'node:url'
|
import { fileURLToPath } from 'node:url'
|
||||||
import ts from 'typescript'
|
import ts from 'typescript'
|
||||||
|
import { repositoryConfigHost } from './ts-project.ts'
|
||||||
|
|
||||||
const knownOrphanEntries = new Set(['node_modules', 'lib', '.typecheck'])
|
const knownOrphanEntries = new Set(['node_modules', 'lib', '.typecheck'])
|
||||||
|
|
||||||
const configHost: ts.ParseConfigFileHost = {
|
|
||||||
useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,
|
|
||||||
readDirectory: (...args) => ts.sys.readDirectory(...args),
|
|
||||||
fileExists: fileName => ts.sys.fileExists(fileName),
|
|
||||||
readFile: fileName => ts.sys.readFile(fileName),
|
|
||||||
getCurrentDirectory: () => ts.sys.getCurrentDirectory(),
|
|
||||||
onUnRecoverableConfigFileDiagnostic(diagnostic) {
|
|
||||||
throw new Error(ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'))
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
function isMissing(error: unknown): boolean {
|
function isMissing(error: unknown): boolean {
|
||||||
return error instanceof Error && 'code' in error && error.code === 'ENOENT'
|
return error instanceof Error && 'code' in error && error.code === 'ENOENT'
|
||||||
}
|
}
|
||||||
@@ -45,7 +35,7 @@ function repositoryPath(root: string, path: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function parseConfig(configPath: string): ts.ParsedCommandLine {
|
function parseConfig(configPath: string): ts.ParsedCommandLine {
|
||||||
const parsed = ts.getParsedCommandLineOfConfigFile(configPath, {}, configHost)
|
const parsed = ts.getParsedCommandLineOfConfigFile(configPath, {}, repositoryConfigHost)
|
||||||
if (!parsed) throw new Error(`clean: cannot parse TypeScript config ${configPath}`)
|
if (!parsed) throw new Error(`clean: cannot parse TypeScript config ${configPath}`)
|
||||||
if (parsed.errors.length > 0) {
|
if (parsed.errors.length > 0) {
|
||||||
throw new Error(parsed.errors.map(error => ts.flattenDiagnosticMessageText(error.messageText, '\n')).join('\n'))
|
throw new Error(parsed.errors.map(error => ts.flattenDiagnosticMessageText(error.messageText, '\n')).join('\n'))
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ interface ProjectGraph {
|
|||||||
options: ts.CompilerOptions
|
options: ts.CompilerOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
const configHost: ts.ParseConfigFileHost = {
|
/** TypeScript config host shared by repository scripts. */
|
||||||
|
export const repositoryConfigHost: ts.ParseConfigFileHost = {
|
||||||
useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,
|
useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,
|
||||||
readDirectory: (...args) => ts.sys.readDirectory(...args),
|
readDirectory: (...args) => ts.sys.readDirectory(...args),
|
||||||
fileExists: fileName => ts.sys.fileExists(fileName),
|
fileExists: fileName => ts.sys.fileExists(fileName),
|
||||||
@@ -52,7 +53,7 @@ function loadProjectGraph(projectRoot: string): ProjectGraph {
|
|||||||
|
|
||||||
/** Parse one config file and fail loud on any config diagnostic. */
|
/** Parse one config file and fail loud on any config diagnostic. */
|
||||||
function parseConfig(configPath: string): ts.ParsedCommandLine {
|
function parseConfig(configPath: string): ts.ParsedCommandLine {
|
||||||
const parsed = ts.getParsedCommandLineOfConfigFile(configPath, {}, configHost)
|
const parsed = ts.getParsedCommandLineOfConfigFile(configPath, {}, repositoryConfigHost)
|
||||||
if (!parsed) throw new Error(`cannot parse TypeScript config ${configPath}`)
|
if (!parsed) throw new Error(`cannot parse TypeScript config ${configPath}`)
|
||||||
if (parsed.errors.length > 0) {
|
if (parsed.errors.length > 0) {
|
||||||
throw new Error(parsed.errors.map(error => ts.flattenDiagnosticMessageText(error.messageText, '\n')).join('\n'))
|
throw new Error(parsed.errors.map(error => ts.flattenDiagnosticMessageText(error.messageText, '\n')).join('\n'))
|
||||||
|
|||||||
Reference in New Issue
Block a user