From 7b7f6a75eaa152183056ee5652ed3a2e3d41cc05 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 1 Dec 2022 10:17:58 -0800 Subject: [PATCH] Code refactoring for module resolution api (#51675) * Refactoring so CacheWithRedirects has Key and Value type parameters * ModuleResolutionCache or TypeRefDirectiveCache will look in directory before solving, so ResolutionCache doesnt need this check * Test showing module resolution is not shared because resolution cache doesnt update own options * Enable traceResolution on some of the project reference tests * Simplify CacheWithRedirects and ensure the options are set in all common scenarios so cache can be shared between redirects --- src/compiler/checker.ts | 11 +- src/compiler/moduleNameResolver.ts | 206 +++++++-------- src/compiler/program.ts | 18 +- src/compiler/resolutionCache.ts | 71 +---- src/compiler/types.ts | 3 +- src/services/documentRegistry.ts | 23 +- .../tscWatch/projectsWithReferences.ts | 12 +- .../unittests/tsserver/resolutionCache.ts | 74 ++++++ .../on-sample-project.js | 77 +++++- ...-different-folders-with-no-files-clause.js | 245 +++++++++++++++++- ...nsitive-references-in-different-folders.js | 245 +++++++++++++++++- .../on-transitive-references.js | 233 ++++++++++++++++- ...n-declarationMap-changes-for-dependency.js | 38 ++- ...roject-uses-different-module-resolution.js | 36 ++- ...e-module-name-from-files-in-same-folder.js | 96 +++---- .../not-sharing-across-references.js | 182 +++++++++++++ ...e-module-name-from-files-in-same-folder.js | 88 ++++--- .../sharing-across-references.js | 178 +++++++++++++ 18 files changed, 1494 insertions(+), 342 deletions(-) create mode 100644 tests/baselines/reference/tsserver/resolutionCache/not-sharing-across-references.js create mode 100644 tests/baselines/reference/tsserver/resolutionCache/sharing-across-references.js diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 05b0847dd4d..bfe2889ca2c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -99,6 +99,7 @@ import { createFileDiagnostic, createGetCanonicalFileName, createGetSymbolWalker, + createModeAwareCacheKey, createPrinter, createPropertyNameNodeForIdentifierOrLiteral, createScanner, @@ -337,8 +338,8 @@ import { hasAccessorModifier, hasAmbientModifier, hasContextSensitiveParameters, - hasDecorators, HasDecorators, + hasDecorators, hasDynamicName, hasEffectiveModifier, hasEffectiveModifiers, @@ -347,8 +348,8 @@ import { hasExtension, HasIllegalDecorators, HasIllegalModifiers, - hasInitializer, HasInitializer, + hasInitializer, hasJSDocNodes, hasJSDocParameterTags, hasJsonModuleEmitEnabled, @@ -7406,7 +7407,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } const contextFile = getSourceFileOfNode(getOriginalNode(context.enclosingDeclaration)); const resolutionMode = overrideImportMode || contextFile?.impliedNodeFormat; - const cacheKey = getSpecifierCacheKey(contextFile.path, resolutionMode); + const cacheKey = createModeAwareCacheKey(contextFile.path, resolutionMode); const links = getSymbolLinks(symbol); let specifier = links.specifierCache && links.specifierCache.get(cacheKey); if (!specifier) { @@ -7435,10 +7436,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { links.specifierCache.set(cacheKey, specifier); } return specifier; - - function getSpecifierCacheKey(path: string, mode: ResolutionMode | undefined) { - return mode === undefined ? path : `${mode}|${path}`; - } } function symbolToEntityNameNode(symbol: Symbol): EntityName { diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index 188d62c7a52..b400bc23ba1 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -5,6 +5,7 @@ import { changeAnyExtension, CharacterCodes, combinePaths, + CommandLineOption, comparePaths, Comparison, CompilerOptions, @@ -35,6 +36,7 @@ import { getBaseFileName, GetCanonicalFileName, getCommonSourceDirectory, + getCompilerOptionValue, getDirectoryPath, GetEffectiveTypeRootsHost, getEmitModuleKind, @@ -66,14 +68,13 @@ import { ModuleKind, ModuleResolutionHost, ModuleResolutionKind, + moduleResolutionOptionDeclarations, noop, noopPush, normalizePath, normalizeSlashes, - optionsHaveModuleResolutionChanges, PackageId, packageIdToString, - ParsedCommandLine, Path, pathIsRelative, Pattern, @@ -718,58 +719,97 @@ export interface PerModuleNameCache { set(directory: string, result: ResolvedModuleWithFailedLookupLocations): void; } -/** @internal */ -export interface CacheWithRedirects { - getOwnMap: () => Map; - redirectsMap: Map>; - getOrCreateMapOfCacheRedirects(redirectedReference: ResolvedProjectReference | undefined): Map; - clear(): void; - setOwnOptions(newOptions: CompilerOptions): void; - setOwnMap(newOwnMap: Map): void; +function compilerOptionValueToString(value: unknown): string { + if (value === null || typeof value !== "object") { // eslint-disable-line no-null/no-null + return "" + value; + } + if (isArray(value)) { + return `[${value.map(e => compilerOptionValueToString(e))?.join(",")}]`; + } + let str = "{"; + for (const key in value) { + if (hasProperty(value, key)) { + str += `${key}: ${compilerOptionValueToString((value as any)[key])}`; + } + } + return str + "}"; } /** @internal */ -export function createCacheWithRedirects(options?: CompilerOptions): CacheWithRedirects { - let ownMap: Map = new Map(); - const redirectsMap = new Map>(); +export function getKeyForCompilerOptions(options: CompilerOptions, affectingOptionDeclarations: readonly CommandLineOption[]) { + return affectingOptionDeclarations.map(option => compilerOptionValueToString(getCompilerOptionValue(options, option))).join("|") + (options.pathsBasePath ? `|${options.pathsBasePath}` : undefined); +} + +/** @internal */ +export interface CacheWithRedirects { + getOrCreateMapOfCacheRedirects(redirectedReference: ResolvedProjectReference | undefined): Map; + update(newOptions: CompilerOptions): void; + clear(): void; +} + +/** @internal */ +export function createCacheWithRedirects(ownOptions: CompilerOptions | undefined): CacheWithRedirects { + type RedirectsCacheKey = string & { __compilerOptionsKey: any; }; + const redirectsMap = new Map>(); + const optionsToRedirectsKey = new Map(); + const redirectsKeyToMap = new Map>(); + let ownMap = new Map(); + if (ownOptions) redirectsMap.set(ownOptions, ownMap); return { - getOwnMap, - redirectsMap, getOrCreateMapOfCacheRedirects, + update, clear, - setOwnOptions, - setOwnMap }; - function getOwnMap() { - return ownMap; + function getOrCreateMapOfCacheRedirects(redirectedReference: ResolvedProjectReference | undefined): Map { + return redirectedReference ? + getOrCreateMap(redirectedReference.commandLine.options) : + ownMap; } - function setOwnOptions(newOptions: CompilerOptions) { - options = newOptions; - } - - function setOwnMap(newOwnMap: Map) { - ownMap = newOwnMap; - } - - function getOrCreateMapOfCacheRedirects(redirectedReference: ResolvedProjectReference | undefined) { - if (!redirectedReference) { - return ownMap; + function update(newOptions: CompilerOptions) { + if (ownOptions !== newOptions) { + if (ownOptions) ownMap = getOrCreateMap(newOptions); // set new map for new options as ownMap + else redirectsMap.set(newOptions, ownMap); // Use existing map if oldOptions = undefined + ownOptions = newOptions; } - const path = redirectedReference.sourceFile.path; - let redirects = redirectsMap.get(path); - if (!redirects) { - // Reuse map if redirected reference map uses same resolution - redirects = !options || optionsHaveModuleResolutionChanges(options, redirectedReference.commandLine.options) ? new Map() : ownMap; - redirectsMap.set(path, redirects); + } + + function getOrCreateMap(redirectOptions: CompilerOptions): Map { + let result = redirectsMap.get(redirectOptions); + if (result) return result; + const key = getRedirectsCacheKey(redirectOptions); + result = redirectsKeyToMap.get(key); + if (!result) { + if (ownOptions) { + const ownKey = getRedirectsCacheKey(ownOptions); + if (ownKey === key) result = ownMap; + else if (!redirectsKeyToMap.has(ownKey)) redirectsKeyToMap.set(ownKey, ownMap); + } + redirectsKeyToMap.set(key, result ??= new Map()); } - return redirects; + redirectsMap.set(redirectOptions, result); + return result; } function clear() { + const ownKey = ownOptions && optionsToRedirectsKey.get(ownOptions); ownMap.clear(); redirectsMap.clear(); + optionsToRedirectsKey.clear(); + redirectsKeyToMap.clear(); + if (ownOptions) { + if (ownKey) optionsToRedirectsKey.set(ownOptions, ownKey); + redirectsMap.set(ownOptions, ownMap); + } + } + + function getRedirectsCacheKey(options: CompilerOptions) { + let result = optionsToRedirectsKey.get(options); + if (!result) { + optionsToRedirectsKey.set(options, result = getKeyForCompilerOptions(options, moduleResolutionOptionDeclarations) as RedirectsCacheKey); + } + return result; } } @@ -794,7 +834,7 @@ function createPackageJsonInfoCache(currentDirectory: string, getCanonicalFileNa } } -function getOrCreateCache(cacheWithRedirects: CacheWithRedirects, redirectedReference: ResolvedProjectReference | undefined, key: string, create: () => T): T { +function getOrCreateCache(cacheWithRedirects: CacheWithRedirects, redirectedReference: ResolvedProjectReference | undefined, key: K, create: () => V): V { const cache = cacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference); let result = cache.get(key); if (!result) { @@ -804,35 +844,7 @@ function getOrCreateCache(cacheWithRedirects: CacheWithRedirects, redirect return result; } -function updateRedirectsMap( - options: CompilerOptions, - directoryToModuleNameMap: CacheWithRedirects>, - moduleNameToDirectoryMap?: CacheWithRedirects -) { - if (!options.configFile) return; - if (directoryToModuleNameMap.redirectsMap.size === 0) { - // The own map will be for projectCompilerOptions - Debug.assert(!moduleNameToDirectoryMap || moduleNameToDirectoryMap.redirectsMap.size === 0); - Debug.assert(directoryToModuleNameMap.getOwnMap().size === 0); - Debug.assert(!moduleNameToDirectoryMap || moduleNameToDirectoryMap.getOwnMap().size === 0); - directoryToModuleNameMap.redirectsMap.set(options.configFile.path, directoryToModuleNameMap.getOwnMap()); - moduleNameToDirectoryMap?.redirectsMap.set(options.configFile.path, moduleNameToDirectoryMap.getOwnMap()); - } - else { - // Set correct own map - Debug.assert(!moduleNameToDirectoryMap || moduleNameToDirectoryMap.redirectsMap.size > 0); - const ref: ResolvedProjectReference = { - sourceFile: options.configFile, - commandLine: { options } as ParsedCommandLine - }; - directoryToModuleNameMap.setOwnMap(directoryToModuleNameMap.getOrCreateMapOfCacheRedirects(ref)); - moduleNameToDirectoryMap?.setOwnMap(moduleNameToDirectoryMap.getOrCreateMapOfCacheRedirects(ref)); - } - directoryToModuleNameMap.setOwnOptions(options); - moduleNameToDirectoryMap?.setOwnOptions(options); -} - -function createPerDirectoryResolutionCache(currentDirectory: string, getCanonicalFileName: GetCanonicalFileName, directoryToModuleNameMap: CacheWithRedirects>): PerDirectoryResolutionCache { +function createPerDirectoryResolutionCache(currentDirectory: string, getCanonicalFileName: GetCanonicalFileName, directoryToModuleNameMap: CacheWithRedirects>): PerDirectoryResolutionCache { return { getOrCreateCacheForDirectory, clear, @@ -844,19 +856,24 @@ function createPerDirectoryResolutionCache(currentDirectory: string, getCanon } function update(options: CompilerOptions) { - updateRedirectsMap(options, directoryToModuleNameMap); + directoryToModuleNameMap.update(options); } function getOrCreateCacheForDirectory(directoryName: string, redirectedReference?: ResolvedProjectReference) { const path = toPath(directoryName, currentDirectory, getCanonicalFileName); - return getOrCreateCache>(directoryToModuleNameMap, redirectedReference, path, () => createModeAwareCache()); + return getOrCreateCache(directoryToModuleNameMap, redirectedReference, path, () => createModeAwareCache()); } } +/** @internal */ +export type ModeAwareCacheKey = string & { __modeAwareCacheKey: any; }; +/** @internal */ +export function createModeAwareCacheKey(specifier: string, mode: ResolutionMode) { + return (mode === undefined ? specifier : `${mode}|${specifier}`) as ModeAwareCacheKey; +} /** @internal */ export function createModeAwareCache(): ModeAwareCache { const underlying = new Map(); - type ModeAwareCacheKey = string & { __modeAwareCacheKey: any; }; const memoizedReverseKeys = new Map(); const cache: ModeAwareCache = { @@ -887,7 +904,7 @@ export function createModeAwareCache(): ModeAwareCache { return cache; function getUnderlyingCacheKey(specifier: string, mode: ResolutionMode) { - const result = (mode === undefined ? specifier : `${mode}|${specifier}`) as ModeAwareCacheKey; + const result = createModeAwareCacheKey(specifier, mode); memoizedReverseKeys.set(result, [specifier, mode]); return result; } @@ -919,24 +936,10 @@ export function createModuleResolutionCache( currentDirectory: string, getCanonicalFileName: (s: string) => string, options?: CompilerOptions -): ModuleResolutionCache; -/** @internal */ -export function createModuleResolutionCache( - currentDirectory: string, - getCanonicalFileName: GetCanonicalFileName, - options: undefined, - directoryToModuleNameMap: CacheWithRedirects>, - moduleNameToDirectoryMap: CacheWithRedirects, -): ModuleResolutionCache; -export function createModuleResolutionCache( - currentDirectory: string, - getCanonicalFileName: GetCanonicalFileName, - options?: CompilerOptions, - directoryToModuleNameMap?: CacheWithRedirects>, - moduleNameToDirectoryMap?: CacheWithRedirects, ): ModuleResolutionCache { - const perDirectoryResolutionCache = createPerDirectoryResolutionCache(currentDirectory, getCanonicalFileName, directoryToModuleNameMap ||= createCacheWithRedirects(options)); - moduleNameToDirectoryMap ||= createCacheWithRedirects(options); + const directoryToModuleNameMap = createCacheWithRedirects>(options); + const perDirectoryResolutionCache = createPerDirectoryResolutionCache(currentDirectory, getCanonicalFileName, directoryToModuleNameMap); + const moduleNameToDirectoryMap = createCacheWithRedirects(options); const packageJsonInfoCache = createPackageJsonInfoCache(currentDirectory, getCanonicalFileName); return { @@ -956,20 +959,21 @@ export function createModuleResolutionCache( function clearAllExceptPackageJsonInfoCache() { perDirectoryResolutionCache.clear(); - moduleNameToDirectoryMap!.clear(); + moduleNameToDirectoryMap.clear(); } function update(options: CompilerOptions) { - updateRedirectsMap(options, directoryToModuleNameMap!, moduleNameToDirectoryMap); + directoryToModuleNameMap.update(options); + moduleNameToDirectoryMap.update(options); } function getOrCreateCacheForModuleName(nonRelativeModuleName: string, mode: ResolutionMode, redirectedReference?: ResolvedProjectReference): PerModuleNameCache { Debug.assert(!isExternalModuleNameRelative(nonRelativeModuleName)); - return getOrCreateCache(moduleNameToDirectoryMap!, redirectedReference, mode === undefined ? nonRelativeModuleName : `${mode}|${nonRelativeModuleName}`, createPerModuleNameCache); + return getOrCreateCache(moduleNameToDirectoryMap, redirectedReference, createModeAwareCacheKey(nonRelativeModuleName, mode), createPerModuleNameCache); } function createPerModuleNameCache(): PerModuleNameCache { - const directoryPathMap = new Map(); + const directoryPathMap = new Map(); return { get, set }; @@ -1046,23 +1050,9 @@ export function createTypeReferenceDirectiveResolutionCache( getCanonicalFileName: (s: string) => string, options?: CompilerOptions, packageJsonInfoCache?: PackageJsonInfoCache, -): TypeReferenceDirectiveResolutionCache; -/** @internal */ -export function createTypeReferenceDirectiveResolutionCache( - currentDirectory: string, - getCanonicalFileName: GetCanonicalFileName, - options: undefined, - packageJsonInfoCache: PackageJsonInfoCache | undefined, - directoryToModuleNameMap: CacheWithRedirects>, -): TypeReferenceDirectiveResolutionCache; -export function createTypeReferenceDirectiveResolutionCache( - currentDirectory: string, - getCanonicalFileName: GetCanonicalFileName, - options?: CompilerOptions, - packageJsonInfoCache?: PackageJsonInfoCache | undefined, - directoryToModuleNameMap?: CacheWithRedirects>, ): TypeReferenceDirectiveResolutionCache { - const perDirectoryResolutionCache = createPerDirectoryResolutionCache(currentDirectory, getCanonicalFileName, directoryToModuleNameMap ||= createCacheWithRedirects(options)); + const directoryToModuleNameMap = createCacheWithRedirects>(options); + const perDirectoryResolutionCache = createPerDirectoryResolutionCache(currentDirectory, getCanonicalFileName, directoryToModuleNameMap); packageJsonInfoCache ||= createPackageJsonInfoCache(currentDirectory, getCanonicalFileName); return { diff --git a/src/compiler/program.ts b/src/compiler/program.ts index f1f67c0e87e..3f30a3a33a3 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -814,17 +814,16 @@ export function loadWithTypeDirectiveCache(names: string[] | readonly FileRef return []; } const resolutions: T[] = []; - const cache = new Map(); + const cache = createModeAwareCache(); for (const name of names) { let result: T; const mode = getModeForFileReference(name, containingFileMode); const strName = getResolutionName(name); - const cacheKey = mode !== undefined ? `${mode}|${strName}` : strName; - if (cache.has(cacheKey)) { - result = cache.get(cacheKey)!; + if (cache.has(strName, mode)) { + result = cache.get(strName, mode)!; } else { - cache.set(cacheKey, result = loader(strName, containingFile, redirectedReference, mode)); + cache.set(strName, mode, result = loader(strName, containingFile, redirectedReference, mode)); } resolutions.push(result); } @@ -944,7 +943,7 @@ export function loadWithModeAwareCache(names: readonly StringLiteralLike[] | return []; } const resolutions: T[] = []; - const cache = new Map(); + const cache = createModeAwareCache(); let i = 0; for (const entry of resolutionInfo ? resolutionInfo.names : names) { let result: T; @@ -953,12 +952,11 @@ export function loadWithModeAwareCache(names: readonly StringLiteralLike[] | getModeForResolutionAtIndex(containingFile, i); i++; const name = isString(entry) ? entry : entry.text; - const cacheKey = mode !== undefined ? `${mode}|${name}` : name; - if (cache.has(cacheKey)) { - result = cache.get(cacheKey)!; + if (cache.has(name, mode)) { + result = cache.get(name, mode)!; } else { - cache.set(cacheKey, result = loader(name, mode, containingFileName, redirectedReference)); + cache.set(name, mode, result = loader(name, mode, containingFileName, redirectedReference)); } resolutions.push(result); } diff --git a/src/compiler/resolutionCache.ts b/src/compiler/resolutionCache.ts index f63ecc8773f..90c45fc4ecf 100644 --- a/src/compiler/resolutionCache.ts +++ b/src/compiler/resolutionCache.ts @@ -2,14 +2,12 @@ import * as ts from "./_namespaces/ts"; import { arrayToMap, CachedDirectoryStructureHost, - CacheWithRedirects, CharacterCodes, clearMap, closeFileWatcher, closeFileWatcherOf, CompilerOptions, contains, - createCacheWithRedirects, createModeAwareCache, createModuleResolutionCache, createMultiMap, @@ -65,7 +63,6 @@ import { parseNodeModuleFromPath, Path, pathContainsNodeModules, - PerModuleNameCache, Program, removeSuffix, removeTrailingDirectorySeparator, @@ -292,24 +289,18 @@ export function createResolutionCache(resolutionHost: ResolutionCacheHost, rootD // The key in the map is source file's path. // The values are Map of resolutions with key being name lookedup. const resolvedModuleNames = new Map>(); - const perDirectoryResolvedModuleNames: CacheWithRedirects> = createCacheWithRedirects(); - const nonRelativeModuleNameCache: CacheWithRedirects = createCacheWithRedirects(); const moduleResolutionCache = createModuleResolutionCache( getCurrentDirectory(), resolutionHost.getCanonicalFileName, - /*options*/ undefined, - perDirectoryResolvedModuleNames, - nonRelativeModuleNameCache, + resolutionHost.getCompilationSettings(), ); const resolvedTypeReferenceDirectives = new Map>(); - const perDirectoryResolvedTypeReferenceDirectives: CacheWithRedirects> = createCacheWithRedirects(); const typeReferenceDirectiveResolutionCache = createTypeReferenceDirectiveResolutionCache( getCurrentDirectory(), resolutionHost.getCanonicalFileName, - /*options*/ undefined, + resolutionHost.getCompilationSettings(), moduleResolutionCache.getPackageJsonInfoCache(), - perDirectoryResolvedTypeReferenceDirectives ); /** @@ -387,6 +378,8 @@ export function createResolutionCache(resolutionHost: ResolutionCacheHost, rootD affectingPathChecksForFile = undefined; moduleResolutionCache.clear(); typeReferenceDirectiveResolutionCache.clear(); + moduleResolutionCache.update(resolutionHost.getCompilationSettings()); + typeReferenceDirectiveResolutionCache.update(resolutionHost.getCompilationSettings()); impliedFormatPackageJsons.clear(); hasChangedAutomaticTypeDirectiveNames = false; } @@ -514,8 +507,7 @@ export function createResolutionCache(resolutionHost: ResolutionCacheHost, rootD names: readonly string[] | readonly FileReference[]; containingFile: string; redirectedReference: ResolvedProjectReference | undefined; - cache: Map>; - perDirectoryCacheWithRedirects: CacheWithRedirects>; + perFileCache: Map>; loader: (name: string, containingFile: string, options: CompilerOptions, host: ModuleResolutionHost, redirectedReference?: ResolvedProjectReference, containingSourceFile?: SourceFile, resolutionMode?: ResolutionMode) => T; getResolutionWithResolvedFileName: GetResolutionWithResolvedFileName; shouldRetryResolution: (t: T) => boolean; @@ -527,19 +519,12 @@ export function createResolutionCache(resolutionHost: ResolutionCacheHost, rootD } function resolveNamesWithLocalCache({ names, containingFile, redirectedReference, - cache, perDirectoryCacheWithRedirects, + perFileCache, loader, getResolutionWithResolvedFileName, shouldRetryResolution, reusedNames, resolutionInfo, logChanges, containingSourceFile, containingSourceFileMode }: ResolveNamesWithLocalCacheInput): (R | undefined)[] { const path = resolutionHost.toPath(containingFile); - const resolutionsInFile = cache.get(path) || cache.set(path, createModeAwareCache()).get(path)!; - const dirPath = getDirectoryPath(path); - const perDirectoryCache = perDirectoryCacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference); - let perDirectoryResolution = perDirectoryCache.get(dirPath); - if (!perDirectoryResolution) { - perDirectoryResolution = createModeAwareCache(); - perDirectoryCache.set(dirPath, perDirectoryResolution); - } + const resolutionsInFile = perFileCache.get(path) || perFileCache.set(path, createModeAwareCache()).get(path)!; const resolvedModules: (R | undefined)[] = []; const compilerOptions = resolutionHost.getCompilationSettings(); const hasInvalidatedNonRelativeUnresolvedImport = logChanges && isFileWithInvalidatedNonRelativeUnresolvedImports(path); @@ -575,39 +560,9 @@ export function createResolutionCache(resolutionHost: ResolutionCacheHost, rootD // If the name is unresolved import that was invalidated, recalculate (hasInvalidatedNonRelativeUnresolvedImport && !isExternalModuleNameRelative(name) && shouldRetryResolution(resolution))) { const existingResolution = resolution; - const resolutionInDirectory = perDirectoryResolution.get(name, mode); - if (resolutionInDirectory) { - resolution = resolutionInDirectory; - const host = resolutionHost.getCompilerHost?.() || resolutionHost; - if (isTraceEnabled(compilerOptions, host)) { - const resolved = getResolutionWithResolvedFileName(resolution); - trace( - host, - loader === resolveModuleName as unknown ? - resolved?.resolvedFileName ? - resolved.packageId ? - Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 : - Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 : - Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved : - resolved?.resolvedFileName ? - resolved.packageId ? - Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 : - Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 : - Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved, - name, - containingFile, - getDirectoryPath(containingFile), - resolved?.resolvedFileName, - resolved?.packageId && packageIdToString(resolved.packageId) - ); - } - } - else { - resolution = loader(name, containingFile, compilerOptions, resolutionHost.getCompilerHost?.() || resolutionHost, redirectedReference, containingSourceFile, mode); - perDirectoryResolution.set(name, mode, resolution); - if (resolutionHost.onDiscoveredSymlink && resolutionIsSymlink(resolution)) { - resolutionHost.onDiscoveredSymlink(); - } + resolution = loader(name, containingFile, compilerOptions, resolutionHost.getCompilerHost?.() || resolutionHost, redirectedReference, containingSourceFile, mode); + if (resolutionHost.onDiscoveredSymlink && resolutionIsSymlink(resolution)) { + resolutionHost.onDiscoveredSymlink(); } resolutionsInFile.set(name, mode, resolution); watchFailedLookupLocationsOfExternalModuleResolutions(name, resolution, path, getResolutionWithResolvedFileName); @@ -703,8 +658,7 @@ export function createResolutionCache(resolutionHost: ResolutionCacheHost, rootD names: typeDirectiveNames, containingFile, redirectedReference, - cache: resolvedTypeReferenceDirectives, - perDirectoryCacheWithRedirects: perDirectoryResolvedTypeReferenceDirectives, + perFileCache: resolvedTypeReferenceDirectives, loader: resolveTypeReferenceDirective, getResolutionWithResolvedFileName: getResolvedTypeReferenceDirective, shouldRetryResolution: resolution => resolution.resolvedTypeReferenceDirective === undefined, @@ -725,8 +679,7 @@ export function createResolutionCache(resolutionHost: ResolutionCacheHost, rootD names: moduleNames, containingFile, redirectedReference, - cache: resolvedModuleNames, - perDirectoryCacheWithRedirects: perDirectoryResolvedModuleNames, + perFileCache: resolvedModuleNames, loader: resolveModuleName, getResolutionWithResolvedFileName: getResolvedModule, shouldRetryResolution: resolution => !resolution.resolvedModule || !resolutionExtensionIsTSOrJson(resolution.resolvedModule.extension), diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 92ec847e19b..7ce54d3dd6c 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -4,6 +4,7 @@ import { EmitHelperFactory, MapLike, ModeAwareCache, + ModeAwareCacheKey, ModuleResolutionCache, MultiMap, NodeFactoryFlags, @@ -5503,7 +5504,7 @@ export interface SymbolLinks { enumKind?: EnumKind; // Enum declaration classification originatingImport?: ImportDeclaration | ImportCall; // Import declaration which produced the symbol, present if the symbol is marked as uncallable but had call signatures in `resolveESModuleSymbol` lateSymbol?: Symbol; // Late-bound symbol for a computed property - specifierCache?: Map; // For symbols corresponding to external modules, a cache of incoming path -> module specifier name mappings + specifierCache?: Map; // For symbols corresponding to external modules, a cache of incoming path -> module specifier name mappings extendedContainers?: Symbol[]; // Containers (other than the parent) which this symbol is aliased in extendedContainersByFile?: Map; // Containers (other than the parent) which this symbol is aliased in variances?: VarianceFlags[]; // Alias symbol type argument variance cache diff --git a/src/services/documentRegistry.ts b/src/services/documentRegistry.ts index 27faadad16b..50f660d6bf7 100644 --- a/src/services/documentRegistry.ts +++ b/src/services/documentRegistry.ts @@ -8,17 +8,14 @@ import { ensureScriptKind, firstDefinedIterator, forEachEntry, - getCompilerOptionValue, getEmitScriptTarget, getImpliedNodeFormatForFile, + getKeyForCompilerOptions, getOrUpdate, getSetExternalModuleIndicator, - hasProperty, identity, - isArray, IScriptSnapshot, isDeclarationFileName, - map, MinimalResolutionCacheHost, Path, ResolutionMode, @@ -407,24 +404,8 @@ export function createDocumentRegistryInternal(useCaseSensitiveFileNames?: boole }; } -function compilerOptionValueToString(value: unknown): string { - if (value === null || typeof value !== "object") { // eslint-disable-line no-null/no-null - return "" + value; - } - if (isArray(value)) { - return `[${map(value, e => compilerOptionValueToString(e))?.join(",")}]`; - } - let str = "{"; - for (const key in value) { - if (hasProperty(value, key)) { - str += `${key}: ${compilerOptionValueToString((value as any)[key])}`; - } - } - return str + "}"; -} - function getKeyForCompilationSettings(settings: CompilerOptions): DocumentRegistryBucketKey { - return sourceFileAffectingCompilerOptions.map(option => compilerOptionValueToString(getCompilerOptionValue(settings, option))).join("|") + (settings.pathsBasePath ? `|${settings.pathsBasePath}` : undefined) as DocumentRegistryBucketKey; + return getKeyForCompilerOptions(settings, sourceFileAffectingCompilerOptions) as DocumentRegistryBucketKey; } function getDocumentRegistryBucketKeyWithMode(key: DocumentRegistryBucketKey, mode: ResolutionMode) { diff --git a/src/testRunner/unittests/tscWatch/projectsWithReferences.ts b/src/testRunner/unittests/tscWatch/projectsWithReferences.ts index 7321dc807dc..2372ffc5f74 100644 --- a/src/testRunner/unittests/tscWatch/projectsWithReferences.ts +++ b/src/testRunner/unittests/tscWatch/projectsWithReferences.ts @@ -30,7 +30,7 @@ describe("unittests:: tsc-watch:: projects with references: invoking when refere ], { currentDirectory: `/user/username/projects/sample1` } ), - commandLineArgs: ["-w", "-p", "tests"], + commandLineArgs: ["-w", "-p", "tests", "--traceResolution", "--explainFiles"], changes: [ { caption: "local edit in logic ts, and build logic", @@ -91,7 +91,7 @@ describe("unittests:: tsc-watch:: projects with references: invoking when refere ], { currentDirectory: `/user/username/projects/transitiveReferences` } ), - commandLineArgs: ["-w", "-p", "tsconfig.c.json"], + commandLineArgs: ["-w", "-p", "tsconfig.c.json", "--traceResolution", "--explainFiles"], changes: [ { caption: "non local edit b ts, and build b", @@ -179,7 +179,7 @@ describe("unittests:: tsc-watch:: projects with references: invoking when refere ], { currentDirectory: `/user/username/projects/transitiveReferences` } ), - commandLineArgs: ["-w", "-p", "tsconfig.c.json"], + commandLineArgs: ["-w", "-p", "tsconfig.c.json", "--traceResolution", "--explainFiles"], changes: ts.emptyArray, baselineDependencies: true, }); @@ -234,7 +234,7 @@ X;`, ], { currentDirectory: `/user/username/projects/transitiveReferences` } ), - commandLineArgs: ["-w", "-p", "c"], + commandLineArgs: ["-w", "-p", "c", "--traceResolution", "--explainFiles"], changes: [ { caption: "non local edit b ts, and build b", @@ -353,7 +353,7 @@ X;`, ], { currentDirectory: `/user/username/projects/transitiveReferences` } ), - commandLineArgs: ["-w", "-p", "c"], + commandLineArgs: ["-w", "-p", "c", "--traceResolution", "--explainFiles"], changes: [ { caption: "non local edit b ts, and build b", @@ -439,7 +439,7 @@ X;`, ], { currentDirectory: `/user/username/projects/sample1` } ), - commandLineArgs: ["-w", "-p", "logic"], + commandLineArgs: ["-w", "-p", "logic", "--traceResolution", "--explainFiles"], changes: [ { caption: "change declration map in core", diff --git a/src/testRunner/unittests/tsserver/resolutionCache.ts b/src/testRunner/unittests/tsserver/resolutionCache.ts index 9a4a2c59ec4..29e9f7b3333 100644 --- a/src/testRunner/unittests/tsserver/resolutionCache.ts +++ b/src/testRunner/unittests/tsserver/resolutionCache.ts @@ -1,10 +1,14 @@ import * as ts from "../../_namespaces/ts"; +import * as Utils from "../../_namespaces/Utils"; import { createServerHost, File, libFile, TestServerHost, } from "../virtualFileSystemWithWatch"; +import { + compilerOptionsToConfigJson, +} from "../tsc/helpers"; import { baselineTsserverLogs, checkNumberOfProjects, @@ -630,3 +634,73 @@ export const x = 10;` }); }); }); + +describe("unittests:: tsserver:: resolutionCache:: tsserverProjectSystem with project references", () => { + it("sharing across references", () => { + const host = createServerHost({ + "/src/projects/node_modules/moduleX/index.d.ts": "export const x = 10;", + "/src/projects/common/tsconfig.json": JSON.stringify({ + compilerOptions: compilerOptionsToConfigJson({ + composite: true, + traceResolution: true, + }), + }), + "/src/projects/common/moduleA.ts": "export const a = 10;", + "/src/projects/common/moduleB.ts": Utils.dedent` + import { x } from "moduleX"; + export const b = x; + `, + "/src/projects/app/tsconfig.json": JSON.stringify({ + compilerOptions: compilerOptionsToConfigJson({ + composite: true, + traceResolution: true, + }), + references: [{ path: "../common" }], + }), + "/src/projects/app/appA.ts": Utils.dedent` + import { x } from "moduleX"; + export const y = x; + `, + "/src/projects/app/appB.ts": Utils.dedent` + import { x } from "../common/moduleB"; + export const y = x; + `, + }); + const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) }); + openFilesForSession(["/src/projects/app/appB.ts"], session); + baselineTsserverLogs("resolutionCache", "sharing across references", session); + }); + + it("not sharing across references", () => { + const host = createServerHost({ + "/src/projects/node_modules/moduleX/index.d.ts": "export const x = 10;", + "/src/projects/common/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, traceResolution: true }, + }), + "/src/projects/common/moduleA.ts": "export const a = 10;", + "/src/projects/common/moduleB.ts": Utils.dedent` + import { x } from "moduleX"; + export const b = x; + `, + "/src/projects/app/tsconfig.json": JSON.stringify({ + compilerOptions: { + composite: true, + traceResolution: true, + typeRoots: [], // Just some sample option that is different across the projects + }, + references: [{ path: "../common" }], + }), + "/src/projects/app/appA.ts": Utils.dedent` + import { x } from "moduleX"; + export const y = x; + `, + "/src/projects/app/appB.ts": Utils.dedent` + import { x } from "../common/moduleB"; + export const y = x; + `, + }); + const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) }); + openFilesForSession(["/src/projects/app/appB.ts"], session); + baselineTsserverLogs("resolutionCache", "not sharing across references", session); + }); +}); diff --git a/tests/baselines/reference/tscWatch/projectsWithReferences/on-sample-project.js b/tests/baselines/reference/tscWatch/projectsWithReferences/on-sample-project.js index 4487e1fd4da..56b36f1c601 100644 --- a/tests/baselines/reference/tscWatch/projectsWithReferences/on-sample-project.js +++ b/tests/baselines/reference/tscWatch/projectsWithReferences/on-sample-project.js @@ -395,17 +395,50 @@ export declare const m: typeof mod; } -/a/lib/tsc.js -w -p tests +/a/lib/tsc.js -w -p tests --traceResolution --explainFiles Output:: >> Screen clear [12:01:16 AM] Starting compilation in watch mode... +======== Resolving module '../core/index' from '/user/username/projects/sample1/tests/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/sample1/core/index', target file types: TypeScript, Declaration. +File '/user/username/projects/sample1/core/index.ts' exist - use it as a name resolution result. +======== Module name '../core/index' was successfully resolved to '/user/username/projects/sample1/core/index.ts'. ======== +======== Resolving module '../logic/index' from '/user/username/projects/sample1/tests/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/sample1/logic/index', target file types: TypeScript, Declaration. +File '/user/username/projects/sample1/logic/index.ts' exist - use it as a name resolution result. +======== Module name '../logic/index' was successfully resolved to '/user/username/projects/sample1/logic/index.ts'. ======== +======== Resolving module '../core/anotherModule' from '/user/username/projects/sample1/tests/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/sample1/core/anotherModule', target file types: TypeScript, Declaration. +File '/user/username/projects/sample1/core/anotherModule.ts' exist - use it as a name resolution result. +======== Module name '../core/anotherModule' was successfully resolved to '/user/username/projects/sample1/core/anotherModule.ts'. ======== +======== Resolving module '../core/anotherModule' from '/user/username/projects/sample1/logic/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/sample1/logic/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '../core/anotherModule' was successfully resolved to '/user/username/projects/sample1/core/anotherModule.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +core/index.d.ts + Imported via '../core/index' from file 'tests/index.ts' + File is output of project reference source 'core/index.ts' +core/anotherModule.d.ts + Imported via '../core/anotherModule' from file 'logic/index.d.ts' + Imported via '../core/anotherModule' from file 'tests/index.ts' + File is output of project reference source 'core/anotherModule.ts' +logic/index.d.ts + Imported via '../logic/index' from file 'tests/index.ts' + File is output of project reference source 'logic/index.ts' +tests/index.ts + Part of 'files' list in tsconfig.json [12:01:17 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/sample1/tests/index.ts"] -Program options: {"composite":true,"declaration":true,"forceConsistentCasingInFileNames":true,"skipDefaultLibCheck":true,"watch":true,"project":"/user/username/projects/sample1/tests","configFilePath":"/user/username/projects/sample1/tests/tsconfig.json"} +Program options: {"composite":true,"declaration":true,"forceConsistentCasingInFileNames":true,"skipDefaultLibCheck":true,"watch":true,"project":"/user/username/projects/sample1/tests","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/sample1/tests/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -733,12 +766,27 @@ Output:: >> Screen clear [12:01:51 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../core/anotherModule' from '/user/username/projects/sample1/logic/index.ts' of old program, it was successfully resolved to '/user/username/projects/sample1/core/anotherModule.ts'. +../../../../a/lib/lib.d.ts + Default library for target 'es3' +core/index.d.ts + Imported via '../core/index' from file 'tests/index.ts' + File is output of project reference source 'core/index.ts' +core/anotherModule.d.ts + Imported via '../core/anotherModule' from file 'logic/index.d.ts' + Imported via '../core/anotherModule' from file 'tests/index.ts' + File is output of project reference source 'core/anotherModule.ts' +logic/index.d.ts + Imported via '../logic/index' from file 'tests/index.ts' + File is output of project reference source 'logic/index.ts' +tests/index.ts + Part of 'files' list in tsconfig.json [12:01:58 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/sample1/tests/index.ts"] -Program options: {"composite":true,"declaration":true,"forceConsistentCasingInFileNames":true,"skipDefaultLibCheck":true,"watch":true,"project":"/user/username/projects/sample1/tests","configFilePath":"/user/username/projects/sample1/tests/tsconfig.json"} +Program options: {"composite":true,"declaration":true,"forceConsistentCasingInFileNames":true,"skipDefaultLibCheck":true,"watch":true,"project":"/user/username/projects/sample1/tests","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/sample1/tests/tsconfig.json"} Program structureReused: Completely Program files:: /a/lib/lib.d.ts @@ -1009,12 +1057,33 @@ Output:: >> Screen clear [12:02:20 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../core/index' from '/user/username/projects/sample1/tests/index.ts' of old program, it was successfully resolved to '/user/username/projects/sample1/core/index.ts'. +Reusing resolution of module '../logic/index' from '/user/username/projects/sample1/tests/index.ts' of old program, it was successfully resolved to '/user/username/projects/sample1/logic/index.ts'. +Reusing resolution of module '../core/anotherModule' from '/user/username/projects/sample1/tests/index.ts' of old program, it was successfully resolved to '/user/username/projects/sample1/core/anotherModule.ts'. +======== Resolving module '../core/anotherModule' from '/user/username/projects/sample1/logic/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/sample1/logic/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '../core/anotherModule' was successfully resolved to '/user/username/projects/sample1/core/anotherModule.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +core/index.d.ts + Imported via '../core/index' from file 'tests/index.ts' + File is output of project reference source 'core/index.ts' +core/anotherModule.d.ts + Imported via '../core/anotherModule' from file 'logic/decls/index.d.ts' + Imported via '../core/anotherModule' from file 'tests/index.ts' + File is output of project reference source 'core/anotherModule.ts' +logic/decls/index.d.ts + Imported via '../logic/index' from file 'tests/index.ts' + File is output of project reference source 'logic/index.ts' +tests/index.ts + Part of 'files' list in tsconfig.json [12:02:27 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/sample1/tests/index.ts"] -Program options: {"composite":true,"declaration":true,"forceConsistentCasingInFileNames":true,"skipDefaultLibCheck":true,"watch":true,"project":"/user/username/projects/sample1/tests","configFilePath":"/user/username/projects/sample1/tests/tsconfig.json"} +Program options: {"composite":true,"declaration":true,"forceConsistentCasingInFileNames":true,"skipDefaultLibCheck":true,"watch":true,"project":"/user/username/projects/sample1/tests","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/sample1/tests/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts diff --git a/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references-in-different-folders-with-no-files-clause.js b/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references-in-different-folders-with-no-files-clause.js index 987487b741d..cba07c5066d 100644 --- a/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references-in-different-folders-with-no-files-clause.js +++ b/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references-in-different-folders-with-no-files-clause.js @@ -186,17 +186,53 @@ a_1.X; -/a/lib/tsc.js -w -p c +/a/lib/tsc.js -w -p c --traceResolution --explainFiles Output:: >> Screen clear [12:00:59 AM] Starting compilation in watch mode... +======== Resolving module '../b' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/b', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/b.ts' does not exist. +File '/user/username/projects/transitiveReferences/b.tsx' does not exist. +File '/user/username/projects/transitiveReferences/b.d.ts' does not exist. +File '/user/username/projects/transitiveReferences/b/package.json' does not exist. +File '/user/username/projects/transitiveReferences/b/index.ts' exist - use it as a name resolution result. +======== Module name '../b' was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences/c', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution '../refs/*', candidate module location: '../refs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/refs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/refs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Matched by default include pattern '**/*' [12:01:03 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -370,12 +406,25 @@ Output:: >> Screen clear [12:01:19 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Matched by default include pattern '**/*' [12:01:23 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Completely Program files:: /a/lib/lib.d.ts @@ -468,12 +517,48 @@ Output:: >> Screen clear [12:01:31 AM] File change detected. Starting incremental compilation... +======== Resolving module '../b' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/b', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/b.ts' does not exist. +File '/user/username/projects/transitiveReferences/b.tsx' does not exist. +File '/user/username/projects/transitiveReferences/b.d.ts' does not exist. +File '/user/username/projects/transitiveReferences/b/package.json' does not exist. +File '/user/username/projects/transitiveReferences/b/index.ts' exist - use it as a name resolution result. +======== Module name '../b' was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences/c', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution '../nrefs/*', candidate module location: '../nrefs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/nrefs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/nrefs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/nrefs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/nrefs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/nrefs/a.d.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +nrefs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Matched by default include pattern '**/*' [12:01:35 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../nrefs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../nrefs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -561,12 +646,48 @@ Output:: >> Screen clear [12:01:39 AM] File change detected. Starting incremental compilation... +======== Resolving module '../b' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/b', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/b.ts' does not exist. +File '/user/username/projects/transitiveReferences/b.tsx' does not exist. +File '/user/username/projects/transitiveReferences/b.d.ts' does not exist. +File '/user/username/projects/transitiveReferences/b/package.json' does not exist. +File '/user/username/projects/transitiveReferences/b/index.ts' exist - use it as a name resolution result. +======== Module name '../b' was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences/c', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution '../refs/*', candidate module location: '../refs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/refs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/refs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Matched by default include pattern '**/*' [12:01:43 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -654,12 +775,29 @@ Output:: >> Screen clear [12:01:47 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/nrefs/a.d.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +nrefs/a.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Matched by default include pattern '**/*' [12:01:48 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -748,12 +886,28 @@ Output:: >> Screen clear [12:01:53 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +refs/a.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + Imported via "@ref/a" from file 'c/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +c/index.ts + Matched by default include pattern '**/*' [12:01:54 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -829,17 +983,39 @@ Output:: >> Screen clear [12:01:56 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences/c', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution '../refs/*', candidate module location: '../refs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/refs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/refs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== c/tsconfig.json:1:84 - error TS6053: File '/user/username/projects/transitiveReferences/b' not found. 1 {"compilerOptions":{"baseUrl":"./","paths":{"@ref/*":["../refs/*"]}},"references":[{"path":"../b"}]}    ~~~~~~~~~~~~~~~ +../../../../a/lib/lib.d.ts + Default library for target 'es3' +refs/a.d.ts + Imported via '@ref/a' from file 'b/index.ts' + Imported via "@ref/a" from file 'c/index.ts' +b/index.ts + Imported via '../b' from file 'c/index.ts' +c/index.ts + Matched by default include pattern '**/*' [12:02:03 AM] Found 1 error. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -917,12 +1093,30 @@ Output:: >> Screen clear [12:02:06 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Matched by default include pattern '**/*' [12:02:10 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -1010,17 +1204,31 @@ Output:: >> Screen clear [12:02:12 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. b/tsconfig.json:1:96 - error TS6053: File '/user/username/projects/transitiveReferences/a' not found. 1 {"compilerOptions":{"composite":true,"baseUrl":"./","paths":{"@ref/*":["../*"]}},"references":[{"path":"../a"}]}    ~~~~~~~~~~~~~~~ +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.ts + Imported via '@ref/a' from file 'b/index.d.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Matched by default include pattern '**/*' [12:02:16 AM] Found 1 error. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -1108,12 +1316,27 @@ Output:: >> Screen clear [12:02:20 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Matched by default include pattern '**/*' [12:02:21 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts diff --git a/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references-in-different-folders.js b/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references-in-different-folders.js index 8de48f492e0..5c01aa12b55 100644 --- a/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references-in-different-folders.js +++ b/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references-in-different-folders.js @@ -186,17 +186,53 @@ a_1.X; -/a/lib/tsc.js -w -p c +/a/lib/tsc.js -w -p c --traceResolution --explainFiles Output:: >> Screen clear [12:00:59 AM] Starting compilation in watch mode... +======== Resolving module '../b' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/b', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/b.ts' does not exist. +File '/user/username/projects/transitiveReferences/b.tsx' does not exist. +File '/user/username/projects/transitiveReferences/b.d.ts' does not exist. +File '/user/username/projects/transitiveReferences/b/package.json' does not exist. +File '/user/username/projects/transitiveReferences/b/index.ts' exist - use it as a name resolution result. +======== Module name '../b' was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences/c', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution '../refs/*', candidate module location: '../refs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/refs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/refs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Part of 'files' list in tsconfig.json [12:01:03 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -368,12 +404,25 @@ Output:: >> Screen clear [12:01:19 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Part of 'files' list in tsconfig.json [12:01:23 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Completely Program files:: /a/lib/lib.d.ts @@ -464,12 +513,48 @@ Output:: >> Screen clear [12:01:31 AM] File change detected. Starting incremental compilation... +======== Resolving module '../b' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/b', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/b.ts' does not exist. +File '/user/username/projects/transitiveReferences/b.tsx' does not exist. +File '/user/username/projects/transitiveReferences/b.d.ts' does not exist. +File '/user/username/projects/transitiveReferences/b/package.json' does not exist. +File '/user/username/projects/transitiveReferences/b/index.ts' exist - use it as a name resolution result. +======== Module name '../b' was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences/c', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution '../nrefs/*', candidate module location: '../nrefs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/nrefs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/nrefs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/nrefs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/nrefs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/nrefs/a.d.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +nrefs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Part of 'files' list in tsconfig.json [12:01:35 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../nrefs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../nrefs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -555,12 +640,48 @@ Output:: >> Screen clear [12:01:39 AM] File change detected. Starting incremental compilation... +======== Resolving module '../b' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/b', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/b.ts' does not exist. +File '/user/username/projects/transitiveReferences/b.tsx' does not exist. +File '/user/username/projects/transitiveReferences/b.d.ts' does not exist. +File '/user/username/projects/transitiveReferences/b/package.json' does not exist. +File '/user/username/projects/transitiveReferences/b/index.ts' exist - use it as a name resolution result. +======== Module name '../b' was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences/c', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution '../refs/*', candidate module location: '../refs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/refs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/refs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Part of 'files' list in tsconfig.json [12:01:43 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -646,12 +767,29 @@ Output:: >> Screen clear [12:01:47 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/nrefs/a.d.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +nrefs/a.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Part of 'files' list in tsconfig.json [12:01:48 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -736,12 +874,28 @@ Output:: >> Screen clear [12:01:53 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +refs/a.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + Imported via "@ref/a" from file 'c/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +c/index.ts + Part of 'files' list in tsconfig.json [12:01:54 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -813,17 +967,39 @@ Output:: >> Screen clear [12:01:56 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences/c', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution '../refs/*', candidate module location: '../refs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/refs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/refs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== c/tsconfig.json:1:105 - error TS6053: File '/user/username/projects/transitiveReferences/b' not found. 1 {"compilerOptions":{"baseUrl":"./","paths":{"@ref/*":["../refs/*"]}},"files":["index.ts"],"references":[{"path":"../b"}]}    ~~~~~~~~~~~~~~~ +../../../../a/lib/lib.d.ts + Default library for target 'es3' +refs/a.d.ts + Imported via '@ref/a' from file 'b/index.ts' + Imported via "@ref/a" from file 'c/index.ts' +b/index.ts + Imported via '../b' from file 'c/index.ts' +c/index.ts + Part of 'files' list in tsconfig.json [12:02:03 AM] Found 1 error. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -899,12 +1075,30 @@ Output:: >> Screen clear [12:02:06 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/b/tsconfig.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Part of 'files' list in tsconfig.json [12:02:10 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -990,17 +1184,31 @@ Output:: >> Screen clear [12:02:12 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. b/tsconfig.json:1:117 - error TS6053: File '/user/username/projects/transitiveReferences/a' not found. 1 {"compilerOptions":{"composite":true,"baseUrl":"./","paths":{"@ref/*":["../*"]}},"files":["index.ts"],"references":[{"path":"../a"}]}    ~~~~~~~~~~~~~~~ +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.ts + Imported via '@ref/a' from file 'b/index.d.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Part of 'files' list in tsconfig.json [12:02:16 AM] Found 1 error. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -1086,12 +1294,27 @@ Output:: >> Screen clear [12:02:20 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../b' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b/index.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/b/index.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/a/index.ts'. +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a/index.d.ts + Imported via '@ref/a' from file 'b/index.d.ts' + File is output of project reference source 'a/index.ts' +b/index.d.ts + Imported via '../b' from file 'c/index.ts' + File is output of project reference source 'b/index.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c/index.ts' +c/index.ts + Part of 'files' list in tsconfig.json [12:02:21 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c/index.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences/c","paths":{"@ref/*":["../refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences/c","watch":true,"project":"/user/username/projects/transitiveReferences/c","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/c/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts diff --git a/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references.js b/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references.js index 33f046ad3d4..a078c67dcfa 100644 --- a/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references.js +++ b/tests/baselines/reference/tscWatch/projectsWithReferences/on-transitive-references.js @@ -210,17 +210,49 @@ a_1.X; -/a/lib/tsc.js -w -p tsconfig.c.json +/a/lib/tsc.js -w -p tsconfig.c.json --traceResolution --explainFiles Output:: >> Screen clear [12:00:53 AM] Starting compilation in watch mode... +======== Resolving module './b' from '/user/username/projects/transitiveReferences/c.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/b', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/b.ts' exist - use it as a name resolution result. +======== Module name './b' was successfully resolved to '/user/username/projects/transitiveReferences/b.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/c.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution './refs/*', candidate module location: './refs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/refs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/refs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/tsconfig.b.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a.d.ts + Imported via '@ref/a' from file 'b.d.ts' + File is output of project reference source 'a.ts' +b.d.ts + Imported via './b' from file 'c.ts' + File is output of project reference source 'b.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c.ts' +c.ts + Part of 'files' list in tsconfig.json [12:00:57 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -385,12 +417,25 @@ Output:: >> Screen clear [12:01:13 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/b.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/a.ts'. +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a.d.ts + Imported via '@ref/a' from file 'b.d.ts' + File is output of project reference source 'a.ts' +b.d.ts + Imported via './b' from file 'c.ts' + File is output of project reference source 'b.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c.ts' +c.ts + Part of 'files' list in tsconfig.json [12:01:17 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Completely Program files:: /a/lib/lib.d.ts @@ -473,12 +518,44 @@ Output:: >> Screen clear [12:01:25 AM] File change detected. Starting incremental compilation... +======== Resolving module './b' from '/user/username/projects/transitiveReferences/c.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/b', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/b.ts' exist - use it as a name resolution result. +======== Module name './b' was successfully resolved to '/user/username/projects/transitiveReferences/b.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/c.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution './nrefs/*', candidate module location: './nrefs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/nrefs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/nrefs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/nrefs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/nrefs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/nrefs/a.d.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/tsconfig.b.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a.d.ts + Imported via '@ref/a' from file 'b.d.ts' + File is output of project reference source 'a.ts' +b.d.ts + Imported via './b' from file 'c.ts' + File is output of project reference source 'b.ts' +nrefs/a.d.ts + Imported via "@ref/a" from file 'c.ts' +c.ts + Part of 'files' list in tsconfig.json [12:01:29 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./nrefs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./nrefs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -556,12 +633,44 @@ Output:: >> Screen clear [12:01:33 AM] File change detected. Starting incremental compilation... +======== Resolving module './b' from '/user/username/projects/transitiveReferences/c.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/b', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/b.ts' exist - use it as a name resolution result. +======== Module name './b' was successfully resolved to '/user/username/projects/transitiveReferences/b.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/c.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution './refs/*', candidate module location: './refs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/refs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/refs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/tsconfig.b.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a.d.ts + Imported via '@ref/a' from file 'b.d.ts' + File is output of project reference source 'a.ts' +b.d.ts + Imported via './b' from file 'c.ts' + File is output of project reference source 'b.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c.ts' +c.ts + Part of 'files' list in tsconfig.json [12:01:37 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -639,12 +748,29 @@ Output:: >> Screen clear [12:01:41 AM] File change detected. Starting incremental compilation... +Reusing resolution of module './b' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/tsconfig.b.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/nrefs/a.d.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +nrefs/a.d.ts + Imported via '@ref/a' from file 'b.d.ts' +b.d.ts + Imported via './b' from file 'c.ts' + File is output of project reference source 'b.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c.ts' +c.ts + Part of 'files' list in tsconfig.json [12:01:42 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -723,12 +849,28 @@ Output:: >> Screen clear [12:01:47 AM] File change detected. Starting incremental compilation... +Reusing resolution of module './b' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/tsconfig.b.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +refs/a.d.ts + Imported via '@ref/a' from file 'b.d.ts' + Imported via "@ref/a" from file 'c.ts' +b.d.ts + Imported via './b' from file 'c.ts' + File is output of project reference source 'b.ts' +c.ts + Part of 'files' list in tsconfig.json [12:01:48 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -794,17 +936,39 @@ Output:: >> Screen clear [12:01:50 AM] File change detected. Starting incremental compilation... +Reusing resolution of module './b' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution './refs/*', candidate module location: './refs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/refs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/refs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== tsconfig.c.json:1:100 - error TS6053: File '/user/username/projects/transitiveReferences/tsconfig.b.json' not found. 1 {"files":["c.ts"],"compilerOptions":{"baseUrl":"./","paths":{"@ref/*":["./refs/*"]}},"references":[{"path":"tsconfig.b.json"}]}    ~~~~~~~~~~~~~~~~~~~~~~~~~~ +../../../../a/lib/lib.d.ts + Default library for target 'es3' +refs/a.d.ts + Imported via '@ref/a' from file 'b.ts' + Imported via "@ref/a" from file 'c.ts' +b.ts + Imported via './b' from file 'c.ts' +c.ts + Part of 'files' list in tsconfig.json [12:01:57 AM] Found 1 error. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -885,12 +1049,30 @@ Output:: >> Screen clear [12:02:00 AM] File change detected. Starting incremental compilation... +Reusing resolution of module './b' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/b.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/tsconfig.b.json'. +Module resolution kind is not specified, using 'NodeJs'. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/a.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a.d.ts + Imported via '@ref/a' from file 'b.d.ts' + File is output of project reference source 'a.ts' +b.d.ts + Imported via './b' from file 'c.ts' + File is output of project reference source 'b.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c.ts' +c.ts + Part of 'files' list in tsconfig.json [12:02:04 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -968,17 +1150,31 @@ Output:: >> Screen clear [12:02:06 AM] File change detected. Starting incremental compilation... +Reusing resolution of module './b' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/b.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/a.ts'. tsconfig.b.json:10:21 - error TS6053: File '/user/username/projects/transitiveReferences/tsconfig.a.json' not found. 10 "references": [ { "path": "tsconfig.a.json" } ]    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a.ts + Imported via '@ref/a' from file 'b.d.ts' +b.d.ts + Imported via './b' from file 'c.ts' + File is output of project reference source 'b.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c.ts' +c.ts + Part of 'files' list in tsconfig.json [12:02:10 AM] Found 1 error. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -1057,12 +1253,27 @@ Output:: >> Screen clear [12:02:14 AM] File change detected. Starting incremental compilation... +Reusing resolution of module './b' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/b.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/c.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. +Reusing resolution of module '@ref/a' from '/user/username/projects/transitiveReferences/b.ts' of old program, it was successfully resolved to '/user/username/projects/transitiveReferences/a.ts'. +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a.d.ts + Imported via '@ref/a' from file 'b.d.ts' + File is output of project reference source 'a.ts' +b.d.ts + Imported via './b' from file 'c.ts' + File is output of project reference source 'b.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c.ts' +c.ts + Part of 'files' list in tsconfig.json [12:02:15 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts diff --git a/tests/baselines/reference/tscWatch/projectsWithReferences/when-declarationMap-changes-for-dependency.js b/tests/baselines/reference/tscWatch/projectsWithReferences/when-declarationMap-changes-for-dependency.js index a1c1333d05d..14d148c342e 100644 --- a/tests/baselines/reference/tscWatch/projectsWithReferences/when-declarationMap-changes-for-dependency.js +++ b/tests/baselines/reference/tscWatch/projectsWithReferences/when-declarationMap-changes-for-dependency.js @@ -163,17 +163,37 @@ export declare function multiply(a: number, b: number): number; } -/a/lib/tsc.js -w -p logic +/a/lib/tsc.js -w -p logic --traceResolution --explainFiles Output:: >> Screen clear [12:00:50 AM] Starting compilation in watch mode... +======== Resolving module '../core/index' from '/user/username/projects/sample1/logic/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/sample1/core/index', target file types: TypeScript, Declaration. +File '/user/username/projects/sample1/core/index.ts' exist - use it as a name resolution result. +======== Module name '../core/index' was successfully resolved to '/user/username/projects/sample1/core/index.ts'. ======== +======== Resolving module '../core/anotherModule' from '/user/username/projects/sample1/logic/index.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/sample1/core/anotherModule', target file types: TypeScript, Declaration. +File '/user/username/projects/sample1/core/anotherModule.ts' exist - use it as a name resolution result. +======== Module name '../core/anotherModule' was successfully resolved to '/user/username/projects/sample1/core/anotherModule.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +core/index.d.ts + Imported via '../core/index' from file 'logic/index.ts' + File is output of project reference source 'core/index.ts' +core/anotherModule.d.ts + Imported via '../core/anotherModule' from file 'logic/index.ts' + File is output of project reference source 'core/anotherModule.ts' +logic/index.ts + Matched by default include pattern '**/*' [12:00:59 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/sample1/logic/index.ts"] -Program options: {"composite":true,"declaration":true,"sourceMap":true,"forceConsistentCasingInFileNames":true,"skipDefaultLibCheck":true,"watch":true,"project":"/user/username/projects/sample1/logic","configFilePath":"/user/username/projects/sample1/logic/tsconfig.json"} +Program options: {"composite":true,"declaration":true,"sourceMap":true,"forceConsistentCasingInFileNames":true,"skipDefaultLibCheck":true,"watch":true,"project":"/user/username/projects/sample1/logic","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/sample1/logic/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts @@ -432,12 +452,24 @@ Output:: >> Screen clear [12:01:18 AM] File change detected. Starting incremental compilation... +Reusing resolution of module '../core/index' from '/user/username/projects/sample1/logic/index.ts' of old program, it was successfully resolved to '/user/username/projects/sample1/core/index.ts'. +Reusing resolution of module '../core/anotherModule' from '/user/username/projects/sample1/logic/index.ts' of old program, it was successfully resolved to '/user/username/projects/sample1/core/anotherModule.ts'. +../../../../a/lib/lib.d.ts + Default library for target 'es3' +core/index.d.ts + Imported via '../core/index' from file 'logic/index.ts' + File is output of project reference source 'core/index.ts' +core/anotherModule.d.ts + Imported via '../core/anotherModule' from file 'logic/index.ts' + File is output of project reference source 'core/anotherModule.ts' +logic/index.ts + Matched by default include pattern '**/*' [12:01:19 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/sample1/logic/index.ts"] -Program options: {"composite":true,"declaration":true,"sourceMap":true,"forceConsistentCasingInFileNames":true,"skipDefaultLibCheck":true,"watch":true,"project":"/user/username/projects/sample1/logic","configFilePath":"/user/username/projects/sample1/logic/tsconfig.json"} +Program options: {"composite":true,"declaration":true,"sourceMap":true,"forceConsistentCasingInFileNames":true,"skipDefaultLibCheck":true,"watch":true,"project":"/user/username/projects/sample1/logic","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/sample1/logic/tsconfig.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts diff --git a/tests/baselines/reference/tscWatch/projectsWithReferences/when-referenced-project-uses-different-module-resolution.js b/tests/baselines/reference/tscWatch/projectsWithReferences/when-referenced-project-uses-different-module-resolution.js index d4a406d339c..d27369147c9 100644 --- a/tests/baselines/reference/tscWatch/projectsWithReferences/when-referenced-project-uses-different-module-resolution.js +++ b/tests/baselines/reference/tscWatch/projectsWithReferences/when-referenced-project-uses-different-module-resolution.js @@ -197,17 +197,49 @@ a_1.X; -/a/lib/tsc.js -w -p tsconfig.c.json +/a/lib/tsc.js -w -p tsconfig.c.json --traceResolution --explainFiles Output:: >> Screen clear [12:00:53 AM] Starting compilation in watch mode... +======== Resolving module './b' from '/user/username/projects/transitiveReferences/c.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/b', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/b.ts' exist - use it as a name resolution result. +======== Module name './b' was successfully resolved to '/user/username/projects/transitiveReferences/b.ts'. ======== +======== Resolving module '@ref/a' from '/user/username/projects/transitiveReferences/c.ts'. ======== +Module resolution kind is not specified, using 'NodeJs'. +'baseUrl' option is set to '/user/username/projects/transitiveReferences', using this value to resolve non-relative module name '@ref/a'. +'paths' option is specified, looking for a pattern to match module name '@ref/a'. +Module name '@ref/a', matched pattern '@ref/*'. +Trying substitution './refs/*', candidate module location: './refs/a'. +Loading module as file / folder, candidate module location '/user/username/projects/transitiveReferences/refs/a', target file types: TypeScript, Declaration. +File '/user/username/projects/transitiveReferences/refs/a.ts' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.tsx' does not exist. +File '/user/username/projects/transitiveReferences/refs/a.d.ts' exist - use it as a name resolution result. +======== Module name '@ref/a' was successfully resolved to '/user/username/projects/transitiveReferences/refs/a.d.ts'. ======== +======== Resolving module 'a' from '/user/username/projects/transitiveReferences/b.ts'. ======== +Using compiler options of project reference redirect '/user/username/projects/transitiveReferences/tsconfig.b.json'. +Explicitly specified module resolution kind: 'Classic'. +======== Module name 'a' was successfully resolved to '/user/username/projects/transitiveReferences/a.ts'. ======== +../../../../a/lib/lib.d.ts + Default library for target 'es3' +a.d.ts + Imported via "a" from file 'b.d.ts' + File is output of project reference source 'a.ts' +b.d.ts + Imported via './b' from file 'c.ts' + File is output of project reference source 'b.ts' +refs/a.d.ts + Imported via "@ref/a" from file 'c.ts' +c.ts + Part of 'files' list in tsconfig.json [12:00:57 AM] Found 0 errors. Watching for file changes. Program root files: ["/user/username/projects/transitiveReferences/c.ts"] -Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} +Program options: {"baseUrl":"/user/username/projects/transitiveReferences","paths":{"@ref/*":["./refs/*"]},"pathsBasePath":"/user/username/projects/transitiveReferences","watch":true,"project":"/user/username/projects/transitiveReferences/tsconfig.c.json","traceResolution":true,"explainFiles":true,"configFilePath":"/user/username/projects/transitiveReferences/tsconfig.c.json"} Program structureReused: Not Program files:: /a/lib/lib.d.ts diff --git a/tests/baselines/reference/tsserver/resolutionCache/non-relative-module-name-from-files-in-same-folder.js b/tests/baselines/reference/tsserver/resolutionCache/non-relative-module-name-from-files-in-same-folder.js index 756bbcec01e..bdf027332ac 100644 --- a/tests/baselines/reference/tsserver/resolutionCache/non-relative-module-name-from-files-in-same-folder.js +++ b/tests/baselines/reference/tsserver/resolutionCache/non-relative-module-name-from-files-in-same-folder.js @@ -81,18 +81,22 @@ Info 34 [00:01:11.000] DirectoryWatcher:: Added:: WatchInfo: /user/username/pr Info 35 [00:01:12.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/src/node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache Info 36 [00:01:13.000] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache Info 37 [00:01:14.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache -Info 38 [00:01:15.000] Reusing resolution of module 'module1' from '/user/username/projects/myproject/src/file2.ts' found in cache from location '/user/username/projects/myproject/src', it was successfully resolved to '/user/username/projects/myproject/src/node_modules/module1/index.ts'. -Info 39 [00:01:16.000] Reusing resolution of module 'module2' from '/user/username/projects/myproject/src/file2.ts' found in cache from location '/user/username/projects/myproject/src', it was successfully resolved to '/user/username/projects/myproject/node_modules/module2/index.ts'. -Info 40 [00:01:17.000] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info -Info 41 [00:01:18.000] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/src 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Failed Lookup Locations -Info 42 [00:01:19.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/src 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Failed Lookup Locations -Info 43 [00:01:20.000] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Failed Lookup Locations -Info 44 [00:01:21.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Failed Lookup Locations -Info 45 [00:01:22.000] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots -Info 46 [00:01:23.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots -Info 47 [00:01:24.000] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info 48 [00:01:25.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) -Info 49 [00:01:26.000] Files (5) +Info 38 [00:01:15.000] ======== Resolving module 'module1' from '/user/username/projects/myproject/src/file2.ts'. ======== +Info 39 [00:01:16.000] Resolution for module 'module1' was found in cache from location '/user/username/projects/myproject/src'. +Info 40 [00:01:17.000] ======== Module name 'module1' was successfully resolved to '/user/username/projects/myproject/src/node_modules/module1/index.ts'. ======== +Info 41 [00:01:18.000] ======== Resolving module 'module2' from '/user/username/projects/myproject/src/file2.ts'. ======== +Info 42 [00:01:19.000] Resolution for module 'module2' was found in cache from location '/user/username/projects/myproject/src'. +Info 43 [00:01:20.000] ======== Module name 'module2' was successfully resolved to '/user/username/projects/myproject/node_modules/module2/index.ts'. ======== +Info 44 [00:01:21.000] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info 45 [00:01:22.000] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/src 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Failed Lookup Locations +Info 46 [00:01:23.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/src 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Failed Lookup Locations +Info 47 [00:01:24.000] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Failed Lookup Locations +Info 48 [00:01:25.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Failed Lookup Locations +Info 49 [00:01:26.000] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info 50 [00:01:27.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info 51 [00:01:28.000] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info 52 [00:01:29.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info 53 [00:01:30.000] Files (5) /a/lib/lib.d.ts /user/username/projects/myproject/src/node_modules/module1/index.ts /user/username/projects/myproject/node_modules/module2/index.ts @@ -113,18 +117,18 @@ Info 49 [00:01:26.000] Files (5) src/file2.ts Matched by default include pattern '**/*' -Info 50 [00:01:27.000] ----------------------------------------------- -Info 51 [00:01:28.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) -Info 51 [00:01:29.000] Files (5) +Info 54 [00:01:31.000] ----------------------------------------------- +Info 55 [00:01:32.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info 55 [00:01:33.000] Files (5) -Info 51 [00:01:30.000] ----------------------------------------------- -Info 51 [00:01:31.000] Open files: -Info 51 [00:01:32.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined -Info 51 [00:01:33.000] Projects: /user/username/projects/myproject/tsconfig.json -Info 51 [00:01:40.000] FileWatcher:: Triggered with /user/username/projects/myproject/src/file2.ts 1:: WatchInfo: /user/username/projects/myproject/src/file2.ts 500 undefined WatchType: Closed Script info -Info 52 [00:01:41.000] Scheduled: /user/username/projects/myproject/tsconfig.json -Info 53 [00:01:42.000] Scheduled: *ensureProjectForOpenFiles* -Info 54 [00:01:43.000] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/src/file2.ts 1:: WatchInfo: /user/username/projects/myproject/src/file2.ts 500 undefined WatchType: Closed Script info +Info 55 [00:01:34.000] ----------------------------------------------- +Info 55 [00:01:35.000] Open files: +Info 55 [00:01:36.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined +Info 55 [00:01:37.000] Projects: /user/username/projects/myproject/tsconfig.json +Info 55 [00:01:44.000] FileWatcher:: Triggered with /user/username/projects/myproject/src/file2.ts 1:: WatchInfo: /user/username/projects/myproject/src/file2.ts 500 undefined WatchType: Closed Script info +Info 56 [00:01:45.000] Scheduled: /user/username/projects/myproject/tsconfig.json +Info 57 [00:01:46.000] Scheduled: *ensureProjectForOpenFiles* +Info 58 [00:01:47.000] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/src/file2.ts 1:: WatchInfo: /user/username/projects/myproject/src/file2.ts 500 undefined WatchType: Closed Script info Before running timeout callbacks //// [/user/username/projects/myproject/src/file1.ts] import { module1 } from "module1";import { module2 } from "module2";import { module1 } from "module1";import { module2 } from "module2"; @@ -155,31 +159,31 @@ FsWatchesRecursive:: /user/username/projects/myproject/src: {} -Info 55 [00:01:44.000] Running: /user/username/projects/myproject/tsconfig.json -Info 56 [00:01:45.000] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json -Info 57 [00:01:46.000] Reusing resolution of module 'module1' from '/user/username/projects/myproject/src/file1.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/src/node_modules/module1/index.ts'. -Info 58 [00:01:47.000] Reusing resolution of module 'module2' from '/user/username/projects/myproject/src/file1.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/node_modules/module2/index.ts'. -Info 59 [00:01:48.000] Reusing resolution of module 'module1' from '/user/username/projects/myproject/src/file2.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/src/node_modules/module1/index.ts'. -Info 60 [00:01:49.000] Reusing resolution of module 'module2' from '/user/username/projects/myproject/src/file2.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/node_modules/module2/index.ts'. -Info 61 [00:01:50.000] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json Version: 2 structureChanged: true structureIsReused:: SafeModules Elapsed:: *ms -Info 62 [00:01:51.000] Different program with same set of files -Info 63 [00:01:52.000] Running: *ensureProjectForOpenFiles* -Info 64 [00:01:53.000] Before ensureProjectForOpenFiles: -Info 65 [00:01:54.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) -Info 65 [00:01:55.000] Files (5) +Info 59 [00:01:48.000] Running: /user/username/projects/myproject/tsconfig.json +Info 60 [00:01:49.000] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info 61 [00:01:50.000] Reusing resolution of module 'module1' from '/user/username/projects/myproject/src/file1.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/src/node_modules/module1/index.ts'. +Info 62 [00:01:51.000] Reusing resolution of module 'module2' from '/user/username/projects/myproject/src/file1.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/node_modules/module2/index.ts'. +Info 63 [00:01:52.000] Reusing resolution of module 'module1' from '/user/username/projects/myproject/src/file2.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/src/node_modules/module1/index.ts'. +Info 64 [00:01:53.000] Reusing resolution of module 'module2' from '/user/username/projects/myproject/src/file2.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/node_modules/module2/index.ts'. +Info 65 [00:01:54.000] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json Version: 2 structureChanged: true structureIsReused:: SafeModules Elapsed:: *ms +Info 66 [00:01:55.000] Different program with same set of files +Info 67 [00:01:56.000] Running: *ensureProjectForOpenFiles* +Info 68 [00:01:57.000] Before ensureProjectForOpenFiles: +Info 69 [00:01:58.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info 69 [00:01:59.000] Files (5) -Info 65 [00:01:56.000] ----------------------------------------------- -Info 65 [00:01:57.000] Open files: -Info 65 [00:01:58.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined -Info 65 [00:01:59.000] Projects: /user/username/projects/myproject/tsconfig.json -Info 65 [00:02:00.000] After ensureProjectForOpenFiles: -Info 66 [00:02:01.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) -Info 66 [00:02:02.000] Files (5) +Info 69 [00:02:00.000] ----------------------------------------------- +Info 69 [00:02:01.000] Open files: +Info 69 [00:02:02.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined +Info 69 [00:02:03.000] Projects: /user/username/projects/myproject/tsconfig.json +Info 69 [00:02:04.000] After ensureProjectForOpenFiles: +Info 70 [00:02:05.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info 70 [00:02:06.000] Files (5) -Info 66 [00:02:03.000] ----------------------------------------------- -Info 66 [00:02:04.000] Open files: -Info 66 [00:02:05.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined -Info 66 [00:02:06.000] Projects: /user/username/projects/myproject/tsconfig.json +Info 70 [00:02:07.000] ----------------------------------------------- +Info 70 [00:02:08.000] Open files: +Info 70 [00:02:09.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined +Info 70 [00:02:10.000] Projects: /user/username/projects/myproject/tsconfig.json After running timeout callbacks PolledWatches:: diff --git a/tests/baselines/reference/tsserver/resolutionCache/not-sharing-across-references.js b/tests/baselines/reference/tsserver/resolutionCache/not-sharing-across-references.js new file mode 100644 index 00000000000..f3fb3ce57bc --- /dev/null +++ b/tests/baselines/reference/tsserver/resolutionCache/not-sharing-across-references.js @@ -0,0 +1,182 @@ +Info 0 [00:00:29.000] Provided types map file "/a/lib/typesMap.json" doesn't exist +Info 1 [00:00:30.000] request: + { + "command": "open", + "arguments": { + "file": "/src/projects/app/appB.ts" + }, + "seq": 1, + "type": "request" + } +Before request +//// [/src/projects/node_modules/moduleX/index.d.ts] +export const x = 10; + +//// [/src/projects/common/tsconfig.json] +{"compilerOptions":{"composite":true,"traceResolution":true}} + +//// [/src/projects/common/moduleA.ts] +export const a = 10; + +//// [/src/projects/common/moduleB.ts] +import { x } from "moduleX"; +export const b = x; + + +//// [/src/projects/app/tsconfig.json] +{"compilerOptions":{"composite":true,"traceResolution":true,"typeRoots":[]},"references":[{"path":"../common"}]} + +//// [/src/projects/app/appA.ts] +import { x } from "moduleX"; +export const y = x; + + +//// [/src/projects/app/appB.ts] +import { x } from "../common/moduleB"; +export const y = x; + + + +PolledWatches:: + +FsWatches:: + +FsWatchesRecursive:: + +Info 2 [00:00:31.000] Search path: /src/projects/app +Info 3 [00:00:32.000] For info: /src/projects/app/appB.ts :: Config file name: /src/projects/app/tsconfig.json +Info 4 [00:00:33.000] Creating configuration project /src/projects/app/tsconfig.json +Info 5 [00:00:34.000] FileWatcher:: Added:: WatchInfo: /src/projects/app/tsconfig.json 2000 undefined Project: /src/projects/app/tsconfig.json WatchType: Config file +Info 6 [00:00:35.000] Config: /src/projects/app/tsconfig.json : { + "rootNames": [ + "/src/projects/app/appA.ts", + "/src/projects/app/appB.ts" + ], + "options": { + "composite": true, + "traceResolution": true, + "typeRoots": [], + "configFilePath": "/src/projects/app/tsconfig.json" + }, + "projectReferences": [ + { + "path": "/src/projects/common", + "originalPath": "../common" + } + ] +} +Info 7 [00:00:36.000] DirectoryWatcher:: Added:: WatchInfo: /src/projects/app 1 undefined Config: /src/projects/app/tsconfig.json WatchType: Wild card directory +Info 8 [00:00:37.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /src/projects/app 1 undefined Config: /src/projects/app/tsconfig.json WatchType: Wild card directory +Info 9 [00:00:38.000] FileWatcher:: Added:: WatchInfo: /src/projects/app/appA.ts 500 undefined WatchType: Closed Script info +Info 10 [00:00:39.000] Starting updateGraphWorker: Project: /src/projects/app/tsconfig.json +Info 11 [00:00:40.000] Config: /src/projects/common/tsconfig.json : { + "rootNames": [ + "/src/projects/common/moduleA.ts", + "/src/projects/common/moduleB.ts" + ], + "options": { + "composite": true, + "traceResolution": true, + "configFilePath": "/src/projects/common/tsconfig.json" + } +} +Info 12 [00:00:41.000] FileWatcher:: Added:: WatchInfo: /src/projects/common/tsconfig.json 2000 undefined Project: /src/projects/app/tsconfig.json WatchType: Config file +Info 13 [00:00:42.000] DirectoryWatcher:: Added:: WatchInfo: /src/projects/common 1 undefined Config: /src/projects/common/tsconfig.json WatchType: Wild card directory +Info 14 [00:00:43.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /src/projects/common 1 undefined Config: /src/projects/common/tsconfig.json WatchType: Wild card directory +Info 15 [00:00:44.000] ======== Resolving module 'moduleX' from '/src/projects/app/appA.ts'. ======== +Info 16 [00:00:45.000] Module resolution kind is not specified, using 'NodeJs'. +Info 17 [00:00:46.000] Loading module 'moduleX' from 'node_modules' folder, target file types: TypeScript, Declaration. +Info 18 [00:00:47.000] Directory '/src/projects/app/node_modules' does not exist, skipping all lookups in it. +Info 19 [00:00:48.000] File '/src/projects/node_modules/moduleX/package.json' does not exist. +Info 20 [00:00:49.000] File '/src/projects/node_modules/moduleX.ts' does not exist. +Info 21 [00:00:50.000] File '/src/projects/node_modules/moduleX.tsx' does not exist. +Info 22 [00:00:51.000] File '/src/projects/node_modules/moduleX.d.ts' does not exist. +Info 23 [00:00:52.000] File '/src/projects/node_modules/moduleX/index.ts' does not exist. +Info 24 [00:00:53.000] File '/src/projects/node_modules/moduleX/index.tsx' does not exist. +Info 25 [00:00:54.000] File '/src/projects/node_modules/moduleX/index.d.ts' exist - use it as a name resolution result. +Info 26 [00:00:55.000] Resolving real path for '/src/projects/node_modules/moduleX/index.d.ts', result '/src/projects/node_modules/moduleX/index.d.ts'. +Info 27 [00:00:56.000] ======== Module name 'moduleX' was successfully resolved to '/src/projects/node_modules/moduleX/index.d.ts'. ======== +Info 28 [00:00:57.000] DirectoryWatcher:: Added:: WatchInfo: /src/projects/node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache +Info 29 [00:00:58.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /src/projects/node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache +Info 30 [00:00:59.000] ======== Resolving module '../common/moduleB' from '/src/projects/app/appB.ts'. ======== +Info 31 [00:01:00.000] Module resolution kind is not specified, using 'NodeJs'. +Info 32 [00:01:01.000] Loading module as file / folder, candidate module location '/src/projects/common/moduleB', target file types: TypeScript, Declaration. +Info 33 [00:01:02.000] File '/src/projects/common/moduleB.ts' exist - use it as a name resolution result. +Info 34 [00:01:03.000] ======== Module name '../common/moduleB' was successfully resolved to '/src/projects/common/moduleB.ts'. ======== +Info 35 [00:01:04.000] FileWatcher:: Added:: WatchInfo: /src/projects/common/moduleB.ts 500 undefined WatchType: Closed Script info +Info 36 [00:01:05.000] ======== Resolving module 'moduleX' from '/src/projects/common/moduleB.ts'. ======== +Info 37 [00:01:06.000] Using compiler options of project reference redirect '/src/projects/common/tsconfig.json'. +Info 38 [00:01:07.000] Module resolution kind is not specified, using 'NodeJs'. +Info 39 [00:01:08.000] Loading module 'moduleX' from 'node_modules' folder, target file types: TypeScript, Declaration. +Info 40 [00:01:09.000] Directory '/src/projects/common/node_modules' does not exist, skipping all lookups in it. +Info 41 [00:01:10.000] File '/src/projects/node_modules/moduleX/package.json' does not exist according to earlier cached lookups. +Info 42 [00:01:11.000] File '/src/projects/node_modules/moduleX.ts' does not exist. +Info 43 [00:01:12.000] File '/src/projects/node_modules/moduleX.tsx' does not exist. +Info 44 [00:01:13.000] File '/src/projects/node_modules/moduleX.d.ts' does not exist. +Info 45 [00:01:14.000] File '/src/projects/node_modules/moduleX/index.ts' does not exist. +Info 46 [00:01:15.000] File '/src/projects/node_modules/moduleX/index.tsx' does not exist. +Info 47 [00:01:16.000] File '/src/projects/node_modules/moduleX/index.d.ts' exist - use it as a name resolution result. +Info 48 [00:01:17.000] Resolving real path for '/src/projects/node_modules/moduleX/index.d.ts', result '/src/projects/node_modules/moduleX/index.d.ts'. +Info 49 [00:01:18.000] ======== Module name 'moduleX' was successfully resolved to '/src/projects/node_modules/moduleX/index.d.ts'. ======== +Info 50 [00:01:19.000] DirectoryWatcher:: Added:: WatchInfo: /src/projects/app/node_modules 1 undefined Project: /src/projects/app/tsconfig.json WatchType: Failed Lookup Locations +Info 51 [00:01:20.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /src/projects/app/node_modules 1 undefined Project: /src/projects/app/tsconfig.json WatchType: Failed Lookup Locations +Info 52 [00:01:21.000] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined Project: /src/projects/app/tsconfig.json WatchType: Missing file +Info 53 [00:01:22.000] Finishing updateGraphWorker: Project: /src/projects/app/tsconfig.json Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info 54 [00:01:23.000] Project '/src/projects/app/tsconfig.json' (Configured) +Info 55 [00:01:24.000] Files (4) + /src/projects/node_modules/moduleX/index.d.ts + /src/projects/app/appA.ts + /src/projects/common/moduleB.ts + /src/projects/app/appB.ts + + + ../node_modules/moduleX/index.d.ts + Imported via "moduleX" from file 'appA.ts' + Imported via "moduleX" from file '../common/moduleB.ts' + appA.ts + Matched by default include pattern '**/*' + ../common/moduleB.ts + Imported via "../common/moduleB" from file 'appB.ts' + appB.ts + Matched by default include pattern '**/*' + +Info 56 [00:01:25.000] ----------------------------------------------- +Info 57 [00:01:26.000] Search path: /src/projects/app +Info 58 [00:01:27.000] For info: /src/projects/app/tsconfig.json :: No config files found. +Info 59 [00:01:28.000] Project '/src/projects/app/tsconfig.json' (Configured) +Info 59 [00:01:29.000] Files (4) + +Info 59 [00:01:30.000] ----------------------------------------------- +Info 59 [00:01:31.000] Open files: +Info 59 [00:01:32.000] FileName: /src/projects/app/appB.ts ProjectRootPath: undefined +Info 59 [00:01:33.000] Projects: /src/projects/app/tsconfig.json +After request + +PolledWatches:: +/src/projects/app/node_modules: + {"pollingInterval":500} +/a/lib/lib.d.ts: + {"pollingInterval":500} + +FsWatches:: +/src/projects/app/tsconfig.json: + {} +/src/projects/app/appa.ts: + {} +/src/projects/common/tsconfig.json: + {} +/src/projects/common/moduleb.ts: + {} + +FsWatchesRecursive:: +/src/projects/app: + {} +/src/projects/common: + {} +/src/projects/node_modules: + {} + +Info 59 [00:01:34.000] response: + { + "responseRequired": false + } \ No newline at end of file diff --git a/tests/baselines/reference/tsserver/resolutionCache/relative-module-name-from-files-in-same-folder.js b/tests/baselines/reference/tsserver/resolutionCache/relative-module-name-from-files-in-same-folder.js index 0f173cf4967..3a19cd9217d 100644 --- a/tests/baselines/reference/tsserver/resolutionCache/relative-module-name-from-files-in-same-folder.js +++ b/tests/baselines/reference/tsserver/resolutionCache/relative-module-name-from-files-in-same-folder.js @@ -67,14 +67,18 @@ Info 18 [00:00:47.000] Module resolution kind is not specified, using 'NodeJs' Info 19 [00:00:48.000] Loading module as file / folder, candidate module location '/user/username/projects/myproject/module2', target file types: TypeScript, Declaration. Info 20 [00:00:49.000] File '/user/username/projects/myproject/module2.ts' exist - use it as a name resolution result. Info 21 [00:00:50.000] ======== Module name '../module2' was successfully resolved to '/user/username/projects/myproject/module2.ts'. ======== -Info 22 [00:00:51.000] Reusing resolution of module './module1' from '/user/username/projects/myproject/src/file2.ts' found in cache from location '/user/username/projects/myproject/src', it was successfully resolved to '/user/username/projects/myproject/src/module1.ts'. -Info 23 [00:00:52.000] Reusing resolution of module '../module2' from '/user/username/projects/myproject/src/file2.ts' found in cache from location '/user/username/projects/myproject/src', it was successfully resolved to '/user/username/projects/myproject/module2.ts'. -Info 24 [00:00:53.000] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info -Info 25 [00:00:54.000] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots -Info 26 [00:00:55.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots -Info 27 [00:00:56.000] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info 28 [00:00:57.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) -Info 29 [00:00:58.000] Files (5) +Info 22 [00:00:51.000] ======== Resolving module './module1' from '/user/username/projects/myproject/src/file2.ts'. ======== +Info 23 [00:00:52.000] Resolution for module './module1' was found in cache from location '/user/username/projects/myproject/src'. +Info 24 [00:00:53.000] ======== Module name './module1' was successfully resolved to '/user/username/projects/myproject/src/module1.ts'. ======== +Info 25 [00:00:54.000] ======== Resolving module '../module2' from '/user/username/projects/myproject/src/file2.ts'. ======== +Info 26 [00:00:55.000] Resolution for module '../module2' was found in cache from location '/user/username/projects/myproject/src'. +Info 27 [00:00:56.000] ======== Module name '../module2' was successfully resolved to '/user/username/projects/myproject/module2.ts'. ======== +Info 28 [00:00:57.000] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info +Info 29 [00:00:58.000] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info 30 [00:00:59.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Project: /user/username/projects/myproject/tsconfig.json WatchType: Type roots +Info 31 [00:01:00.000] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info 32 [00:01:01.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info 33 [00:01:02.000] Files (5) /a/lib/lib.d.ts /user/username/projects/myproject/module2.ts /user/username/projects/myproject/src/module1.ts @@ -97,18 +101,18 @@ Info 29 [00:00:58.000] Files (5) src/file2.ts Matched by default include pattern '**/*' -Info 30 [00:00:59.000] ----------------------------------------------- -Info 31 [00:01:00.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) -Info 31 [00:01:01.000] Files (5) +Info 34 [00:01:03.000] ----------------------------------------------- +Info 35 [00:01:04.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info 35 [00:01:05.000] Files (5) -Info 31 [00:01:02.000] ----------------------------------------------- -Info 31 [00:01:03.000] Open files: -Info 31 [00:01:04.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined -Info 31 [00:01:05.000] Projects: /user/username/projects/myproject/tsconfig.json -Info 31 [00:01:12.000] FileWatcher:: Triggered with /user/username/projects/myproject/src/file2.ts 1:: WatchInfo: /user/username/projects/myproject/src/file2.ts 500 undefined WatchType: Closed Script info -Info 32 [00:01:13.000] Scheduled: /user/username/projects/myproject/tsconfig.json -Info 33 [00:01:14.000] Scheduled: *ensureProjectForOpenFiles* -Info 34 [00:01:15.000] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/src/file2.ts 1:: WatchInfo: /user/username/projects/myproject/src/file2.ts 500 undefined WatchType: Closed Script info +Info 35 [00:01:06.000] ----------------------------------------------- +Info 35 [00:01:07.000] Open files: +Info 35 [00:01:08.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined +Info 35 [00:01:09.000] Projects: /user/username/projects/myproject/tsconfig.json +Info 35 [00:01:16.000] FileWatcher:: Triggered with /user/username/projects/myproject/src/file2.ts 1:: WatchInfo: /user/username/projects/myproject/src/file2.ts 500 undefined WatchType: Closed Script info +Info 36 [00:01:17.000] Scheduled: /user/username/projects/myproject/tsconfig.json +Info 37 [00:01:18.000] Scheduled: *ensureProjectForOpenFiles* +Info 38 [00:01:19.000] Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/src/file2.ts 1:: WatchInfo: /user/username/projects/myproject/src/file2.ts 500 undefined WatchType: Closed Script info Before running timeout callbacks //// [/user/username/projects/myproject/src/file1.ts] import { module1 } from "./module1";import { module2 } from "../module2";import { module1 } from "./module1";import { module2 } from "../module2"; @@ -137,31 +141,31 @@ FsWatchesRecursive:: /user/username/projects/myproject: {} -Info 35 [00:01:16.000] Running: /user/username/projects/myproject/tsconfig.json -Info 36 [00:01:17.000] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json -Info 37 [00:01:18.000] Reusing resolution of module './module1' from '/user/username/projects/myproject/src/file1.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/src/module1.ts'. -Info 38 [00:01:19.000] Reusing resolution of module '../module2' from '/user/username/projects/myproject/src/file1.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/module2.ts'. -Info 39 [00:01:20.000] Reusing resolution of module './module1' from '/user/username/projects/myproject/src/file2.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/src/module1.ts'. -Info 40 [00:01:21.000] Reusing resolution of module '../module2' from '/user/username/projects/myproject/src/file2.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/module2.ts'. -Info 41 [00:01:22.000] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json Version: 2 structureChanged: true structureIsReused:: SafeModules Elapsed:: *ms -Info 42 [00:01:23.000] Different program with same set of files -Info 43 [00:01:24.000] Running: *ensureProjectForOpenFiles* -Info 44 [00:01:25.000] Before ensureProjectForOpenFiles: -Info 45 [00:01:26.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) -Info 45 [00:01:27.000] Files (5) +Info 39 [00:01:20.000] Running: /user/username/projects/myproject/tsconfig.json +Info 40 [00:01:21.000] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json +Info 41 [00:01:22.000] Reusing resolution of module './module1' from '/user/username/projects/myproject/src/file1.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/src/module1.ts'. +Info 42 [00:01:23.000] Reusing resolution of module '../module2' from '/user/username/projects/myproject/src/file1.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/module2.ts'. +Info 43 [00:01:24.000] Reusing resolution of module './module1' from '/user/username/projects/myproject/src/file2.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/src/module1.ts'. +Info 44 [00:01:25.000] Reusing resolution of module '../module2' from '/user/username/projects/myproject/src/file2.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/module2.ts'. +Info 45 [00:01:26.000] Finishing updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json Version: 2 structureChanged: true structureIsReused:: SafeModules Elapsed:: *ms +Info 46 [00:01:27.000] Different program with same set of files +Info 47 [00:01:28.000] Running: *ensureProjectForOpenFiles* +Info 48 [00:01:29.000] Before ensureProjectForOpenFiles: +Info 49 [00:01:30.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info 49 [00:01:31.000] Files (5) -Info 45 [00:01:28.000] ----------------------------------------------- -Info 45 [00:01:29.000] Open files: -Info 45 [00:01:30.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined -Info 45 [00:01:31.000] Projects: /user/username/projects/myproject/tsconfig.json -Info 45 [00:01:32.000] After ensureProjectForOpenFiles: -Info 46 [00:01:33.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) -Info 46 [00:01:34.000] Files (5) +Info 49 [00:01:32.000] ----------------------------------------------- +Info 49 [00:01:33.000] Open files: +Info 49 [00:01:34.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined +Info 49 [00:01:35.000] Projects: /user/username/projects/myproject/tsconfig.json +Info 49 [00:01:36.000] After ensureProjectForOpenFiles: +Info 50 [00:01:37.000] Project '/user/username/projects/myproject/tsconfig.json' (Configured) +Info 50 [00:01:38.000] Files (5) -Info 46 [00:01:35.000] ----------------------------------------------- -Info 46 [00:01:36.000] Open files: -Info 46 [00:01:37.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined -Info 46 [00:01:38.000] Projects: /user/username/projects/myproject/tsconfig.json +Info 50 [00:01:39.000] ----------------------------------------------- +Info 50 [00:01:40.000] Open files: +Info 50 [00:01:41.000] FileName: /user/username/projects/myproject/src/file1.ts ProjectRootPath: undefined +Info 50 [00:01:42.000] Projects: /user/username/projects/myproject/tsconfig.json After running timeout callbacks PolledWatches:: diff --git a/tests/baselines/reference/tsserver/resolutionCache/sharing-across-references.js b/tests/baselines/reference/tsserver/resolutionCache/sharing-across-references.js new file mode 100644 index 00000000000..ef01a48dbba --- /dev/null +++ b/tests/baselines/reference/tsserver/resolutionCache/sharing-across-references.js @@ -0,0 +1,178 @@ +Info 0 [00:00:29.000] Provided types map file "/a/lib/typesMap.json" doesn't exist +Info 1 [00:00:30.000] request: + { + "command": "open", + "arguments": { + "file": "/src/projects/app/appB.ts" + }, + "seq": 1, + "type": "request" + } +Before request +//// [/src/projects/node_modules/moduleX/index.d.ts] +export const x = 10; + +//// [/src/projects/common/tsconfig.json] +{"compilerOptions":{"composite":true,"traceResolution":true}} + +//// [/src/projects/common/moduleA.ts] +export const a = 10; + +//// [/src/projects/common/moduleB.ts] +import { x } from "moduleX"; +export const b = x; + + +//// [/src/projects/app/tsconfig.json] +{"compilerOptions":{"composite":true,"traceResolution":true},"references":[{"path":"../common"}]} + +//// [/src/projects/app/appA.ts] +import { x } from "moduleX"; +export const y = x; + + +//// [/src/projects/app/appB.ts] +import { x } from "../common/moduleB"; +export const y = x; + + + +PolledWatches:: + +FsWatches:: + +FsWatchesRecursive:: + +Info 2 [00:00:31.000] Search path: /src/projects/app +Info 3 [00:00:32.000] For info: /src/projects/app/appB.ts :: Config file name: /src/projects/app/tsconfig.json +Info 4 [00:00:33.000] Creating configuration project /src/projects/app/tsconfig.json +Info 5 [00:00:34.000] FileWatcher:: Added:: WatchInfo: /src/projects/app/tsconfig.json 2000 undefined Project: /src/projects/app/tsconfig.json WatchType: Config file +Info 6 [00:00:35.000] Config: /src/projects/app/tsconfig.json : { + "rootNames": [ + "/src/projects/app/appA.ts", + "/src/projects/app/appB.ts" + ], + "options": { + "composite": true, + "traceResolution": true, + "configFilePath": "/src/projects/app/tsconfig.json" + }, + "projectReferences": [ + { + "path": "/src/projects/common", + "originalPath": "../common" + } + ] +} +Info 7 [00:00:36.000] DirectoryWatcher:: Added:: WatchInfo: /src/projects/app 1 undefined Config: /src/projects/app/tsconfig.json WatchType: Wild card directory +Info 8 [00:00:37.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /src/projects/app 1 undefined Config: /src/projects/app/tsconfig.json WatchType: Wild card directory +Info 9 [00:00:38.000] FileWatcher:: Added:: WatchInfo: /src/projects/app/appA.ts 500 undefined WatchType: Closed Script info +Info 10 [00:00:39.000] Starting updateGraphWorker: Project: /src/projects/app/tsconfig.json +Info 11 [00:00:40.000] Config: /src/projects/common/tsconfig.json : { + "rootNames": [ + "/src/projects/common/moduleA.ts", + "/src/projects/common/moduleB.ts" + ], + "options": { + "composite": true, + "traceResolution": true, + "configFilePath": "/src/projects/common/tsconfig.json" + } +} +Info 12 [00:00:41.000] FileWatcher:: Added:: WatchInfo: /src/projects/common/tsconfig.json 2000 undefined Project: /src/projects/app/tsconfig.json WatchType: Config file +Info 13 [00:00:42.000] DirectoryWatcher:: Added:: WatchInfo: /src/projects/common 1 undefined Config: /src/projects/common/tsconfig.json WatchType: Wild card directory +Info 14 [00:00:43.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /src/projects/common 1 undefined Config: /src/projects/common/tsconfig.json WatchType: Wild card directory +Info 15 [00:00:44.000] ======== Resolving module 'moduleX' from '/src/projects/app/appA.ts'. ======== +Info 16 [00:00:45.000] Module resolution kind is not specified, using 'NodeJs'. +Info 17 [00:00:46.000] Loading module 'moduleX' from 'node_modules' folder, target file types: TypeScript, Declaration. +Info 18 [00:00:47.000] Directory '/src/projects/app/node_modules' does not exist, skipping all lookups in it. +Info 19 [00:00:48.000] File '/src/projects/node_modules/moduleX/package.json' does not exist. +Info 20 [00:00:49.000] File '/src/projects/node_modules/moduleX.ts' does not exist. +Info 21 [00:00:50.000] File '/src/projects/node_modules/moduleX.tsx' does not exist. +Info 22 [00:00:51.000] File '/src/projects/node_modules/moduleX.d.ts' does not exist. +Info 23 [00:00:52.000] File '/src/projects/node_modules/moduleX/index.ts' does not exist. +Info 24 [00:00:53.000] File '/src/projects/node_modules/moduleX/index.tsx' does not exist. +Info 25 [00:00:54.000] File '/src/projects/node_modules/moduleX/index.d.ts' exist - use it as a name resolution result. +Info 26 [00:00:55.000] Resolving real path for '/src/projects/node_modules/moduleX/index.d.ts', result '/src/projects/node_modules/moduleX/index.d.ts'. +Info 27 [00:00:56.000] ======== Module name 'moduleX' was successfully resolved to '/src/projects/node_modules/moduleX/index.d.ts'. ======== +Info 28 [00:00:57.000] DirectoryWatcher:: Added:: WatchInfo: /src/projects/node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache +Info 29 [00:00:58.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /src/projects/node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache +Info 30 [00:00:59.000] ======== Resolving module '../common/moduleB' from '/src/projects/app/appB.ts'. ======== +Info 31 [00:01:00.000] Module resolution kind is not specified, using 'NodeJs'. +Info 32 [00:01:01.000] Loading module as file / folder, candidate module location '/src/projects/common/moduleB', target file types: TypeScript, Declaration. +Info 33 [00:01:02.000] File '/src/projects/common/moduleB.ts' exist - use it as a name resolution result. +Info 34 [00:01:03.000] ======== Module name '../common/moduleB' was successfully resolved to '/src/projects/common/moduleB.ts'. ======== +Info 35 [00:01:04.000] FileWatcher:: Added:: WatchInfo: /src/projects/common/moduleB.ts 500 undefined WatchType: Closed Script info +Info 36 [00:01:05.000] ======== Resolving module 'moduleX' from '/src/projects/common/moduleB.ts'. ======== +Info 37 [00:01:06.000] Using compiler options of project reference redirect '/src/projects/common/tsconfig.json'. +Info 38 [00:01:07.000] Module resolution kind is not specified, using 'NodeJs'. +Info 39 [00:01:08.000] Loading module 'moduleX' from 'node_modules' folder, target file types: TypeScript, Declaration. +Info 40 [00:01:09.000] Directory '/src/projects/common/node_modules' does not exist, skipping all lookups in it. +Info 41 [00:01:10.000] Resolution for module 'moduleX' was found in cache from location '/src/projects'. +Info 42 [00:01:11.000] ======== Module name 'moduleX' was successfully resolved to '/src/projects/node_modules/moduleX/index.d.ts'. ======== +Info 43 [00:01:12.000] DirectoryWatcher:: Added:: WatchInfo: /src/projects/app/node_modules 1 undefined Project: /src/projects/app/tsconfig.json WatchType: Failed Lookup Locations +Info 44 [00:01:13.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /src/projects/app/node_modules 1 undefined Project: /src/projects/app/tsconfig.json WatchType: Failed Lookup Locations +Info 45 [00:01:14.000] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined Project: /src/projects/app/tsconfig.json WatchType: Missing file +Info 46 [00:01:15.000] DirectoryWatcher:: Added:: WatchInfo: /src/projects/app/node_modules/@types 1 undefined Project: /src/projects/app/tsconfig.json WatchType: Type roots +Info 47 [00:01:16.000] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /src/projects/app/node_modules/@types 1 undefined Project: /src/projects/app/tsconfig.json WatchType: Type roots +Info 48 [00:01:17.000] Finishing updateGraphWorker: Project: /src/projects/app/tsconfig.json Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info 49 [00:01:18.000] Project '/src/projects/app/tsconfig.json' (Configured) +Info 50 [00:01:19.000] Files (4) + /src/projects/node_modules/moduleX/index.d.ts + /src/projects/app/appA.ts + /src/projects/common/moduleB.ts + /src/projects/app/appB.ts + + + ../node_modules/moduleX/index.d.ts + Imported via "moduleX" from file 'appA.ts' + Imported via "moduleX" from file '../common/moduleB.ts' + appA.ts + Matched by default include pattern '**/*' + ../common/moduleB.ts + Imported via "../common/moduleB" from file 'appB.ts' + appB.ts + Matched by default include pattern '**/*' + +Info 51 [00:01:20.000] ----------------------------------------------- +Info 52 [00:01:21.000] Search path: /src/projects/app +Info 53 [00:01:22.000] For info: /src/projects/app/tsconfig.json :: No config files found. +Info 54 [00:01:23.000] Project '/src/projects/app/tsconfig.json' (Configured) +Info 54 [00:01:24.000] Files (4) + +Info 54 [00:01:25.000] ----------------------------------------------- +Info 54 [00:01:26.000] Open files: +Info 54 [00:01:27.000] FileName: /src/projects/app/appB.ts ProjectRootPath: undefined +Info 54 [00:01:28.000] Projects: /src/projects/app/tsconfig.json +After request + +PolledWatches:: +/src/projects/app/node_modules: + {"pollingInterval":500} +/a/lib/lib.d.ts: + {"pollingInterval":500} +/src/projects/app/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/src/projects/app/tsconfig.json: + {} +/src/projects/app/appa.ts: + {} +/src/projects/common/tsconfig.json: + {} +/src/projects/common/moduleb.ts: + {} + +FsWatchesRecursive:: +/src/projects/app: + {} +/src/projects/common: + {} +/src/projects/node_modules: + {} + +Info 54 [00:01:29.000] response: + { + "responseRequired": false + } \ No newline at end of file