diff --git a/packages/cli/src/services/check-parser/package-files/resolver.ts b/packages/cli/src/services/check-parser/package-files/resolver.ts index ab7dfbe9..a6a02236 100644 --- a/packages/cli/src/services/check-parser/package-files/resolver.ts +++ b/packages/cli/src/services/check-parser/package-files/resolver.ts @@ -52,6 +52,13 @@ class PackageFiles { } } +type TSConfigFileLocalDependency = { + kind: 'tsconfig-file' + importPath: string + sourceFile: SourceFile + configFile: TSConfigFile +} + type TSConfigResolvedPathLocalDependency = { kind: 'tsconfig-resolved-path' importPath: string @@ -80,6 +87,7 @@ type RelativePathLocalDependency = { } type LocalDependency = + TSConfigFileLocalDependency | TSConfigResolvedPathLocalDependency | TSConfigBaseUrlRelativePathLocalDependency | PackageRelativePathLocalDependency | @@ -163,7 +171,9 @@ export class PackageFilesResolver { continue } - return [sourceFile, mainSourceFile] + configJson.registerRelatedSourceFile(mainSourceFile) + + return [sourceFile, mainSourceFile, configJson.jsonFile.sourceFile] } } @@ -239,6 +249,7 @@ export class PackageFilesResolver { if (sourceFile !== undefined) { const resolvedFiles = this.resolveSourceFile(sourceFile) for (const resolvedFile of resolvedFiles) { + configJson.registerRelatedSourceFile(resolvedFile) resolved.local.push({ kind: 'tsconfig-resolved-path', importPath, @@ -249,6 +260,12 @@ export class PackageFilesResolver { target, }, }) + resolved.local.push({ + kind: 'tsconfig-file', + importPath, + sourceFile: configJson.jsonFile.sourceFile, + configFile: configJson, + }) found = true } if (found) { @@ -270,12 +287,19 @@ export class PackageFilesResolver { const resolvedFiles = this.resolveSourceFile(sourceFile) let found = false for (const resolvedFile of resolvedFiles) { + configJson.registerRelatedSourceFile(resolvedFile) resolved.local.push({ kind: 'tsconfig-baseurl-relative-path', importPath, sourceFile: resolvedFile, configFile: configJson, }) + resolved.local.push({ + kind: 'tsconfig-file', + importPath, + sourceFile: configJson.jsonFile.sourceFile, + configFile: configJson, + }) found = true } if (found) { diff --git a/packages/cli/src/services/check-parser/package-files/tsconfig-json-file.ts b/packages/cli/src/services/check-parser/package-files/tsconfig-json-file.ts index 17858e1a..e709d73e 100644 --- a/packages/cli/src/services/check-parser/package-files/tsconfig-json-file.ts +++ b/packages/cli/src/services/check-parser/package-files/tsconfig-json-file.ts @@ -1,5 +1,6 @@ import path from 'node:path' +import { SourceFile } from './source-file' import { JsonSourceFile } from './json-source-file' import { PathResolver, ResolveResult } from './paths' import type { LoadFile } from './loader' @@ -90,6 +91,8 @@ export class TSConfigFile { baseUrl?: string pathResolver: PathResolver + relatedSourceFiles: SourceFile[] = [] + protected constructor (jsonFile: JsonSourceFile) { this.jsonFile = jsonFile @@ -215,4 +218,8 @@ export class TSConfigFile { return this.extifyLookupPaths(candidates) } + + registerRelatedSourceFile (file: SourceFile) { + this.relatedSourceFiles.push(file) + } } diff --git a/packages/cli/src/services/check-parser/parser.ts b/packages/cli/src/services/check-parser/parser.ts index 3adde25b..1ecc2abc 100644 --- a/packages/cli/src/services/check-parser/parser.ts +++ b/packages/cli/src/services/check-parser/parser.ts @@ -188,6 +188,8 @@ export class Parser { // This doesn't actually cause problems (both are "ESTree's"), but we need to ignore type errors here. // @ts-ignore walk.simple(ast, Parser.tsNodeVisitor(tsParser, dependencies)) + } else if (extension === '.json') { + // No dependencies to check. } else { throw new Error(`Unsupported file extension for ${filePath}`) }