From 238651d77ff1c689b13c7239606c8cf3ae90e4d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Mon, 11 Mar 2024 11:06:38 +0100
Subject: [PATCH 01/26] Add string literal completions for `package.json`
 `imports` field

---
 src/compiler/utilities.ts                     |  17 +
 src/services/stringCompletions.ts             | 153 +++++--
 .../importCompletions_importsMap1.js          | 378 ++++++++++++++++
 .../importCompletions_importsMap2.js          | 404 ++++++++++++++++++
 .../importCompletions_importsMap3.js          | 404 ++++++++++++++++++
 .../importCompletions_importsMap4.js          | 357 ++++++++++++++++
 .../importCompletions_importsMap5.js          | 374 ++++++++++++++++
 ...ionsPackageJsonExportsSpecifierEndsInTs.ts |  31 ++
 ...ompletionsPackageJsonImportsConditions1.ts |  25 ++
 ...ortCompletionsPackageJsonImportsLength1.ts |  46 ++
 ...ortCompletionsPackageJsonImportsLength2.ts |  47 ++
 ...ortCompletionsPackageJsonImportsPattern.ts |  22 +
 ...nsPackageJsonImportsPattern_capsInPath1.ts |  22 +
 ...nsPackageJsonImportsPattern_capsInPath2.ts |  27 ++
 ...CompletionsPackageJsonImportsPattern_js.ts |  22 +
 ...pletionsPackageJsonImportsPattern_js_ts.ts |  22 +
 ...CompletionsPackageJsonImportsPattern_ts.ts |  22 +
 ...pletionsPackageJsonImportsPattern_ts_js.ts |  22 +
 ...pletionsPackageJsonImportsPattern_ts_ts.ts |  22 +
 .../importCompletionsPackageJsonImports_js.ts |  22 +
 .../importCompletionsPackageJsonImports_ts.ts |  22 +
 .../server/importCompletions_importsMap1.ts   |  36 ++
 .../server/importCompletions_importsMap2.ts   |  36 ++
 .../server/importCompletions_importsMap3.ts   |  36 ++
 .../server/importCompletions_importsMap4.ts   |  33 ++
 .../server/importCompletions_importsMap5.ts   |  34 ++
 26 files changed, 2610 insertions(+), 26 deletions(-)
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap1.js
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap2.js
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap4.js
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap5.js
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonExportsSpecifierEndsInTs.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsConditions1.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsLength1.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsLength2.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsPattern.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_capsInPath1.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_capsInPath2.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_js.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_js_ts.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts_js.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts_ts.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImports_js.ts
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImports_ts.ts
 create mode 100644 tests/cases/fourslash/server/importCompletions_importsMap1.ts
 create mode 100644 tests/cases/fourslash/server/importCompletions_importsMap2.ts
 create mode 100644 tests/cases/fourslash/server/importCompletions_importsMap3.ts
 create mode 100644 tests/cases/fourslash/server/importCompletions_importsMap4.ts
 create mode 100644 tests/cases/fourslash/server/importCompletions_importsMap5.ts

diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts
index 6bbc51a4ad121..1c3b951646c14 100644
--- a/src/compiler/utilities.ts
+++ b/src/compiler/utilities.ts
@@ -192,6 +192,7 @@ import {
     getParseTreeNode,
     getPathComponents,
     getPathFromPathComponents,
+    getRelativePathFromDirectory,
     getRelativePathToDirectoryOrUrl,
     getResolutionModeOverride,
     getRootLength,
@@ -471,6 +472,7 @@ import {
     ResolvedModuleWithFailedLookupLocations,
     ResolvedTypeReferenceDirective,
     ResolvedTypeReferenceDirectiveWithFailedLookupLocations,
+    resolvePath,
     ReturnStatement,
     SatisfiesExpression,
     ScriptKind,
@@ -6288,6 +6290,21 @@ export function getPossibleOriginalInputExtensionForExtension(path: string) {
         [Extension.Tsx, Extension.Ts, Extension.Jsx, Extension.Js];
 }
 
+/** @internal */
+export function getPossibleOriginalInputPathWithoutChangingExt(
+    filePath: string,
+    ignoreCase: boolean,
+    outputDir: string | undefined,
+    getCommonSourceDirectory: () => string,
+): string {
+    return outputDir ?
+        resolvePath(
+            getCommonSourceDirectory(),
+            getRelativePathFromDirectory(outputDir, filePath, ignoreCase),
+        ) :
+        filePath;
+}
+
 /**
  * Returns 'undefined' if and only if 'options.paths' is undefined.
  *
diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 5cb669be5368c..03320135c7dfb 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -20,9 +20,11 @@ import {
     CompletionEntry,
     CompletionEntryDetails,
     CompletionInfo,
+    concatenate,
     contains,
     containsPath,
     ContextFlags,
+    createModuleSpecifierResolutionHost,
     createSortedArray,
     createTextSpan,
     createTextSpanFromStringLiteralLikeContent,
@@ -59,6 +61,8 @@ import {
     getPackageJsonTypesVersionsPaths,
     getPathComponents,
     getPathsBasePath,
+    getPossibleOriginalInputExtensionForExtension,
+    getPossibleOriginalInputPathWithoutChangingExt,
     getReplacementSpanForContextToken,
     getResolvePackageJsonExports,
     getSupportedExtensions,
@@ -70,6 +74,7 @@ import {
     hasProperty,
     hasTrailingDirectorySeparator,
     hostGetCanonicalFileName,
+    hostUsesCaseSensitiveFileNames,
     IndexedAccessTypeNode,
     isApplicableVersionedTypesKey,
     isArray,
@@ -99,6 +104,7 @@ import {
     MapLike,
     moduleResolutionUsesNodeModules,
     ModuleSpecifierEnding,
+    ModuleSpecifierResolutionHost,
     moduleSpecifiers,
     newCaseClauseTracker,
     Node,
@@ -595,7 +601,7 @@ function getStringLiteralCompletionsFromModuleNamesWorker(sourceFile: SourceFile
 
     return isPathRelativeToScript(literalValue) || !compilerOptions.baseUrl && !compilerOptions.paths && (isRootedDiskPath(literalValue) || isUrl(literalValue))
         ? getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, extensionOptions)
-        : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, mode, compilerOptions, host, extensionOptions, typeChecker);
+        : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, mode, compilerOptions, host, createModuleSpecifierResolutionHost(program, host), extensionOptions, typeChecker);
 }
 
 interface ExtensionOptions {
@@ -628,7 +634,7 @@ function getCompletionEntriesForRelativeModules(literalValue: string, scriptDire
         );
     }
     else {
-        return arrayFrom(getCompletionEntriesForDirectoryFragment(literalValue, scriptDirectory, extensionOptions, host, /*moduleSpecifierIsRelative*/ true, scriptPath).values());
+        return arrayFrom(getCompletionEntriesForDirectoryFragment(literalValue, scriptDirectory, extensionOptions, compilerOptions, host, /*moduleSpecifierIsRelative*/ true, scriptPath).values());
     }
 }
 
@@ -671,7 +677,7 @@ function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs: string[]
     const ignoreCase = !(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames());
     const baseDirectories = getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptDirectory, ignoreCase);
     return deduplicate<NameAndKind>(
-        flatMap(baseDirectories, baseDirectory => arrayFrom(getCompletionEntriesForDirectoryFragment(fragment, baseDirectory, extensionOptions, host, /*moduleSpecifierIsRelative*/ true, exclude).values())),
+        flatMap(baseDirectories, baseDirectory => arrayFrom(getCompletionEntriesForDirectoryFragment(fragment, baseDirectory, extensionOptions, compilerOptions, host, /*moduleSpecifierIsRelative*/ true, exclude).values())),
         (itemA, itemB) => itemA.name === itemB.name && itemA.kind === itemB.kind && itemA.extension === itemB.extension,
     );
 }
@@ -687,6 +693,7 @@ function getCompletionEntriesForDirectoryFragment(
     fragment: string,
     scriptDirectory: string,
     extensionOptions: ExtensionOptions,
+    compilerOptions: CompilerOptions,
     host: LanguageServiceHost,
     moduleSpecifierIsRelative: boolean,
     exclude?: string,
@@ -726,7 +733,7 @@ function getCompletionEntriesForDirectoryFragment(
                 if (versionPaths) {
                     const packageDirectory = getDirectoryPath(packageJsonPath);
                     const pathInPackage = absolutePath.slice(ensureTrailingDirectorySeparator(packageDirectory).length);
-                    if (addCompletionEntriesFromPaths(result, pathInPackage, packageDirectory, extensionOptions, host, versionPaths)) {
+                    if (addCompletionEntriesFromPaths(result, pathInPackage, packageDirectory, extensionOptions, compilerOptions, host, /*moduleSpecifierResolutionHost*/ undefined, versionPaths)) {
                         // A true result means one of the `versionPaths` was matched, which will block relative resolution
                         // to files and folders from here. All reachable paths given the pattern match are already added.
                         return result;
@@ -820,7 +827,9 @@ function addCompletionEntriesFromPaths(
     fragment: string,
     baseDirectory: string,
     extensionOptions: ExtensionOptions,
+    compilerOptions: CompilerOptions,
     host: LanguageServiceHost,
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined,
     paths: MapLike<string[]>,
 ) {
     const getPatternsForKey = (key: string) => paths[key];
@@ -831,17 +840,20 @@ function addCompletionEntriesFromPaths(
         const lengthB = typeof patternB === "object" ? patternB.prefix.length : b.length;
         return compareValues(lengthB, lengthA);
     };
-    return addCompletionEntriesFromPathsOrExports(result, /*isExports*/ false, fragment, baseDirectory, extensionOptions, host, getOwnKeys(paths), getPatternsForKey, comparePaths);
+    return addCompletionEntriesFromPathsOrExports(result, /*isExports*/ false, /*isImports*/ false, fragment, baseDirectory, extensionOptions, compilerOptions, host, moduleSpecifierResolutionHost, getOwnKeys(paths), getPatternsForKey, comparePaths);
 }
 
 /** @returns whether `fragment` was a match for any `paths` (which should indicate whether any other path completions should be offered) */
 function addCompletionEntriesFromPathsOrExports(
     result: NameAndKindSet,
     isExports: boolean,
+    isImports: boolean,
     fragment: string,
     baseDirectory: string,
     extensionOptions: ExtensionOptions,
+    compilerOptions: CompilerOptions,
     host: LanguageServiceHost,
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined,
     keys: readonly string[],
     getPatternsForKey: (key: string) => string[] | undefined,
     comparePaths: (a: string, b: string) => Comparison,
@@ -875,7 +887,7 @@ function addCompletionEntriesFromPathsOrExports(
             if (typeof pathPattern === "string" || matchedPath === undefined || comparePaths(key, matchedPath) !== Comparison.GreaterThan) {
                 pathResults.push({
                     matchedPattern: isMatch,
-                    results: getCompletionsForPathMapping(keyWithoutLeadingDotSlash, patterns, fragment, baseDirectory, extensionOptions, isExports && isMatch, host)
+                    results: getCompletionsForPathMapping(keyWithoutLeadingDotSlash, patterns, fragment, baseDirectory, extensionOptions, (isExports || isImports) && endsWith(keyWithoutLeadingDotSlash, '*'), isImports, compilerOptions, host, moduleSpecifierResolutionHost)
                         .map(({ name, kind, extension }) => nameAndKind(name, kind, extension)),
                 });
             }
@@ -899,6 +911,7 @@ function getCompletionEntriesForNonRelativeModules(
     mode: ResolutionMode,
     compilerOptions: CompilerOptions,
     host: LanguageServiceHost,
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost,
     extensionOptions: ExtensionOptions,
     typeChecker: TypeChecker,
 ): readonly NameAndKind[] {
@@ -909,12 +922,12 @@ function getCompletionEntriesForNonRelativeModules(
 
     if (baseUrl) {
         const absolute = normalizePath(combinePaths(host.getCurrentDirectory(), baseUrl));
-        getCompletionEntriesForDirectoryFragment(fragment, absolute, extensionOptions, host, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
+        getCompletionEntriesForDirectoryFragment(fragment, absolute, extensionOptions, compilerOptions, host, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
     }
 
     if (paths) {
         const absolute = getPathsBasePath(compilerOptions, host)!;
-        addCompletionEntriesFromPaths(result, fragment, absolute, extensionOptions, host, paths);
+        addCompletionEntriesFromPaths(result, fragment, absolute, extensionOptions, compilerOptions, host, moduleSpecifierResolutionHost, paths);
     }
 
     const fragmentDirectory = getFragmentDirectory(fragment);
@@ -938,10 +951,41 @@ function getCompletionEntriesForNonRelativeModules(
             }
         }
         if (!foundGlobal) {
+            let seenPackageScope = false;
             let ancestorLookup: (directory: string) => void | undefined = ancestor => {
                 const nodeModules = combinePaths(ancestor, "node_modules");
                 if (tryDirectoryExists(host, nodeModules)) {
-                    getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, host, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
+                    getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, compilerOptions, host, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
+                }
+                if (!seenPackageScope) {
+                    const packageFile = combinePaths(ancestor, "package.json");
+                    if (seenPackageScope = tryFileExists(host, packageFile)) {
+                        const packageJson = readJson(packageFile, host);
+                        const imports = (packageJson as any).imports;
+                        if (imports) {
+                            if (typeof imports !== "object" || imports === null) { // eslint-disable-line no-null/no-null
+                                return; // null imports or entrypoint only, no sub-modules available
+                            }
+
+                            const keys = getOwnKeys(imports);
+                            const conditions = getConditions(compilerOptions, mode);
+                            addCompletionEntriesFromPathsOrExports(
+                                result,
+                                /*isExports*/ false,
+                                /*isImports*/ true,
+                                fragment,
+                                ancestor,
+                                extensionOptions,
+                                compilerOptions,
+                                host,
+                                moduleSpecifierResolutionHost,
+                                keys,
+                                key => singleElementArray(getPatternFromFirstMatchingCondition(imports[key], conditions)),
+                                comparePatternKeys,
+                            );
+                            return;
+                        }
+                    }
                 }
             };
             if (fragmentDirectory && getResolvePackageJsonExports(compilerOptions)) {
@@ -965,6 +1009,7 @@ function getCompletionEntriesForNonRelativeModules(
                     if (tryFileExists(host, packageFile)) {
                         const packageJson = readJson(packageFile, host);
                         const exports = (packageJson as any).exports;
+                        const imports = (packageJson as any).imports;
                         if (exports) {
                             if (typeof exports !== "object" || exports === null) { // eslint-disable-line no-null/no-null
                                 return; // null exports or entrypoint only, no sub-modules available
@@ -975,16 +1020,43 @@ function getCompletionEntriesForNonRelativeModules(
                             addCompletionEntriesFromPathsOrExports(
                                 result,
                                 /*isExports*/ true,
+                                /*isImports*/ false,
                                 fragmentSubpath,
                                 packageDirectory,
                                 extensionOptions,
+                                compilerOptions,
                                 host,
+                                moduleSpecifierResolutionHost,
                                 keys,
                                 key => singleElementArray(getPatternFromFirstMatchingCondition(exports[key], conditions)),
                                 comparePatternKeys,
                             );
                             return;
                         }
+                        if (!seenPackageScope && imports) {
+                            if (typeof imports !== "object" || imports === null) { // eslint-disable-line no-null/no-null
+                                return; // null imports or entrypoint only, no sub-modules available
+                            }
+                            const keys = getOwnKeys(imports);
+                            const fragmentSubpath = components.join("/") + (components.length && hasTrailingDirectorySeparator(fragment) ? "/" : "");
+                            const conditions = getConditions(compilerOptions, mode);
+                            addCompletionEntriesFromPathsOrExports(
+                                result,
+                                /*isExports*/ false,
+                                /*isImports*/ true,
+                                fragmentSubpath,
+                                packageDirectory,
+                                extensionOptions,
+                                compilerOptions,
+                                host,
+                                moduleSpecifierResolutionHost,
+                                keys,
+                                key => singleElementArray(getPatternFromFirstMatchingCondition(imports[key], conditions)),
+                                comparePatternKeys,
+                            );
+                            return;
+                        }
+                        seenPackageScope = true;
                     }
                     return nodeModulesDirectoryLookup(ancestor);
                 };
@@ -1021,20 +1093,26 @@ function getCompletionsForPathMapping(
     packageDirectory: string,
     extensionOptions: ExtensionOptions,
     isExportsWildcard: boolean,
+    isImports: boolean,
+    compilerOptions: CompilerOptions,
     host: LanguageServiceHost,
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined
 ): readonly NameAndKind[] {
-    if (!endsWith(path, "*")) {
+    const parsedPath = tryParsePattern(path)
+    if (!parsedPath) {
+        return emptyArray;
+    }
+    // no stars in the pattern
+    if (typeof parsedPath === "string") {
         // For a path mapping "foo": ["/x/y/z.ts"], add "foo" itself as a completion.
-        return !path.includes("*") ? justPathMappingName(path, ScriptElementKind.scriptElement) : emptyArray;
+        return justPathMappingName(path, ScriptElementKind.scriptElement);
     }
-
-    const pathPrefix = path.slice(0, path.length - 1);
-    const remainingFragment = tryRemovePrefix(fragment, pathPrefix);
+    const remainingFragment = tryRemovePrefix(fragment, parsedPath.prefix);
     if (remainingFragment === undefined) {
-        const starIsFullPathComponent = path[path.length - 2] === "/";
-        return starIsFullPathComponent ? justPathMappingName(pathPrefix, ScriptElementKind.directory) : flatMap(patterns, pattern => getModulesForPathsPattern("", packageDirectory, pattern, extensionOptions, isExportsWildcard, host)?.map(({ name, ...rest }) => ({ name: pathPrefix + name, ...rest })));
+        const starIsFullPathComponent = endsWith(path, '/*');
+        return starIsFullPathComponent ? justPathMappingName(parsedPath.prefix, ScriptElementKind.directory) : flatMap(patterns, pattern => getModulesForPathsPattern("", packageDirectory, pattern, extensionOptions, isExportsWildcard, isImports, compilerOptions, host, moduleSpecifierResolutionHost)?.map(({ name, ...rest }) => ({ name: parsedPath.prefix + name + parsedPath.suffix, ...rest })));
     }
-    return flatMap(patterns, pattern => getModulesForPathsPattern(remainingFragment, packageDirectory, pattern, extensionOptions, isExportsWildcard, host));
+    return flatMap(patterns, pattern => getModulesForPathsPattern(remainingFragment, packageDirectory, pattern, extensionOptions, isExportsWildcard, isImports, compilerOptions, host, moduleSpecifierResolutionHost));
 
     function justPathMappingName(name: string, kind: ScriptElementKind.directory | ScriptElementKind.scriptElement): readonly NameAndKind[] {
         return startsWith(name, fragment) ? [{ name: removeTrailingDirectorySeparator(name), kind, extension: undefined }] : emptyArray;
@@ -1047,7 +1125,10 @@ function getModulesForPathsPattern(
     pattern: string,
     extensionOptions: ExtensionOptions,
     isExportsWildcard: boolean,
+    isImports: boolean,
+    compilerOptions: CompilerOptions,
     host: LanguageServiceHost,
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined
 ): readonly NameAndKind[] | undefined {
     if (!host.readDirectory) {
         return undefined;
@@ -1072,9 +1153,11 @@ function getModulesForPathsPattern(
 
     const normalizedSuffix = normalizePath(parsed.suffix);
     const declarationExtension = normalizedSuffix && getDeclarationEmitExtensionForPath("_" + normalizedSuffix);
-    const matchingSuffixes = declarationExtension ? [changeExtension(normalizedSuffix, declarationExtension), normalizedSuffix] : [normalizedSuffix];
+    const inputExtension = isImports && normalizedSuffix ? getPossibleOriginalInputExtensionForExtension("_" + normalizedSuffix) : undefined;
+    const matchingSuffixes = [...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []), declarationExtension && changeExtension(normalizedSuffix, declarationExtension), normalizedSuffix].filter(isString);
     // Need to normalize after combining: If we combinePaths("a", "../b"), we want "b" and not "a/../b".
     const baseDirectory = normalizePath(combinePaths(packageDirectory, expandedPrefixDirectory));
+    const inputBaseDirectory = isImports && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, !hostUsesCaseSensitiveFileNames(moduleSpecifierResolutionHost!), compilerOptions.outDir,  () => moduleSpecifierResolutionHost!.getCommonSourceDirectory());
     const completePrefix = fragmentHasPath ? baseDirectory : ensureTrailingDirectorySeparator(baseDirectory) + normalizedPrefixBase;
 
     // If we have a suffix, then we read the directory all the way down to avoid returning completions for
@@ -1089,13 +1172,13 @@ function getModulesForPathsPattern(
         ? matchingSuffixes.map(suffix => "**/*" + suffix)
         : ["./*"];
 
-    const matches = mapDefined(tryReadDirectory(host, baseDirectory, extensionOptions.extensionsToSearch, /*exclude*/ undefined, includeGlobs), match => {
-        const trimmedWithPattern = trimPrefixAndSuffix(match);
+    let matches = mapDefined(tryReadDirectory(host, baseDirectory, extensionOptions.extensionsToSearch, /*exclude*/ undefined, includeGlobs), match => {
+        const trimmedWithPattern = trimPrefixAndSuffix(match, completePrefix);
         if (trimmedWithPattern) {
             if (containsSlash(trimmedWithPattern)) {
                 return directoryResult(getPathComponents(removeLeadingDirectorySeparator(trimmedWithPattern))[1]);
             }
-            const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, host.getCompilationSettings(), extensionOptions, isExportsWildcard);
+            const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, compilerOptions, extensionOptions, isExportsWildcard);
             return nameAndKind(name, ScriptElementKind.scriptElement, extension);
         }
     });
@@ -1106,11 +1189,29 @@ function getModulesForPathsPattern(
     const directories = normalizedSuffix
         ? emptyArray
         : mapDefined(tryGetDirectories(host, baseDirectory), dir => dir === "node_modules" ? undefined : directoryResult(dir));
-    return [...matches, ...directories];
 
-    function trimPrefixAndSuffix(path: string): string | undefined {
+    if (inputBaseDirectory && inputBaseDirectory !== baseDirectory) {
+        const completeInputPrefix = fragmentHasPath ? inputBaseDirectory : ensureTrailingDirectorySeparator(inputBaseDirectory) + normalizedPrefixBase;
+        const inputMatches = mapDefined(tryReadDirectory(host, inputBaseDirectory, extensionOptions.extensionsToSearch, /*exclude*/ undefined, includeGlobs), match => {
+            const trimmedWithPattern = trimPrefixAndSuffix(match, completeInputPrefix);
+            if (trimmedWithPattern) {
+                if (containsSlash(trimmedWithPattern)) {
+                    return directoryResult(getPathComponents(removeLeadingDirectorySeparator(trimmedWithPattern))[1]);
+                }
+                const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, compilerOptions, extensionOptions, isExportsWildcard);
+                return nameAndKind(name, ScriptElementKind.scriptElement, extension);
+            }
+        });
+        matches = concatenate(matches, inputMatches);
+    }
+
+    matches = concatenate(matches, directories);
+
+    return matches;
+
+    function trimPrefixAndSuffix(path: string, prefix: string): string | undefined {
         return firstDefined(matchingSuffixes, suffix => {
-            const inner = withoutStartAndEnd(normalizePath(path), completePrefix, suffix);
+            const inner = withoutStartAndEnd(normalizePath(path), prefix, suffix);
             return inner === undefined ? undefined : removeLeadingDirectorySeparator(inner);
         });
     }
@@ -1154,7 +1255,7 @@ function getTripleSlashReferenceCompletion(sourceFile: SourceFile, position: num
 
     const [, prefix, kind, toComplete] = match;
     const scriptPath = getDirectoryPath(sourceFile.path);
-    const names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, ReferenceKind.Filename, sourceFile), host, /*moduleSpecifierIsRelative*/ true, sourceFile.path)
+    const names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, ReferenceKind.Filename, sourceFile), compilerOptions, host, /*moduleSpecifierIsRelative*/ true, sourceFile.path)
         : kind === "types" ? getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, getFragmentDirectory(toComplete), getExtensionOptions(compilerOptions, ReferenceKind.ModuleSpecifier, sourceFile))
         : Debug.fail();
     return addReplacementSpans(toComplete, range.pos + prefix.length, arrayFrom(names.values()));
@@ -1195,7 +1296,7 @@ function getCompletionEntriesFromTypings(host: LanguageServiceHost, options: Com
                 const baseDirectory = combinePaths(directory, typeDirectoryName);
                 const remainingFragment = tryRemoveDirectoryPrefix(fragmentDirectory, packageName, hostGetCanonicalFileName(host));
                 if (remainingFragment !== undefined) {
-                    getCompletionEntriesForDirectoryFragment(remainingFragment, baseDirectory, extensionOptions, host, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
+                    getCompletionEntriesForDirectoryFragment(remainingFragment, baseDirectory, extensionOptions, options, host, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
                 }
             }
         }
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap1.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap1.js
new file mode 100644
index 0000000000000..cb6d6d9792752
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap1.js
@@ -0,0 +1,378 @@
+currentDirectory:: / useCaseSensitiveFileNames: false
+Info seq  [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
+//// [/lib.d.ts]
+lib.d.ts-Text
+
+//// [/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/package.json]
+{
+  "type": "module",
+  "imports": {
+    "#is-browser": {
+      "browser": "./dist/env/browser.js",
+      "default": "./dist/env/node.js"
+    }
+  }
+}
+
+//// [/src/a.ts]
+import {} from "";
+
+//// [/src/env/browser.ts]
+export const isBrowser = true;
+
+//// [/src/env/node.ts]
+export const isBrowser = false;
+
+//// [/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] Search path: /
+Info seq  [hh:mm:ss:mss] For info: /tsconfig.json :: Config file name: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating configuration project /tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/tsconfig.json",
+        "reason": "Creating possible configured project for /tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] Config: /tsconfig.json : {
+ "rootNames": [
+  "/lib.d.ts",
+  "/lib.decorators.d.ts",
+  "/lib.decorators.legacy.d.ts",
+  "/src/a.ts",
+  "/src/env/browser.ts",
+  "/src/env/node.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/src",
+  "outDir": "/dist",
+  "configFilePath": "/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/env/browser.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/env/node.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/lib.d.ts Text-1 lib.d.ts-Text
+	/src/a.ts Text-1 "import {} from \"\";"
+	/src/env/browser.ts Text-1 "export const isBrowser = true;"
+	/src/env/node.ts Text-1 "export const isBrowser = false;"
+
+
+	lib.decorators.d.ts
+	  Library referenced via 'decorators' from file 'lib.d.ts'
+	  Matched by default include pattern '**/*'
+	lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	  Matched by default include pattern '**/*'
+	lib.d.ts
+	  Matched by default include pattern '**/*'
+	src/a.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+	src/env/browser.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+	src/env/node.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/tsconfig.json",
+        "configFile": "/tsconfig.json",
+        "diagnostics": []
+      }
+    }
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/lib.d.ts Text-1 lib.d.ts-Text
+	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+
+
+	lib.d.ts
+	  Default library for target 'es5'
+	lib.decorators.d.ts
+	  Library referenced via 'decorators' from file 'lib.d.ts'
+	lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+After Request
+watchedFiles::
+/lib.d.ts: *new*
+  {"pollingInterval":500}
+/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/package.json: *new*
+  {"pollingInterval":250}
+/src/a.ts: *new*
+  {"pollingInterval":500}
+/src/env/browser.ts: *new*
+  {"pollingInterval":500}
+/src/env/node.ts: *new*
+  {"pollingInterval":500}
+/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+: *new*
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/src/a.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/src/env/browser.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/src/env/node.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Search path: /src
+Info seq  [hh:mm:ss:mss] For info: /src/a.ts :: Config file name: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /tsconfig.json
+After Request
+watchedFiles::
+/lib.d.ts:
+  {"pollingInterval":500}
+/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/package.json:
+  {"pollingInterval":250}
+/src/env/browser.ts:
+  {"pollingInterval":500}
+/src/env/node.ts:
+  {"pollingInterval":500}
+/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/src/a.ts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+:
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/lib.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/src/a.ts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json *default*
+/src/env/browser.ts
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/src/env/node.ts
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts",
+        "line": 1,
+        "offset": 17
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#is-browser",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ]
+      }
+    }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap2.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap2.js
new file mode 100644
index 0000000000000..2393185c4d001
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap2.js
@@ -0,0 +1,404 @@
+currentDirectory:: / useCaseSensitiveFileNames: false
+Info seq  [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
+//// [/lib.d.ts]
+lib.d.ts-Text
+
+//// [/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/package.json]
+{
+  "type": "module",
+  "imports": {
+    "#internal/*": "./dist/internal/*"
+  }
+}
+
+//// [/src/a.ts]
+import {} from "";
+import {} from "#internal/";
+
+//// [/src/internal/foo.ts]
+export function something(name: string) {}
+
+//// [/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] Search path: /
+Info seq  [hh:mm:ss:mss] For info: /tsconfig.json :: Config file name: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating configuration project /tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/tsconfig.json",
+        "reason": "Creating possible configured project for /tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] Config: /tsconfig.json : {
+ "rootNames": [
+  "/lib.d.ts",
+  "/lib.decorators.d.ts",
+  "/lib.decorators.legacy.d.ts",
+  "/src/a.ts",
+  "/src/internal/foo.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/src",
+  "outDir": "/dist",
+  "configFilePath": "/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/internal/foo.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/lib.d.ts Text-1 lib.d.ts-Text
+	/src/a.ts Text-1 "import {} from \"\";\nimport {} from \"#internal/\";"
+	/src/internal/foo.ts Text-1 "export function something(name: string) {}"
+
+
+	lib.decorators.d.ts
+	  Library referenced via 'decorators' from file 'lib.d.ts'
+	  Matched by default include pattern '**/*'
+	lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	  Matched by default include pattern '**/*'
+	lib.d.ts
+	  Matched by default include pattern '**/*'
+	src/a.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+	src/internal/foo.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/tsconfig.json",
+        "configFile": "/tsconfig.json",
+        "diagnostics": []
+      }
+    }
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/lib.d.ts Text-1 lib.d.ts-Text
+	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+
+
+	lib.d.ts
+	  Default library for target 'es5'
+	lib.decorators.d.ts
+	  Library referenced via 'decorators' from file 'lib.d.ts'
+	lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+After Request
+watchedFiles::
+/lib.d.ts: *new*
+  {"pollingInterval":500}
+/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/package.json: *new*
+  {"pollingInterval":250}
+/src/a.ts: *new*
+  {"pollingInterval":500}
+/src/internal/foo.ts: *new*
+  {"pollingInterval":500}
+/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+: *new*
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/src/a.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/src/internal/foo.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Search path: /src
+Info seq  [hh:mm:ss:mss] For info: /src/a.ts :: Config file name: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /tsconfig.json
+After Request
+watchedFiles::
+/lib.d.ts:
+  {"pollingInterval":500}
+/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/package.json:
+  {"pollingInterval":250}
+/src/internal/foo.ts:
+  {"pollingInterval":500}
+/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/src/a.ts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+:
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/lib.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/src/a.ts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json *default*
+/src/internal/foo.ts
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts",
+        "line": 1,
+        "offset": 17
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#internal",
+            "kind": "directory",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 4,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 4,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 5,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts",
+        "line": 2,
+        "offset": 27
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 5,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "foo.js",
+            "kind": "script",
+            "kindModifiers": ".js",
+            "sortText": "11"
+          }
+        ]
+      }
+    }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
new file mode 100644
index 0000000000000..714d7ae2e846f
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
@@ -0,0 +1,404 @@
+currentDirectory:: / useCaseSensitiveFileNames: false
+Info seq  [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
+//// [/lib.d.ts]
+lib.d.ts-Text
+
+//// [/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/package.json]
+{
+  "type": "module",
+  "imports": {
+    "#internal/": "./dist/internal/"
+  }
+}
+
+//// [/src/a.ts]
+import {} from "";
+import {} from "#internal/";
+
+//// [/src/internal/foo.ts]
+export function something(name: string) {}
+
+//// [/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] Search path: /
+Info seq  [hh:mm:ss:mss] For info: /tsconfig.json :: Config file name: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating configuration project /tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/tsconfig.json",
+        "reason": "Creating possible configured project for /tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] Config: /tsconfig.json : {
+ "rootNames": [
+  "/lib.d.ts",
+  "/lib.decorators.d.ts",
+  "/lib.decorators.legacy.d.ts",
+  "/src/a.ts",
+  "/src/internal/foo.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/src",
+  "outDir": "/dist",
+  "configFilePath": "/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/internal/foo.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/lib.d.ts Text-1 lib.d.ts-Text
+	/src/a.ts Text-1 "import {} from \"\";\nimport {} from \"#internal/\";"
+	/src/internal/foo.ts Text-1 "export function something(name: string) {}"
+
+
+	lib.decorators.d.ts
+	  Library referenced via 'decorators' from file 'lib.d.ts'
+	  Matched by default include pattern '**/*'
+	lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	  Matched by default include pattern '**/*'
+	lib.d.ts
+	  Matched by default include pattern '**/*'
+	src/a.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+	src/internal/foo.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/tsconfig.json",
+        "configFile": "/tsconfig.json",
+        "diagnostics": []
+      }
+    }
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/lib.d.ts Text-1 lib.d.ts-Text
+	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+
+
+	lib.d.ts
+	  Default library for target 'es5'
+	lib.decorators.d.ts
+	  Library referenced via 'decorators' from file 'lib.d.ts'
+	lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+After Request
+watchedFiles::
+/lib.d.ts: *new*
+  {"pollingInterval":500}
+/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/package.json: *new*
+  {"pollingInterval":250}
+/src/a.ts: *new*
+  {"pollingInterval":500}
+/src/internal/foo.ts: *new*
+  {"pollingInterval":500}
+/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+: *new*
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/src/a.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/src/internal/foo.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Search path: /src
+Info seq  [hh:mm:ss:mss] For info: /src/a.ts :: Config file name: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /tsconfig.json
+After Request
+watchedFiles::
+/lib.d.ts:
+  {"pollingInterval":500}
+/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/package.json:
+  {"pollingInterval":250}
+/src/internal/foo.ts:
+  {"pollingInterval":500}
+/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/src/a.ts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+:
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/lib.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/src/a.ts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json *default*
+/src/internal/foo.ts
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts",
+        "line": 1,
+        "offset": 17
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#internal",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 4,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 4,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 5,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts",
+        "line": 2,
+        "offset": 27
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 5,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#internal",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ]
+      }
+    }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap4.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap4.js
new file mode 100644
index 0000000000000..8abf584d37047
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap4.js
@@ -0,0 +1,357 @@
+currentDirectory:: / useCaseSensitiveFileNames: false
+Info seq  [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
+//// [/lib.d.ts]
+lib.d.ts-Text
+
+//// [/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/package.json]
+{
+  "type": "module",
+  "imports": {
+    "#is-browser": {
+      "types": "./dist/env/browser.d.ts",
+      "default": "./dist/env/browser.js"
+    }
+  }
+}
+
+//// [/src/a.ts]
+import {} from "";
+
+//// [/src/env/browser.ts]
+export const isBrowser = true;
+
+//// [/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] Search path: /
+Info seq  [hh:mm:ss:mss] For info: /tsconfig.json :: Config file name: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating configuration project /tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/tsconfig.json",
+        "reason": "Creating possible configured project for /tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] Config: /tsconfig.json : {
+ "rootNames": [
+  "/lib.d.ts",
+  "/lib.decorators.d.ts",
+  "/lib.decorators.legacy.d.ts",
+  "/src/a.ts",
+  "/src/env/browser.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/src",
+  "outDir": "/dist",
+  "configFilePath": "/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/env/browser.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/lib.d.ts Text-1 lib.d.ts-Text
+	/src/a.ts Text-1 "import {} from \"\";"
+	/src/env/browser.ts Text-1 "export const isBrowser = true;"
+
+
+	lib.decorators.d.ts
+	  Library referenced via 'decorators' from file 'lib.d.ts'
+	  Matched by default include pattern '**/*'
+	lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	  Matched by default include pattern '**/*'
+	lib.d.ts
+	  Matched by default include pattern '**/*'
+	src/a.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+	src/env/browser.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/tsconfig.json",
+        "configFile": "/tsconfig.json",
+        "diagnostics": []
+      }
+    }
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/lib.d.ts Text-1 lib.d.ts-Text
+	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+
+
+	lib.d.ts
+	  Default library for target 'es5'
+	lib.decorators.d.ts
+	  Library referenced via 'decorators' from file 'lib.d.ts'
+	lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+After Request
+watchedFiles::
+/lib.d.ts: *new*
+  {"pollingInterval":500}
+/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/package.json: *new*
+  {"pollingInterval":250}
+/src/a.ts: *new*
+  {"pollingInterval":500}
+/src/env/browser.ts: *new*
+  {"pollingInterval":500}
+/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+: *new*
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/src/a.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/src/env/browser.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Search path: /src
+Info seq  [hh:mm:ss:mss] For info: /src/a.ts :: Config file name: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /tsconfig.json
+After Request
+watchedFiles::
+/lib.d.ts:
+  {"pollingInterval":500}
+/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/package.json:
+  {"pollingInterval":250}
+/src/env/browser.ts:
+  {"pollingInterval":500}
+/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/src/a.ts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+:
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/lib.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/src/a.ts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json *default*
+/src/env/browser.ts
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts",
+        "line": 1,
+        "offset": 17
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#is-browser",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ]
+      }
+    }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap5.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap5.js
new file mode 100644
index 0000000000000..b326df6504397
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap5.js
@@ -0,0 +1,374 @@
+currentDirectory:: / useCaseSensitiveFileNames: false
+Info seq  [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
+//// [/lib.d.ts]
+lib.d.ts-Text
+
+//// [/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/package.json]
+{
+  "type": "module",
+  "imports": {
+    "#is-browser": {
+      "types": "./types/env/browser.d.ts",
+      "default": "./not-dist-on-purpose/env/browser.js"
+    }
+  }
+}
+
+//// [/src/a.ts]
+import {} from "";
+
+//// [/src/env/browser.ts]
+export const isBrowser = true;
+
+//// [/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist",
+    "declarationDir": "types",
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] Search path: /
+Info seq  [hh:mm:ss:mss] For info: /tsconfig.json :: Config file name: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating configuration project /tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/tsconfig.json",
+        "reason": "Creating possible configured project for /tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] Config: /tsconfig.json : {
+ "rootNames": [
+  "/lib.d.ts",
+  "/lib.decorators.d.ts",
+  "/lib.decorators.legacy.d.ts",
+  "/src/a.ts",
+  "/src/env/browser.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/src",
+  "outDir": "/dist",
+  "declarationDir": "/types",
+  "configFilePath": "/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/env/browser.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/lib.d.ts Text-1 lib.d.ts-Text
+	/src/a.ts Text-1 "import {} from \"\";"
+	/src/env/browser.ts Text-1 "export const isBrowser = true;"
+
+
+	lib.decorators.d.ts
+	  Library referenced via 'decorators' from file 'lib.d.ts'
+	  Matched by default include pattern '**/*'
+	lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	  Matched by default include pattern '**/*'
+	lib.d.ts
+	  Matched by default include pattern '**/*'
+	src/a.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+	src/env/browser.ts
+	  Matched by default include pattern '**/*'
+	  File is ECMAScript module because 'package.json' has field "type" with value "module"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/tsconfig.json",
+        "configFile": "/tsconfig.json",
+        "diagnostics": [
+          {
+            "start": {
+              "line": 6,
+              "offset": 5
+            },
+            "end": {
+              "line": 6,
+              "offset": 21
+            },
+            "text": "Option 'declarationDir' cannot be specified without specifying option 'declaration' or option 'composite'.",
+            "code": 5069,
+            "category": "error",
+            "fileName": "/tsconfig.json"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/lib.d.ts Text-1 lib.d.ts-Text
+	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\",\n    \"declarationDir\": \"types\",\n  }\n}"
+
+
+	lib.d.ts
+	  Default library for target 'es5'
+	lib.decorators.d.ts
+	  Library referenced via 'decorators' from file 'lib.d.ts'
+	lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+After Request
+watchedFiles::
+/lib.d.ts: *new*
+  {"pollingInterval":500}
+/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/package.json: *new*
+  {"pollingInterval":250}
+/src/a.ts: *new*
+  {"pollingInterval":500}
+/src/env/browser.ts: *new*
+  {"pollingInterval":500}
+/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+: *new*
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/src/a.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/src/env/browser.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Search path: /src
+Info seq  [hh:mm:ss:mss] For info: /src/a.ts :: Config file name: /tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /tsconfig.json
+After Request
+watchedFiles::
+/lib.d.ts:
+  {"pollingInterval":500}
+/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/package.json:
+  {"pollingInterval":250}
+/src/env/browser.ts:
+  {"pollingInterval":500}
+/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/src/a.ts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+:
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/lib.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 2
+        /tsconfig.json
+        /dev/null/inferredProject1*
+/src/a.ts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json *default*
+/src/env/browser.ts
+    version: Text-1
+    containingProjects: 1
+        /tsconfig.json
+/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/src/a.ts",
+        "line": 1,
+        "offset": 17
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#is-browser",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ]
+      }
+    }
\ No newline at end of file
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonExportsSpecifierEndsInTs.ts b/tests/cases/fourslash/importCompletionsPackageJsonExportsSpecifierEndsInTs.ts
new file mode 100644
index 0000000000000..0549081b7ddeb
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonExportsSpecifierEndsInTs.ts
@@ -0,0 +1,31 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /node_modules/pkg/package.json
+//// {
+////     "name": "pkg",
+////     "version": "1.0.0",
+////     "exports": {
+////       "./something.ts": "./a.js"
+////     }
+////  }
+
+// @Filename: /node_modules/pkg/a.d.ts
+//// export function foo(): void;
+
+// @Filename: /package.json
+//// {
+////     "dependencies": {
+////        "pkg": "*"
+////     }
+////  }
+
+// @Filename: /index.ts
+//// import {} from "pkg//*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["something.ts"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsConditions1.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsConditions1.ts
new file mode 100644
index 0000000000000..9bac2d834dd42
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsConditions1.ts
@@ -0,0 +1,25 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#thing": {
+////         "types": { "import": "./types-esm/thing.d.mts", "require": "./types/thing.d.ts" },
+////         "default": { "import": "./esm/thing.mjs", "require": "./dist/thing.js" }
+////      }
+////   }
+//// }
+
+// @Filename: /types/thing.d.ts
+//// export function something(name: string): any;
+
+// @Filename: /src/foo.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#thing"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsLength1.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsLength1.ts
new file mode 100644
index 0000000000000..36380677a29de
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsLength1.ts
@@ -0,0 +1,46 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#*": "./src/*.ts"
+////   }
+//// }
+
+// @Filename: /src/a/b/c/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /src/a/b/c/d.ts
+//// import {} from "/*1*/";
+//// import {} from "#a//*2*/";
+//// import {} from "#a/b//*3*/";
+//// import {} from "#a/b/c//*4*/";
+//// import {} from "#a/b/c/something//*5*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#a"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["2"],
+    exact: ["b"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["3"],
+    exact: ["c"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["4"],
+    exact: ["d", "something"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["5"],
+    exact: [],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsLength2.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsLength2.ts
new file mode 100644
index 0000000000000..8dd812c00ef2c
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsLength2.ts
@@ -0,0 +1,47 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#*": "./src/*.ts"
+////   }
+//// }
+
+// @Filename: /src/a/b/c/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /a.ts
+//// import {} from "/*1*/";
+//// import {} from "#a//*2*/";
+//// import {} from "#a/b//*3*/";
+//// import {} from "#a/b/c//*4*/";
+//// import {} from "#a/b/c/something//*5*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#a"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["2"],
+    exact: ["b"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["3"],
+    exact: ["c"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["4"],
+    exact: ["something"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["5"],
+    exact: [],
+    isNewIdentifierLocation: true,
+});
+
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern.ts
new file mode 100644
index 0000000000000..89b84c7b5bf47
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern.ts
@@ -0,0 +1,22 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#*": "./src/*"
+////   }
+//// }
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#something.js"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_capsInPath1.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_capsInPath1.ts
new file mode 100644
index 0000000000000..f75079c117361
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_capsInPath1.ts
@@ -0,0 +1,22 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /Dev/package.json
+//// {
+////   "imports": {
+////     "#thing": "./src/something.js"
+////   }
+//// }
+
+// @Filename: /Dev/src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /Dev/a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#thing"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_capsInPath2.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_capsInPath2.ts
new file mode 100644
index 0000000000000..fcb66e518d0f4
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_capsInPath2.ts
@@ -0,0 +1,27 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /Dev/package.json
+//// {
+////   "imports": {
+////     "#thing/*": "./src/*.js"
+////   }
+//// }
+
+// @Filename: /Dev/src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /Dev/a.ts
+//// import {} from "#thing//*2*/";
+
+// verify.completions({
+//     marker: ["1"],
+//     exact: ["#thing"],
+//     isNewIdentifierLocation: true,
+// });
+verify.completions({
+    marker: ["2"],
+    exact: ["something"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_js.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_js.ts
new file mode 100644
index 0000000000000..62c47e19cfb12
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_js.ts
@@ -0,0 +1,22 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#*": "./src/*.js"
+////   }
+//// }
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#something"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_js_ts.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_js_ts.ts
new file mode 100644
index 0000000000000..0b79cad7fbc52
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_js_ts.ts
@@ -0,0 +1,22 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#*.js": "./src/*.ts"
+////   }
+//// }
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#something.js"],
+    isNewIdentifierLocation: true,
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts.ts
new file mode 100644
index 0000000000000..ef3ef47db4367
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts.ts
@@ -0,0 +1,22 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#*": "./src/*.ts"
+////   }
+//// }
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#something"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts_js.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts_js.ts
new file mode 100644
index 0000000000000..595d3b0a7194d
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts_js.ts
@@ -0,0 +1,22 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#*.ts": "./src/*.js"
+////   }
+//// }
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#something.ts"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts_ts.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts_ts.ts
new file mode 100644
index 0000000000000..e6dafdb1a3dc7
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern_ts_ts.ts
@@ -0,0 +1,22 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#*.ts": "./src/*.ts"
+////   }
+//// }
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#something.ts"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImports_js.ts b/tests/cases/fourslash/importCompletionsPackageJsonImports_js.ts
new file mode 100644
index 0000000000000..b650f213eaa89
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImports_js.ts
@@ -0,0 +1,22 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#thing": "./src/something.js"
+////   }
+//// }
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#thing"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImports_ts.ts b/tests/cases/fourslash/importCompletionsPackageJsonImports_ts.ts
new file mode 100644
index 0000000000000..0c8563e8665b3
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImports_ts.ts
@@ -0,0 +1,22 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#thing": "./src/something.ts"
+////   }
+//// }
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#thing"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap1.ts b/tests/cases/fourslash/server/importCompletions_importsMap1.ts
new file mode 100644
index 0000000000000..d21821e087cfd
--- /dev/null
+++ b/tests/cases/fourslash/server/importCompletions_importsMap1.ts
@@ -0,0 +1,36 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist"
+////   }
+//// }
+
+// @Filename: /package.json
+//// {
+////   "type": "module",
+////   "imports": {
+////     "#is-browser": {
+////       "browser": "./dist/env/browser.js",
+////       "default": "./dist/env/node.js"
+////     }
+////   }
+//// }
+
+// @Filename: /src/env/browser.ts
+//// export const isBrowser = true;
+
+// @Filename: /src/env/node.ts
+//// export const isBrowser = false;
+
+// @Filename: /src/a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#is-browser"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap2.ts b/tests/cases/fourslash/server/importCompletions_importsMap2.ts
new file mode 100644
index 0000000000000..b83d83052b826
--- /dev/null
+++ b/tests/cases/fourslash/server/importCompletions_importsMap2.ts
@@ -0,0 +1,36 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist"
+////   }
+//// }
+
+// @Filename: /package.json
+//// {
+////   "type": "module",
+////   "imports": {
+////     "#internal/*": "./dist/internal/*"
+////   }
+//// }
+
+// @Filename: /src/internal/foo.ts
+//// export function something(name: string) {}
+
+// @Filename: /src/a.ts
+//// import {} from "/*1*/";
+//// import {} from "#internal//*2*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#internal"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["2"],
+    exact: ["foo.js"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap3.ts b/tests/cases/fourslash/server/importCompletions_importsMap3.ts
new file mode 100644
index 0000000000000..02691c7700c76
--- /dev/null
+++ b/tests/cases/fourslash/server/importCompletions_importsMap3.ts
@@ -0,0 +1,36 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist"
+////   }
+//// }
+
+// @Filename: /package.json
+//// {
+////   "type": "module",
+////   "imports": {
+////     "#internal/": "./dist/internal/"
+////   }
+//// }
+
+// @Filename: /src/internal/foo.ts
+//// export function something(name: string) {}
+
+// @Filename: /src/a.ts
+//// import {} from "/*1*/";
+//// import {} from "#internal//*2*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#internal"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["2"],
+    exact: ["foo.js"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap4.ts b/tests/cases/fourslash/server/importCompletions_importsMap4.ts
new file mode 100644
index 0000000000000..c770776e81d70
--- /dev/null
+++ b/tests/cases/fourslash/server/importCompletions_importsMap4.ts
@@ -0,0 +1,33 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist"
+////   }
+//// }
+
+// @Filename: /package.json
+//// {
+////   "type": "module",
+////   "imports": {
+////     "#is-browser": {
+////       "types": "./dist/env/browser.d.ts",
+////       "default": "./dist/env/browser.js"
+////     }
+////   }
+//// }
+
+// @Filename: /src/env/browser.ts
+//// export const isBrowser = true;
+
+// @Filename: /src/a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#is-browser"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap5.ts b/tests/cases/fourslash/server/importCompletions_importsMap5.ts
new file mode 100644
index 0000000000000..dc188357917d3
--- /dev/null
+++ b/tests/cases/fourslash/server/importCompletions_importsMap5.ts
@@ -0,0 +1,34 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist",
+////     "declarationDir": "types",
+////   }
+//// }
+
+// @Filename: /package.json
+//// {
+////   "type": "module",
+////   "imports": {
+////     "#is-browser": {
+////       "types": "./types/env/browser.d.ts",
+////       "default": "./not-dist-on-purpose/env/browser.js"
+////     }
+////   }
+//// }
+
+// @Filename: /src/env/browser.ts
+//// export const isBrowser = true;
+
+// @Filename: /src/a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#is-browser"],
+    isNewIdentifierLocation: true,
+});

From 2adb14c118180a1e6930bacd9c7bd6839f7a01c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Mon, 11 Mar 2024 11:52:23 +0100
Subject: [PATCH 02/26] format

---
 src/services/stringCompletions.ts | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 03320135c7dfb..b932f6a522372 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -887,7 +887,7 @@ function addCompletionEntriesFromPathsOrExports(
             if (typeof pathPattern === "string" || matchedPath === undefined || comparePaths(key, matchedPath) !== Comparison.GreaterThan) {
                 pathResults.push({
                     matchedPattern: isMatch,
-                    results: getCompletionsForPathMapping(keyWithoutLeadingDotSlash, patterns, fragment, baseDirectory, extensionOptions, (isExports || isImports) && endsWith(keyWithoutLeadingDotSlash, '*'), isImports, compilerOptions, host, moduleSpecifierResolutionHost)
+                    results: getCompletionsForPathMapping(keyWithoutLeadingDotSlash, patterns, fragment, baseDirectory, extensionOptions, (isExports || isImports) && endsWith(keyWithoutLeadingDotSlash, "*"), isImports, compilerOptions, host, moduleSpecifierResolutionHost)
                         .map(({ name, kind, extension }) => nameAndKind(name, kind, extension)),
                 });
             }
@@ -1096,9 +1096,9 @@ function getCompletionsForPathMapping(
     isImports: boolean,
     compilerOptions: CompilerOptions,
     host: LanguageServiceHost,
-    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined,
 ): readonly NameAndKind[] {
-    const parsedPath = tryParsePattern(path)
+    const parsedPath = tryParsePattern(path);
     if (!parsedPath) {
         return emptyArray;
     }
@@ -1109,7 +1109,7 @@ function getCompletionsForPathMapping(
     }
     const remainingFragment = tryRemovePrefix(fragment, parsedPath.prefix);
     if (remainingFragment === undefined) {
-        const starIsFullPathComponent = endsWith(path, '/*');
+        const starIsFullPathComponent = endsWith(path, "/*");
         return starIsFullPathComponent ? justPathMappingName(parsedPath.prefix, ScriptElementKind.directory) : flatMap(patterns, pattern => getModulesForPathsPattern("", packageDirectory, pattern, extensionOptions, isExportsWildcard, isImports, compilerOptions, host, moduleSpecifierResolutionHost)?.map(({ name, ...rest }) => ({ name: parsedPath.prefix + name + parsedPath.suffix, ...rest })));
     }
     return flatMap(patterns, pattern => getModulesForPathsPattern(remainingFragment, packageDirectory, pattern, extensionOptions, isExportsWildcard, isImports, compilerOptions, host, moduleSpecifierResolutionHost));
@@ -1128,7 +1128,7 @@ function getModulesForPathsPattern(
     isImports: boolean,
     compilerOptions: CompilerOptions,
     host: LanguageServiceHost,
-    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined,
 ): readonly NameAndKind[] | undefined {
     if (!host.readDirectory) {
         return undefined;
@@ -1157,7 +1157,7 @@ function getModulesForPathsPattern(
     const matchingSuffixes = [...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []), declarationExtension && changeExtension(normalizedSuffix, declarationExtension), normalizedSuffix].filter(isString);
     // Need to normalize after combining: If we combinePaths("a", "../b"), we want "b" and not "a/../b".
     const baseDirectory = normalizePath(combinePaths(packageDirectory, expandedPrefixDirectory));
-    const inputBaseDirectory = isImports && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, !hostUsesCaseSensitiveFileNames(moduleSpecifierResolutionHost!), compilerOptions.outDir,  () => moduleSpecifierResolutionHost!.getCommonSourceDirectory());
+    const inputBaseDirectory = isImports && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, !hostUsesCaseSensitiveFileNames(moduleSpecifierResolutionHost!), compilerOptions.outDir, () => moduleSpecifierResolutionHost!.getCommonSourceDirectory());
     const completePrefix = fragmentHasPath ? baseDirectory : ensureTrailingDirectorySeparator(baseDirectory) + normalizedPrefixBase;
 
     // If we have a suffix, then we read the directory all the way down to avoid returning completions for

From 08eaa1640cb7731fd0f808131dec092f24a03ced Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Sat, 28 Sep 2024 23:47:10 +0200
Subject: [PATCH 03/26] fixed server fixtures

---
 .../importCompletions_importsMap1.js          | 383 +++++++++++-------
 .../importCompletions_importsMap2.js          | 382 +++++++++++------
 .../importCompletions_importsMap3.js          | 382 +++++++++++------
 .../importCompletions_importsMap4.js          | 363 +++++++++++------
 .../importCompletions_importsMap5.js          | 364 +++++++++++------
 .../server/importCompletions_importsMap1.ts   |  10 +-
 .../server/importCompletions_importsMap2.ts   |   8 +-
 .../server/importCompletions_importsMap3.ts   |   8 +-
 .../server/importCompletions_importsMap4.ts   |   8 +-
 .../server/importCompletions_importsMap5.ts   |   8 +-
 10 files changed, 1235 insertions(+), 681 deletions(-)

diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap1.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap1.js
index cb6d6d9792752..20790f3d8c3cf 100644
--- a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap1.js
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap1.js
@@ -1,15 +1,17 @@
-currentDirectory:: / useCaseSensitiveFileNames: false
-Info seq  [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
-//// [/lib.d.ts]
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
 lib.d.ts-Text
 
-//// [/lib.decorators.d.ts]
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
 lib.decorators.d.ts-Text
 
-//// [/lib.decorators.legacy.d.ts]
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
 lib.decorators.legacy.d.ts-Text
 
-//// [/package.json]
+//// [/home/src/workspaces/project/package.json]
 {
   "type": "module",
   "imports": {
@@ -20,16 +22,16 @@ lib.decorators.legacy.d.ts-Text
   }
 }
 
-//// [/src/a.ts]
+//// [/home/src/workspaces/project/src/a.ts]
 import {} from "";
 
-//// [/src/env/browser.ts]
+//// [/home/src/workspaces/project/src/env/browser.ts]
 export const isBrowser = true;
 
-//// [/src/env/node.ts]
+//// [/home/src/workspaces/project/src/env/node.ts]
 export const isBrowser = false;
 
-//// [/tsconfig.json]
+//// [/home/src/workspaces/project/tsconfig.json]
 {
   "compilerOptions": {
     "module": "nodenext",
@@ -44,68 +46,58 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 0,
       "type": "request",
       "arguments": {
-        "file": "/tsconfig.json"
+        "file": "/home/src/workspaces/project/tsconfig.json"
       },
       "command": "open"
     }
-Info seq  [hh:mm:ss:mss] Search path: /
-Info seq  [hh:mm:ss:mss] For info: /tsconfig.json :: Config file name: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Creating configuration project /tsconfig.json
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/a.ts",
+  "/home/src/workspaces/project/src/env/browser.ts",
+  "/home/src/workspaces/project/src/env/node.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
 Info seq  [hh:mm:ss:mss] event:
     {
       "seq": 0,
       "type": "event",
       "event": "projectLoadingStart",
       "body": {
-        "projectName": "/tsconfig.json",
-        "reason": "Creating possible configured project for /tsconfig.json to open"
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
       }
     }
-Info seq  [hh:mm:ss:mss] Config: /tsconfig.json : {
- "rootNames": [
-  "/lib.d.ts",
-  "/lib.decorators.d.ts",
-  "/lib.decorators.legacy.d.ts",
-  "/src/a.ts",
-  "/src/env/browser.ts",
-  "/src/env/node.ts"
- ],
- "options": {
-  "module": 199,
-  "rootDir": "/src",
-  "outDir": "/dist",
-  "configFilePath": "/tsconfig.json"
- }
-}
-Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
-Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/env/browser.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/env/node.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (6)
-	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
-	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/lib.d.ts Text-1 lib.d.ts-Text
-	/src/a.ts Text-1 "import {} from \"\";"
-	/src/env/browser.ts Text-1 "export const isBrowser = true;"
-	/src/env/node.ts Text-1 "export const isBrowser = false;"
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/env/browser.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/env/node.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/env/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (3)
+	/home/src/workspaces/project/src/a.ts Text-1 "import {} from \"\";"
+	/home/src/workspaces/project/src/env/browser.ts Text-1 "export const isBrowser = true;"
+	/home/src/workspaces/project/src/env/node.ts Text-1 "export const isBrowser = false;"
 
 
-	lib.decorators.d.ts
-	  Library referenced via 'decorators' from file 'lib.d.ts'
-	  Matched by default include pattern '**/*'
-	lib.decorators.legacy.d.ts
-	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
-	  Matched by default include pattern '**/*'
-	lib.d.ts
-	  Matched by default include pattern '**/*'
 	src/a.ts
 	  Matched by default include pattern '**/*'
 	  File is ECMAScript module because 'package.json' has field "type" with value "module"
@@ -123,7 +115,7 @@ Info seq  [hh:mm:ss:mss] event:
       "type": "event",
       "event": "projectLoadingFinish",
       "body": {
-        "projectName": "/tsconfig.json"
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
       }
     }
 Info seq  [hh:mm:ss:mss] event:
@@ -132,34 +124,94 @@ Info seq  [hh:mm:ss:mss] event:
       "type": "event",
       "event": "configFileDiag",
       "body": {
-        "triggerFile": "/tsconfig.json",
-        "configFile": "/tsconfig.json",
-        "diagnostics": []
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
       }
     }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
 Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
 Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
 Info seq  [hh:mm:ss:mss] 	Files (4)
-	/lib.d.ts Text-1 lib.d.ts-Text
-	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
-	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
 
 
-	lib.d.ts
+	../../tslibs/TS/Lib/lib.d.ts
 	  Default library for target 'es5'
-	lib.decorators.d.ts
-	  Library referenced via 'decorators' from file 'lib.d.ts'
-	lib.decorators.legacy.d.ts
-	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
 	tsconfig.json
 	  Root file specified for compilation
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /package.json 250 undefined WatchType: package.json file
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (6)
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (3)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -167,69 +219,97 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Open files: 
-Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
 Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
 After Request
 watchedFiles::
-/lib.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
   {"pollingInterval":500}
-/lib.decorators.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
   {"pollingInterval":500}
-/lib.decorators.legacy.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
   {"pollingInterval":500}
-/package.json: *new*
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
   {"pollingInterval":250}
-/src/a.ts: *new*
+/home/src/workspaces/project/src/a.ts: *new*
   {"pollingInterval":500}
-/src/env/browser.ts: *new*
+/home/src/workspaces/project/src/env/browser.ts: *new*
   {"pollingInterval":500}
-/src/env/node.ts: *new*
+/home/src/workspaces/project/src/env/node.ts: *new*
   {"pollingInterval":500}
-/tsconfig.json: *new*
+/home/src/workspaces/project/src/env/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
   {"pollingInterval":2000}
 
 watchedDirectoriesRecursive::
-: *new*
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
   {}
 
 Projects::
 /dev/null/inferredProject1* (Inferred) *new*
     projectStateVersion: 1
     projectProgramVersion: 1
-/tsconfig.json (Configured) *new*
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
     projectStateVersion: 1
     projectProgramVersion: 1
     noOpenRef: true
 
 ScriptInfos::
-/lib.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.legacy.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/src/a.ts *new*
+/home/src/workspaces/project/src/a.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/src/env/browser.ts *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/env/browser.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/src/env/node.ts *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/env/node.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/tsconfig.json (Open) *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
     version: SVC-1-0
     containingProjects: 1
         /dev/null/inferredProject1* *default*
@@ -239,15 +319,14 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 1,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts"
+        "file": "/home/src/workspaces/project/src/a.ts"
       },
       "command": "open"
     }
-Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] Search path: /src
-Info seq  [hh:mm:ss:mss] For info: /src/a.ts :: Config file name: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (6)
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (3)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -255,74 +334,99 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Open files: 
-Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
 Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
-Info seq  [hh:mm:ss:mss] 	FileName: /src/a.ts ProjectRootPath: undefined
-Info seq  [hh:mm:ss:mss] 		Projects: /tsconfig.json
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
 After Request
 watchedFiles::
-/lib.d.ts:
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
   {"pollingInterval":500}
-/lib.decorators.d.ts:
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
   {"pollingInterval":500}
-/lib.decorators.legacy.d.ts:
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
   {"pollingInterval":500}
-/package.json:
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
   {"pollingInterval":250}
-/src/env/browser.ts:
+/home/src/workspaces/project/src/env/browser.ts:
   {"pollingInterval":500}
-/src/env/node.ts:
+/home/src/workspaces/project/src/env/node.ts:
   {"pollingInterval":500}
-/tsconfig.json:
+/home/src/workspaces/project/src/env/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
   {"pollingInterval":2000}
 
 watchedFiles *deleted*::
-/src/a.ts:
+/home/src/workspaces/project/src/a.ts:
   {"pollingInterval":500}
 
 watchedDirectoriesRecursive::
-:
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
   {}
 
 Projects::
 /dev/null/inferredProject1* (Inferred)
     projectStateVersion: 1
     projectProgramVersion: 1
-/tsconfig.json (Configured) *changed*
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
     projectStateVersion: 1
     projectProgramVersion: 1
     noOpenRef: false *changed*
 
 ScriptInfos::
-/lib.d.ts
+/home/src/tslibs/TS/Lib/lib.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.d.ts
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.legacy.d.ts
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/src/a.ts (Open) *changed*
+/home/src/workspaces/project/src/a.ts (Open) *changed*
     open: true *changed*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json *default*
-/src/env/browser.ts
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/env/browser.ts
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/src/env/node.ts
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/env/node.ts
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/tsconfig.json (Open)
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
     version: SVC-1-0
     containingProjects: 1
         /dev/null/inferredProject1* *default*
@@ -349,7 +453,7 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 3,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts",
+        "file": "/home/src/workspaces/project/src/a.ts",
         "line": 1,
         "offset": 17
       },
@@ -373,6 +477,7 @@ Info seq  [hh:mm:ss:mss] response:
             "kindModifiers": "",
             "sortText": "11"
           }
-        ]
+        ],
+        "defaultCommitCharacters": []
       }
     }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap2.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap2.js
index 2393185c4d001..46de407066c78 100644
--- a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap2.js
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap2.js
@@ -1,15 +1,17 @@
-currentDirectory:: / useCaseSensitiveFileNames: false
-Info seq  [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
-//// [/lib.d.ts]
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
 lib.d.ts-Text
 
-//// [/lib.decorators.d.ts]
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
 lib.decorators.d.ts-Text
 
-//// [/lib.decorators.legacy.d.ts]
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
 lib.decorators.legacy.d.ts-Text
 
-//// [/package.json]
+//// [/home/src/workspaces/project/package.json]
 {
   "type": "module",
   "imports": {
@@ -17,14 +19,14 @@ lib.decorators.legacy.d.ts-Text
   }
 }
 
-//// [/src/a.ts]
+//// [/home/src/workspaces/project/src/a.ts]
 import {} from "";
 import {} from "#internal/";
 
-//// [/src/internal/foo.ts]
+//// [/home/src/workspaces/project/src/internal/foo.ts]
 export function something(name: string) {}
 
-//// [/tsconfig.json]
+//// [/home/src/workspaces/project/tsconfig.json]
 {
   "compilerOptions": {
     "module": "nodenext",
@@ -39,65 +41,61 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 0,
       "type": "request",
       "arguments": {
-        "file": "/tsconfig.json"
+        "file": "/home/src/workspaces/project/tsconfig.json"
       },
       "command": "open"
     }
-Info seq  [hh:mm:ss:mss] Search path: /
-Info seq  [hh:mm:ss:mss] For info: /tsconfig.json :: Config file name: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Creating configuration project /tsconfig.json
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/a.ts",
+  "/home/src/workspaces/project/src/internal/foo.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
 Info seq  [hh:mm:ss:mss] event:
     {
       "seq": 0,
       "type": "event",
       "event": "projectLoadingStart",
       "body": {
-        "projectName": "/tsconfig.json",
-        "reason": "Creating possible configured project for /tsconfig.json to open"
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
       }
     }
-Info seq  [hh:mm:ss:mss] Config: /tsconfig.json : {
- "rootNames": [
-  "/lib.d.ts",
-  "/lib.decorators.d.ts",
-  "/lib.decorators.legacy.d.ts",
-  "/src/a.ts",
-  "/src/internal/foo.ts"
- ],
- "options": {
-  "module": 199,
-  "rootDir": "/src",
-  "outDir": "/dist",
-  "configFilePath": "/tsconfig.json"
- }
-}
-Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
-Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/internal/foo.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
-	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
-	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/lib.d.ts Text-1 lib.d.ts-Text
-	/src/a.ts Text-1 "import {} from \"\";\nimport {} from \"#internal/\";"
-	/src/internal/foo.ts Text-1 "export function something(name: string) {}"
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/internal/foo.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/internal/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+	/home/src/workspaces/project/src/a.ts Text-1 "import {} from \"\";\nimport {} from \"#internal/\";"
+	/home/src/workspaces/project/src/internal/foo.ts Text-1 "export function something(name: string) {}"
 
 
-	lib.decorators.d.ts
-	  Library referenced via 'decorators' from file 'lib.d.ts'
-	  Matched by default include pattern '**/*'
-	lib.decorators.legacy.d.ts
-	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
-	  Matched by default include pattern '**/*'
-	lib.d.ts
-	  Matched by default include pattern '**/*'
 	src/a.ts
 	  Matched by default include pattern '**/*'
 	  File is ECMAScript module because 'package.json' has field "type" with value "module"
@@ -112,7 +110,7 @@ Info seq  [hh:mm:ss:mss] event:
       "type": "event",
       "event": "projectLoadingFinish",
       "body": {
-        "projectName": "/tsconfig.json"
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
       }
     }
 Info seq  [hh:mm:ss:mss] event:
@@ -121,34 +119,94 @@ Info seq  [hh:mm:ss:mss] event:
       "type": "event",
       "event": "configFileDiag",
       "body": {
-        "triggerFile": "/tsconfig.json",
-        "configFile": "/tsconfig.json",
-        "diagnostics": []
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
       }
     }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
 Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
 Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
 Info seq  [hh:mm:ss:mss] 	Files (4)
-	/lib.d.ts Text-1 lib.d.ts-Text
-	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
-	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
 
 
-	lib.d.ts
+	../../tslibs/TS/Lib/lib.d.ts
 	  Default library for target 'es5'
-	lib.decorators.d.ts
-	  Library referenced via 'decorators' from file 'lib.d.ts'
-	lib.decorators.legacy.d.ts
-	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
 	tsconfig.json
 	  Root file specified for compilation
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /package.json 250 undefined WatchType: package.json file
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -156,63 +214,95 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Open files: 
-Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
 Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
 After Request
 watchedFiles::
-/lib.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
   {"pollingInterval":500}
-/lib.decorators.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
   {"pollingInterval":500}
-/lib.decorators.legacy.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
   {"pollingInterval":500}
-/package.json: *new*
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
   {"pollingInterval":250}
-/src/a.ts: *new*
+/home/src/workspaces/project/src/a.ts: *new*
   {"pollingInterval":500}
-/src/internal/foo.ts: *new*
+/home/src/workspaces/project/src/internal/foo.ts: *new*
   {"pollingInterval":500}
-/tsconfig.json: *new*
+/home/src/workspaces/project/src/internal/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
   {"pollingInterval":2000}
 
 watchedDirectoriesRecursive::
-: *new*
+/home/src/workspaces/node_modules: *new*
+  {}
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project/src: *new*
   {}
 
 Projects::
 /dev/null/inferredProject1* (Inferred) *new*
     projectStateVersion: 1
     projectProgramVersion: 1
-/tsconfig.json (Configured) *new*
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
     projectStateVersion: 1
     projectProgramVersion: 1
     noOpenRef: true
 
 ScriptInfos::
-/lib.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.legacy.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/src/a.ts *new*
+/home/src/workspaces/project/src/a.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/src/internal/foo.ts *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/internal/foo.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/tsconfig.json (Open) *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
     version: SVC-1-0
     containingProjects: 1
         /dev/null/inferredProject1* *default*
@@ -222,15 +312,14 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 1,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts"
+        "file": "/home/src/workspaces/project/src/a.ts"
       },
       "command": "open"
     }
-Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] Search path: /src
-Info seq  [hh:mm:ss:mss] For info: /src/a.ts :: Config file name: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -238,68 +327,97 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Open files: 
-Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
 Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
-Info seq  [hh:mm:ss:mss] 	FileName: /src/a.ts ProjectRootPath: undefined
-Info seq  [hh:mm:ss:mss] 		Projects: /tsconfig.json
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
 After Request
 watchedFiles::
-/lib.d.ts:
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
   {"pollingInterval":500}
-/lib.decorators.d.ts:
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
   {"pollingInterval":500}
-/lib.decorators.legacy.d.ts:
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
   {"pollingInterval":500}
-/package.json:
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
   {"pollingInterval":250}
-/src/internal/foo.ts:
+/home/src/workspaces/project/src/internal/foo.ts:
   {"pollingInterval":500}
-/tsconfig.json:
+/home/src/workspaces/project/src/internal/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
   {"pollingInterval":2000}
 
 watchedFiles *deleted*::
-/src/a.ts:
+/home/src/workspaces/project/src/a.ts:
   {"pollingInterval":500}
 
 watchedDirectoriesRecursive::
-:
+/home/src/workspaces/node_modules:
+  {}
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project/src:
   {}
 
 Projects::
 /dev/null/inferredProject1* (Inferred)
     projectStateVersion: 1
     projectProgramVersion: 1
-/tsconfig.json (Configured) *changed*
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
     projectStateVersion: 1
     projectProgramVersion: 1
     noOpenRef: false *changed*
 
 ScriptInfos::
-/lib.d.ts
+/home/src/tslibs/TS/Lib/lib.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.d.ts
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.legacy.d.ts
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/src/a.ts (Open) *changed*
+/home/src/workspaces/project/src/a.ts (Open) *changed*
     open: true *changed*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json *default*
-/src/internal/foo.ts
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/internal/foo.ts
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/tsconfig.json (Open)
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
     version: SVC-1-0
     containingProjects: 1
         /dev/null/inferredProject1* *default*
@@ -326,7 +444,7 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 3,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts",
+        "file": "/home/src/workspaces/project/src/a.ts",
         "line": 1,
         "offset": 17
       },
@@ -350,7 +468,8 @@ Info seq  [hh:mm:ss:mss] response:
             "kindModifiers": "",
             "sortText": "11"
           }
-        ]
+        ],
+        "defaultCommitCharacters": []
       }
     }
 Info seq  [hh:mm:ss:mss] request:
@@ -375,7 +494,7 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 5,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts",
+        "file": "/home/src/workspaces/project/src/a.ts",
         "line": 2,
         "offset": 27
       },
@@ -399,6 +518,7 @@ Info seq  [hh:mm:ss:mss] response:
             "kindModifiers": ".js",
             "sortText": "11"
           }
-        ]
+        ],
+        "defaultCommitCharacters": []
       }
     }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
index 714d7ae2e846f..9b51b58e1543a 100644
--- a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
@@ -1,15 +1,17 @@
-currentDirectory:: / useCaseSensitiveFileNames: false
-Info seq  [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
-//// [/lib.d.ts]
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
 lib.d.ts-Text
 
-//// [/lib.decorators.d.ts]
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
 lib.decorators.d.ts-Text
 
-//// [/lib.decorators.legacy.d.ts]
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
 lib.decorators.legacy.d.ts-Text
 
-//// [/package.json]
+//// [/home/src/workspaces/project/package.json]
 {
   "type": "module",
   "imports": {
@@ -17,14 +19,14 @@ lib.decorators.legacy.d.ts-Text
   }
 }
 
-//// [/src/a.ts]
+//// [/home/src/workspaces/project/src/a.ts]
 import {} from "";
 import {} from "#internal/";
 
-//// [/src/internal/foo.ts]
+//// [/home/src/workspaces/project/src/internal/foo.ts]
 export function something(name: string) {}
 
-//// [/tsconfig.json]
+//// [/home/src/workspaces/project/tsconfig.json]
 {
   "compilerOptions": {
     "module": "nodenext",
@@ -39,65 +41,61 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 0,
       "type": "request",
       "arguments": {
-        "file": "/tsconfig.json"
+        "file": "/home/src/workspaces/project/tsconfig.json"
       },
       "command": "open"
     }
-Info seq  [hh:mm:ss:mss] Search path: /
-Info seq  [hh:mm:ss:mss] For info: /tsconfig.json :: Config file name: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Creating configuration project /tsconfig.json
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/a.ts",
+  "/home/src/workspaces/project/src/internal/foo.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
 Info seq  [hh:mm:ss:mss] event:
     {
       "seq": 0,
       "type": "event",
       "event": "projectLoadingStart",
       "body": {
-        "projectName": "/tsconfig.json",
-        "reason": "Creating possible configured project for /tsconfig.json to open"
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
       }
     }
-Info seq  [hh:mm:ss:mss] Config: /tsconfig.json : {
- "rootNames": [
-  "/lib.d.ts",
-  "/lib.decorators.d.ts",
-  "/lib.decorators.legacy.d.ts",
-  "/src/a.ts",
-  "/src/internal/foo.ts"
- ],
- "options": {
-  "module": 199,
-  "rootDir": "/src",
-  "outDir": "/dist",
-  "configFilePath": "/tsconfig.json"
- }
-}
-Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
-Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/internal/foo.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
-	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
-	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/lib.d.ts Text-1 lib.d.ts-Text
-	/src/a.ts Text-1 "import {} from \"\";\nimport {} from \"#internal/\";"
-	/src/internal/foo.ts Text-1 "export function something(name: string) {}"
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/internal/foo.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/internal/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+	/home/src/workspaces/project/src/a.ts Text-1 "import {} from \"\";\nimport {} from \"#internal/\";"
+	/home/src/workspaces/project/src/internal/foo.ts Text-1 "export function something(name: string) {}"
 
 
-	lib.decorators.d.ts
-	  Library referenced via 'decorators' from file 'lib.d.ts'
-	  Matched by default include pattern '**/*'
-	lib.decorators.legacy.d.ts
-	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
-	  Matched by default include pattern '**/*'
-	lib.d.ts
-	  Matched by default include pattern '**/*'
 	src/a.ts
 	  Matched by default include pattern '**/*'
 	  File is ECMAScript module because 'package.json' has field "type" with value "module"
@@ -112,7 +110,7 @@ Info seq  [hh:mm:ss:mss] event:
       "type": "event",
       "event": "projectLoadingFinish",
       "body": {
-        "projectName": "/tsconfig.json"
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
       }
     }
 Info seq  [hh:mm:ss:mss] event:
@@ -121,34 +119,94 @@ Info seq  [hh:mm:ss:mss] event:
       "type": "event",
       "event": "configFileDiag",
       "body": {
-        "triggerFile": "/tsconfig.json",
-        "configFile": "/tsconfig.json",
-        "diagnostics": []
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
       }
     }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
 Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
 Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
 Info seq  [hh:mm:ss:mss] 	Files (4)
-	/lib.d.ts Text-1 lib.d.ts-Text
-	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
-	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
 
 
-	lib.d.ts
+	../../tslibs/TS/Lib/lib.d.ts
 	  Default library for target 'es5'
-	lib.decorators.d.ts
-	  Library referenced via 'decorators' from file 'lib.d.ts'
-	lib.decorators.legacy.d.ts
-	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
 	tsconfig.json
 	  Root file specified for compilation
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /package.json 250 undefined WatchType: package.json file
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -156,63 +214,95 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Open files: 
-Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
 Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
 After Request
 watchedFiles::
-/lib.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
   {"pollingInterval":500}
-/lib.decorators.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
   {"pollingInterval":500}
-/lib.decorators.legacy.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
   {"pollingInterval":500}
-/package.json: *new*
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
   {"pollingInterval":250}
-/src/a.ts: *new*
+/home/src/workspaces/project/src/a.ts: *new*
   {"pollingInterval":500}
-/src/internal/foo.ts: *new*
+/home/src/workspaces/project/src/internal/foo.ts: *new*
   {"pollingInterval":500}
-/tsconfig.json: *new*
+/home/src/workspaces/project/src/internal/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
   {"pollingInterval":2000}
 
 watchedDirectoriesRecursive::
-: *new*
+/home/src/workspaces/node_modules: *new*
+  {}
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project/src: *new*
   {}
 
 Projects::
 /dev/null/inferredProject1* (Inferred) *new*
     projectStateVersion: 1
     projectProgramVersion: 1
-/tsconfig.json (Configured) *new*
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
     projectStateVersion: 1
     projectProgramVersion: 1
     noOpenRef: true
 
 ScriptInfos::
-/lib.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.legacy.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/src/a.ts *new*
+/home/src/workspaces/project/src/a.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/src/internal/foo.ts *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/internal/foo.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/tsconfig.json (Open) *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
     version: SVC-1-0
     containingProjects: 1
         /dev/null/inferredProject1* *default*
@@ -222,15 +312,14 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 1,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts"
+        "file": "/home/src/workspaces/project/src/a.ts"
       },
       "command": "open"
     }
-Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] Search path: /src
-Info seq  [hh:mm:ss:mss] For info: /src/a.ts :: Config file name: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -238,68 +327,97 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Open files: 
-Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
 Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
-Info seq  [hh:mm:ss:mss] 	FileName: /src/a.ts ProjectRootPath: undefined
-Info seq  [hh:mm:ss:mss] 		Projects: /tsconfig.json
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
 After Request
 watchedFiles::
-/lib.d.ts:
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
   {"pollingInterval":500}
-/lib.decorators.d.ts:
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
   {"pollingInterval":500}
-/lib.decorators.legacy.d.ts:
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
   {"pollingInterval":500}
-/package.json:
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
   {"pollingInterval":250}
-/src/internal/foo.ts:
+/home/src/workspaces/project/src/internal/foo.ts:
   {"pollingInterval":500}
-/tsconfig.json:
+/home/src/workspaces/project/src/internal/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
   {"pollingInterval":2000}
 
 watchedFiles *deleted*::
-/src/a.ts:
+/home/src/workspaces/project/src/a.ts:
   {"pollingInterval":500}
 
 watchedDirectoriesRecursive::
-:
+/home/src/workspaces/node_modules:
+  {}
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project/src:
   {}
 
 Projects::
 /dev/null/inferredProject1* (Inferred)
     projectStateVersion: 1
     projectProgramVersion: 1
-/tsconfig.json (Configured) *changed*
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
     projectStateVersion: 1
     projectProgramVersion: 1
     noOpenRef: false *changed*
 
 ScriptInfos::
-/lib.d.ts
+/home/src/tslibs/TS/Lib/lib.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.d.ts
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.legacy.d.ts
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/src/a.ts (Open) *changed*
+/home/src/workspaces/project/src/a.ts (Open) *changed*
     open: true *changed*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json *default*
-/src/internal/foo.ts
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/internal/foo.ts
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/tsconfig.json (Open)
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
     version: SVC-1-0
     containingProjects: 1
         /dev/null/inferredProject1* *default*
@@ -326,7 +444,7 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 3,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts",
+        "file": "/home/src/workspaces/project/src/a.ts",
         "line": 1,
         "offset": 17
       },
@@ -350,7 +468,8 @@ Info seq  [hh:mm:ss:mss] response:
             "kindModifiers": "",
             "sortText": "11"
           }
-        ]
+        ],
+        "defaultCommitCharacters": []
       }
     }
 Info seq  [hh:mm:ss:mss] request:
@@ -375,7 +494,7 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 5,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts",
+        "file": "/home/src/workspaces/project/src/a.ts",
         "line": 2,
         "offset": 27
       },
@@ -399,6 +518,7 @@ Info seq  [hh:mm:ss:mss] response:
             "kindModifiers": "",
             "sortText": "11"
           }
-        ]
+        ],
+        "defaultCommitCharacters": []
       }
     }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap4.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap4.js
index 8abf584d37047..63feb5500973e 100644
--- a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap4.js
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap4.js
@@ -1,15 +1,17 @@
-currentDirectory:: / useCaseSensitiveFileNames: false
-Info seq  [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
-//// [/lib.d.ts]
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
 lib.d.ts-Text
 
-//// [/lib.decorators.d.ts]
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
 lib.decorators.d.ts-Text
 
-//// [/lib.decorators.legacy.d.ts]
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
 lib.decorators.legacy.d.ts-Text
 
-//// [/package.json]
+//// [/home/src/workspaces/project/package.json]
 {
   "type": "module",
   "imports": {
@@ -20,13 +22,13 @@ lib.decorators.legacy.d.ts-Text
   }
 }
 
-//// [/src/a.ts]
+//// [/home/src/workspaces/project/src/a.ts]
 import {} from "";
 
-//// [/src/env/browser.ts]
+//// [/home/src/workspaces/project/src/env/browser.ts]
 export const isBrowser = true;
 
-//// [/tsconfig.json]
+//// [/home/src/workspaces/project/tsconfig.json]
 {
   "compilerOptions": {
     "module": "nodenext",
@@ -41,65 +43,55 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 0,
       "type": "request",
       "arguments": {
-        "file": "/tsconfig.json"
+        "file": "/home/src/workspaces/project/tsconfig.json"
       },
       "command": "open"
     }
-Info seq  [hh:mm:ss:mss] Search path: /
-Info seq  [hh:mm:ss:mss] For info: /tsconfig.json :: Config file name: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Creating configuration project /tsconfig.json
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/a.ts",
+  "/home/src/workspaces/project/src/env/browser.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
 Info seq  [hh:mm:ss:mss] event:
     {
       "seq": 0,
       "type": "event",
       "event": "projectLoadingStart",
       "body": {
-        "projectName": "/tsconfig.json",
-        "reason": "Creating possible configured project for /tsconfig.json to open"
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
       }
     }
-Info seq  [hh:mm:ss:mss] Config: /tsconfig.json : {
- "rootNames": [
-  "/lib.d.ts",
-  "/lib.decorators.d.ts",
-  "/lib.decorators.legacy.d.ts",
-  "/src/a.ts",
-  "/src/env/browser.ts"
- ],
- "options": {
-  "module": 199,
-  "rootDir": "/src",
-  "outDir": "/dist",
-  "configFilePath": "/tsconfig.json"
- }
-}
-Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
-Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/env/browser.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
-	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
-	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/lib.d.ts Text-1 lib.d.ts-Text
-	/src/a.ts Text-1 "import {} from \"\";"
-	/src/env/browser.ts Text-1 "export const isBrowser = true;"
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/env/browser.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/env/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+	/home/src/workspaces/project/src/a.ts Text-1 "import {} from \"\";"
+	/home/src/workspaces/project/src/env/browser.ts Text-1 "export const isBrowser = true;"
 
 
-	lib.decorators.d.ts
-	  Library referenced via 'decorators' from file 'lib.d.ts'
-	  Matched by default include pattern '**/*'
-	lib.decorators.legacy.d.ts
-	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
-	  Matched by default include pattern '**/*'
-	lib.d.ts
-	  Matched by default include pattern '**/*'
 	src/a.ts
 	  Matched by default include pattern '**/*'
 	  File is ECMAScript module because 'package.json' has field "type" with value "module"
@@ -114,7 +106,7 @@ Info seq  [hh:mm:ss:mss] event:
       "type": "event",
       "event": "projectLoadingFinish",
       "body": {
-        "projectName": "/tsconfig.json"
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
       }
     }
 Info seq  [hh:mm:ss:mss] event:
@@ -123,34 +115,94 @@ Info seq  [hh:mm:ss:mss] event:
       "type": "event",
       "event": "configFileDiag",
       "body": {
-        "triggerFile": "/tsconfig.json",
-        "configFile": "/tsconfig.json",
-        "diagnostics": []
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
       }
     }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
 Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
 Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
 Info seq  [hh:mm:ss:mss] 	Files (4)
-	/lib.d.ts Text-1 lib.d.ts-Text
-	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
-	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
 
 
-	lib.d.ts
+	../../tslibs/TS/Lib/lib.d.ts
 	  Default library for target 'es5'
-	lib.decorators.d.ts
-	  Library referenced via 'decorators' from file 'lib.d.ts'
-	lib.decorators.legacy.d.ts
-	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
 	tsconfig.json
 	  Root file specified for compilation
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /package.json 250 undefined WatchType: package.json file
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -158,63 +210,91 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Open files: 
-Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
 Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
 After Request
 watchedFiles::
-/lib.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
   {"pollingInterval":500}
-/lib.decorators.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
   {"pollingInterval":500}
-/lib.decorators.legacy.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
   {"pollingInterval":500}
-/package.json: *new*
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
   {"pollingInterval":250}
-/src/a.ts: *new*
+/home/src/workspaces/project/src/a.ts: *new*
   {"pollingInterval":500}
-/src/env/browser.ts: *new*
+/home/src/workspaces/project/src/env/browser.ts: *new*
   {"pollingInterval":500}
-/tsconfig.json: *new*
+/home/src/workspaces/project/src/env/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
   {"pollingInterval":2000}
 
 watchedDirectoriesRecursive::
-: *new*
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
   {}
 
 Projects::
 /dev/null/inferredProject1* (Inferred) *new*
     projectStateVersion: 1
     projectProgramVersion: 1
-/tsconfig.json (Configured) *new*
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
     projectStateVersion: 1
     projectProgramVersion: 1
     noOpenRef: true
 
 ScriptInfos::
-/lib.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.legacy.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/src/a.ts *new*
+/home/src/workspaces/project/src/a.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/src/env/browser.ts *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/env/browser.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/tsconfig.json (Open) *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
     version: SVC-1-0
     containingProjects: 1
         /dev/null/inferredProject1* *default*
@@ -224,15 +304,14 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 1,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts"
+        "file": "/home/src/workspaces/project/src/a.ts"
       },
       "command": "open"
     }
-Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] Search path: /src
-Info seq  [hh:mm:ss:mss] For info: /src/a.ts :: Config file name: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -240,68 +319,93 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Open files: 
-Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
 Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
-Info seq  [hh:mm:ss:mss] 	FileName: /src/a.ts ProjectRootPath: undefined
-Info seq  [hh:mm:ss:mss] 		Projects: /tsconfig.json
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
 After Request
 watchedFiles::
-/lib.d.ts:
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
   {"pollingInterval":500}
-/lib.decorators.d.ts:
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
   {"pollingInterval":500}
-/lib.decorators.legacy.d.ts:
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
   {"pollingInterval":500}
-/package.json:
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
   {"pollingInterval":250}
-/src/env/browser.ts:
+/home/src/workspaces/project/src/env/browser.ts:
   {"pollingInterval":500}
-/tsconfig.json:
+/home/src/workspaces/project/src/env/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
   {"pollingInterval":2000}
 
 watchedFiles *deleted*::
-/src/a.ts:
+/home/src/workspaces/project/src/a.ts:
   {"pollingInterval":500}
 
 watchedDirectoriesRecursive::
-:
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
   {}
 
 Projects::
 /dev/null/inferredProject1* (Inferred)
     projectStateVersion: 1
     projectProgramVersion: 1
-/tsconfig.json (Configured) *changed*
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
     projectStateVersion: 1
     projectProgramVersion: 1
     noOpenRef: false *changed*
 
 ScriptInfos::
-/lib.d.ts
+/home/src/tslibs/TS/Lib/lib.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.d.ts
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.legacy.d.ts
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/src/a.ts (Open) *changed*
+/home/src/workspaces/project/src/a.ts (Open) *changed*
     open: true *changed*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json *default*
-/src/env/browser.ts
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/env/browser.ts
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/tsconfig.json (Open)
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
     version: SVC-1-0
     containingProjects: 1
         /dev/null/inferredProject1* *default*
@@ -328,7 +432,7 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 3,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts",
+        "file": "/home/src/workspaces/project/src/a.ts",
         "line": 1,
         "offset": 17
       },
@@ -352,6 +456,7 @@ Info seq  [hh:mm:ss:mss] response:
             "kindModifiers": "",
             "sortText": "11"
           }
-        ]
+        ],
+        "defaultCommitCharacters": []
       }
     }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap5.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap5.js
index b326df6504397..8c218da0a58d9 100644
--- a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap5.js
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap5.js
@@ -1,15 +1,17 @@
-currentDirectory:: / useCaseSensitiveFileNames: false
-Info seq  [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
-//// [/lib.d.ts]
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
 lib.d.ts-Text
 
-//// [/lib.decorators.d.ts]
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
 lib.decorators.d.ts-Text
 
-//// [/lib.decorators.legacy.d.ts]
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
 lib.decorators.legacy.d.ts-Text
 
-//// [/package.json]
+//// [/home/src/workspaces/project/package.json]
 {
   "type": "module",
   "imports": {
@@ -20,13 +22,13 @@ lib.decorators.legacy.d.ts-Text
   }
 }
 
-//// [/src/a.ts]
+//// [/home/src/workspaces/project/src/a.ts]
 import {} from "";
 
-//// [/src/env/browser.ts]
+//// [/home/src/workspaces/project/src/env/browser.ts]
 export const isBrowser = true;
 
-//// [/tsconfig.json]
+//// [/home/src/workspaces/project/tsconfig.json]
 {
   "compilerOptions": {
     "module": "nodenext",
@@ -42,66 +44,56 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 0,
       "type": "request",
       "arguments": {
-        "file": "/tsconfig.json"
+        "file": "/home/src/workspaces/project/tsconfig.json"
       },
       "command": "open"
     }
-Info seq  [hh:mm:ss:mss] Search path: /
-Info seq  [hh:mm:ss:mss] For info: /tsconfig.json :: Config file name: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Creating configuration project /tsconfig.json
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/a.ts",
+  "/home/src/workspaces/project/src/env/browser.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "declarationDir": "/home/src/workspaces/project/types",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
 Info seq  [hh:mm:ss:mss] event:
     {
       "seq": 0,
       "type": "event",
       "event": "projectLoadingStart",
       "body": {
-        "projectName": "/tsconfig.json",
-        "reason": "Creating possible configured project for /tsconfig.json to open"
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
       }
     }
-Info seq  [hh:mm:ss:mss] Config: /tsconfig.json : {
- "rootNames": [
-  "/lib.d.ts",
-  "/lib.decorators.d.ts",
-  "/lib.decorators.legacy.d.ts",
-  "/src/a.ts",
-  "/src/env/browser.ts"
- ],
- "options": {
-  "module": 199,
-  "rootDir": "/src",
-  "outDir": "/dist",
-  "declarationDir": "/types",
-  "configFilePath": "/tsconfig.json"
- }
-}
-Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
-Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo:  1 undefined Config: /tsconfig.json WatchType: Wild card directory
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/env/browser.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
-	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
-	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/lib.d.ts Text-1 lib.d.ts-Text
-	/src/a.ts Text-1 "import {} from \"\";"
-	/src/env/browser.ts Text-1 "export const isBrowser = true;"
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/env/browser.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/env/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+	/home/src/workspaces/project/src/a.ts Text-1 "import {} from \"\";"
+	/home/src/workspaces/project/src/env/browser.ts Text-1 "export const isBrowser = true;"
 
 
-	lib.decorators.d.ts
-	  Library referenced via 'decorators' from file 'lib.d.ts'
-	  Matched by default include pattern '**/*'
-	lib.decorators.legacy.d.ts
-	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
-	  Matched by default include pattern '**/*'
-	lib.d.ts
-	  Matched by default include pattern '**/*'
 	src/a.ts
 	  Matched by default include pattern '**/*'
 	  File is ECMAScript module because 'package.json' has field "type" with value "module"
@@ -116,7 +108,7 @@ Info seq  [hh:mm:ss:mss] event:
       "type": "event",
       "event": "projectLoadingFinish",
       "body": {
-        "projectName": "/tsconfig.json"
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
       }
     }
 Info seq  [hh:mm:ss:mss] event:
@@ -125,9 +117,14 @@ Info seq  [hh:mm:ss:mss] event:
       "type": "event",
       "event": "configFileDiag",
       "body": {
-        "triggerFile": "/tsconfig.json",
-        "configFile": "/tsconfig.json",
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
         "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
           {
             "start": {
               "line": 6,
@@ -140,34 +137,88 @@ Info seq  [hh:mm:ss:mss] event:
             "text": "Option 'declarationDir' cannot be specified without specifying option 'declaration' or option 'composite'.",
             "code": 5069,
             "category": "error",
-            "fileName": "/tsconfig.json"
+            "fileName": "/home/src/workspaces/project/tsconfig.json"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
           }
         ]
       }
     }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
 Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
 Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
 Info seq  [hh:mm:ss:mss] 	Files (4)
-	/lib.d.ts Text-1 lib.d.ts-Text
-	/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
-	/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\",\n    \"declarationDir\": \"types\",\n  }\n}"
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\",\n    \"declarationDir\": \"types\",\n  }\n}"
 
 
-	lib.d.ts
+	../../tslibs/TS/Lib/lib.d.ts
 	  Default library for target 'es5'
-	lib.decorators.d.ts
-	  Library referenced via 'decorators' from file 'lib.d.ts'
-	lib.decorators.legacy.d.ts
-	  Library referenced via 'decorators.legacy' from file 'lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
 	tsconfig.json
 	  Root file specified for compilation
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /package.json 250 undefined WatchType: package.json file
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -175,63 +226,91 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Open files: 
-Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
 Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
 After Request
 watchedFiles::
-/lib.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
   {"pollingInterval":500}
-/lib.decorators.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
   {"pollingInterval":500}
-/lib.decorators.legacy.d.ts: *new*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
   {"pollingInterval":500}
-/package.json: *new*
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
   {"pollingInterval":250}
-/src/a.ts: *new*
+/home/src/workspaces/project/src/a.ts: *new*
   {"pollingInterval":500}
-/src/env/browser.ts: *new*
+/home/src/workspaces/project/src/env/browser.ts: *new*
   {"pollingInterval":500}
-/tsconfig.json: *new*
+/home/src/workspaces/project/src/env/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
   {"pollingInterval":2000}
 
 watchedDirectoriesRecursive::
-: *new*
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
   {}
 
 Projects::
 /dev/null/inferredProject1* (Inferred) *new*
     projectStateVersion: 1
     projectProgramVersion: 1
-/tsconfig.json (Configured) *new*
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
     projectStateVersion: 1
     projectProgramVersion: 1
     noOpenRef: true
 
 ScriptInfos::
-/lib.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.legacy.d.ts *new*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/src/a.ts *new*
+/home/src/workspaces/project/src/a.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/src/env/browser.ts *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/env/browser.ts *new*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/tsconfig.json (Open) *new*
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
     version: SVC-1-0
     containingProjects: 1
         /dev/null/inferredProject1* *default*
@@ -241,15 +320,14 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 1,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts"
+        "file": "/home/src/workspaces/project/src/a.ts"
       },
       "command": "open"
     }
-Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] Search path: /src
-Info seq  [hh:mm:ss:mss] For info: /src/a.ts :: Config file name: /tsconfig.json
-Info seq  [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (5)
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -257,68 +335,93 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Open files: 
-Info seq  [hh:mm:ss:mss] 	FileName: /tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
 Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
-Info seq  [hh:mm:ss:mss] 	FileName: /src/a.ts ProjectRootPath: undefined
-Info seq  [hh:mm:ss:mss] 		Projects: /tsconfig.json
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
 After Request
 watchedFiles::
-/lib.d.ts:
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
   {"pollingInterval":500}
-/lib.decorators.d.ts:
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
   {"pollingInterval":500}
-/lib.decorators.legacy.d.ts:
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
   {"pollingInterval":500}
-/package.json:
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
   {"pollingInterval":250}
-/src/env/browser.ts:
+/home/src/workspaces/project/src/env/browser.ts:
   {"pollingInterval":500}
-/tsconfig.json:
+/home/src/workspaces/project/src/env/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
   {"pollingInterval":2000}
 
 watchedFiles *deleted*::
-/src/a.ts:
+/home/src/workspaces/project/src/a.ts:
   {"pollingInterval":500}
 
 watchedDirectoriesRecursive::
-:
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
   {}
 
 Projects::
 /dev/null/inferredProject1* (Inferred)
     projectStateVersion: 1
     projectProgramVersion: 1
-/tsconfig.json (Configured) *changed*
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
     projectStateVersion: 1
     projectProgramVersion: 1
     noOpenRef: false *changed*
 
 ScriptInfos::
-/lib.d.ts
+/home/src/tslibs/TS/Lib/lib.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.d.ts
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/lib.decorators.legacy.d.ts
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
     version: Text-1
-    containingProjects: 2
-        /tsconfig.json
+    containingProjects: 1
         /dev/null/inferredProject1*
-/src/a.ts (Open) *changed*
+/home/src/workspaces/project/src/a.ts (Open) *changed*
     open: true *changed*
     version: Text-1
     containingProjects: 1
-        /tsconfig.json *default*
-/src/env/browser.ts
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/env/browser.ts
     version: Text-1
     containingProjects: 1
-        /tsconfig.json
-/tsconfig.json (Open)
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
     version: SVC-1-0
     containingProjects: 1
         /dev/null/inferredProject1* *default*
@@ -345,7 +448,7 @@ Info seq  [hh:mm:ss:mss] request:
       "seq": 3,
       "type": "request",
       "arguments": {
-        "file": "/src/a.ts",
+        "file": "/home/src/workspaces/project/src/a.ts",
         "line": 1,
         "offset": 17
       },
@@ -369,6 +472,7 @@ Info seq  [hh:mm:ss:mss] response:
             "kindModifiers": "",
             "sortText": "11"
           }
-        ]
+        ],
+        "defaultCommitCharacters": []
       }
     }
\ No newline at end of file
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap1.ts b/tests/cases/fourslash/server/importCompletions_importsMap1.ts
index d21821e087cfd..530704bfb5d74 100644
--- a/tests/cases/fourslash/server/importCompletions_importsMap1.ts
+++ b/tests/cases/fourslash/server/importCompletions_importsMap1.ts
@@ -1,6 +1,6 @@
 /// <reference path="../fourslash.ts"/>
 
-// @Filename: /tsconfig.json
+// @Filename: /home/src/workspaces/project/tsconfig.json
 //// {
 ////   "compilerOptions": {
 ////     "module": "nodenext",
@@ -9,7 +9,7 @@
 ////   }
 //// }
 
-// @Filename: /package.json
+// @Filename: /home/src/workspaces/project/package.json
 //// {
 ////   "type": "module",
 ////   "imports": {
@@ -20,13 +20,13 @@
 ////   }
 //// }
 
-// @Filename: /src/env/browser.ts
+// @Filename: /home/src/workspaces/project/src/env/browser.ts
 //// export const isBrowser = true;
 
-// @Filename: /src/env/node.ts
+// @Filename: /home/src/workspaces/project/src/env/node.ts
 //// export const isBrowser = false;
 
-// @Filename: /src/a.ts
+// @Filename: /home/src/workspaces/project/src/a.ts
 //// import {} from "/*1*/";
 
 verify.completions({
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap2.ts b/tests/cases/fourslash/server/importCompletions_importsMap2.ts
index b83d83052b826..10ea87f0aca2d 100644
--- a/tests/cases/fourslash/server/importCompletions_importsMap2.ts
+++ b/tests/cases/fourslash/server/importCompletions_importsMap2.ts
@@ -1,6 +1,6 @@
 /// <reference path="../fourslash.ts"/>
 
-// @Filename: /tsconfig.json
+// @Filename: /home/src/workspaces/project/tsconfig.json
 //// {
 ////   "compilerOptions": {
 ////     "module": "nodenext",
@@ -9,7 +9,7 @@
 ////   }
 //// }
 
-// @Filename: /package.json
+// @Filename: /home/src/workspaces/project/package.json
 //// {
 ////   "type": "module",
 ////   "imports": {
@@ -17,10 +17,10 @@
 ////   }
 //// }
 
-// @Filename: /src/internal/foo.ts
+// @Filename: /home/src/workspaces/project/src/internal/foo.ts
 //// export function something(name: string) {}
 
-// @Filename: /src/a.ts
+// @Filename: /home/src/workspaces/project/src/a.ts
 //// import {} from "/*1*/";
 //// import {} from "#internal//*2*/";
 
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap3.ts b/tests/cases/fourslash/server/importCompletions_importsMap3.ts
index 02691c7700c76..01776d771a3db 100644
--- a/tests/cases/fourslash/server/importCompletions_importsMap3.ts
+++ b/tests/cases/fourslash/server/importCompletions_importsMap3.ts
@@ -1,6 +1,6 @@
 /// <reference path="../fourslash.ts"/>
 
-// @Filename: /tsconfig.json
+// @Filename: /home/src/workspaces/project/tsconfig.json
 //// {
 ////   "compilerOptions": {
 ////     "module": "nodenext",
@@ -9,7 +9,7 @@
 ////   }
 //// }
 
-// @Filename: /package.json
+// @Filename: /home/src/workspaces/project/package.json
 //// {
 ////   "type": "module",
 ////   "imports": {
@@ -17,10 +17,10 @@
 ////   }
 //// }
 
-// @Filename: /src/internal/foo.ts
+// @Filename: /home/src/workspaces/project/src/internal/foo.ts
 //// export function something(name: string) {}
 
-// @Filename: /src/a.ts
+// @Filename: /home/src/workspaces/project/src/a.ts
 //// import {} from "/*1*/";
 //// import {} from "#internal//*2*/";
 
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap4.ts b/tests/cases/fourslash/server/importCompletions_importsMap4.ts
index c770776e81d70..3e15b253f4710 100644
--- a/tests/cases/fourslash/server/importCompletions_importsMap4.ts
+++ b/tests/cases/fourslash/server/importCompletions_importsMap4.ts
@@ -1,6 +1,6 @@
 /// <reference path="../fourslash.ts"/>
 
-// @Filename: /tsconfig.json
+// @Filename: /home/src/workspaces/project/tsconfig.json
 //// {
 ////   "compilerOptions": {
 ////     "module": "nodenext",
@@ -9,7 +9,7 @@
 ////   }
 //// }
 
-// @Filename: /package.json
+// @Filename: /home/src/workspaces/project/package.json
 //// {
 ////   "type": "module",
 ////   "imports": {
@@ -20,10 +20,10 @@
 ////   }
 //// }
 
-// @Filename: /src/env/browser.ts
+// @Filename: /home/src/workspaces/project/src/env/browser.ts
 //// export const isBrowser = true;
 
-// @Filename: /src/a.ts
+// @Filename: /home/src/workspaces/project/src/a.ts
 //// import {} from "/*1*/";
 
 verify.completions({
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap5.ts b/tests/cases/fourslash/server/importCompletions_importsMap5.ts
index dc188357917d3..0b240075a1e66 100644
--- a/tests/cases/fourslash/server/importCompletions_importsMap5.ts
+++ b/tests/cases/fourslash/server/importCompletions_importsMap5.ts
@@ -1,6 +1,6 @@
 /// <reference path="../fourslash.ts"/>
 
-// @Filename: /tsconfig.json
+// @Filename: /home/src/workspaces/project/tsconfig.json
 //// {
 ////   "compilerOptions": {
 ////     "module": "nodenext",
@@ -10,7 +10,7 @@
 ////   }
 //// }
 
-// @Filename: /package.json
+// @Filename: /home/src/workspaces/project/package.json
 //// {
 ////   "type": "module",
 ////   "imports": {
@@ -21,10 +21,10 @@
 ////   }
 //// }
 
-// @Filename: /src/env/browser.ts
+// @Filename: /home/src/workspaces/project/src/env/browser.ts
 //// export const isBrowser = true;
 
-// @Filename: /src/a.ts
+// @Filename: /home/src/workspaces/project/src/a.ts
 //// import {} from "/*1*/";
 
 verify.completions({

From 083c5b88c01fcf5ca61e0a4f37e4b74e012fa4b8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Sun, 29 Sep 2024 17:12:42 +0200
Subject: [PATCH 04/26] drop trailing slash support

---
 src/services/stringCompletions.ts              |  2 +-
 .../importCompletions_importsMap3.js           | 18 ++----------------
 .../server/importCompletions_importsMap3.ts    |  4 ++--
 3 files changed, 5 insertions(+), 19 deletions(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index a44cb997e040b..b5649c3409f6c 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -914,7 +914,7 @@ function addCompletionEntriesFromPathsOrExports(
     let pathResults: { results: NameAndKind[]; matchedPattern: boolean; }[] = [];
     let matchedPath: string | undefined;
     for (const key of keys) {
-        if (key === ".") continue;
+        if (key === "." || (isExports || isImports) && hasTrailingDirectorySeparator(key)) continue;
         const keyWithoutLeadingDotSlash = key.replace(/^\.\//, ""); // remove leading "./"
         const patterns = getPatternsForKey(key);
         if (patterns) {
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
index 9b51b58e1543a..c5342fe96c577 100644
--- a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
@@ -461,14 +461,7 @@ Info seq  [hh:mm:ss:mss] response:
         "isGlobalCompletion": false,
         "isMemberCompletion": false,
         "isNewIdentifierLocation": true,
-        "entries": [
-          {
-            "name": "#internal",
-            "kind": "script",
-            "kindModifiers": "",
-            "sortText": "11"
-          }
-        ],
+        "entries": [],
         "defaultCommitCharacters": []
       }
     }
@@ -511,14 +504,7 @@ Info seq  [hh:mm:ss:mss] response:
         "isGlobalCompletion": false,
         "isMemberCompletion": false,
         "isNewIdentifierLocation": true,
-        "entries": [
-          {
-            "name": "#internal",
-            "kind": "script",
-            "kindModifiers": "",
-            "sortText": "11"
-          }
-        ],
+        "entries": [],
         "defaultCommitCharacters": []
       }
     }
\ No newline at end of file
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap3.ts b/tests/cases/fourslash/server/importCompletions_importsMap3.ts
index 01776d771a3db..081317fc00359 100644
--- a/tests/cases/fourslash/server/importCompletions_importsMap3.ts
+++ b/tests/cases/fourslash/server/importCompletions_importsMap3.ts
@@ -26,11 +26,11 @@
 
 verify.completions({
     marker: ["1"],
-    exact: ["#internal"],
+    exact: [],
     isNewIdentifierLocation: true,
 });
 verify.completions({
     marker: ["2"],
-    exact: ["foo.js"],
+    exact: [],
     isNewIdentifierLocation: true,
 });

From b48f752f035d0b5a8741a3c9f9471abe9574dd2f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Wed, 9 Oct 2024 11:03:41 +0200
Subject: [PATCH 05/26] fix support for trailing slash

---
 src/services/stringCompletions.ts             | 28 ++++++++++----
 .../importCompletions_importsMap3.js          | 18 ++++++++-
 ...letionsPackageJsonExportsTrailingSlash1.ts | 38 +++++++++++++++++++
 .../server/importCompletions_importsMap3.ts   |  4 +-
 4 files changed, 77 insertions(+), 11 deletions(-)
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonExportsTrailingSlash1.ts

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index b5649c3409f6c..eca91bb54c02c 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -914,14 +914,16 @@ function addCompletionEntriesFromPathsOrExports(
     let pathResults: { results: NameAndKind[]; matchedPattern: boolean; }[] = [];
     let matchedPath: string | undefined;
     for (const key of keys) {
-        if (key === "." || (isExports || isImports) && hasTrailingDirectorySeparator(key)) continue;
-        const keyWithoutLeadingDotSlash = key.replace(/^\.\//, ""); // remove leading "./"
+        if (key === ".") continue;
+        const keyWithoutLeadingDotSlash = key
+            .replace(/^\.\//, "") // remove leading "./"
+            + (endsWith(key, "/") ? "*" : ""); // normalize trailing `/` to `/*`
         const patterns = getPatternsForKey(key);
         if (patterns) {
             const pathPattern = tryParsePattern(keyWithoutLeadingDotSlash);
             if (!pathPattern) continue;
             const isMatch = typeof pathPattern === "object" && isPatternMatch(pathPattern, fragment);
-            const isLongestMatch = isMatch && (matchedPath === undefined || comparePaths(key, matchedPath) === Comparison.LessThan);
+            const isLongestMatch = isMatch && (matchedPath === undefined || comparePaths(keyWithoutLeadingDotSlash, matchedPath) === Comparison.LessThan);
             if (isLongestMatch) {
                 // If this is a higher priority match than anything we've seen so far, previous results from matches are invalid, e.g.
                 // for `import {} from "some-package/|"` with a typesVersions:
@@ -934,10 +936,10 @@ function addCompletionEntriesFromPathsOrExports(
                 //                                 added by the '*' match, after typing `"some-package/foo/|"` we would get file results from both
                 //                                 ./dist/foo and ./foo, when only the latter will actually be resolvable.
                 //                                 See pathCompletionsTypesVersionsWildcard6.ts.
-                matchedPath = key;
+                matchedPath = keyWithoutLeadingDotSlash;
                 pathResults = pathResults.filter(r => !r.matchedPattern);
             }
-            if (typeof pathPattern === "string" || matchedPath === undefined || comparePaths(key, matchedPath) !== Comparison.GreaterThan) {
+            if (typeof pathPattern === "string" || matchedPath === undefined || comparePaths(keyWithoutLeadingDotSlash, matchedPath) !== Comparison.GreaterThan) {
                 pathResults.push({
                     matchedPattern: isMatch,
                     results: getCompletionsForPathMapping(keyWithoutLeadingDotSlash, patterns, fragment, baseDirectory, extensionOptions, (isExports || isImports) && endsWith(keyWithoutLeadingDotSlash, "*"), isImports, program, host, moduleSpecifierResolutionHost)
@@ -1034,7 +1036,13 @@ function getCompletionEntriesForNonRelativeModules(
                                 host,
                                 moduleSpecifierResolutionHost,
                                 keys,
-                                key => singleElementArray(getPatternFromFirstMatchingCondition(imports[key], conditions)),
+                                key => {
+                                    const pattern = getPatternFromFirstMatchingCondition(imports[key], conditions);
+                                    if (pattern === undefined) {
+                                        return undefined;
+                                    }
+                                    return singleElementArray(endsWith(key, "/") && endsWith(pattern, "/") ? pattern + "*" : pattern);
+                                },
                                 comparePatternKeys,
                             );
                             return;
@@ -1082,7 +1090,13 @@ function getCompletionEntriesForNonRelativeModules(
                                 host,
                                 moduleSpecifierResolutionHost,
                                 keys,
-                                key => singleElementArray(getPatternFromFirstMatchingCondition(exports[key], conditions)),
+                                key => {
+                                    const pattern = getPatternFromFirstMatchingCondition(exports[key], conditions);
+                                    if (pattern === undefined) {
+                                        return undefined;
+                                    }
+                                    return singleElementArray(endsWith(key, "/") && endsWith(pattern, "/") ? pattern + "*" : pattern);
+                                },
                                 comparePatternKeys,
                             );
                             return;
diff --git a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
index c5342fe96c577..108703f1404c6 100644
--- a/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
+++ b/tests/baselines/reference/tsserver/fourslashServer/importCompletions_importsMap3.js
@@ -461,7 +461,14 @@ Info seq  [hh:mm:ss:mss] response:
         "isGlobalCompletion": false,
         "isMemberCompletion": false,
         "isNewIdentifierLocation": true,
-        "entries": [],
+        "entries": [
+          {
+            "name": "#internal",
+            "kind": "directory",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
         "defaultCommitCharacters": []
       }
     }
@@ -504,7 +511,14 @@ Info seq  [hh:mm:ss:mss] response:
         "isGlobalCompletion": false,
         "isMemberCompletion": false,
         "isNewIdentifierLocation": true,
-        "entries": [],
+        "entries": [
+          {
+            "name": "foo.js",
+            "kind": "script",
+            "kindModifiers": ".js",
+            "sortText": "11"
+          }
+        ],
         "defaultCommitCharacters": []
       }
     }
\ No newline at end of file
diff --git a/tests/cases/fourslash/importCompletionsPackageJsonExportsTrailingSlash1.ts b/tests/cases/fourslash/importCompletionsPackageJsonExportsTrailingSlash1.ts
new file mode 100644
index 0000000000000..e381945b5d926
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonExportsTrailingSlash1.ts
@@ -0,0 +1,38 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+// @moduleResolution: nodenext
+
+// @Filename: /node_modules/pkg/package.json
+//// {
+////     "name": "pkg",
+////     "version": "1.0.0",
+////     "exports": {
+////       "./test/": "./"
+////     }
+////  }
+
+// @Filename: /node_modules/pkg/foo.d.ts
+//// export function foo(): void;
+
+// @Filename: /package.json
+//// {
+////     "dependencies": {
+////        "pkg": "*"
+////     }
+////  }
+
+// @Filename: /index.ts
+//// import {} from "pkg//*1*/";
+//// import {} from "pkg/test//*2*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["test"],
+    isNewIdentifierLocation: true,
+});
+verify.completions({
+    marker: ["2"],
+    exact: ["foo.js"],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/server/importCompletions_importsMap3.ts b/tests/cases/fourslash/server/importCompletions_importsMap3.ts
index 081317fc00359..01776d771a3db 100644
--- a/tests/cases/fourslash/server/importCompletions_importsMap3.ts
+++ b/tests/cases/fourslash/server/importCompletions_importsMap3.ts
@@ -26,11 +26,11 @@
 
 verify.completions({
     marker: ["1"],
-    exact: [],
+    exact: ["#internal"],
     isNewIdentifierLocation: true,
 });
 verify.completions({
     marker: ["2"],
-    exact: [],
+    exact: ["foo.js"],
     isNewIdentifierLocation: true,
 });

From 07f6c3cbf7b65f9e8185a83d47096a2862b1a105 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Wed, 9 Oct 2024 11:52:10 +0200
Subject: [PATCH 06/26] small tweaks

---
 src/compiler/moduleNameResolver.ts | 30 +++++++++++++-------------
 src/services/stringCompletions.ts  | 34 ++++++++++++++++--------------
 2 files changed, 33 insertions(+), 31 deletions(-)

diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts
index 75dd9a5465764..9e9f8ca4f48e8 100644
--- a/src/compiler/moduleNameResolver.ts
+++ b/src/compiler/moduleNameResolver.ts
@@ -2618,8 +2618,8 @@ function loadModuleFromExports(scope: PackageJsonInfo, extensions: Extensions, s
             mainExport = (scope.contents.packageJsonContent.exports as MapLike<unknown>)["."];
         }
         if (mainExport) {
-            const loadModuleFromTargetImportOrExport = getLoadModuleFromTargetImportOrExport(extensions, state, cache, redirectedReference, subpath, scope, /*isImports*/ false);
-            return loadModuleFromTargetImportOrExport(mainExport, "", /*pattern*/ false, ".");
+            const loadModuleFromTargetExportOrImport = getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirectedReference, subpath, scope, /*isImports*/ false);
+            return loadModuleFromTargetExportOrImport(mainExport, "", /*pattern*/ false, ".");
         }
     }
     else if (allKeysStartWithDot(scope.contents.packageJsonContent.exports as MapLike<unknown>)) {
@@ -2629,7 +2629,7 @@ function loadModuleFromExports(scope: PackageJsonInfo, extensions: Extensions, s
             }
             return toSearchResult(/*value*/ undefined);
         }
-        const result = loadModuleFromImportsOrExports(extensions, state, cache, redirectedReference, subpath, scope.contents.packageJsonContent.exports, scope, /*isImports*/ false);
+        const result = loadModuleFromExportsOrImports(extensions, state, cache, redirectedReference, subpath, scope.contents.packageJsonContent.exports, scope, /*isImports*/ false);
         if (result) {
             return result;
         }
@@ -2663,7 +2663,7 @@ function loadModuleFromImports(extensions: Extensions, moduleName: string, direc
         return toSearchResult(/*value*/ undefined);
     }
 
-    const result = loadModuleFromImportsOrExports(extensions, state, cache, redirectedReference, moduleName, scope.contents.packageJsonContent.imports, scope, /*isImports*/ true);
+    const result = loadModuleFromExportsOrImports(extensions, state, cache, redirectedReference, moduleName, scope.contents.packageJsonContent.imports, scope, /*isImports*/ true);
     if (result) {
         return result;
     }
@@ -2693,12 +2693,12 @@ export function comparePatternKeys(a: string, b: string): Comparison {
     return Comparison.EqualTo;
 }
 
-function loadModuleFromImportsOrExports(extensions: Extensions, state: ModuleResolutionState, cache: ModuleResolutionCache | undefined, redirectedReference: ResolvedProjectReference | undefined, moduleName: string, lookupTable: object, scope: PackageJsonInfo, isImports: boolean): SearchResult<Resolved> | undefined {
-    const loadModuleFromTargetImportOrExport = getLoadModuleFromTargetImportOrExport(extensions, state, cache, redirectedReference, moduleName, scope, isImports);
+function loadModuleFromExportsOrImports(extensions: Extensions, state: ModuleResolutionState, cache: ModuleResolutionCache | undefined, redirectedReference: ResolvedProjectReference | undefined, moduleName: string, lookupTable: object, scope: PackageJsonInfo, isImports: boolean): SearchResult<Resolved> | undefined {
+    const loadModuleFromTargetExportOrImport = getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirectedReference, moduleName, scope, isImports);
 
     if (!endsWith(moduleName, directorySeparator) && !moduleName.includes("*") && hasProperty(lookupTable, moduleName)) {
         const target = (lookupTable as { [idx: string]: unknown; })[moduleName];
-        return loadModuleFromTargetImportOrExport(target, /*subpath*/ "", /*pattern*/ false, moduleName);
+        return loadModuleFromTargetExportOrImport(target, /*subpath*/ "", /*pattern*/ false, moduleName);
     }
     const expandingKeys = toSorted(filter(getOwnKeys(lookupTable as MapLike<unknown>), k => hasOneAsterisk(k) || endsWith(k, "/")), comparePatternKeys);
     for (const potentialTarget of expandingKeys) {
@@ -2706,17 +2706,17 @@ function loadModuleFromImportsOrExports(extensions: Extensions, state: ModuleRes
             const target = (lookupTable as { [idx: string]: unknown; })[potentialTarget];
             const starPos = potentialTarget.indexOf("*");
             const subpath = moduleName.substring(potentialTarget.substring(0, starPos).length, moduleName.length - (potentialTarget.length - 1 - starPos));
-            return loadModuleFromTargetImportOrExport(target, subpath, /*pattern*/ true, potentialTarget);
+            return loadModuleFromTargetExportOrImport(target, subpath, /*pattern*/ true, potentialTarget);
         }
         else if (endsWith(potentialTarget, "*") && startsWith(moduleName, potentialTarget.substring(0, potentialTarget.length - 1))) {
             const target = (lookupTable as { [idx: string]: unknown; })[potentialTarget];
             const subpath = moduleName.substring(potentialTarget.length - 1);
-            return loadModuleFromTargetImportOrExport(target, subpath, /*pattern*/ true, potentialTarget);
+            return loadModuleFromTargetExportOrImport(target, subpath, /*pattern*/ true, potentialTarget);
         }
         else if (startsWith(moduleName, potentialTarget)) {
             const target = (lookupTable as { [idx: string]: unknown; })[potentialTarget];
             const subpath = moduleName.substring(potentialTarget.length);
-            return loadModuleFromTargetImportOrExport(target, subpath, /*pattern*/ false, potentialTarget);
+            return loadModuleFromTargetExportOrImport(target, subpath, /*pattern*/ false, potentialTarget);
         }
     }
 
@@ -2736,9 +2736,9 @@ function hasOneAsterisk(patternKey: string): boolean {
 /**
  * Gets the self-recursive function specialized to retrieving the targeted import/export element for the given resolution configuration
  */
-function getLoadModuleFromTargetImportOrExport(extensions: Extensions, state: ModuleResolutionState, cache: ModuleResolutionCache | undefined, redirectedReference: ResolvedProjectReference | undefined, moduleName: string, scope: PackageJsonInfo, isImports: boolean) {
-    return loadModuleFromTargetImportOrExport;
-    function loadModuleFromTargetImportOrExport(target: unknown, subpath: string, pattern: boolean, key: string): SearchResult<Resolved> | undefined {
+function getLoadModuleFromTargetExportOrImport(extensions: Extensions, state: ModuleResolutionState, cache: ModuleResolutionCache | undefined, redirectedReference: ResolvedProjectReference | undefined, moduleName: string, scope: PackageJsonInfo, isImports: boolean) {
+    return loadModuleFromTargetExportOrImport;
+    function loadModuleFromTargetExportOrImport(target: unknown, subpath: string, pattern: boolean, key: string): SearchResult<Resolved> | undefined {
         if (typeof target === "string") {
             if (!pattern && subpath.length > 0 && !endsWith(target, "/")) {
                 if (state.traceEnabled) {
@@ -2801,7 +2801,7 @@ function getLoadModuleFromTargetImportOrExport(extensions: Extensions, state: Mo
                     if (condition === "default" || state.conditions.includes(condition) || isApplicableVersionedTypesKey(state.conditions, condition)) {
                         traceIfEnabled(state, Diagnostics.Matched_0_condition_1, isImports ? "imports" : "exports", condition);
                         const subTarget = (target as MapLike<unknown>)[condition];
-                        const result = loadModuleFromTargetImportOrExport(subTarget, subpath, pattern, key);
+                        const result = loadModuleFromTargetExportOrImport(subTarget, subpath, pattern, key);
                         if (result) {
                             traceIfEnabled(state, Diagnostics.Resolved_under_condition_0, condition);
                             traceIfEnabled(state, Diagnostics.Exiting_conditional_exports);
@@ -2826,7 +2826,7 @@ function getLoadModuleFromTargetImportOrExport(extensions: Extensions, state: Mo
                     return toSearchResult(/*value*/ undefined);
                 }
                 for (const elem of target) {
-                    const result = loadModuleFromTargetImportOrExport(elem, subpath, pattern, key);
+                    const result = loadModuleFromTargetExportOrImport(elem, subpath, pattern, key);
                     if (result) {
                         return result;
                     }
diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index eca91bb54c02c..fc24a979ad2ac 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -828,7 +828,7 @@ function getCompletionEntriesForDirectoryFragment(
     return result;
 }
 
-function getFilenameWithExtensionOption(name: string, program: Program, extensionOptions: ExtensionOptions, isExportsWildcard: boolean): { name: string; extension: Extension | undefined; } {
+function getFilenameWithExtensionOption(name: string, program: Program, extensionOptions: ExtensionOptions, isExportsOrImportsWildcard: boolean): { name: string; extension: Extension | undefined; } {
     const nonJsResult = moduleSpecifiers.tryGetRealFileNameForNonJsDeclarationFileName(name);
     if (nonJsResult) {
         return { name: nonJsResult, extension: tryGetExtensionFromPath(nonJsResult) };
@@ -844,7 +844,7 @@ function getFilenameWithExtensionOption(name: string, program: Program, extensio
         extensionOptions.importingSourceFile,
     ).getAllowedEndingsInPreferredOrder(extensionOptions.resolutionMode);
 
-    if (isExportsWildcard) {
+    if (isExportsOrImportsWildcard) {
         // If we're completing `import {} from "foo/|"` and subpaths are available via `"exports": { "./*": "./src/*" }`,
         // the completion must be a (potentially extension-swapped) file name. Dropping extensions and index files is not allowed.
         allowedEndings = allowedEndings.filter(e => e !== ModuleSpecifierEnding.Minimal && e !== ModuleSpecifierEnding.Index);
@@ -861,7 +861,7 @@ function getFilenameWithExtensionOption(name: string, program: Program, extensio
     }
 
     if (
-        !isExportsWildcard &&
+        !isExportsOrImportsWildcard &&
         (allowedEndings[0] === ModuleSpecifierEnding.Minimal || allowedEndings[0] === ModuleSpecifierEnding.Index) &&
         fileExtensionIsOneOf(name, [Extension.Js, Extension.Jsx, Extension.Ts, Extension.Tsx, Extension.Dts])
     ) {
@@ -893,11 +893,11 @@ function addCompletionEntriesFromPaths(
         const lengthB = typeof patternB === "object" ? patternB.prefix.length : b.length;
         return compareValues(lengthB, lengthA);
     };
-    return addCompletionEntriesFromPathsOrExports(result, /*isExports*/ false, /*isImports*/ false, fragment, baseDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, getOwnKeys(paths), getPatternsForKey, comparePaths);
+    return addCompletionEntriesFromPathsOrExportsOrImports(result, /*isExports*/ false, /*isImports*/ false, fragment, baseDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, getOwnKeys(paths), getPatternsForKey, comparePaths);
 }
 
 /** @returns whether `fragment` was a match for any `paths` (which should indicate whether any other path completions should be offered) */
-function addCompletionEntriesFromPathsOrExports(
+function addCompletionEntriesFromPathsOrExportsOrImports(
     result: NameAndKindSet,
     isExports: boolean,
     isImports: boolean,
@@ -917,7 +917,7 @@ function addCompletionEntriesFromPathsOrExports(
         if (key === ".") continue;
         const keyWithoutLeadingDotSlash = key
             .replace(/^\.\//, "") // remove leading "./"
-            + (endsWith(key, "/") ? "*" : ""); // normalize trailing `/` to `/*`
+            + ((isExports || isImports) && endsWith(key, "/") ? "*" : ""); // normalize trailing `/` to `/*`
         const patterns = getPatternsForKey(key);
         if (patterns) {
             const pathPattern = tryParsePattern(keyWithoutLeadingDotSlash);
@@ -942,7 +942,7 @@ function addCompletionEntriesFromPathsOrExports(
             if (typeof pathPattern === "string" || matchedPath === undefined || comparePaths(keyWithoutLeadingDotSlash, matchedPath) !== Comparison.GreaterThan) {
                 pathResults.push({
                     matchedPattern: isMatch,
-                    results: getCompletionsForPathMapping(keyWithoutLeadingDotSlash, patterns, fragment, baseDirectory, extensionOptions, (isExports || isImports) && endsWith(keyWithoutLeadingDotSlash, "*"), isImports, program, host, moduleSpecifierResolutionHost)
+                    results: getCompletionsForPathMapping(keyWithoutLeadingDotSlash, patterns, fragment, baseDirectory, extensionOptions, isExports, isImports, program, host, moduleSpecifierResolutionHost)
                         .map(({ name, kind, extension }) => nameAndKind(name, kind, extension)),
                 });
             }
@@ -1025,7 +1025,7 @@ function getCompletionEntriesForNonRelativeModules(
 
                             const keys = getOwnKeys(imports);
                             const conditions = getConditions(compilerOptions, mode);
-                            addCompletionEntriesFromPathsOrExports(
+                            addCompletionEntriesFromPathsOrExportsOrImports(
                                 result,
                                 /*isExports*/ false,
                                 /*isImports*/ true,
@@ -1079,7 +1079,7 @@ function getCompletionEntriesForNonRelativeModules(
                             const keys = getOwnKeys(exports);
                             const fragmentSubpath = components.join("/") + (components.length && hasTrailingDirectorySeparator(fragment) ? "/" : "");
                             const conditions = getConditions(compilerOptions, mode);
-                            addCompletionEntriesFromPathsOrExports(
+                            addCompletionEntriesFromPathsOrExportsOrImports(
                                 result,
                                 /*isExports*/ true,
                                 /*isImports*/ false,
@@ -1108,7 +1108,7 @@ function getCompletionEntriesForNonRelativeModules(
                             const keys = getOwnKeys(imports);
                             const fragmentSubpath = components.join("/") + (components.length && hasTrailingDirectorySeparator(fragment) ? "/" : "");
                             const conditions = getConditions(compilerOptions, mode);
-                            addCompletionEntriesFromPathsOrExports(
+                            addCompletionEntriesFromPathsOrExportsOrImports(
                                 result,
                                 /*isExports*/ false,
                                 /*isImports*/ true,
@@ -1160,7 +1160,7 @@ function getCompletionsForPathMapping(
     fragment: string,
     packageDirectory: string,
     extensionOptions: ExtensionOptions,
-    isExportsWildcard: boolean,
+    isExports: boolean,
     isImports: boolean,
     program: Program,
     host: LanguageServiceHost,
@@ -1178,9 +1178,9 @@ function getCompletionsForPathMapping(
     const remainingFragment = tryRemovePrefix(fragment, parsedPath.prefix);
     if (remainingFragment === undefined) {
         const starIsFullPathComponent = endsWith(path, "/*");
-        return starIsFullPathComponent ? justPathMappingName(parsedPath.prefix, ScriptElementKind.directory) : flatMap(patterns, pattern => getModulesForPathsPattern("", packageDirectory, pattern, extensionOptions, isExportsWildcard, isImports, program, host, moduleSpecifierResolutionHost)?.map(({ name, ...rest }) => ({ name: parsedPath.prefix + name + parsedPath.suffix, ...rest })));
+        return starIsFullPathComponent ? justPathMappingName(parsedPath.prefix, ScriptElementKind.directory) : flatMap(patterns, pattern => getModulesForPathsPattern("", packageDirectory, pattern, extensionOptions, isExports, isImports, program, host, moduleSpecifierResolutionHost)?.map(({ name, ...rest }) => ({ name: parsedPath.prefix + name + parsedPath.suffix, ...rest })));
     }
-    return flatMap(patterns, pattern => getModulesForPathsPattern(remainingFragment, packageDirectory, pattern, extensionOptions, isExportsWildcard, isImports, program, host, moduleSpecifierResolutionHost));
+    return flatMap(patterns, pattern => getModulesForPathsPattern(remainingFragment, packageDirectory, pattern, extensionOptions, isExports, isImports, program, host, moduleSpecifierResolutionHost));
 
     function justPathMappingName(name: string, kind: ScriptElementKind.directory | ScriptElementKind.scriptElement): readonly NameAndKind[] {
         return startsWith(name, fragment) ? [{ name: removeTrailingDirectorySeparator(name), kind, extension: undefined }] : emptyArray;
@@ -1192,7 +1192,7 @@ function getModulesForPathsPattern(
     packageDirectory: string,
     pattern: string,
     extensionOptions: ExtensionOptions,
-    isExportsWildcard: boolean,
+    isExports: boolean,
     isImports: boolean,
     program: Program,
     host: LanguageServiceHost,
@@ -1240,13 +1240,15 @@ function getModulesForPathsPattern(
         ? matchingSuffixes.map(suffix => "**/*" + suffix)
         : ["./*"];
 
+    const isExportsOrImportsWildcard = (isExports || isImports) && endsWith(pattern, "/*");
+
     let matches = mapDefined(tryReadDirectory(host, baseDirectory, extensionOptions.extensionsToSearch, /*exclude*/ undefined, includeGlobs), match => {
         const trimmedWithPattern = trimPrefixAndSuffix(match, completePrefix);
         if (trimmedWithPattern) {
             if (containsSlash(trimmedWithPattern)) {
                 return directoryResult(getPathComponents(removeLeadingDirectorySeparator(trimmedWithPattern))[1]);
             }
-            const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, program, extensionOptions, isExportsWildcard);
+            const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, program, extensionOptions, isExportsOrImportsWildcard);
             return nameAndKind(name, ScriptElementKind.scriptElement, extension);
         }
     });
@@ -1266,7 +1268,7 @@ function getModulesForPathsPattern(
                 if (containsSlash(trimmedWithPattern)) {
                     return directoryResult(getPathComponents(removeLeadingDirectorySeparator(trimmedWithPattern))[1]);
                 }
-                const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, program, extensionOptions, isExportsWildcard);
+                const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, program, extensionOptions, isExportsOrImportsWildcard);
                 return nameAndKind(name, ScriptElementKind.scriptElement, extension);
             }
         });

From 117415a836caffca6b7e062379eedb2db68edd46 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Wed, 9 Oct 2024 12:15:25 +0200
Subject: [PATCH 07/26] fixed lint

---
 src/services/stringCompletions.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index fc24a979ad2ac..89d6eee0ef1a9 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -808,7 +808,7 @@ function getCompletionEntriesForDirectoryFragment(
                 continue;
             }
 
-            const { name, extension } = getFilenameWithExtensionOption(getBaseFileName(filePath), program, extensionOptions, /*isExportsWildcard*/ false);
+            const { name, extension } = getFilenameWithExtensionOption(getBaseFileName(filePath), program, extensionOptions, /*isExportsOrImportsWildcard*/ false);
             result.add(nameAndKind(name, ScriptElementKind.scriptElement, extension));
         }
     }

From db0d41648f7477baad1c9d65606a0a1071f7fb5e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Sat, 12 Oct 2024 17:45:57 +0200
Subject: [PATCH 08/26] pass `moduleSpecifierResolutionHost` everywhere

---
 src/services/stringCompletions.ts | 45 ++++++++++++++++---------------
 1 file changed, 24 insertions(+), 21 deletions(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 89d6eee0ef1a9..6ff223d2e163b 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -206,7 +206,7 @@ export function getStringLiteralCompletions(
     includeSymbol: boolean,
 ): CompletionInfo | undefined {
     if (isInReferenceComment(sourceFile, position)) {
-        const entries = getTripleSlashReferenceCompletion(sourceFile, position, program, host);
+        const entries = getTripleSlashReferenceCompletion(sourceFile, position, program, host, createModuleSpecifierResolutionHost(program, host));
         return entries && convertPathCompletions(entries);
     }
     if (isInString(sourceFile, position, contextToken)) {
@@ -647,11 +647,12 @@ function getStringLiteralCompletionsFromModuleNamesWorker(sourceFile: SourceFile
     const scriptDirectory = getDirectoryPath(scriptPath);
     const compilerOptions = program.getCompilerOptions();
     const typeChecker = program.getTypeChecker();
+    const moduleSpecifierResolutionHost = createModuleSpecifierResolutionHost(program, host);
     const extensionOptions = getExtensionOptions(compilerOptions, ReferenceKind.ModuleSpecifier, sourceFile, typeChecker, preferences, mode);
 
     return isPathRelativeToScript(literalValue) || !compilerOptions.baseUrl && !compilerOptions.paths && (isRootedDiskPath(literalValue) || isUrl(literalValue))
-        ? getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, program, host, scriptPath, extensionOptions)
-        : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, mode, program, host, createModuleSpecifierResolutionHost(program, host), extensionOptions);
+        ? getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, program, host, moduleSpecifierResolutionHost, scriptPath, extensionOptions)
+        : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, mode, program, host, moduleSpecifierResolutionHost, extensionOptions);
 }
 
 interface ExtensionOptions {
@@ -671,7 +672,7 @@ function getExtensionOptions(compilerOptions: CompilerOptions, referenceKind: Re
         resolutionMode,
     };
 }
-function getCompletionEntriesForRelativeModules(literalValue: string, scriptDirectory: string, program: Program, host: LanguageServiceHost, scriptPath: Path, extensionOptions: ExtensionOptions) {
+function getCompletionEntriesForRelativeModules(literalValue: string, scriptDirectory: string, program: Program, host: LanguageServiceHost, moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost, scriptPath: Path, extensionOptions: ExtensionOptions) {
     const compilerOptions = program.getCompilerOptions();
     if (compilerOptions.rootDirs) {
         return getCompletionEntriesForDirectoryFragmentWithRootDirs(
@@ -681,11 +682,12 @@ function getCompletionEntriesForRelativeModules(literalValue: string, scriptDire
             extensionOptions,
             program,
             host,
+            moduleSpecifierResolutionHost,
             scriptPath,
         );
     }
     else {
-        return arrayFrom(getCompletionEntriesForDirectoryFragment(literalValue, scriptDirectory, extensionOptions, program, host, /*moduleSpecifierIsRelative*/ true, scriptPath).values());
+        return arrayFrom(getCompletionEntriesForDirectoryFragment(literalValue, scriptDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, /*moduleSpecifierIsRelative*/ true, scriptPath).values());
     }
 }
 
@@ -723,13 +725,13 @@ function getBaseDirectoriesFromRootDirs(rootDirs: string[], basePath: string, sc
     );
 }
 
-function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs: string[], fragment: string, scriptDirectory: string, extensionOptions: ExtensionOptions, program: Program, host: LanguageServiceHost, exclude: string): readonly NameAndKind[] {
+function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs: string[], fragment: string, scriptDirectory: string, extensionOptions: ExtensionOptions, program: Program, host: LanguageServiceHost, moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost, exclude: string): readonly NameAndKind[] {
     const compilerOptions = program.getCompilerOptions();
     const basePath = compilerOptions.project || host.getCurrentDirectory();
     const ignoreCase = !(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames());
     const baseDirectories = getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptDirectory, ignoreCase);
     return deduplicate<NameAndKind>(
-        flatMap(baseDirectories, baseDirectory => arrayFrom(getCompletionEntriesForDirectoryFragment(fragment, baseDirectory, extensionOptions, program, host, /*moduleSpecifierIsRelative*/ true, exclude).values())),
+        flatMap(baseDirectories, baseDirectory => arrayFrom(getCompletionEntriesForDirectoryFragment(fragment, baseDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, /*moduleSpecifierIsRelative*/ true, exclude).values())),
         (itemA, itemB) => itemA.name === itemB.name && itemA.kind === itemB.kind && itemA.extension === itemB.extension,
     );
 }
@@ -747,6 +749,7 @@ function getCompletionEntriesForDirectoryFragment(
     extensionOptions: ExtensionOptions,
     program: Program,
     host: LanguageServiceHost,
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost,
     moduleSpecifierIsRelative: boolean,
     exclude?: string,
     result = createNameAndKindSet(),
@@ -785,7 +788,7 @@ function getCompletionEntriesForDirectoryFragment(
                 if (versionPaths) {
                     const packageDirectory = getDirectoryPath(packageJsonPath);
                     const pathInPackage = absolutePath.slice(ensureTrailingDirectorySeparator(packageDirectory).length);
-                    if (addCompletionEntriesFromPaths(result, pathInPackage, packageDirectory, extensionOptions, program, host, /*moduleSpecifierResolutionHost*/ undefined, versionPaths)) {
+                    if (addCompletionEntriesFromPaths(result, pathInPackage, packageDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, versionPaths)) {
                         // A true result means one of the `versionPaths` was matched, which will block relative resolution
                         // to files and folders from here. All reachable paths given the pattern match are already added.
                         return result;
@@ -882,7 +885,7 @@ function addCompletionEntriesFromPaths(
     extensionOptions: ExtensionOptions,
     program: Program,
     host: LanguageServiceHost,
-    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined,
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost,
     paths: MapLike<string[]>,
 ) {
     const getPatternsForKey = (key: string) => paths[key];
@@ -906,7 +909,7 @@ function addCompletionEntriesFromPathsOrExportsOrImports(
     extensionOptions: ExtensionOptions,
     program: Program,
     host: LanguageServiceHost,
-    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined,
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost,
     keys: readonly string[],
     getPatternsForKey: (key: string) => string[] | undefined,
     comparePaths: (a: string, b: string) => Comparison,
@@ -978,7 +981,7 @@ function getCompletionEntriesForNonRelativeModules(
 
     if (baseUrl) {
         const absolute = normalizePath(combinePaths(host.getCurrentDirectory(), baseUrl));
-        getCompletionEntriesForDirectoryFragment(fragment, absolute, extensionOptions, program, host, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
+        getCompletionEntriesForDirectoryFragment(fragment, absolute, extensionOptions, program, host, moduleSpecifierResolutionHost, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
     }
 
     if (paths) {
@@ -991,7 +994,7 @@ function getCompletionEntriesForNonRelativeModules(
         result.add(nameAndKind(ambientName, ScriptElementKind.externalModuleName, /*extension*/ undefined));
     }
 
-    getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDirectory, extensionOptions, result);
+    getCompletionEntriesFromTypings(program, host, moduleSpecifierResolutionHost, scriptPath, fragmentDirectory, extensionOptions, result);
 
     if (moduleResolutionUsesNodeModules(moduleResolution)) {
         // If looking for a global package name, don't just include everything in `node_modules` because that includes dependencies' own dependencies.
@@ -1011,7 +1014,7 @@ function getCompletionEntriesForNonRelativeModules(
             let ancestorLookup: (directory: string) => void | undefined = ancestor => {
                 const nodeModules = combinePaths(ancestor, "node_modules");
                 if (tryDirectoryExists(host, nodeModules)) {
-                    getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, program, host, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
+                    getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, program, host, moduleSpecifierResolutionHost, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
                 }
                 if (!seenPackageScope) {
                     const packageFile = combinePaths(ancestor, "package.json");
@@ -1164,7 +1167,7 @@ function getCompletionsForPathMapping(
     isImports: boolean,
     program: Program,
     host: LanguageServiceHost,
-    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined,
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost,
 ): readonly NameAndKind[] {
     const parsedPath = tryParsePattern(path);
     if (!parsedPath) {
@@ -1196,7 +1199,7 @@ function getModulesForPathsPattern(
     isImports: boolean,
     program: Program,
     host: LanguageServiceHost,
-    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost | undefined,
+    moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost,
 ): readonly NameAndKind[] | undefined {
     if (!host.readDirectory) {
         return undefined;
@@ -1225,7 +1228,7 @@ function getModulesForPathsPattern(
     const matchingSuffixes = [...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []), declarationExtension && changeExtension(normalizedSuffix, declarationExtension), normalizedSuffix].filter(isString);
     // Need to normalize after combining: If we combinePaths("a", "../b"), we want "b" and not "a/../b".
     const baseDirectory = normalizePath(combinePaths(packageDirectory, expandedPrefixDirectory));
-    const inputBaseDirectory = isImports && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, !hostUsesCaseSensitiveFileNames(moduleSpecifierResolutionHost!), program.getCompilerOptions().outDir, () => moduleSpecifierResolutionHost!.getCommonSourceDirectory());
+    const inputBaseDirectory = isImports && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, !hostUsesCaseSensitiveFileNames(moduleSpecifierResolutionHost), program.getCompilerOptions().outDir, () => moduleSpecifierResolutionHost.getCommonSourceDirectory());
     const completePrefix = fragmentHasPath ? baseDirectory : ensureTrailingDirectorySeparator(baseDirectory) + normalizedPrefixBase;
 
     // If we have a suffix, then we read the directory all the way down to avoid returning completions for
@@ -1310,7 +1313,7 @@ function getAmbientModuleCompletions(fragment: string, fragmentDirectory: string
     return nonRelativeModuleNames;
 }
 
-function getTripleSlashReferenceCompletion(sourceFile: SourceFile, position: number, program: Program, host: LanguageServiceHost): readonly PathCompletion[] | undefined {
+function getTripleSlashReferenceCompletion(sourceFile: SourceFile, position: number, program: Program, host: LanguageServiceHost, moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost): readonly PathCompletion[] | undefined {
     const compilerOptions = program.getCompilerOptions();
     const token = getTokenAtPosition(sourceFile, position);
     const commentRanges = getLeadingCommentRanges(sourceFile.text, token.pos);
@@ -1326,13 +1329,13 @@ function getTripleSlashReferenceCompletion(sourceFile: SourceFile, position: num
 
     const [, prefix, kind, toComplete] = match;
     const scriptPath = getDirectoryPath(sourceFile.path);
-    const names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, ReferenceKind.Filename, sourceFile), program, host, /*moduleSpecifierIsRelative*/ true, sourceFile.path)
-        : kind === "types" ? getCompletionEntriesFromTypings(host, program, scriptPath, getFragmentDirectory(toComplete), getExtensionOptions(compilerOptions, ReferenceKind.ModuleSpecifier, sourceFile))
+    const names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, ReferenceKind.Filename, sourceFile), program, host, moduleSpecifierResolutionHost, /*moduleSpecifierIsRelative*/ true, sourceFile.path)
+        : kind === "types" ? getCompletionEntriesFromTypings(program, host, moduleSpecifierResolutionHost, scriptPath, getFragmentDirectory(toComplete), getExtensionOptions(compilerOptions, ReferenceKind.ModuleSpecifier, sourceFile))
         : Debug.fail();
     return addReplacementSpans(toComplete, range.pos + prefix.length, arrayFrom(names.values()));
 }
 
-function getCompletionEntriesFromTypings(host: LanguageServiceHost, program: Program, scriptPath: string, fragmentDirectory: string | undefined, extensionOptions: ExtensionOptions, result = createNameAndKindSet()): NameAndKindSet {
+function getCompletionEntriesFromTypings(program: Program, host: LanguageServiceHost, moduleSpecifierResolutionHost: ModuleSpecifierResolutionHost, scriptPath: string, fragmentDirectory: string | undefined, extensionOptions: ExtensionOptions, result = createNameAndKindSet()): NameAndKindSet {
     const options = program.getCompilerOptions();
     // Check for typings specified in compiler options
     const seen = new Map<string, true>();
@@ -1368,7 +1371,7 @@ function getCompletionEntriesFromTypings(host: LanguageServiceHost, program: Pro
                 const baseDirectory = combinePaths(directory, typeDirectoryName);
                 const remainingFragment = tryRemoveDirectoryPrefix(fragmentDirectory, packageName, hostGetCanonicalFileName(host));
                 if (remainingFragment !== undefined) {
-                    getCompletionEntriesForDirectoryFragment(remainingFragment, baseDirectory, extensionOptions, program, host, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
+                    getCompletionEntriesForDirectoryFragment(remainingFragment, baseDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
                 }
             }
         }

From 294c7da063addd28c66dcd21c49eaed51bf08d9b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Sat, 12 Oct 2024 21:07:54 +0200
Subject: [PATCH 09/26] `getMatchesWithPrefix` helper

---
 src/services/stringCompletions.ts | 28 +++++++++++-----------------
 1 file changed, 11 insertions(+), 17 deletions(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 6ff223d2e163b..e5da2e2b7a120 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -1245,16 +1245,7 @@ function getModulesForPathsPattern(
 
     const isExportsOrImportsWildcard = (isExports || isImports) && endsWith(pattern, "/*");
 
-    let matches = mapDefined(tryReadDirectory(host, baseDirectory, extensionOptions.extensionsToSearch, /*exclude*/ undefined, includeGlobs), match => {
-        const trimmedWithPattern = trimPrefixAndSuffix(match, completePrefix);
-        if (trimmedWithPattern) {
-            if (containsSlash(trimmedWithPattern)) {
-                return directoryResult(getPathComponents(removeLeadingDirectorySeparator(trimmedWithPattern))[1]);
-            }
-            const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, program, extensionOptions, isExportsOrImportsWildcard);
-            return nameAndKind(name, ScriptElementKind.scriptElement, extension);
-        }
-    });
+    let matches = getMatchesWithPrefix(baseDirectory, completePrefix);
 
     // If we had a suffix, we already recursively searched for all possible files that could match
     // it and returned the directories leading to those files. Otherwise, assume any directory could
@@ -1265,8 +1256,16 @@ function getModulesForPathsPattern(
 
     if (inputBaseDirectory && inputBaseDirectory !== baseDirectory) {
         const completeInputPrefix = fragmentHasPath ? inputBaseDirectory : ensureTrailingDirectorySeparator(inputBaseDirectory) + normalizedPrefixBase;
-        const inputMatches = mapDefined(tryReadDirectory(host, inputBaseDirectory, extensionOptions.extensionsToSearch, /*exclude*/ undefined, includeGlobs), match => {
-            const trimmedWithPattern = trimPrefixAndSuffix(match, completeInputPrefix);
+        matches = concatenate(matches, getMatchesWithPrefix(inputBaseDirectory, completeInputPrefix));
+    }
+
+    matches = concatenate(matches, directories);
+
+    return matches;
+
+    function getMatchesWithPrefix(directory: string, prefix: string) {
+        return mapDefined(tryReadDirectory(host, directory, extensionOptions.extensionsToSearch, /*exclude*/ undefined, includeGlobs), match => {
+            const trimmedWithPattern = trimPrefixAndSuffix(match, prefix);
             if (trimmedWithPattern) {
                 if (containsSlash(trimmedWithPattern)) {
                     return directoryResult(getPathComponents(removeLeadingDirectorySeparator(trimmedWithPattern))[1]);
@@ -1275,13 +1274,8 @@ function getModulesForPathsPattern(
                 return nameAndKind(name, ScriptElementKind.scriptElement, extension);
             }
         });
-        matches = concatenate(matches, inputMatches);
     }
 
-    matches = concatenate(matches, directories);
-
-    return matches;
-
     function trimPrefixAndSuffix(path: string, prefix: string): string | undefined {
         return firstDefined(matchingSuffixes, suffix => {
             const inner = withoutStartAndEnd(normalizePath(path), prefix, suffix);

From 0d0b8814d197bb2c2aa79cdf926699f3957ebc78 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Sun, 13 Oct 2024 22:07:04 +0200
Subject: [PATCH 10/26] add more tests but break some of the existing ones

---
 src/services/stringCompletions.ts             |  9 ++-
 ...ackageJsonImportsBundlerNoNodeCondition.ts | 31 +++++++++
 ...tionsPackageJsonImportsCustomConditions.ts | 28 ++++++++
 ...hCompletionsPackageJsonImportsWildcard1.ts | 45 +++++++++++++
 ...CompletionsPackageJsonImportsWildcard10.ts | 28 ++++++++
 ...CompletionsPackageJsonImportsWildcard11.ts | 27 ++++++++
 ...hCompletionsPackageJsonImportsWildcard2.ts | 42 ++++++++++++
 ...hCompletionsPackageJsonImportsWildcard3.ts | 45 +++++++++++++
 ...hCompletionsPackageJsonImportsWildcard4.ts | 64 +++++++++++++++++++
 ...hCompletionsPackageJsonImportsWildcard5.ts | 56 ++++++++++++++++
 ...hCompletionsPackageJsonImportsWildcard6.ts | 31 +++++++++
 ...hCompletionsPackageJsonImportsWildcard7.ts | 25 ++++++++
 ...hCompletionsPackageJsonImportsWildcard8.ts | 28 ++++++++
 ...hCompletionsPackageJsonImportsWildcard9.ts | 26 ++++++++
 14 files changed, 480 insertions(+), 5 deletions(-)
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsBundlerNoNodeCondition.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsCustomConditions.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard1.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard10.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard11.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard2.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard3.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard4.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard5.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard6.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard7.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard8.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard9.ts

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index e5da2e2b7a120..b4f30f3323d6d 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -1221,14 +1221,13 @@ function getModulesForPathsPattern(
 
     // Try and expand the prefix to include any path from the fragment so that we can limit the readDirectory call
     const expandedPrefixDirectory = fragmentHasPath ? combinePaths(normalizedPrefixDirectory, normalizedPrefixBase + fragmentDirectory) : normalizedPrefixDirectory;
-
-    const normalizedSuffix = normalizePath(parsed.suffix);
-    const declarationExtension = normalizedSuffix && getDeclarationEmitExtensionForPath("_" + normalizedSuffix);
-    const inputExtension = isImports && normalizedSuffix ? getPossibleOriginalInputExtensionForExtension("_" + normalizedSuffix) : undefined;
-    const matchingSuffixes = [...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []), declarationExtension && changeExtension(normalizedSuffix, declarationExtension), normalizedSuffix].filter(isString);
     // Need to normalize after combining: If we combinePaths("a", "../b"), we want "b" and not "a/../b".
     const baseDirectory = normalizePath(combinePaths(packageDirectory, expandedPrefixDirectory));
     const inputBaseDirectory = isImports && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, !hostUsesCaseSensitiveFileNames(moduleSpecifierResolutionHost), program.getCompilerOptions().outDir, () => moduleSpecifierResolutionHost.getCommonSourceDirectory());
+    const normalizedSuffix = normalizePath(parsed.suffix);
+    const declarationExtension = normalizedSuffix && getDeclarationEmitExtensionForPath("_" + normalizedSuffix);
+    const inputExtension = inputBaseDirectory && inputBaseDirectory !== baseDirectory && normalizedSuffix ? getPossibleOriginalInputExtensionForExtension("_" + normalizedSuffix) : undefined;
+    const matchingSuffixes = [...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []), declarationExtension && changeExtension(normalizedSuffix, declarationExtension), normalizedSuffix].filter(isString);
     const completePrefix = fragmentHasPath ? baseDirectory : ensureTrailingDirectorySeparator(baseDirectory) + normalizedPrefixBase;
 
     // If we have a suffix, then we read the directory all the way down to avoid returning completions for
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsBundlerNoNodeCondition.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsBundlerNoNodeCondition.ts
new file mode 100644
index 0000000000000..324c51f0a696b
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsBundlerNoNodeCondition.ts
@@ -0,0 +1,31 @@
+/// <reference path="fourslash.ts" />
+
+// @moduleResolution: bundler
+
+// @Filename: /package.json
+//// {
+////   "name": "foo",
+////   "imports": {
+////     "#only-for-node": {
+////       "node": "./something.js"
+////     },
+////     "#for-everywhere": "./other.js",
+////   }
+//// }
+
+// @Filename: /something.d.ts
+//// export const index = 0;
+
+// @Filename: /other.d.ts
+//// export const index = 0;
+
+// @Filename: /index.ts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#for-everywhere", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsCustomConditions.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsCustomConditions.ts
new file mode 100644
index 0000000000000..81a4da924773e
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsCustomConditions.ts
@@ -0,0 +1,28 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+// @customConditions: custom-condition
+
+// @Filename: /package.json
+//// {
+////   "name": "foo",
+////   "imports": {
+////     "#only-with-custom-conditions": {
+////       "custom-condition": "./something.js"
+////     },
+////   }
+//// }
+
+// @Filename: /something.d.ts
+//// export const index = 0;
+
+// @Filename: /index.ts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#only-with-custom-conditions", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard1.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard1.ts
new file mode 100644
index 0000000000000..274412a2fe8d5
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard1.ts
@@ -0,0 +1,45 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "name": "foo",
+////   "main": "dist/index.js",
+////   "module": "dist/index.mjs",
+////   "types": "dist/index.d.ts",
+////   "imports": {
+////     "#*": {
+////       "types": "./dist/*.d.ts",
+////       "import": "./dist/*.mjs",
+////       "default": "./dist/*.js"
+////     },
+////     "#arguments": {
+////       "types": "./dist/arguments/index.d.ts",
+////       "import": "./dist/arguments/index.mjs",
+////       "default": "./dist/arguments/index.js"
+////     }
+////   }
+//// }
+
+// @Filename: /dist/index.d.ts
+//// export const index = 0;
+
+// @Filename: /dist/blah.d.ts
+//// export const blah = 0;
+
+// @Filename: /dist/arguments/index.d.ts
+//// export const arguments = 0;
+
+// @Filename: /index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+    { name: "#index", kind: "script", kindModifiers: "" },
+    { name: "#arguments", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard10.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard10.ts
new file mode 100644
index 0000000000000..129e291e4c2ae
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard10.ts
@@ -0,0 +1,28 @@
+/// <reference path="fourslash.ts" />
+
+// @module: preserve
+// @moduleResolution: bundler
+// @allowImportingTsExtensions: true
+// @jsx: react
+
+// @Filename: /package.json
+//// {
+////   "name": "repo",
+////   "imports": {
+////     "#*": "./src/*"
+////   }
+//// }
+
+// @Filename: /src/card.tsx
+//// export {};
+
+// @Filename: /main.ts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#card.tsx", kind: "script", kindModifiers: ".tsx" },
+  ],
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard11.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard11.ts
new file mode 100644
index 0000000000000..a355b245eb908
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard11.ts
@@ -0,0 +1,27 @@
+/// <reference path="fourslash.ts" />
+
+// @module: preserve
+// @moduleResolution: bundler
+// @jsx: react
+
+// @Filename: /package.json
+//// {
+////   "name": "repo",
+////   "imports": {
+////     "#*": "./src/*"
+////   }
+//// }
+
+// @Filename: /src/card.tsx
+//// export {};
+
+// @Filename: /main.ts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#card.js", kind: "script", kindModifiers: ".js" },
+  ],
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard2.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard2.ts
new file mode 100644
index 0000000000000..0e53d02ecc378
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard2.ts
@@ -0,0 +1,42 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "name": "salesforce-pageobjects",
+////   "version": "1.0.0",
+////   "imports": {
+////     "#*": {
+////       "types": "./dist/*.d.ts",
+////       "import": "./dist/*.mjs",
+////       "default": "./dist/*.js"
+////     }
+////   }
+//// }
+
+// @Filename: /dist/action/pageObjects/actionRenderer.d.ts
+//// export const actionRenderer = 0;
+
+// @Filename: /index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [{ name: "#action", kind: "directory" }]
+});
+
+edit.insert("#action/");
+
+verify.completions({
+  isNewIdentifierLocation: true,
+  exact: [{ name: "pageObjects", kind: "directory" }],
+});
+
+edit.insert("pageObjects/");
+
+verify.completions({
+  isNewIdentifierLocation: true,
+  exact: [{ name: "actionRenderer", kind: "script" }],
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard3.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard3.ts
new file mode 100644
index 0000000000000..e5ca68e643938
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard3.ts
@@ -0,0 +1,45 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "types": "index.d.ts",
+////   "imports": {
+////     "#component-*": {
+////       "types@>=4.3.5": "types/components/*.d.ts"
+////     }
+////   }
+//// }
+
+// @Filename: /nope.d.ts
+//// export const nope = 0;
+
+// @Filename: /types/components/index.d.ts
+//// export const index = 0;
+
+// @Filename: /types/components/blah.d.ts
+//// export const blah = 0;
+
+// @Filename: /types/components/subfolder/one.d.ts
+//// export const one = 0;
+
+// @Filename: /a.ts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#component-blah", kind: "script" },
+    { name: "#component-index", kind: "script" },
+    { name: "#component-subfolder", kind: "directory" },
+  ],
+});
+
+edit.insert("#component-subfolder/");
+
+verify.completions({
+  isNewIdentifierLocation: true,
+  exact: [{ name: "one", kind: "script" }],
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard4.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard4.ts
new file mode 100644
index 0000000000000..045b25b5e0607
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard4.ts
@@ -0,0 +1,64 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "types": "index.d.ts",
+////   "exports": {
+////     "#*": "dist/*",
+////     "#foo/*": "dist/*",
+////     "#bar/*": "dist/*",
+////     "#exact-match": "dist/index.d.ts"
+////   }
+//// }
+
+// @Filename: /nope.d.ts
+//// export const nope = 0;
+
+// @Filename: /dist/index.d.ts
+//// export const index = 0;
+
+// @Filename: /dist/blah.d.ts
+//// export const blah = 0;
+
+// @Filename: /dist/foo/onlyInFooFolder.d.ts
+//// export const foo = 0;
+
+// @Filename: /dist/subfolder/one.d.ts
+//// export const one = 0;
+
+// @Filename: /a.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah.js", kind: "script", kindModifiers: ".js" },
+    { name: "#index.js", kind: "script", kindModifiers: ".js" },
+    { name: "#foo", kind: "directory" },
+    { name: "#subfolder", kind: "directory" },
+    { name: "#bar", kind: "directory" },
+    { name: "#exact-match", kind: "script" },
+  ],
+});
+
+edit.insert("#foo/");
+
+verify.completions({
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah.js", kind: "script", kindModifiers: ".js" },
+    { name: "#index.js", kind: "script", kindModifiers: ".js" },
+    { name: "#foo", kind: "directory" },
+    { name: "#subfolder", kind: "directory" },
+  ],
+});
+
+edit.insert("#foo/");
+
+verify.completions({
+  isNewIdentifierLocation: true,
+  exact: [{ name: "#onlyInFooFolder.js", kind: "script", kindModifiers: ".js" }],
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard5.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard5.ts
new file mode 100644
index 0000000000000..4217ece6826c9
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard5.ts
@@ -0,0 +1,56 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "name": "foo",
+////   "main": "dist/index.js",
+////   "module": "dist/index.mjs",
+////   "types": "dist/index.d.ts",
+////   "imports": {
+////     "#*": {
+////       "import": {
+////         "types": "./dist/types/*.d.mts",
+////         "default": "./dist/esm/*.mjs"
+////       },
+////       "default": {
+////         "types": "./dist/types/*.d.ts",
+////         "default": "./dist/cjs/*.js"
+////       }
+////     },
+////     "#only-in-cjs": {
+////       "require": {
+////         "types": "./dist/types/only-in-cjs/index.d.ts",
+////         "default": "./dist/cjs/only-in-cjs/index.js"
+////       }
+////     }
+////   }
+//// }
+
+// @Filename: /dist/types/index.d.mts
+//// export const index = 0;
+
+// @Filename: /dist/types/index.d.ts
+//// export const index = 0;
+
+// @Filename: /dist/types/blah.d.mts
+//// export const blah = 0;
+
+// @Filename: /dist/types/blah.d.ts
+//// export const blah = 0;
+
+// @Filename: /dist/types/only-in-cjs/index.d.ts
+//// export const onlyInCjs = 0;
+
+// @Filename: /index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+    { name: "#index", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard6.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard6.ts
new file mode 100644
index 0000000000000..265fbe322404e
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard6.ts
@@ -0,0 +1,31 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "name": "foo",
+////   "main": "dist/index.js",
+////   "module": "dist/index.mjs",
+////   "types": "dist/index.d.ts",
+////   "imports": {
+////     "#*": "./dist/*?.d.ts"
+////   }
+//// }
+
+// @Filename: /dist/index.d.ts
+//// export const index = 0;
+
+// @Filename: /dist/blah?.d.ts
+//// export const blah = 0;
+
+// @Filename: /index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard7.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard7.ts
new file mode 100644
index 0000000000000..42446088f6586
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard7.ts
@@ -0,0 +1,25 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "name": "foo",
+////   "imports": {
+////     "#*": "./dist/*.js"
+////   }
+//// }
+
+// @Filename: /dist/blah.d.ts
+//// export const blah = 0;
+
+// @Filename: /index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard8.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard8.ts
new file mode 100644
index 0000000000000..b66761c43257d
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard8.ts
@@ -0,0 +1,28 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "name": "foo",
+////   "imports": {
+////     "#*": "./dist/*.js"
+////   }
+//// }
+
+// @Filename: /dist/blah.js
+//// export const blah = 0;
+
+// @Filename: /dist/blah.d.ts
+//// export declare const blah: 0;
+
+// @Filename: /index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard9.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard9.ts
new file mode 100644
index 0000000000000..5e3ba519e23c3
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard9.ts
@@ -0,0 +1,26 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+// @allowJs: true
+
+// @Filename: /package.json
+//// {
+////   "name": "foo",
+////   "imports": {
+////     "#*": "./dist/*.js"
+////   }
+//// }
+
+// @Filename: /dist/blah.js
+//// export const blah = 0;
+
+// @Filename: /index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+  ]
+});

From 475c0b19690dd7e65f339c9d9dc6c33483b011f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Mon, 14 Oct 2024 00:12:25 +0200
Subject: [PATCH 11/26] fixed the incorrectly copy-pasted test

---
 .../pathCompletionsPackageJsonImportsWildcard4.ts  | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard4.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard4.ts
index 045b25b5e0607..06ead3662e97b 100644
--- a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard4.ts
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard4.ts
@@ -5,7 +5,7 @@
 // @Filename: /package.json
 //// {
 ////   "types": "index.d.ts",
-////   "exports": {
+////   "imports": {
 ////     "#*": "dist/*",
 ////     "#foo/*": "dist/*",
 ////     "#bar/*": "dist/*",
@@ -49,16 +49,16 @@ edit.insert("#foo/");
 verify.completions({
   isNewIdentifierLocation: true,
   exact: [
-    { name: "#blah.js", kind: "script", kindModifiers: ".js" },
-    { name: "#index.js", kind: "script", kindModifiers: ".js" },
-    { name: "#foo", kind: "directory" },
-    { name: "#subfolder", kind: "directory" },
+    { name: "blah.js", kind: "script", kindModifiers: ".js" },
+    { name: "index.js", kind: "script", kindModifiers: ".js" },
+    { name: "foo", kind: "directory" },
+    { name: "subfolder", kind: "directory" },
   ],
 });
 
-edit.insert("#foo/");
+edit.insert("foo/");
 
 verify.completions({
   isNewIdentifierLocation: true,
-  exact: [{ name: "#onlyInFooFolder.js", kind: "script", kindModifiers: ".js" }],
+  exact: [{ name: "onlyInFooFolder.js", kind: "script", kindModifiers: ".js" }],
 });

From a0ea1b95a2c4dc2b242ee87d9139213933c763eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Mon, 14 Oct 2024 11:04:43 +0200
Subject: [PATCH 12/26] handle `inputDirectories`

---
 src/services/stringCompletions.ts             |   21 +-
 ...onsPackageJsonImportsSrcNoDistWildcard4.js | 1747 +++++++++++++++++
 ...onsPackageJsonImportsSrcNoDistWildcard4.ts |   73 +
 3 files changed, 1833 insertions(+), 8 deletions(-)
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard4.js
 create mode 100644 tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard4.ts

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index b4f30f3323d6d..6fd73ef80207d 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -1246,19 +1246,20 @@ function getModulesForPathsPattern(
 
     let matches = getMatchesWithPrefix(baseDirectory, completePrefix);
 
-    // If we had a suffix, we already recursively searched for all possible files that could match
-    // it and returned the directories leading to those files. Otherwise, assume any directory could
-    // have something valid to import.
-    const directories = normalizedSuffix
-        ? emptyArray
-        : mapDefined(tryGetDirectories(host, baseDirectory), dir => dir === "node_modules" ? undefined : directoryResult(dir));
-
     if (inputBaseDirectory && inputBaseDirectory !== baseDirectory) {
         const completeInputPrefix = fragmentHasPath ? inputBaseDirectory : ensureTrailingDirectorySeparator(inputBaseDirectory) + normalizedPrefixBase;
         matches = concatenate(matches, getMatchesWithPrefix(inputBaseDirectory, completeInputPrefix));
     }
 
-    matches = concatenate(matches, directories);
+    // If we had a suffix, we already recursively searched for all possible files that could match
+    // it and returned the directories leading to those files. Otherwise, assume any directory could
+    // have something valid to import.
+    if (!normalizedSuffix) {
+        matches = concatenate(matches, getDirectoryMatches(baseDirectory));
+        if (inputBaseDirectory && inputBaseDirectory !== baseDirectory) {
+            matches = concatenate(matches, getDirectoryMatches(inputBaseDirectory));
+        }
+    }
 
     return matches;
 
@@ -1275,6 +1276,10 @@ function getModulesForPathsPattern(
         });
     }
 
+    function getDirectoryMatches(directoryName: string) {
+        return mapDefined(tryGetDirectories(host, directoryName), dir => dir === "node_modules" ? undefined : directoryResult(dir));
+    }
+
     function trimPrefixAndSuffix(path: string, prefix: string): string | undefined {
         return firstDefined(matchingSuffixes, suffix => {
             const inner = withoutStartAndEnd(normalizePath(path), prefix, suffix);
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard4.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard4.js
new file mode 100644
index 0000000000000..63b86885267c4
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard4.js
@@ -0,0 +1,1747 @@
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/nope.ts]
+export const nope = 0;
+
+//// [/home/src/workspaces/project/package.json]
+{
+  "types": "index.d.ts",
+  "imports": {
+    "#*": "dist/*",
+    "#foo/*": "dist/*",
+    "#bar/*": "dist/*",
+    "#exact-match": "dist/index.d.ts"
+  }
+}
+
+//// [/home/src/workspaces/project/src/a.mts]
+import { } from "";
+
+//// [/home/src/workspaces/project/src/blah.ts]
+export const blah = 0;
+
+//// [/home/src/workspaces/project/src/foo/onlyInFooFolder.ts]
+export const foo = 0;
+
+//// [/home/src/workspaces/project/src/index.ts]
+export const index = 0;
+
+//// [/home/src/workspaces/project/src/subfolder/one.ts]
+export const one = 0;
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/nope.ts",
+  "/home/src/workspaces/project/src/a.mts",
+  "/home/src/workspaces/project/src/blah.ts",
+  "/home/src/workspaces/project/src/index.ts",
+  "/home/src/workspaces/project/src/foo/onlyInFooFolder.ts",
+  "/home/src/workspaces/project/src/subfolder/one.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/nope.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/a.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/blah.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/foo/onlyInFooFolder.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/subfolder/one.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/foo/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/subfolder/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+	/home/src/workspaces/project/nope.ts Text-1 "export const nope = 0;"
+	/home/src/workspaces/project/src/a.mts Text-1 "import { } from \"\";"
+	/home/src/workspaces/project/src/blah.ts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/index.ts Text-1 "export const index = 0;"
+	/home/src/workspaces/project/src/foo/onlyInFooFolder.ts Text-1 "export const foo = 0;"
+	/home/src/workspaces/project/src/subfolder/one.ts Text-1 "export const one = 0;"
+
+
+	nope.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/a.mts
+	  Matched by default include pattern '**/*'
+	src/blah.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/index.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/foo/onlyInFooFolder.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/subfolder/one.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "File '/home/src/workspaces/project/nope.ts' is not under 'rootDir' '/home/src/workspaces/project/src'. 'rootDir' is expected to contain all source files.\n  The file is in the program because:\n    Matched by default include pattern '**/*'\n  File is CommonJS module because '/home/src/workspaces/project/package.json' does not have field \"type\"",
+            "code": 6059,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+
+
+	../../tslibs/TS/Lib/lib.d.ts
+	  Default library for target 'es5'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/nope.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/a.mts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/blah.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/foo/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/index.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/subfolder/one.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/subfolder/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/blah.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/a.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/a.mts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/a.mts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/nope.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/blah.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/foo/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/index.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/subfolder/one.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/subfolder/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/home/src/workspaces/project/src/a.mts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 18
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#a.mjs",
+            "kind": "script",
+            "kindModifiers": ".mjs",
+            "sortText": "11"
+          },
+          {
+            "name": "#blah.js",
+            "kind": "script",
+            "kindModifiers": ".js",
+            "sortText": "11"
+          },
+          {
+            "name": "#index.js",
+            "kind": "script",
+            "kindModifiers": ".js",
+            "sortText": "11"
+          },
+          {
+            "name": "#foo",
+            "kind": "directory",
+            "kindModifiers": "",
+            "sortText": "11"
+          },
+          {
+            "name": "#subfolder",
+            "kind": "directory",
+            "kindModifiers": "",
+            "sortText": "11"
+          },
+          {
+            "name": "#bar",
+            "kind": "directory",
+            "kindModifiers": "",
+            "sortText": "11"
+          },
+          {
+            "name": "#exact-match",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 4,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 18,
+        "endLine": 1,
+        "endOffset": 18,
+        "insertString": ""
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 4,
+      "success": true
+    }
+After Request
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 2 *changed*
+    projectProgramVersion: 1
+    dirty: true *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-1 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 5,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 18,
+        "endLine": 1,
+        "endOffset": 18,
+        "insertString": "#"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 5,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-2 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 6,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 19,
+        "key": "#"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 6,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 7,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 19,
+        "endLine": 1,
+        "endOffset": 19,
+        "insertString": "f"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 7,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-3 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 8,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 20,
+        "key": "f"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 8,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 9,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 20,
+        "endLine": 1,
+        "endOffset": 20,
+        "insertString": "o"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 9,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-4 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 10,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 21,
+        "key": "o"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 10,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 11,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 21,
+        "endLine": 1,
+        "endOffset": 21,
+        "insertString": "o"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 11,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-5 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 12,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 22,
+        "key": "o"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 12,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 13,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 22,
+        "endLine": 1,
+        "endOffset": 22,
+        "insertString": "/"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 13,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-6 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 14,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 23,
+        "key": "/"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 14,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 15,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 15,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 16,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 23
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: true structureIsReused:: SafeModules Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+	/home/src/workspaces/project/nope.ts Text-1 "export const nope = 0;"
+	/home/src/workspaces/project/src/a.mts SVC-2-6 "import { } from \"#foo/\";"
+	/home/src/workspaces/project/src/blah.ts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/index.ts Text-1 "export const index = 0;"
+	/home/src/workspaces/project/src/foo/onlyInFooFolder.ts Text-1 "export const foo = 0;"
+	/home/src/workspaces/project/src/subfolder/one.ts Text-1 "export const one = 0;"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 16,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      },
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "a.mjs",
+            "kind": "script",
+            "kindModifiers": ".mjs",
+            "sortText": "11"
+          },
+          {
+            "name": "blah.js",
+            "kind": "script",
+            "kindModifiers": ".js",
+            "sortText": "11"
+          },
+          {
+            "name": "index.js",
+            "kind": "script",
+            "kindModifiers": ".js",
+            "sortText": "11"
+          },
+          {
+            "name": "foo",
+            "kind": "directory",
+            "kindModifiers": "",
+            "sortText": "11"
+          },
+          {
+            "name": "subfolder",
+            "kind": "directory",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/nope.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/blah.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/foo/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/index.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/subfolder/one.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/subfolder/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+  {} *new*
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+  {} *new*
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project/src: *new*
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 2
+    projectProgramVersion: 2 *changed*
+    dirty: false *changed*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 17,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 23,
+        "endLine": 1,
+        "endOffset": 23,
+        "insertString": ""
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 17,
+      "success": true
+    }
+After Request
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 3 *changed*
+    projectProgramVersion: 2
+    dirty: true *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-7 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 18,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 23,
+        "endLine": 1,
+        "endOffset": 23,
+        "insertString": "f"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 18,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-8 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 19,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 24,
+        "key": "f"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 19,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 20,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 24,
+        "endLine": 1,
+        "endOffset": 24,
+        "insertString": "o"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 20,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-9 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 21,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 25,
+        "key": "o"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 21,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 22,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 25,
+        "endLine": 1,
+        "endOffset": 25,
+        "insertString": "o"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 22,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-10 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 23,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 26,
+        "key": "o"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 23,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 24,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 26,
+        "endLine": 1,
+        "endOffset": 26,
+        "insertString": "/"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 24,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.mts (Open) *changed*
+    version: SVC-2-11 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 25,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 27,
+        "key": "/"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 25,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 26,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 26,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 27,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.mts",
+        "line": 1,
+        "offset": 27
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 3 projectProgramVersion: 2 structureChanged: true structureIsReused:: SafeModules Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+	/home/src/workspaces/project/nope.ts Text-1 "export const nope = 0;"
+	/home/src/workspaces/project/src/a.mts SVC-2-11 "import { } from \"#foo/foo/\";"
+	/home/src/workspaces/project/src/blah.ts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/index.ts Text-1 "export const index = 0;"
+	/home/src/workspaces/project/src/foo/onlyInFooFolder.ts Text-1 "export const foo = 0;"
+	/home/src/workspaces/project/src/subfolder/one.ts Text-1 "export const one = 0;"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 27,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      },
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "onlyInFooFolder.js",
+            "kind": "script",
+            "kindModifiers": ".js",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
+After Request
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 3
+    projectProgramVersion: 3 *changed*
+    dirty: false *changed*
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard4.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard4.ts
new file mode 100644
index 0000000000000..ae393be7ce4d6
--- /dev/null
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard4.ts
@@ -0,0 +1,73 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/package.json
+//// {
+////   "types": "index.d.ts",
+////   "imports": {
+////     "#*": "dist/*",
+////     "#foo/*": "dist/*",
+////     "#bar/*": "dist/*",
+////     "#exact-match": "dist/index.d.ts"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/nope.ts
+//// export const nope = 0;
+
+// @Filename: /home/src/workspaces/project/src/index.ts
+//// export const index = 0;
+
+// @Filename: /home/src/workspaces/project/src/blah.ts
+//// export const blah = 0;
+
+// @Filename: /home/src/workspaces/project/src/foo/onlyInFooFolder.ts
+//// export const foo = 0;
+
+// @Filename: /home/src/workspaces/project/src/subfolder/one.ts
+//// export const one = 0;
+
+// @Filename: /home/src/workspaces/project/src/a.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#a.mjs", kind: "script", kindModifiers: ".mjs" },
+    { name: "#blah.js", kind: "script", kindModifiers: ".js" },
+    { name: "#index.js", kind: "script", kindModifiers: ".js" },
+    { name: "#foo", kind: "directory" },
+    { name: "#subfolder", kind: "directory" },
+    { name: "#bar", kind: "directory" },
+    { name: "#exact-match", kind: "script" },
+  ],
+});
+
+edit.insert("#foo/");
+
+verify.completions({
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "a.mjs", kind: "script", kindModifiers: ".mjs" },
+    { name: "blah.js", kind: "script", kindModifiers: ".js" },
+    { name: "index.js", kind: "script", kindModifiers: ".js" },
+    { name: "foo", kind: "directory" },
+    { name: "subfolder", kind: "directory" },
+  ],
+});
+
+edit.insert("foo/");
+
+verify.completions({
+  isNewIdentifierLocation: true,
+  exact: [{ name: "onlyInFooFolder.js", kind: "script", kindModifiers: ".js" }],
+});

From c00448b61d9ca36ebf50a47e42e4fcef546f51a4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Mon, 14 Oct 2024 11:30:29 +0200
Subject: [PATCH 13/26] add more tests, some of them still failing

---
 ...onsPackageJsonImportsSrcNoDistWildcard1.js |  524 ++++
 ...onsPackageJsonImportsSrcNoDistWildcard2.js | 2182 +++++++++++++++++
 ...onsPackageJsonImportsSrcNoDistWildcard3.js |  543 ++++
 ...onsPackageJsonImportsSrcNoDistWildcard5.js |  572 +++++
 ...onsPackageJsonImportsSrcNoDistWildcard7.js |  453 ++++
 ...onsPackageJsonImportsSrcNoDistWildcard8.js |  453 ++++
 ...onsPackageJsonImportsSrcNoDistWildcard9.js |  435 ++++
 ...onsPackageJsonImportsSrcNoDistWildcard1.ts |   52 +
 ...onsPackageJsonImportsSrcNoDistWildcard2.ts |   49 +
 ...onsPackageJsonImportsSrcNoDistWildcard3.ts |   53 +
 ...onsPackageJsonImportsSrcNoDistWildcard5.ts |   64 +
 ...onsPackageJsonImportsSrcNoDistWildcard6.ts |   38 +
 ...onsPackageJsonImportsSrcNoDistWildcard7.ts |   32 +
 ...onsPackageJsonImportsSrcNoDistWildcard8.ts |   32 +
 ...onsPackageJsonImportsSrcNoDistWildcard9.ts |   33 +
 15 files changed, 5515 insertions(+)
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard1.js
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard2.js
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.js
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.js
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard7.js
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard8.js
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.js
 create mode 100644 tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard1.ts
 create mode 100644 tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard2.ts
 create mode 100644 tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.ts
 create mode 100644 tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.ts
 create mode 100644 tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard6.ts
 create mode 100644 tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard7.ts
 create mode 100644 tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard8.ts
 create mode 100644 tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.ts

diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard1.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard1.js
new file mode 100644
index 0000000000000..afab97fce62d7
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard1.js
@@ -0,0 +1,524 @@
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/package.json]
+{
+  "name": "foo",
+  "main": "dist/index.js",
+  "module": "dist/index.mjs",
+  "types": "dist/index.d.ts",
+  "imports": {
+    "#*": {
+      "types": "./dist/*.d.ts",
+      "import": "./dist/*.mjs",
+      "default": "./dist/*.js"
+    },
+    "#arguments": {
+      "types": "./dist/arguments/index.d.ts",
+      "import": "./dist/arguments/index.mjs",
+      "default": "./dist/arguments/index.js"
+    }
+  }
+}
+
+//// [/home/src/workspaces/project/src/arguments/index.ts]
+export const arguments = 0;
+
+//// [/home/src/workspaces/project/src/blah.ts]
+export const blah = 0;
+
+//// [/home/src/workspaces/project/src/index.ts]
+export const index = 0;
+
+//// [/home/src/workspaces/project/src/m.mts]
+import { } from "";
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/blah.ts",
+  "/home/src/workspaces/project/src/index.ts",
+  "/home/src/workspaces/project/src/m.mts",
+  "/home/src/workspaces/project/src/arguments/index.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/blah.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/m.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/arguments/index.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/arguments/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/home/src/workspaces/project/src/blah.ts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/index.ts Text-1 "export const index = 0;"
+	/home/src/workspaces/project/src/m.mts Text-1 "import { } from \"\";"
+	/home/src/workspaces/project/src/arguments/index.ts Text-1 "export const arguments = 0;"
+
+
+	src/blah.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/index.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/m.mts
+	  Matched by default include pattern '**/*'
+	src/arguments/index.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+
+
+	../../tslibs/TS/Lib/lib.d.ts
+	  Default library for target 'es5'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/arguments/index.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/arguments/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/blah.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/index.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/m.mts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/arguments/index.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/blah.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/m.mts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/m.mts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/m.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/m.mts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/m.mts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/arguments/index.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/arguments/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/blah.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/index.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/home/src/workspaces/project/src/m.mts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/arguments/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/m.mts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/m.mts",
+        "line": 1,
+        "offset": 18
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#blah",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          },
+          {
+            "name": "#index",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          },
+          {
+            "name": "#arguments",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard2.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard2.js
new file mode 100644
index 0000000000000..90fe6d8133481
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard2.js
@@ -0,0 +1,2182 @@
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/package.json]
+{
+  "name": "salesforce-pageobjects",
+  "version": "1.0.0",
+  "imports": {
+    "#*": {
+      "types": "./dist/*.d.ts",
+      "import": "./dist/*.mjs",
+      "default": "./dist/*.js"
+    }
+  }
+}
+
+//// [/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts]
+export const actionRenderer = 0;
+
+//// [/home/src/workspaces/project/src/index.mts]
+import { } from "";
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/index.mts",
+  "/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/action/pageObjects/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/action/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+	/home/src/workspaces/project/src/index.mts Text-1 "import { } from \"\";"
+	/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts Text-1 "export const actionRenderer = 0;"
+
+
+	src/index.mts
+	  Matched by default include pattern '**/*'
+	src/action/pageObjects/actionRenderer.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+
+
+	../../tslibs/TS/Lib/lib.d.ts
+	  Default library for target 'es5'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/action/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/action/pageObjects/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/index.mts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/action/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/action/pageObjects/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/home/src/workspaces/project/src/index.mts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 18
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#action",
+            "kind": "directory",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 4,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 18,
+        "endLine": 1,
+        "endOffset": 18,
+        "insertString": ""
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 4,
+      "success": true
+    }
+After Request
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 2 *changed*
+    projectProgramVersion: 1
+    dirty: true *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-1 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 5,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 18,
+        "endLine": 1,
+        "endOffset": 18,
+        "insertString": "#"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 5,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-2 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 6,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 19,
+        "key": "#"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 6,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 7,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 19,
+        "endLine": 1,
+        "endOffset": 19,
+        "insertString": "a"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 7,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-3 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 8,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 20,
+        "key": "a"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 8,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 9,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 20,
+        "endLine": 1,
+        "endOffset": 20,
+        "insertString": "c"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 9,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-4 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 10,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 21,
+        "key": "c"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 10,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 11,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 21,
+        "endLine": 1,
+        "endOffset": 21,
+        "insertString": "t"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 11,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-5 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 12,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 22,
+        "key": "t"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 12,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 13,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 22,
+        "endLine": 1,
+        "endOffset": 22,
+        "insertString": "i"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 13,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-6 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 14,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 23,
+        "key": "i"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 14,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 15,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 23,
+        "endLine": 1,
+        "endOffset": 23,
+        "insertString": "o"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 15,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-7 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 16,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 24,
+        "key": "o"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 16,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 17,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 24,
+        "endLine": 1,
+        "endOffset": 24,
+        "insertString": "n"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 17,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-8 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 18,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 25,
+        "key": "n"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 18,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 19,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 25,
+        "endLine": 1,
+        "endOffset": 25,
+        "insertString": "/"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 19,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-9 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 20,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 26,
+        "key": "/"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 20,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 21,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 21,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 22,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 26
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/dist 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/dist 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: true structureIsReused:: SafeModules Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+	/home/src/workspaces/project/src/index.mts SVC-2-9 "import { } from \"#action/\";"
+	/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts Text-1 "export const actionRenderer = 0;"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 22,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      },
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "pageObjects",
+            "kind": "directory",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/action/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/action/pageObjects/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+  {} *new*
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/dist: *new*
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+  {} *new*
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project/src: *new*
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 2
+    projectProgramVersion: 2 *changed*
+    dirty: false *changed*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 23,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 26,
+        "endLine": 1,
+        "endOffset": 26,
+        "insertString": ""
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 23,
+      "success": true
+    }
+After Request
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 3 *changed*
+    projectProgramVersion: 2
+    dirty: true *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-10 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 24,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 26,
+        "endLine": 1,
+        "endOffset": 26,
+        "insertString": "p"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 24,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-11 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 25,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 27,
+        "key": "p"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 25,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 26,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 27,
+        "endLine": 1,
+        "endOffset": 27,
+        "insertString": "a"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 26,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-12 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 27,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 28,
+        "key": "a"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 27,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 28,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 28,
+        "endLine": 1,
+        "endOffset": 28,
+        "insertString": "g"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 28,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-13 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 29,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 29,
+        "key": "g"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 29,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 30,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 29,
+        "endLine": 1,
+        "endOffset": 29,
+        "insertString": "e"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 30,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-14 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 31,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 30,
+        "key": "e"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 31,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 32,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 30,
+        "endLine": 1,
+        "endOffset": 30,
+        "insertString": "O"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 32,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-15 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 33,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 31,
+        "key": "O"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 33,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 34,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 31,
+        "endLine": 1,
+        "endOffset": 31,
+        "insertString": "b"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 34,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-16 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 35,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 32,
+        "key": "b"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 35,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 36,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 32,
+        "endLine": 1,
+        "endOffset": 32,
+        "insertString": "j"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 36,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-17 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 37,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 33,
+        "key": "j"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 37,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 38,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 33,
+        "endLine": 1,
+        "endOffset": 33,
+        "insertString": "e"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 38,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-18 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 39,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 34,
+        "key": "e"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 39,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 40,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 34,
+        "endLine": 1,
+        "endOffset": 34,
+        "insertString": "c"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 40,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-19 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 41,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 35,
+        "key": "c"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 41,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 42,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 35,
+        "endLine": 1,
+        "endOffset": 35,
+        "insertString": "t"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 42,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-20 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 43,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 36,
+        "key": "t"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 43,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 44,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 36,
+        "endLine": 1,
+        "endOffset": 36,
+        "insertString": "s"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 44,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-21 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 45,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 37,
+        "key": "s"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 45,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 46,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 37,
+        "endLine": 1,
+        "endOffset": 37,
+        "insertString": "/"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 46,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    version: SVC-2-22 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 47,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 38,
+        "key": "/"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 47,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 48,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 48,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 49,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 38
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 3 projectProgramVersion: 2 structureChanged: true structureIsReused:: SafeModules Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+	/home/src/workspaces/project/src/index.mts SVC-2-22 "import { } from \"#action/pageObjects/\";"
+	/home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts Text-1 "export const actionRenderer = 0;"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 49,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      },
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "actionRenderer",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
+After Request
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 3
+    projectProgramVersion: 3 *changed*
+    dirty: false *changed*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.js
new file mode 100644
index 0000000000000..883e1132ad8dc
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.js
@@ -0,0 +1,543 @@
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/nope.ts]
+export const nope = 0;
+
+//// [/home/src/workspaces/project/package.json]
+{
+  "types": "index.d.ts",
+  "imports": {
+    "#component-*": {
+      "types@>=4.3.5": "types/components/*.d.ts"
+    }
+  }
+}
+
+//// [/home/src/workspaces/project/src/a.ts]
+import { } from "";
+
+//// [/home/src/workspaces/project/src/components/blah.ts]
+export const blah = 0;
+
+//// [/home/src/workspaces/project/src/components/index.ts]
+export const index = 0;
+
+//// [/home/src/workspaces/project/src/components/subfolder/one.ts]
+export const one = 0;
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist",
+    "declarationDir": "types"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/nope.ts",
+  "/home/src/workspaces/project/src/a.ts",
+  "/home/src/workspaces/project/src/components/blah.ts",
+  "/home/src/workspaces/project/src/components/index.ts",
+  "/home/src/workspaces/project/src/components/subfolder/one.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "declarationDir": "/home/src/workspaces/project/types",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/nope.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/components/blah.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/components/index.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/components/subfolder/one.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/components/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/components/subfolder/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+	/home/src/workspaces/project/nope.ts Text-1 "export const nope = 0;"
+	/home/src/workspaces/project/src/a.ts Text-1 "import { } from \"\";"
+	/home/src/workspaces/project/src/components/blah.ts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/components/index.ts Text-1 "export const index = 0;"
+	/home/src/workspaces/project/src/components/subfolder/one.ts Text-1 "export const one = 0;"
+
+
+	nope.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/a.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/components/blah.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/components/index.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/components/subfolder/one.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "File '/home/src/workspaces/project/nope.ts' is not under 'rootDir' '/home/src/workspaces/project/src'. 'rootDir' is expected to contain all source files.\n  The file is in the program because:\n    Matched by default include pattern '**/*'\n  File is CommonJS module because '/home/src/workspaces/project/package.json' does not have field \"type\"",
+            "code": 6059,
+            "category": "error"
+          },
+          {
+            "start": {
+              "line": 6,
+              "offset": 5
+            },
+            "end": {
+              "line": 6,
+              "offset": 21
+            },
+            "text": "Option 'declarationDir' cannot be specified without specifying option 'declaration' or option 'composite'.",
+            "code": 5069,
+            "category": "error",
+            "fileName": "/home/src/workspaces/project/tsconfig.json"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\",\n    \"declarationDir\": \"types\"\n  }\n}"
+
+
+	../../tslibs/TS/Lib/lib.d.ts
+	  Default library for target 'es5'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/nope.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/a.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/components/blah.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/components/index.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/components/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/components/subfolder/one.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/components/subfolder/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/blah.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/a.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/a.ts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/nope.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/components/blah.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/components/index.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/components/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/components/subfolder/one.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/components/subfolder/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/home/src/workspaces/project/src/a.ts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 18
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [],
+        "defaultCommitCharacters": []
+      }
+    }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.js
new file mode 100644
index 0000000000000..c72375f5b5cfd
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.js
@@ -0,0 +1,572 @@
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/package.json]
+{
+  "name": "foo",
+  "main": "dist/index.js",
+  "module": "dist/index.mjs",
+  "types": "dist/index.d.ts",
+  "imports": {
+    "#*": {
+      "import": {
+        "types": "./dist/types/*.d.mts",
+        "default": "./dist/esm/*.mjs"
+      },
+      "default": {
+        "types": "./dist/types/*.d.ts",
+        "default": "./dist/cjs/*.js"
+      }
+    },
+    "#only-in-cjs": {
+      "require": {
+        "types": "./dist/types/only-in-cjs/index.d.ts",
+        "default": "./dist/cjs/only-in-cjs/index.js"
+      }
+    }
+  }
+}
+
+//// [/home/src/workspaces/project/src/index.mts]
+import { } from "";
+
+//// [/home/src/workspaces/project/src/types/blah.mts]
+export const blah = 0;
+
+//// [/home/src/workspaces/project/src/types/blah.ts]
+export const blah = 0;
+
+//// [/home/src/workspaces/project/src/types/index.mts]
+export const index = 0;
+
+//// [/home/src/workspaces/project/src/types/index.ts]
+export const index = 0;
+
+//// [/home/src/workspaces/project/src/types/only-in-cjs/index.ts]
+export const onlyInCjs = 0;
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist/esm",
+    "declarationDir": "dist/types"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/index.mts",
+  "/home/src/workspaces/project/src/types/blah.mts",
+  "/home/src/workspaces/project/src/types/blah.ts",
+  "/home/src/workspaces/project/src/types/index.mts",
+  "/home/src/workspaces/project/src/types/index.ts",
+  "/home/src/workspaces/project/src/types/only-in-cjs/index.ts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist/esm",
+  "declarationDir": "/home/src/workspaces/project/dist/types",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/blah.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/blah.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/index.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/only-in-cjs/index.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/only-in-cjs/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+	/home/src/workspaces/project/src/index.mts Text-1 "import { } from \"\";"
+	/home/src/workspaces/project/src/types/blah.mts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/types/blah.ts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/types/index.mts Text-1 "export const index = 0;"
+	/home/src/workspaces/project/src/types/index.ts Text-1 "export const index = 0;"
+	/home/src/workspaces/project/src/types/only-in-cjs/index.ts Text-1 "export const onlyInCjs = 0;"
+
+
+	src/index.mts
+	  Matched by default include pattern '**/*'
+	src/types/blah.mts
+	  Matched by default include pattern '**/*'
+	src/types/blah.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/types/index.mts
+	  Matched by default include pattern '**/*'
+	src/types/index.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/types/only-in-cjs/index.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "start": {
+              "line": 6,
+              "offset": 5
+            },
+            "end": {
+              "line": 6,
+              "offset": 21
+            },
+            "text": "Option 'declarationDir' cannot be specified without specifying option 'declaration' or option 'composite'.",
+            "code": 5069,
+            "category": "error",
+            "fileName": "/home/src/workspaces/project/tsconfig.json"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist/esm\",\n    \"declarationDir\": \"dist/types\"\n  }\n}"
+
+
+	../../tslibs/TS/Lib/lib.d.ts
+	  Default library for target 'es5'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/index.mts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/types/blah.mts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/types/blah.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/types/index.mts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/types/index.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/types/only-in-cjs/index.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/types/only-in-cjs/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/types/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/index.mts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/types/blah.mts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/types/blah.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/types/index.mts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/types/index.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/types/only-in-cjs/index.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (6)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/types/blah.mts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/types/blah.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/types/index.mts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/types/index.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/types/only-in-cjs/index.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/types/only-in-cjs/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/types/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/home/src/workspaces/project/src/index.mts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/types/blah.mts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/types/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/types/index.mts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/types/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/types/only-in-cjs/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 18
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [],
+        "defaultCommitCharacters": []
+      }
+    }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard7.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard7.js
new file mode 100644
index 0000000000000..e8b921a29c1b2
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard7.js
@@ -0,0 +1,453 @@
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/package.json]
+{
+  "name": "foo",
+  "imports": {
+    "#*": "./dist/*.js"
+  }
+}
+
+//// [/home/src/workspaces/project/src/blah.ts]
+export const blah = 0;
+
+//// [/home/src/workspaces/project/src/index.mts]
+import { } from "";
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/blah.ts",
+  "/home/src/workspaces/project/src/index.mts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/blah.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+	/home/src/workspaces/project/src/blah.ts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/index.mts Text-1 "import { } from \"\";"
+
+
+	src/blah.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/index.mts
+	  Matched by default include pattern '**/*'
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+
+
+	../../tslibs/TS/Lib/lib.d.ts
+	  Default library for target 'es5'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/blah.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/index.mts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/blah.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/blah.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/home/src/workspaces/project/src/index.mts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 18
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#blah",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard8.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard8.js
new file mode 100644
index 0000000000000..e8b921a29c1b2
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard8.js
@@ -0,0 +1,453 @@
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/package.json]
+{
+  "name": "foo",
+  "imports": {
+    "#*": "./dist/*.js"
+  }
+}
+
+//// [/home/src/workspaces/project/src/blah.ts]
+export const blah = 0;
+
+//// [/home/src/workspaces/project/src/index.mts]
+import { } from "";
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/blah.ts",
+  "/home/src/workspaces/project/src/index.mts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/blah.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+	/home/src/workspaces/project/src/blah.ts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/index.mts Text-1 "import { } from \"\";"
+
+
+	src/blah.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/index.mts
+	  Matched by default include pattern '**/*'
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+
+
+	../../tslibs/TS/Lib/lib.d.ts
+	  Default library for target 'es5'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/blah.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/index.mts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/blah.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/blah.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/home/src/workspaces/project/src/index.mts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 18
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#blah",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
\ No newline at end of file
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.js
new file mode 100644
index 0000000000000..0efd23e61b952
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.js
@@ -0,0 +1,435 @@
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/package.json]
+{
+  "name": "foo",
+  "imports": {
+    "#*": "./dist/*.js"
+  }
+}
+
+//// [/home/src/workspaces/project/src/blah.js]
+export const blah = 0;
+
+//// [/home/src/workspaces/project/src/index.mts]
+import { } from "";
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist",
+    "allowJs": "true"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/index.mts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (1)
+	/home/src/workspaces/project/src/index.mts Text-1 "import { } from \"\";"
+
+
+	src/index.mts
+	  Matched by default include pattern '**/*'
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "start": {
+              "line": 6,
+              "offset": 16
+            },
+            "end": {
+              "line": 6,
+              "offset": 22
+            },
+            "text": "Compiler option 'allowJs' requires a value of type boolean.",
+            "code": 5024,
+            "category": "error",
+            "fileName": "/home/src/workspaces/project/tsconfig.json"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\",\n    \"allowJs\": \"true\"\n  }\n}"
+
+
+	../../tslibs/TS/Lib/lib.d.ts
+	  Default library for target 'es5'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (1)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/index.mts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/index.mts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (1)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":250}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/home/src/workspaces/project/src/index.mts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/index.mts",
+        "line": 1,
+        "offset": 18
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [],
+        "defaultCommitCharacters": []
+      }
+    }
\ No newline at end of file
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard1.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard1.ts
new file mode 100644
index 0000000000000..0bc1ad2dbdacc
--- /dev/null
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard1.ts
@@ -0,0 +1,52 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/package.json
+//// {
+////   "name": "foo",
+////   "main": "dist/index.js",
+////   "module": "dist/index.mjs",
+////   "types": "dist/index.d.ts",
+////   "imports": {
+////     "#*": {
+////       "types": "./dist/*.d.ts",
+////       "import": "./dist/*.mjs",
+////       "default": "./dist/*.js"
+////     },
+////     "#arguments": {
+////       "types": "./dist/arguments/index.d.ts",
+////       "import": "./dist/arguments/index.mjs",
+////       "default": "./dist/arguments/index.js"
+////     }
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/src/index.ts
+//// export const index = 0;
+
+// @Filename: /home/src/workspaces/project/src/blah.ts
+//// export const blah = 0;
+
+// @Filename: /home/src/workspaces/project/src/arguments/index.ts
+//// export const arguments = 0;
+
+// @Filename: /home/src/workspaces/project/src/m.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+    { name: "#index", kind: "script", kindModifiers: "" },
+    { name: "#arguments", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard2.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard2.ts
new file mode 100644
index 0000000000000..5dbbeba52d78c
--- /dev/null
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard2.ts
@@ -0,0 +1,49 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/package.json
+//// {
+////   "name": "salesforce-pageobjects",
+////   "version": "1.0.0",
+////   "imports": {
+////     "#*": {
+////       "types": "./dist/*.d.ts",
+////       "import": "./dist/*.mjs",
+////       "default": "./dist/*.js"
+////     }
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/src/action/pageObjects/actionRenderer.ts
+//// export const actionRenderer = 0;
+
+// @Filename: /home/src/workspaces/project/src/index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [{ name: "#action", kind: "directory" }]
+});
+
+edit.insert("#action/");
+
+verify.completions({
+  isNewIdentifierLocation: true,
+  exact: [{ name: "pageObjects", kind: "directory" }],
+});
+
+edit.insert("pageObjects/");
+
+verify.completions({
+  isNewIdentifierLocation: true,
+  exact: [{ name: "actionRenderer", kind: "script" }],
+});
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.ts
new file mode 100644
index 0000000000000..443382bdf4811
--- /dev/null
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.ts
@@ -0,0 +1,53 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist",
+////     "declarationDir": "types"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/package.json
+//// {
+////   "types": "index.d.ts",
+////   "imports": {
+////     "#component-*": {
+////       "types@>=4.3.5": "types/components/*.d.ts"
+////     }
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/nope.ts
+//// export const nope = 0;
+
+// @Filename: /home/src/workspaces/project/src/components/index.ts
+//// export const index = 0;
+
+// @Filename: /home/src/workspaces/project/src/components/blah.ts
+//// export const blah = 0;
+
+// @Filename: /home/src/workspaces/project/src/components/subfolder/one.ts
+//// export const one = 0;
+
+// @Filename: /home/src/workspaces/project/src/a.ts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#component-blah", kind: "script" },
+    { name: "#component-index", kind: "script" },
+    { name: "#component-subfolder", kind: "directory" },
+  ],
+});
+
+edit.insert("#component-subfolder/");
+
+verify.completions({
+  isNewIdentifierLocation: true,
+  exact: [{ name: "one", kind: "script" }],
+});
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.ts
new file mode 100644
index 0000000000000..9cb5cbb395309
--- /dev/null
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.ts
@@ -0,0 +1,64 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist/esm",
+////     "declarationDir": "dist/types"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/package.json
+//// {
+////   "name": "foo",
+////   "main": "dist/index.js",
+////   "module": "dist/index.mjs",
+////   "types": "dist/index.d.ts",
+////   "imports": {
+////     "#*": {
+////       "import": {
+////         "types": "./dist/types/*.d.mts",
+////         "default": "./dist/esm/*.mjs"
+////       },
+////       "default": {
+////         "types": "./dist/types/*.d.ts",
+////         "default": "./dist/cjs/*.js"
+////       }
+////     },
+////     "#only-in-cjs": {
+////       "require": {
+////         "types": "./dist/types/only-in-cjs/index.d.ts",
+////         "default": "./dist/cjs/only-in-cjs/index.js"
+////       }
+////     }
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/src/types/index.mts
+//// export const index = 0;
+
+// @Filename: /home/src/workspaces/project/src/types/index.ts
+//// export const index = 0;
+
+// @Filename: /home/src/workspaces/project/src/types/blah.mts
+//// export const blah = 0;
+
+// @Filename: /home/src/workspaces/project/src/types/blah.ts
+//// export const blah = 0;
+
+// @Filename: /home/src/workspaces/project/src/types/only-in-cjs/index.ts
+//// export const onlyInCjs = 0;
+
+// @Filename: /home/src/workspaces/project/src/index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+    { name: "#index", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard6.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard6.ts
new file mode 100644
index 0000000000000..79026a3f7c2b3
--- /dev/null
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard6.ts
@@ -0,0 +1,38 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/package.json
+//// {
+////   "name": "foo",
+////   "main": "dist/index.js",
+////   "module": "dist/index.mjs",
+////   "types": "dist/index.d.ts",
+////   "imports": {
+////     "#*": "./dist/*?.d.ts"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/src/index.ts
+//// export const index = 0;
+
+// @Filename: /home/src/workspaces/project/src/blah?.ts
+//// export const blah = 0;
+
+// @Filename: /home/src/workspaces/project/src/m.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard7.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard7.ts
new file mode 100644
index 0000000000000..c26da613c1304
--- /dev/null
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard7.ts
@@ -0,0 +1,32 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/package.json
+//// {
+////   "name": "foo",
+////   "imports": {
+////     "#*": "./dist/*.js"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/src/blah.ts
+//// export const blah = 0;
+
+// @Filename: /home/src/workspaces/project/src/index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard8.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard8.ts
new file mode 100644
index 0000000000000..c26da613c1304
--- /dev/null
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard8.ts
@@ -0,0 +1,32 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/package.json
+//// {
+////   "name": "foo",
+////   "imports": {
+////     "#*": "./dist/*.js"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/src/blah.ts
+//// export const blah = 0;
+
+// @Filename: /home/src/workspaces/project/src/index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+  ]
+});
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.ts
new file mode 100644
index 0000000000000..4b6f1aa222da0
--- /dev/null
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.ts
@@ -0,0 +1,33 @@
+/// <reference path="../fourslash.ts"/>
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+//// {
+////   "compilerOptions": {
+////     "module": "nodenext",
+////     "rootDir": "src",
+////     "outDir": "dist",
+////     "allowJs": "true"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/package.json
+//// {
+////   "name": "foo",
+////   "imports": {
+////     "#*": "./dist/*.js"
+////   }
+//// }
+
+// @Filename: /home/src/workspaces/project/src/blah.js
+//// export const blah = 0;
+
+// @Filename: /home/src/workspaces/project/src/index.mts
+//// import { } from "/**/";
+
+verify.completions({
+  marker: "",
+  isNewIdentifierLocation: true,
+  exact: [
+    { name: "#blah", kind: "script", kindModifiers: "" },
+  ]
+});

From e96bd5a392ffb31e9d469816be739b7f5db81264 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Mon, 14 Oct 2024 18:47:51 +0200
Subject: [PATCH 14/26] add test with `allowImportingTsExtensions`

---
 ...rtCompletionsPackageJsonImportsPattern2.ts | 23 +++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 tests/cases/fourslash/importCompletionsPackageJsonImportsPattern2.ts

diff --git a/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern2.ts b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern2.ts
new file mode 100644
index 0000000000000..2cbea78b63351
--- /dev/null
+++ b/tests/cases/fourslash/importCompletionsPackageJsonImportsPattern2.ts
@@ -0,0 +1,23 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+// @allowImportingTsExtensions: true
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#*": "./src/*"
+////   }
+//// }
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /a.ts
+//// import {} from "/*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["#something.ts"],
+    isNewIdentifierLocation: true,
+});

From c36d20ab7a2733fcdd2aed498e877cd207a4dd05 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Tue, 15 Oct 2024 10:20:01 +0200
Subject: [PATCH 15/26] add extra tests with wildcard in the middle

---
 ...sPaths_pathMapping_nonTrailingWildcard1.ts | 58 +++++++++++++++++++
 ...CompletionsPackageJsonExportsWildcard12.ts | 55 ++++++++++++++++++
 ...CompletionsPackageJsonImportsWildcard12.ts | 58 +++++++++++++++++++
 3 files changed, 171 insertions(+)
 create mode 100644 tests/cases/fourslash/completionsPaths_pathMapping_nonTrailingWildcard1.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonExportsWildcard12.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard12.ts

diff --git a/tests/cases/fourslash/completionsPaths_pathMapping_nonTrailingWildcard1.ts b/tests/cases/fourslash/completionsPaths_pathMapping_nonTrailingWildcard1.ts
new file mode 100644
index 0000000000000..65f8c7e59b5d7
--- /dev/null
+++ b/tests/cases/fourslash/completionsPaths_pathMapping_nonTrailingWildcard1.ts
@@ -0,0 +1,58 @@
+/// <reference path="fourslash.ts" />
+
+// @Filename: /src/b.ts
+////export const x = 0;
+
+// @Filename: /src/dir/x.ts
+/////export const x = 0;
+
+// @Filename: /src/a.ts
+////import {} from "foo//*0*/";
+////import {} from "foo/dir//*1*/"; // invalid
+////import {} from "foo/_/*2*/";
+////import {} from "foo/_dir//*3*/";
+
+// @Filename: /tsconfig.json
+////{
+////    "compilerOptions": {
+////        "baseUrl": ".",
+////        "paths": {
+////            "foo/_*/suffix": ["src/*.ts"]
+////        }
+////    }
+////}
+
+verify.completions(
+    {
+        marker: "0",
+        exact: [
+            { name: "foo/_a/suffix", kind: "script" },
+            { name: "foo/_b/suffix", kind: "script" },
+            { name: "foo/_dir/suffix", kind: "directory" },
+        ],
+        isNewIdentifierLocation: true,
+    },
+    {
+        marker: "1",
+        exact: [
+            { name: "foo/_a/suffix", kind: "script" },
+            { name: "foo/_b/suffix", kind: "script" },
+            { name: "foo/_dir/suffix", kind: "directory" },
+        ],
+        isNewIdentifierLocation: true,
+    },
+    {
+        marker: "2",
+        exact: [
+            { name: "a", kind: "script" },
+            { name: "b", kind: "script" },
+            { name: "dir", kind: "directory" },
+        ],
+        isNewIdentifierLocation: true,
+    },
+    {
+        marker: "3",
+        exact: { name: "x", kind: "script" },
+        isNewIdentifierLocation: true,
+    },
+);
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonExportsWildcard12.ts b/tests/cases/fourslash/pathCompletionsPackageJsonExportsWildcard12.ts
new file mode 100644
index 0000000000000..9b6dcd8ce31a7
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonExportsWildcard12.ts
@@ -0,0 +1,55 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /node_modules/foo/package.json
+//// {
+////   "name": "foo",
+////   "exports": {
+////     "./bar/_*/suffix": "./dist/*.js"
+////   }
+//// }
+
+// @Filename: /node_modules/foo/dist/b.d.ts
+////export const x = 0;
+
+// @Filename: /node_modules/foo/dist/dir/x.d.ts
+/////export const x = 0;
+
+// @Filename: /a.mts
+////import {} from "foo/bar//*0*/";
+////import {} from "foo/bar/dir//*1*/"; // invalid
+////import {} from "foo/bar/_/*2*/";
+////import {} from "foo/bar/_dir//*3*/";
+
+verify.completions(
+    {
+        marker: "0",
+        exact: [
+            { name: "bar/_b/suffix", kind: "script" },
+            { name: "bar/_dir/suffix", kind: "directory" },
+        ],
+        isNewIdentifierLocation: true,
+    },
+    {
+        marker: "1",
+        exact: [
+            { name: "bar/_b/suffix", kind: "script" },
+            { name: "bar/_dir/suffix", kind: "directory" },
+        ],
+        isNewIdentifierLocation: true,
+    },
+    {
+        marker: "2",
+        exact: [
+            { name: "b", kind: "script" },
+            { name: "dir", kind: "directory" },
+        ],
+        isNewIdentifierLocation: true,
+    },
+    {
+        marker: "3",
+        exact: { name: "x", kind: "script" },
+        isNewIdentifierLocation: true,
+    },
+);
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard12.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard12.ts
new file mode 100644
index 0000000000000..d0fdfedbc1fa6
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsWildcard12.ts
@@ -0,0 +1,58 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "name": "repo",
+////   "imports": {
+////     "#foo/_*/suffix": "./src/*.ts"
+////   }
+//// }
+
+// @Filename: /src/b.ts
+////export const x = 0;
+
+// @Filename: /src/dir/x.ts
+/////export const x = 0;
+
+// @Filename: /src/a.ts
+////import {} from "#foo//*0*/";
+////import {} from "#foo/dir//*1*/"; // invalid
+////import {} from "#foo/_/*2*/";
+////import {} from "#foo/_dir//*3*/";
+
+verify.completions(
+    {
+        marker: "0",
+        exact: [
+            { name: "#foo/_a/suffix", kind: "script" },
+            { name: "#foo/_b/suffix", kind: "script" },
+            { name: "#foo/_dir/suffix", kind: "directory" },
+        ],
+        isNewIdentifierLocation: true,
+    },
+    {
+        marker: "1",
+        exact: [
+            { name: "#foo/_a/suffix", kind: "script" },
+            { name: "#foo/_b/suffix", kind: "script" },
+            { name: "#foo/_dir/suffix", kind: "directory" },
+        ],
+        isNewIdentifierLocation: true,
+    },
+    {
+        marker: "2",
+        exact: [
+            { name: "a", kind: "script" },
+            { name: "b", kind: "script" },
+            { name: "dir", kind: "directory" },
+        ],
+        isNewIdentifierLocation: true,
+    },
+    {
+        marker: "3",
+        exact: { name: "x", kind: "script" },
+        isNewIdentifierLocation: true,
+    },
+);

From 0f4a6f8feef09d4f15c8edb7e6743a57fcceb2ba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Wed, 16 Oct 2024 09:52:57 +0200
Subject: [PATCH 16/26] add pkg scope test

---
 ...PackageJsonImportsOnlyFromClosestScope1.ts | 34 +++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsOnlyFromClosestScope1.ts

diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsOnlyFromClosestScope1.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsOnlyFromClosestScope1.ts
new file mode 100644
index 0000000000000..0c5e569b2a000
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsOnlyFromClosestScope1.ts
@@ -0,0 +1,34 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#thing": "./src/something.ts"
+////   }
+//// }
+
+// @Filename: /src/package.json
+//// {}
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /src/a.ts
+//// import {} from "/*1*/";
+
+// @Filename: /a.ts
+//// import {} from "/*2*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: [],
+    isNewIdentifierLocation: true,
+});
+
+verify.completions({
+    marker: ["2"],
+    exact: ["#thing"],
+    isNewIdentifierLocation: true,
+});

From 6759383f9f26315f2f372413c1ebd511b46e5823 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Wed, 16 Oct 2024 11:08:01 +0200
Subject: [PATCH 17/26] remove broken path

---
 src/services/stringCompletions.ts             | 25 -------------------
 ...ageJsonImportsIgnoreMatchingNodeModule1.ts | 22 ++++++++++++++++
 ...ageJsonImportsIgnoreMatchingNodeModule2.ts | 25 +++++++++++++++++++
 3 files changed, 47 insertions(+), 25 deletions(-)
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsIgnoreMatchingNodeModule1.ts
 create mode 100644 tests/cases/fourslash/pathCompletionsPackageJsonImportsIgnoreMatchingNodeModule2.ts

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 6fd73ef80207d..77317be99b8ec 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -1074,7 +1074,6 @@ function getCompletionEntriesForNonRelativeModules(
                     if (tryFileExists(host, packageFile)) {
                         const packageJson = readJson(packageFile, host);
                         const exports = (packageJson as any).exports;
-                        const imports = (packageJson as any).imports;
                         if (exports) {
                             if (typeof exports !== "object" || exports === null) { // eslint-disable-line no-restricted-syntax
                                 return; // null exports or entrypoint only, no sub-modules available
@@ -1104,30 +1103,6 @@ function getCompletionEntriesForNonRelativeModules(
                             );
                             return;
                         }
-                        if (!seenPackageScope && imports) {
-                            if (typeof imports !== "object" || imports === null) { // eslint-disable-line no-restricted-syntax
-                                return; // null imports or entrypoint only, no sub-modules available
-                            }
-                            const keys = getOwnKeys(imports);
-                            const fragmentSubpath = components.join("/") + (components.length && hasTrailingDirectorySeparator(fragment) ? "/" : "");
-                            const conditions = getConditions(compilerOptions, mode);
-                            addCompletionEntriesFromPathsOrExportsOrImports(
-                                result,
-                                /*isExports*/ false,
-                                /*isImports*/ true,
-                                fragmentSubpath,
-                                packageDirectory,
-                                extensionOptions,
-                                program,
-                                host,
-                                moduleSpecifierResolutionHost,
-                                keys,
-                                key => singleElementArray(getPatternFromFirstMatchingCondition(imports[key], conditions)),
-                                comparePatternKeys,
-                            );
-                            return;
-                        }
-                        seenPackageScope = true;
                     }
                     return nodeModulesDirectoryLookup(ancestor);
                 };
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsIgnoreMatchingNodeModule1.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsIgnoreMatchingNodeModule1.ts
new file mode 100644
index 0000000000000..c38db992d9a1f
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsIgnoreMatchingNodeModule1.ts
@@ -0,0 +1,22 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /src/node_modules/#internal/package.json
+//// {
+////   "imports": {
+////     "#thing": "./dist/something.js"
+////   }
+//// }
+
+// @Filename: /src/node_modules/#internal/dist/something.d.ts
+//// export function something(name: string): any;
+
+// @Filename: /src/a.ts
+//// import {} from "#internal//*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: [],
+    isNewIdentifierLocation: true,
+});
diff --git a/tests/cases/fourslash/pathCompletionsPackageJsonImportsIgnoreMatchingNodeModule2.ts b/tests/cases/fourslash/pathCompletionsPackageJsonImportsIgnoreMatchingNodeModule2.ts
new file mode 100644
index 0000000000000..81616077fb03f
--- /dev/null
+++ b/tests/cases/fourslash/pathCompletionsPackageJsonImportsIgnoreMatchingNodeModule2.ts
@@ -0,0 +1,25 @@
+/// <reference path="fourslash.ts" />
+
+// @module: nodenext
+
+// @Filename: /package.json
+//// {
+////   "imports": {
+////     "#internal/*": "./src/*.ts"
+////   }
+//// }
+
+// @Filename: /src/something.ts
+//// export function something(name: string): any;
+
+// @Filename: /src/node_modules/#internal/package.json
+//// {}
+
+// @Filename: /src/a.ts
+//// import {} from "#internal//*1*/";
+
+verify.completions({
+    marker: ["1"],
+    exact: ["a", "something"],
+    isNewIdentifierLocation: true,
+});

From 48b2c7849dde14b3f3eda9a375971337eeea4cec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Wed, 16 Oct 2024 11:31:15 +0200
Subject: [PATCH 18/26] limit imports lookup

---
 src/services/stringCompletions.ts | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 77317be99b8ec..7689a51cae6b3 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -72,6 +72,7 @@ import {
     getPossibleOriginalInputPathWithoutChangingExt,
     getReplacementSpanForContextToken,
     getResolvePackageJsonExports,
+    getResolvePackageJsonImports,
     getSupportedExtensions,
     getSupportedExtensionsWithJsonIfResolveJsonModule,
     getTextOfJsxAttributeName,
@@ -1010,13 +1011,15 @@ function getCompletionEntriesForNonRelativeModules(
             }
         }
         if (!foundGlobal) {
+            const resolvePackageJsonExports = getResolvePackageJsonExports(compilerOptions);
+            const resolvePackageJsonImports = getResolvePackageJsonImports(compilerOptions);
             let seenPackageScope = false;
             let ancestorLookup: (directory: string) => void | undefined = ancestor => {
                 const nodeModules = combinePaths(ancestor, "node_modules");
                 if (tryDirectoryExists(host, nodeModules)) {
                     getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, program, host, moduleSpecifierResolutionHost, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
                 }
-                if (!seenPackageScope) {
+                if (resolvePackageJsonImports && !seenPackageScope) {
                     const packageFile = combinePaths(ancestor, "package.json");
                     if (seenPackageScope = tryFileExists(host, packageFile)) {
                         const packageJson = readJson(packageFile, host);
@@ -1053,22 +1056,25 @@ function getCompletionEntriesForNonRelativeModules(
                     }
                 }
             };
-            if (fragmentDirectory && getResolvePackageJsonExports(compilerOptions)) {
-                const nodeModulesDirectoryLookup = ancestorLookup;
+            if (fragmentDirectory && (resolvePackageJsonExports || resolvePackageJsonImports)) {
+                const nodeModulesDirectoryOrImportsLookup = ancestorLookup;
                 ancestorLookup = ancestor => {
                     const components = getPathComponents(fragment);
                     components.shift(); // shift off empty root
                     let packagePath = components.shift();
                     if (!packagePath) {
-                        return nodeModulesDirectoryLookup(ancestor);
+                        return nodeModulesDirectoryOrImportsLookup(ancestor);
                     }
                     if (startsWith(packagePath, "@")) {
                         const subName = components.shift();
                         if (!subName) {
-                            return nodeModulesDirectoryLookup(ancestor);
+                            return nodeModulesDirectoryOrImportsLookup(ancestor);
                         }
                         packagePath = combinePaths(packagePath, subName);
                     }
+                    if (resolvePackageJsonImports && startsWith(packagePath, "#")) {
+                        return nodeModulesDirectoryOrImportsLookup(ancestor);
+                    }
                     const packageDirectory = combinePaths(ancestor, "node_modules", packagePath);
                     const packageFile = combinePaths(packageDirectory, "package.json");
                     if (tryFileExists(host, packageFile)) {
@@ -1104,7 +1110,7 @@ function getCompletionEntriesForNonRelativeModules(
                             return;
                         }
                     }
-                    return nodeModulesDirectoryLookup(ancestor);
+                    return nodeModulesDirectoryOrImportsLookup(ancestor);
                 };
             }
             forEachAncestorDirectoryStoppingAtGlobalCache(host, scriptPath, ancestorLookup);

From 56a15630ce69bf04ce6737fc9d5984f29cef6cea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Wed, 16 Oct 2024 11:58:02 +0200
Subject: [PATCH 19/26] dedupe imports/exports lookup

---
 src/compiler/moduleNameResolver.ts |  8 +--
 src/services/stringCompletions.ts  | 94 +++++++++++-------------------
 2 files changed, 37 insertions(+), 65 deletions(-)

diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts
index 9e9f8ca4f48e8..76b77dec3f1a1 100644
--- a/src/compiler/moduleNameResolver.ts
+++ b/src/compiler/moduleNameResolver.ts
@@ -2697,24 +2697,24 @@ function loadModuleFromExportsOrImports(extensions: Extensions, state: ModuleRes
     const loadModuleFromTargetExportOrImport = getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirectedReference, moduleName, scope, isImports);
 
     if (!endsWith(moduleName, directorySeparator) && !moduleName.includes("*") && hasProperty(lookupTable, moduleName)) {
-        const target = (lookupTable as { [idx: string]: unknown; })[moduleName];
+        const target = (lookupTable as MapLike<unknown>)[moduleName];
         return loadModuleFromTargetExportOrImport(target, /*subpath*/ "", /*pattern*/ false, moduleName);
     }
     const expandingKeys = toSorted(filter(getOwnKeys(lookupTable as MapLike<unknown>), k => hasOneAsterisk(k) || endsWith(k, "/")), comparePatternKeys);
     for (const potentialTarget of expandingKeys) {
         if (state.features & NodeResolutionFeatures.ExportsPatternTrailers && matchesPatternWithTrailer(potentialTarget, moduleName)) {
-            const target = (lookupTable as { [idx: string]: unknown; })[potentialTarget];
+            const target = (lookupTable as MapLike<unknown>)[potentialTarget];
             const starPos = potentialTarget.indexOf("*");
             const subpath = moduleName.substring(potentialTarget.substring(0, starPos).length, moduleName.length - (potentialTarget.length - 1 - starPos));
             return loadModuleFromTargetExportOrImport(target, subpath, /*pattern*/ true, potentialTarget);
         }
         else if (endsWith(potentialTarget, "*") && startsWith(moduleName, potentialTarget.substring(0, potentialTarget.length - 1))) {
-            const target = (lookupTable as { [idx: string]: unknown; })[potentialTarget];
+            const target = (lookupTable as MapLike<unknown>)[potentialTarget];
             const subpath = moduleName.substring(potentialTarget.length - 1);
             return loadModuleFromTargetExportOrImport(target, subpath, /*pattern*/ true, potentialTarget);
         }
         else if (startsWith(moduleName, potentialTarget)) {
-            const target = (lookupTable as { [idx: string]: unknown; })[potentialTarget];
+            const target = (lookupTable as MapLike<unknown>)[potentialTarget];
             const subpath = moduleName.substring(potentialTarget.length);
             return loadModuleFromTargetExportOrImport(target, subpath, /*pattern*/ false, potentialTarget);
         }
diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 7689a51cae6b3..23e06ee001ad8 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -1023,40 +1023,11 @@ function getCompletionEntriesForNonRelativeModules(
                     const packageFile = combinePaths(ancestor, "package.json");
                     if (seenPackageScope = tryFileExists(host, packageFile)) {
                         const packageJson = readJson(packageFile, host);
-                        const imports = (packageJson as any).imports;
-                        if (imports) {
-                            if (typeof imports !== "object" || imports === null) { // eslint-disable-line no-restricted-syntax
-                                return; // null imports or entrypoint only, no sub-modules available
-                            }
-
-                            const keys = getOwnKeys(imports);
-                            const conditions = getConditions(compilerOptions, mode);
-                            addCompletionEntriesFromPathsOrExportsOrImports(
-                                result,
-                                /*isExports*/ false,
-                                /*isImports*/ true,
-                                fragment,
-                                ancestor,
-                                extensionOptions,
-                                program,
-                                host,
-                                moduleSpecifierResolutionHost,
-                                keys,
-                                key => {
-                                    const pattern = getPatternFromFirstMatchingCondition(imports[key], conditions);
-                                    if (pattern === undefined) {
-                                        return undefined;
-                                    }
-                                    return singleElementArray(endsWith(key, "/") && endsWith(pattern, "/") ? pattern + "*" : pattern);
-                                },
-                                comparePatternKeys,
-                            );
-                            return;
-                        }
+                        exportsOrImportsLookup((packageJson as MapLike<unknown>).imports, fragment, ancestor, /*isExports*/ false, /*isImports*/ true);
                     }
                 }
             };
-            if (fragmentDirectory && (resolvePackageJsonExports || resolvePackageJsonImports)) {
+            if (fragmentDirectory && resolvePackageJsonExports) {
                 const nodeModulesDirectoryOrImportsLookup = ancestorLookup;
                 ancestorLookup = ancestor => {
                     const components = getPathComponents(fragment);
@@ -1079,36 +1050,9 @@ function getCompletionEntriesForNonRelativeModules(
                     const packageFile = combinePaths(packageDirectory, "package.json");
                     if (tryFileExists(host, packageFile)) {
                         const packageJson = readJson(packageFile, host);
-                        const exports = (packageJson as any).exports;
-                        if (exports) {
-                            if (typeof exports !== "object" || exports === null) { // eslint-disable-line no-restricted-syntax
-                                return; // null exports or entrypoint only, no sub-modules available
-                            }
-                            const keys = getOwnKeys(exports);
-                            const fragmentSubpath = components.join("/") + (components.length && hasTrailingDirectorySeparator(fragment) ? "/" : "");
-                            const conditions = getConditions(compilerOptions, mode);
-                            addCompletionEntriesFromPathsOrExportsOrImports(
-                                result,
-                                /*isExports*/ true,
-                                /*isImports*/ false,
-                                fragmentSubpath,
-                                packageDirectory,
-                                extensionOptions,
-                                program,
-                                host,
-                                moduleSpecifierResolutionHost,
-                                keys,
-                                key => {
-                                    const pattern = getPatternFromFirstMatchingCondition(exports[key], conditions);
-                                    if (pattern === undefined) {
-                                        return undefined;
-                                    }
-                                    return singleElementArray(endsWith(key, "/") && endsWith(pattern, "/") ? pattern + "*" : pattern);
-                                },
-                                comparePatternKeys,
-                            );
-                            return;
-                        }
+                        const fragmentSubpath = components.join("/") + (components.length && hasTrailingDirectorySeparator(fragment) ? "/" : "");
+                        exportsOrImportsLookup((packageJson as MapLike<unknown>).exports, fragmentSubpath, packageDirectory, /*isExports*/ true, /*isImports*/ false);
+                        return;
                     }
                     return nodeModulesDirectoryOrImportsLookup(ancestor);
                 };
@@ -1118,6 +1062,34 @@ function getCompletionEntriesForNonRelativeModules(
     }
 
     return arrayFrom(result.values());
+
+    function exportsOrImportsLookup(lookupTable: unknown, fragment: string, baseDirectory: string, isExports: boolean, isImports: boolean) {
+        if (typeof lookupTable !== "object" || lookupTable === null) { // eslint-disable-line no-restricted-syntax
+            return; // null lookupTable or entrypoint only
+        }
+        const keys = getOwnKeys(lookupTable as MapLike<unknown>);
+        const conditions = getConditions(compilerOptions, mode);
+        addCompletionEntriesFromPathsOrExportsOrImports(
+            result,
+            isExports,
+            isImports,
+            fragment,
+            baseDirectory,
+            extensionOptions,
+            program,
+            host,
+            moduleSpecifierResolutionHost,
+            keys,
+            key => {
+                const pattern = getPatternFromFirstMatchingCondition((lookupTable as MapLike<unknown>)[key], conditions);
+                if (pattern === undefined) {
+                    return undefined;
+                }
+                return singleElementArray(endsWith(key, "/") && endsWith(pattern, "/") ? pattern + "*" : pattern);
+            },
+            comparePatternKeys,
+        );
+    }
 }
 
 function getPatternFromFirstMatchingCondition(target: unknown, conditions: readonly string[]): string | undefined {

From b84468a81201aa8dc8214d1b1477f843da665f85 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Thu, 17 Oct 2024 00:28:14 +0200
Subject: [PATCH 20/26] handle declarationDir separately

---
 src/services/stringCompletions.ts             |   33 +-
 ...onsPackageJsonImportsSrcNoDistWildcard3.js | 1945 ++++++++++++++++-
 ...onsPackageJsonImportsSrcNoDistWildcard5.js |  144 +-
 ...onsPackageJsonImportsSrcNoDistWildcard5.ts |   10 +-
 4 files changed, 2036 insertions(+), 96 deletions(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 23e06ee001ad8..5a91be0ba7721 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -1172,16 +1172,21 @@ function getModulesForPathsPattern(
     const fragmentHasPath = containsSlash(fragment);
     const fragmentDirectory = fragmentHasPath ? hasTrailingDirectorySeparator(fragment) ? fragment : getDirectoryPath(fragment) : undefined;
 
+    const getCommonSourceDirectory = () => moduleSpecifierResolutionHost.getCommonSourceDirectory();
+    const ignoreCase = !hostUsesCaseSensitiveFileNames(moduleSpecifierResolutionHost);
+    const outDir = program.getCompilerOptions().outDir;
+    const declarationDir = program.getCompilerOptions().declarationDir;
+
     // Try and expand the prefix to include any path from the fragment so that we can limit the readDirectory call
     const expandedPrefixDirectory = fragmentHasPath ? combinePaths(normalizedPrefixDirectory, normalizedPrefixBase + fragmentDirectory) : normalizedPrefixDirectory;
     // Need to normalize after combining: If we combinePaths("a", "../b"), we want "b" and not "a/../b".
     const baseDirectory = normalizePath(combinePaths(packageDirectory, expandedPrefixDirectory));
-    const inputBaseDirectory = isImports && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, !hostUsesCaseSensitiveFileNames(moduleSpecifierResolutionHost), program.getCompilerOptions().outDir, () => moduleSpecifierResolutionHost.getCommonSourceDirectory());
+    const possibleInputBaseDirectoryForOutDir = isImports && outDir && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, ignoreCase, outDir, getCommonSourceDirectory);
+    const possibleInputBaseDirectoryForDeclarationDir = isImports && declarationDir && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, ignoreCase, declarationDir, getCommonSourceDirectory);
     const normalizedSuffix = normalizePath(parsed.suffix);
     const declarationExtension = normalizedSuffix && getDeclarationEmitExtensionForPath("_" + normalizedSuffix);
-    const inputExtension = inputBaseDirectory && inputBaseDirectory !== baseDirectory && normalizedSuffix ? getPossibleOriginalInputExtensionForExtension("_" + normalizedSuffix) : undefined;
+    const inputExtension = (possibleInputBaseDirectoryForOutDir || possibleInputBaseDirectoryForDeclarationDir) && normalizedSuffix ? getPossibleOriginalInputExtensionForExtension("_" + normalizedSuffix) : undefined;
     const matchingSuffixes = [...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []), declarationExtension && changeExtension(normalizedSuffix, declarationExtension), normalizedSuffix].filter(isString);
-    const completePrefix = fragmentHasPath ? baseDirectory : ensureTrailingDirectorySeparator(baseDirectory) + normalizedPrefixBase;
 
     // If we have a suffix, then we read the directory all the way down to avoid returning completions for
     // directories that don't contain files that would match the suffix. A previous comment here was concerned
@@ -1197,11 +1202,13 @@ function getModulesForPathsPattern(
 
     const isExportsOrImportsWildcard = (isExports || isImports) && endsWith(pattern, "/*");
 
-    let matches = getMatchesWithPrefix(baseDirectory, completePrefix);
+    let matches = getMatchesWithPrefix(baseDirectory);
 
-    if (inputBaseDirectory && inputBaseDirectory !== baseDirectory) {
-        const completeInputPrefix = fragmentHasPath ? inputBaseDirectory : ensureTrailingDirectorySeparator(inputBaseDirectory) + normalizedPrefixBase;
-        matches = concatenate(matches, getMatchesWithPrefix(inputBaseDirectory, completeInputPrefix));
+    if (possibleInputBaseDirectoryForOutDir) {
+        matches = concatenate(matches, getMatchesWithPrefix(possibleInputBaseDirectoryForOutDir));
+    }
+    if (possibleInputBaseDirectoryForDeclarationDir) {
+        matches = concatenate(matches, getMatchesWithPrefix(possibleInputBaseDirectoryForDeclarationDir));
     }
 
     // If we had a suffix, we already recursively searched for all possible files that could match
@@ -1209,16 +1216,20 @@ function getModulesForPathsPattern(
     // have something valid to import.
     if (!normalizedSuffix) {
         matches = concatenate(matches, getDirectoryMatches(baseDirectory));
-        if (inputBaseDirectory && inputBaseDirectory !== baseDirectory) {
-            matches = concatenate(matches, getDirectoryMatches(inputBaseDirectory));
+        if (possibleInputBaseDirectoryForOutDir) {
+            matches = concatenate(matches, getDirectoryMatches(possibleInputBaseDirectoryForOutDir));
+        }
+        if (possibleInputBaseDirectoryForDeclarationDir) {
+            matches = concatenate(matches, getDirectoryMatches(possibleInputBaseDirectoryForDeclarationDir));
         }
     }
 
     return matches;
 
-    function getMatchesWithPrefix(directory: string, prefix: string) {
+    function getMatchesWithPrefix(directory: string) {
+        const completePrefix = fragmentHasPath ? directory : ensureTrailingDirectorySeparator(directory) + normalizedPrefixBase;
         return mapDefined(tryReadDirectory(host, directory, extensionOptions.extensionsToSearch, /*exclude*/ undefined, includeGlobs), match => {
-            const trimmedWithPattern = trimPrefixAndSuffix(match, prefix);
+            const trimmedWithPattern = trimPrefixAndSuffix(match, completePrefix);
             if (trimmedWithPattern) {
                 if (containsSlash(trimmedWithPattern)) {
                     return directoryResult(getPathComponents(removeLeadingDirectorySeparator(trimmedWithPattern))[1]);
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.js
index 883e1132ad8dc..1a110a97b2ad2 100644
--- a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.js
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard3.js
@@ -537,7 +537,1948 @@ Info seq  [hh:mm:ss:mss] response:
         "isGlobalCompletion": false,
         "isMemberCompletion": false,
         "isNewIdentifierLocation": true,
-        "entries": [],
+        "entries": [
+          {
+            "name": "#component-blah",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          },
+          {
+            "name": "#component-index",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          },
+          {
+            "name": "#component-subfolder",
+            "kind": "directory",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 4,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 18,
+        "endLine": 1,
+        "endOffset": 18,
+        "insertString": ""
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 4,
+      "success": true
+    }
+After Request
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 2 *changed*
+    projectProgramVersion: 1
+    dirty: true *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-1 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 5,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 18,
+        "endLine": 1,
+        "endOffset": 18,
+        "insertString": "#"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 5,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-2 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 6,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 19,
+        "key": "#"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 6,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 7,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 19,
+        "endLine": 1,
+        "endOffset": 19,
+        "insertString": "c"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 7,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-3 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 8,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 20,
+        "key": "c"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 8,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 9,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 20,
+        "endLine": 1,
+        "endOffset": 20,
+        "insertString": "o"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 9,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-4 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 10,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 21,
+        "key": "o"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 10,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 11,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 21,
+        "endLine": 1,
+        "endOffset": 21,
+        "insertString": "m"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 11,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-5 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 12,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 22,
+        "key": "m"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 12,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 13,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 22,
+        "endLine": 1,
+        "endOffset": 22,
+        "insertString": "p"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 13,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-6 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 14,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 23,
+        "key": "p"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 14,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 15,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 23,
+        "endLine": 1,
+        "endOffset": 23,
+        "insertString": "o"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 15,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-7 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 16,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 24,
+        "key": "o"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 16,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 17,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 24,
+        "endLine": 1,
+        "endOffset": 24,
+        "insertString": "n"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 17,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-8 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 18,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 25,
+        "key": "n"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 18,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 19,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 25,
+        "endLine": 1,
+        "endOffset": 25,
+        "insertString": "e"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 19,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-9 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 20,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 26,
+        "key": "e"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 20,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 21,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 26,
+        "endLine": 1,
+        "endOffset": 26,
+        "insertString": "n"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 21,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-10 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 22,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 27,
+        "key": "n"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 22,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 23,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 27,
+        "endLine": 1,
+        "endOffset": 27,
+        "insertString": "t"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 23,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-11 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 24,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 28,
+        "key": "t"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 24,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 25,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 28,
+        "endLine": 1,
+        "endOffset": 28,
+        "insertString": "-"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 25,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-12 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 26,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 29,
+        "key": "-"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 26,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 27,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 29,
+        "endLine": 1,
+        "endOffset": 29,
+        "insertString": "s"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 27,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-13 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 28,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 30,
+        "key": "s"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 28,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 29,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 30,
+        "endLine": 1,
+        "endOffset": 30,
+        "insertString": "u"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 29,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-14 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 30,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 31,
+        "key": "u"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 30,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 31,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 31,
+        "endLine": 1,
+        "endOffset": 31,
+        "insertString": "b"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 31,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-15 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 32,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 32,
+        "key": "b"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 32,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 33,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 32,
+        "endLine": 1,
+        "endOffset": 32,
+        "insertString": "f"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 33,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-16 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 34,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 33,
+        "key": "f"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 34,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 35,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 33,
+        "endLine": 1,
+        "endOffset": 33,
+        "insertString": "o"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 35,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-17 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 36,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 34,
+        "key": "o"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 36,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 37,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 34,
+        "endLine": 1,
+        "endOffset": 34,
+        "insertString": "l"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 37,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-18 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 38,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 35,
+        "key": "l"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 38,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 39,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 35,
+        "endLine": 1,
+        "endOffset": 35,
+        "insertString": "d"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 39,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-19 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 40,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 36,
+        "key": "d"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 40,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 41,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 36,
+        "endLine": 1,
+        "endOffset": 36,
+        "insertString": "e"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 41,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-20 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 42,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 37,
+        "key": "e"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 42,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 43,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 37,
+        "endLine": 1,
+        "endOffset": 37,
+        "insertString": "r"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 43,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-21 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 44,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 38,
+        "key": "r"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 44,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 45,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 38,
+        "endLine": 1,
+        "endOffset": 38,
+        "insertString": "/"
+      },
+      "command": "change"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "change",
+      "request_seq": 45,
+      "success": true
+    }
+After Request
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/nope.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/a.ts (Open) *changed*
+    version: SVC-2-22 *changed*
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/components/blah.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/components/subfolder/one.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 46,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 39,
+        "key": "/"
+      },
+      "command": "formatonkey"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "formatonkey",
+      "request_seq": 46,
+      "success": true,
+      "body": []
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 47,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 47,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 48,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/a.ts",
+        "line": 1,
+        "offset": 39
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: true structureIsReused:: SafeModules Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+	/home/src/workspaces/project/nope.ts Text-1 "export const nope = 0;"
+	/home/src/workspaces/project/src/a.ts SVC-2-22 "import { } from \"#component-subfolder/\";"
+	/home/src/workspaces/project/src/components/blah.ts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/components/index.ts Text-1 "export const index = 0;"
+	/home/src/workspaces/project/src/components/subfolder/one.ts Text-1 "export const one = 0;"
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 48,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      },
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "one",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
         "defaultCommitCharacters": []
       }
-    }
\ No newline at end of file
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/nope.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/components/blah.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/components/index.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/components/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/components/subfolder/one.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/components/subfolder/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+  {} *new*
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+  {} *new*
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project/src: *new*
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 2
+    projectProgramVersion: 2 *changed*
+    dirty: false *changed*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.js
index c72375f5b5cfd..27f4085657a32 100644
--- a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.js
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.js
@@ -37,22 +37,19 @@ lib.decorators.legacy.d.ts-Text
   }
 }
 
-//// [/home/src/workspaces/project/src/index.mts]
-import { } from "";
-
-//// [/home/src/workspaces/project/src/types/blah.mts]
+//// [/home/src/workspaces/project/src/blah.mts]
 export const blah = 0;
 
-//// [/home/src/workspaces/project/src/types/blah.ts]
+//// [/home/src/workspaces/project/src/blah.ts]
 export const blah = 0;
 
-//// [/home/src/workspaces/project/src/types/index.mts]
-export const index = 0;
+//// [/home/src/workspaces/project/src/index.mts]
+import { } from "";
 
-//// [/home/src/workspaces/project/src/types/index.ts]
+//// [/home/src/workspaces/project/src/index.ts]
 export const index = 0;
 
-//// [/home/src/workspaces/project/src/types/only-in-cjs/index.ts]
+//// [/home/src/workspaces/project/src/only-in-cjs/index.ts]
 export const onlyInCjs = 0;
 
 //// [/home/src/workspaces/project/tsconfig.json]
@@ -80,12 +77,11 @@ Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/projec
 Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
 Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
  "rootNames": [
+  "/home/src/workspaces/project/src/blah.mts",
+  "/home/src/workspaces/project/src/blah.ts",
   "/home/src/workspaces/project/src/index.mts",
-  "/home/src/workspaces/project/src/types/blah.mts",
-  "/home/src/workspaces/project/src/types/blah.ts",
-  "/home/src/workspaces/project/src/types/index.mts",
-  "/home/src/workspaces/project/src/types/index.ts",
-  "/home/src/workspaces/project/src/types/only-in-cjs/index.ts"
+  "/home/src/workspaces/project/src/index.ts",
+  "/home/src/workspaces/project/src/only-in-cjs/index.ts"
  ],
  "options": {
   "module": 199,
@@ -107,17 +103,15 @@ Info seq  [hh:mm:ss:mss] event:
     }
 Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
 Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/blah.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/blah.ts 500 undefined WatchType: Closed Script info
 Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/blah.mts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/blah.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/index.mts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/index.ts 500 undefined WatchType: Closed Script info
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/only-in-cjs/index.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/only-in-cjs/index.ts 500 undefined WatchType: Closed Script info
 Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
 Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
 Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
-Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/types/only-in-cjs/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/only-in-cjs/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
 Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
 Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
 Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
@@ -125,28 +119,25 @@ Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspa
 Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
 Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
 Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (6)
+Info seq  [hh:mm:ss:mss] 	Files (5)
+	/home/src/workspaces/project/src/blah.mts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/blah.ts Text-1 "export const blah = 0;"
 	/home/src/workspaces/project/src/index.mts Text-1 "import { } from \"\";"
-	/home/src/workspaces/project/src/types/blah.mts Text-1 "export const blah = 0;"
-	/home/src/workspaces/project/src/types/blah.ts Text-1 "export const blah = 0;"
-	/home/src/workspaces/project/src/types/index.mts Text-1 "export const index = 0;"
-	/home/src/workspaces/project/src/types/index.ts Text-1 "export const index = 0;"
-	/home/src/workspaces/project/src/types/only-in-cjs/index.ts Text-1 "export const onlyInCjs = 0;"
+	/home/src/workspaces/project/src/index.ts Text-1 "export const index = 0;"
+	/home/src/workspaces/project/src/only-in-cjs/index.ts Text-1 "export const onlyInCjs = 0;"
 
 
-	src/index.mts
-	  Matched by default include pattern '**/*'
-	src/types/blah.mts
+	src/blah.mts
 	  Matched by default include pattern '**/*'
-	src/types/blah.ts
+	src/blah.ts
 	  Matched by default include pattern '**/*'
 	  File is CommonJS module because 'package.json' does not have field "type"
-	src/types/index.mts
+	src/index.mts
 	  Matched by default include pattern '**/*'
-	src/types/index.ts
+	src/index.ts
 	  Matched by default include pattern '**/*'
 	  File is CommonJS module because 'package.json' does not have field "type"
-	src/types/only-in-cjs/index.ts
+	src/only-in-cjs/index.ts
 	  Matched by default include pattern '**/*'
 	  File is CommonJS module because 'package.json' does not have field "type"
 
@@ -267,7 +258,7 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
 Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (6)
+Info seq  [hh:mm:ss:mss] 	Files (5)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -303,23 +294,19 @@ watchedFiles::
 /home/src/workspaces/project/package.json: *new*
   {"pollingInterval":2000}
   {"pollingInterval":250}
-/home/src/workspaces/project/src/index.mts: *new*
+/home/src/workspaces/project/src/blah.mts: *new*
   {"pollingInterval":500}
-/home/src/workspaces/project/src/package.json: *new*
-  {"pollingInterval":2000}
-/home/src/workspaces/project/src/types/blah.mts: *new*
-  {"pollingInterval":500}
-/home/src/workspaces/project/src/types/blah.ts: *new*
+/home/src/workspaces/project/src/blah.ts: *new*
   {"pollingInterval":500}
-/home/src/workspaces/project/src/types/index.mts: *new*
+/home/src/workspaces/project/src/index.mts: *new*
   {"pollingInterval":500}
-/home/src/workspaces/project/src/types/index.ts: *new*
+/home/src/workspaces/project/src/index.ts: *new*
   {"pollingInterval":500}
-/home/src/workspaces/project/src/types/only-in-cjs/index.ts: *new*
+/home/src/workspaces/project/src/only-in-cjs/index.ts: *new*
   {"pollingInterval":500}
-/home/src/workspaces/project/src/types/only-in-cjs/package.json: *new*
+/home/src/workspaces/project/src/only-in-cjs/package.json: *new*
   {"pollingInterval":2000}
-/home/src/workspaces/project/src/types/package.json: *new*
+/home/src/workspaces/project/src/package.json: *new*
   {"pollingInterval":2000}
 /home/src/workspaces/project/tsconfig.json: *new*
   {"pollingInterval":2000}
@@ -361,27 +348,23 @@ ScriptInfos::
     version: Text-1
     containingProjects: 1
         /dev/null/inferredProject1*
-/home/src/workspaces/project/src/index.mts *new*
-    version: Text-1
-    containingProjects: 1
-        /home/src/workspaces/project/tsconfig.json
-/home/src/workspaces/project/src/types/blah.mts *new*
+/home/src/workspaces/project/src/blah.mts *new*
     version: Text-1
     containingProjects: 1
         /home/src/workspaces/project/tsconfig.json
-/home/src/workspaces/project/src/types/blah.ts *new*
+/home/src/workspaces/project/src/blah.ts *new*
     version: Text-1
     containingProjects: 1
         /home/src/workspaces/project/tsconfig.json
-/home/src/workspaces/project/src/types/index.mts *new*
+/home/src/workspaces/project/src/index.mts *new*
     version: Text-1
     containingProjects: 1
         /home/src/workspaces/project/tsconfig.json
-/home/src/workspaces/project/src/types/index.ts *new*
+/home/src/workspaces/project/src/index.ts *new*
     version: Text-1
     containingProjects: 1
         /home/src/workspaces/project/tsconfig.json
-/home/src/workspaces/project/src/types/only-in-cjs/index.ts *new*
+/home/src/workspaces/project/src/only-in-cjs/index.ts *new*
     version: Text-1
     containingProjects: 1
         /home/src/workspaces/project/tsconfig.json
@@ -402,7 +385,7 @@ Info seq  [hh:mm:ss:mss] request:
 Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
 Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
 Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (6)
+Info seq  [hh:mm:ss:mss] 	Files (5)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -437,21 +420,17 @@ watchedFiles::
 /home/src/workspaces/project/package.json:
   {"pollingInterval":2000}
   {"pollingInterval":250}
-/home/src/workspaces/project/src/package.json:
-  {"pollingInterval":2000}
-/home/src/workspaces/project/src/types/blah.mts:
+/home/src/workspaces/project/src/blah.mts:
   {"pollingInterval":500}
-/home/src/workspaces/project/src/types/blah.ts:
+/home/src/workspaces/project/src/blah.ts:
   {"pollingInterval":500}
-/home/src/workspaces/project/src/types/index.mts:
+/home/src/workspaces/project/src/index.ts:
   {"pollingInterval":500}
-/home/src/workspaces/project/src/types/index.ts:
+/home/src/workspaces/project/src/only-in-cjs/index.ts:
   {"pollingInterval":500}
-/home/src/workspaces/project/src/types/only-in-cjs/index.ts:
-  {"pollingInterval":500}
-/home/src/workspaces/project/src/types/only-in-cjs/package.json:
+/home/src/workspaces/project/src/only-in-cjs/package.json:
   {"pollingInterval":2000}
-/home/src/workspaces/project/src/types/package.json:
+/home/src/workspaces/project/src/package.json:
   {"pollingInterval":2000}
 /home/src/workspaces/project/tsconfig.json:
   {"pollingInterval":2000}
@@ -497,28 +476,24 @@ ScriptInfos::
     version: Text-1
     containingProjects: 1
         /dev/null/inferredProject1*
-/home/src/workspaces/project/src/index.mts (Open) *changed*
-    open: true *changed*
-    version: Text-1
-    containingProjects: 1
-        /home/src/workspaces/project/tsconfig.json *default*
-/home/src/workspaces/project/src/types/blah.mts
+/home/src/workspaces/project/src/blah.mts
     version: Text-1
     containingProjects: 1
         /home/src/workspaces/project/tsconfig.json
-/home/src/workspaces/project/src/types/blah.ts
+/home/src/workspaces/project/src/blah.ts
     version: Text-1
     containingProjects: 1
         /home/src/workspaces/project/tsconfig.json
-/home/src/workspaces/project/src/types/index.mts
+/home/src/workspaces/project/src/index.mts (Open) *changed*
+    open: true *changed*
     version: Text-1
     containingProjects: 1
-        /home/src/workspaces/project/tsconfig.json
-/home/src/workspaces/project/src/types/index.ts
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/src/index.ts
     version: Text-1
     containingProjects: 1
         /home/src/workspaces/project/tsconfig.json
-/home/src/workspaces/project/src/types/only-in-cjs/index.ts
+/home/src/workspaces/project/src/only-in-cjs/index.ts
     version: Text-1
     containingProjects: 1
         /home/src/workspaces/project/tsconfig.json
@@ -566,7 +541,20 @@ Info seq  [hh:mm:ss:mss] response:
         "isGlobalCompletion": false,
         "isMemberCompletion": false,
         "isNewIdentifierLocation": true,
-        "entries": [],
+        "entries": [
+          {
+            "name": "#blah",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          },
+          {
+            "name": "#index",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
         "defaultCommitCharacters": []
       }
     }
\ No newline at end of file
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.ts
index 9cb5cbb395309..d63f313c1773e 100644
--- a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.ts
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard5.ts
@@ -36,19 +36,19 @@
 ////   }
 //// }
 
-// @Filename: /home/src/workspaces/project/src/types/index.mts
+// @Filename: /home/src/workspaces/project/src/index.mts
 //// export const index = 0;
 
-// @Filename: /home/src/workspaces/project/src/types/index.ts
+// @Filename: /home/src/workspaces/project/src/index.ts
 //// export const index = 0;
 
-// @Filename: /home/src/workspaces/project/src/types/blah.mts
+// @Filename: /home/src/workspaces/project/src/blah.mts
 //// export const blah = 0;
 
-// @Filename: /home/src/workspaces/project/src/types/blah.ts
+// @Filename: /home/src/workspaces/project/src/blah.ts
 //// export const blah = 0;
 
-// @Filename: /home/src/workspaces/project/src/types/only-in-cjs/index.ts
+// @Filename: /home/src/workspaces/project/src/only-in-cjs/index.ts
 //// export const onlyInCjs = 0;
 
 // @Filename: /home/src/workspaces/project/src/index.mts

From a80cdfaf5aee37250ae5cfae3d374f8773bd1dd4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Thu, 17 Oct 2024 10:30:16 +0200
Subject: [PATCH 21/26] use `ValidationFlags.AllowWildcard`

---
 src/harness/vfsUtil.ts                        |   2 +-
 ...onsPackageJsonImportsSrcNoDistWildcard6.js | 477 ++++++++++++++++++
 2 files changed, 478 insertions(+), 1 deletion(-)
 create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard6.js

diff --git a/src/harness/vfsUtil.ts b/src/harness/vfsUtil.ts
index 1995d79ab6da0..4799927a70a14 100644
--- a/src/harness/vfsUtil.ts
+++ b/src/harness/vfsUtil.ts
@@ -1148,7 +1148,7 @@ export class FileSystem {
         for (const key of Object.keys(files)) {
             const value = normalizeFileSetEntry(files[key]);
             const path = dirname ? vpath.resolve(dirname, key) : key;
-            vpath.validate(path, vpath.ValidationFlags.Absolute);
+            vpath.validate(path, vpath.ValidationFlags.Absolute | vpath.ValidationFlags.AllowWildcard);
 
             // eslint-disable-next-line no-restricted-syntax
             if (value === null || value === undefined || value instanceof Rmdir || value instanceof Unlink) {
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard6.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard6.js
new file mode 100644
index 0000000000000..fb284dcc7a04b
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard6.js
@@ -0,0 +1,477 @@
+Info seq  [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq  [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq  [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq  [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/package.json]
+{
+  "name": "foo",
+  "main": "dist/index.js",
+  "module": "dist/index.mjs",
+  "types": "dist/index.d.ts",
+  "imports": {
+    "#*": "./dist/*?.d.ts"
+  }
+}
+
+//// [/home/src/workspaces/project/src/blah?.ts]
+export const blah = 0;
+
+//// [/home/src/workspaces/project/src/index.ts]
+export const index = 0;
+
+//// [/home/src/workspaces/project/src/m.mts]
+import { } from "";
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{
+  "compilerOptions": {
+    "module": "nodenext",
+    "rootDir": "src",
+    "outDir": "dist"
+  }
+}
+
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 0,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/tsconfig.json"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+  "/home/src/workspaces/project/src/blah?.ts",
+  "/home/src/workspaces/project/src/index.ts",
+  "/home/src/workspaces/project/src/m.mts"
+ ],
+ "options": {
+  "module": 199,
+  "rootDir": "/home/src/workspaces/project/src",
+  "outDir": "/home/src/workspaces/project/dist",
+  "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingStart",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json",
+        "reason": "Creating possible configured project for /home/src/workspaces/project/tsconfig.json to open"
+      }
+    }
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/blah?.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/m.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (3)
+	/home/src/workspaces/project/src/blah?.ts Text-1 "export const blah = 0;"
+	/home/src/workspaces/project/src/index.ts Text-1 "export const index = 0;"
+	/home/src/workspaces/project/src/m.mts Text-1 "import { } from \"\";"
+
+
+	src/blah?.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/index.ts
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
+	src/m.mts
+	  Matched by default include pattern '**/*'
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "projectLoadingFinish",
+      "body": {
+        "projectName": "/home/src/workspaces/project/tsconfig.json"
+      }
+    }
+Info seq  [hh:mm:ss:mss] event:
+    {
+      "seq": 0,
+      "type": "event",
+      "event": "configFileDiag",
+      "body": {
+        "triggerFile": "/home/src/workspaces/project/tsconfig.json",
+        "configFile": "/home/src/workspaces/project/tsconfig.json",
+        "diagnostics": [
+          {
+            "text": "File '/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts' not found.\n  The file is in the program because:\n    Default library for target 'esnext'",
+            "code": 6053,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Array'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Boolean'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Function'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'IArguments'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Number'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'Object'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'RegExp'.",
+            "code": 2318,
+            "category": "error"
+          },
+          {
+            "text": "Cannot find global type 'String'.",
+            "code": 2318,
+            "category": "error"
+          }
+        ]
+      }
+    }
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined:: Result: undefined
+Info seq  [hh:mm:ss:mss] Creating InferredProject: /dev/null/inferredProject1*, currentDirectory: /home/src/workspaces/project
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root
+Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots
+Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\"\n  }\n}"
+
+
+	../../tslibs/TS/Lib/lib.d.ts
+	  Default library for target 'es5'
+	../../tslibs/TS/Lib/lib.decorators.d.ts
+	  Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+	../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+	  Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+	tsconfig.json
+	  Root file specified for compilation
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (3)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 0,
+      "success": true,
+      "performanceData": {
+        "updateGraphDurationMs": *
+      }
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/blah?.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/index.ts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/m.mts: *new*
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json: *new*
+  {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+  {}
+/home/src/workspaces/node_modules/@types: *new*
+  {}
+  {}
+/home/src/workspaces/project: *new*
+  {}
+/home/src/workspaces/project/node_modules: *new*
+  {}
+/home/src/workspaces/project/node_modules/@types: *new*
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: true
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/blah?.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/m.mts *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/tsconfig.json (Open) *new*
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 1,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/m.mts"
+      },
+      "command": "open"
+    }
+Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/m.mts 500 undefined WatchType: Closed Script info
+Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/m.mts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq  [hh:mm:ss:mss] 	Files (3)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
+Info seq  [hh:mm:ss:mss] 	Files (4)
+
+Info seq  [hh:mm:ss:mss] -----------------------------------------------
+Info seq  [hh:mm:ss:mss] Open files: 
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/tsconfig.json ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /dev/null/inferredProject1*
+Info seq  [hh:mm:ss:mss] 	FileName: /home/src/workspaces/project/src/m.mts ProjectRootPath: undefined
+Info seq  [hh:mm:ss:mss] 		Projects: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "open",
+      "request_seq": 1,
+      "success": true
+    }
+After Request
+watchedFiles::
+/home/src/tslibs/TS/Lib/lib.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts:
+  {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.esnext.full.d.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/jsconfig.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
+  {"pollingInterval":250}
+/home/src/workspaces/project/src/blah?.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/index.ts:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
+/home/src/workspaces/project/tsconfig.json:
+  {"pollingInterval":2000}
+
+watchedFiles *deleted*::
+/home/src/workspaces/project/src/m.mts:
+  {"pollingInterval":500}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules:
+  {}
+/home/src/workspaces/node_modules/@types:
+  {}
+  {}
+/home/src/workspaces/project:
+  {}
+/home/src/workspaces/project/node_modules:
+  {}
+/home/src/workspaces/project/node_modules/@types:
+  {}
+  {}
+
+Projects::
+/dev/null/inferredProject1* (Inferred)
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    autoImportProviderHost: false
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+    projectStateVersion: 1
+    projectProgramVersion: 1
+    noOpenRef: false *changed*
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+    version: Text-1
+    containingProjects: 1
+        /dev/null/inferredProject1*
+/home/src/workspaces/project/src/blah?.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/index.ts
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/src/m.mts (Open) *changed*
+    open: true *changed*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json *default*
+/home/src/workspaces/project/tsconfig.json (Open)
+    version: SVC-1-0
+    containingProjects: 1
+        /dev/null/inferredProject1* *default*
+
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 2,
+      "type": "request",
+      "arguments": {
+        "preferences": {}
+      },
+      "command": "configure"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "configure",
+      "request_seq": 2,
+      "success": true
+    }
+Info seq  [hh:mm:ss:mss] request:
+    {
+      "seq": 3,
+      "type": "request",
+      "arguments": {
+        "file": "/home/src/workspaces/project/src/m.mts",
+        "line": 1,
+        "offset": 18
+      },
+      "command": "completionInfo"
+    }
+Info seq  [hh:mm:ss:mss] response:
+    {
+      "seq": 0,
+      "type": "response",
+      "command": "completionInfo",
+      "request_seq": 3,
+      "success": true,
+      "body": {
+        "isGlobalCompletion": false,
+        "isMemberCompletion": false,
+        "isNewIdentifierLocation": true,
+        "entries": [
+          {
+            "name": "#blah",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
+        "defaultCommitCharacters": []
+      }
+    }
\ No newline at end of file

From 96209a9f461a6629241c9260bb0ff595df8d1492 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Thu, 17 Oct 2024 11:04:47 +0200
Subject: [PATCH 22/26] allowJs accepts a boolean, not String(boolea), doh

---
 ...onsPackageJsonImportsSrcNoDistWildcard9.js | 60 ++++++++++++-------
 ...onsPackageJsonImportsSrcNoDistWildcard9.ts |  2 +-
 2 files changed, 41 insertions(+), 21 deletions(-)

diff --git a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.js b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.js
index 0efd23e61b952..a3e4748da892b 100644
--- a/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.js
+++ b/tests/baselines/reference/tsserver/fourslashServer/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.js
@@ -31,7 +31,7 @@ import { } from "";
     "module": "nodenext",
     "rootDir": "src",
     "outDir": "dist",
-    "allowJs": "true"
+    "allowJs": true
   }
 }
 
@@ -50,12 +50,14 @@ Info seq  [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/projec
 Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
 Info seq  [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
  "rootNames": [
+  "/home/src/workspaces/project/src/blah.js",
   "/home/src/workspaces/project/src/index.mts"
  ],
  "options": {
   "module": 199,
   "rootDir": "/home/src/workspaces/project/src",
   "outDir": "/home/src/workspaces/project/dist",
+  "allowJs": true,
   "configFilePath": "/home/src/workspaces/project/tsconfig.json"
  }
 }
@@ -71,8 +73,11 @@ Info seq  [hh:mm:ss:mss] event:
     }
 Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
 Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project 1 undefined Config: /home/src/workspaces/project/tsconfig.json WatchType: Wild card directory
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/blah.js 500 undefined WatchType: Closed Script info
 Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
 Info seq  [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/src/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
+Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: File location affecting resolution
 Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts 500 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Missing file
 Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
 Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
@@ -80,10 +85,14 @@ Info seq  [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspa
 Info seq  [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
 Info seq  [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
 Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (1)
+Info seq  [hh:mm:ss:mss] 	Files (2)
+	/home/src/workspaces/project/src/blah.js Text-1 "export const blah = 0;"
 	/home/src/workspaces/project/src/index.mts Text-1 "import { } from \"\";"
 
 
+	src/blah.js
+	  Matched by default include pattern '**/*'
+	  File is CommonJS module because 'package.json' does not have field "type"
 	src/index.mts
 	  Matched by default include pattern '**/*'
 
@@ -150,20 +159,6 @@ Info seq  [hh:mm:ss:mss] event:
             "text": "Cannot find global type 'String'.",
             "code": 2318,
             "category": "error"
-          },
-          {
-            "start": {
-              "line": 6,
-              "offset": 16
-            },
-            "end": {
-              "line": 6,
-              "offset": 22
-            },
-            "text": "Compiler option 'allowJs' requires a value of type boolean.",
-            "code": 5024,
-            "category": "error",
-            "fileName": "/home/src/workspaces/project/tsconfig.json"
           }
         ]
       }
@@ -189,7 +184,7 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 	/home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
 	/home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
 	/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
-	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\",\n    \"allowJs\": \"true\"\n  }\n}"
+	/home/src/workspaces/project/tsconfig.json SVC-1-0 "{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"rootDir\": \"src\",\n    \"outDir\": \"dist\",\n    \"allowJs\": true\n  }\n}"
 
 
 	../../tslibs/TS/Lib/lib.d.ts
@@ -204,7 +199,7 @@ Info seq  [hh:mm:ss:mss] 	Files (4)
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/package.json 250 undefined WatchType: package.json file
 Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (1)
+Info seq  [hh:mm:ss:mss] 	Files (2)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -238,9 +233,14 @@ watchedFiles::
 /home/src/workspaces/project/jsconfig.json: *new*
   {"pollingInterval":2000}
 /home/src/workspaces/project/package.json: *new*
+  {"pollingInterval":2000}
   {"pollingInterval":250}
+/home/src/workspaces/project/src/blah.js: *new*
+  {"pollingInterval":500}
 /home/src/workspaces/project/src/index.mts: *new*
   {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json: *new*
+  {"pollingInterval":2000}
 /home/src/workspaces/project/tsconfig.json: *new*
   {"pollingInterval":2000}
 
@@ -281,6 +281,10 @@ ScriptInfos::
     version: Text-1
     containingProjects: 1
         /dev/null/inferredProject1*
+/home/src/workspaces/project/src/blah.js *new*
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
 /home/src/workspaces/project/src/index.mts *new*
     version: Text-1
     containingProjects: 1
@@ -302,7 +306,7 @@ Info seq  [hh:mm:ss:mss] request:
 Info seq  [hh:mm:ss:mss] FileWatcher:: Close:: WatchInfo: /home/src/workspaces/project/src/index.mts 500 undefined WatchType: Closed Script info
 Info seq  [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/src/index.mts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
 Info seq  [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
-Info seq  [hh:mm:ss:mss] 	Files (1)
+Info seq  [hh:mm:ss:mss] 	Files (2)
 
 Info seq  [hh:mm:ss:mss] -----------------------------------------------
 Info seq  [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
@@ -335,7 +339,12 @@ watchedFiles::
 /home/src/workspaces/project/jsconfig.json:
   {"pollingInterval":2000}
 /home/src/workspaces/project/package.json:
+  {"pollingInterval":2000}
   {"pollingInterval":250}
+/home/src/workspaces/project/src/blah.js:
+  {"pollingInterval":500}
+/home/src/workspaces/project/src/package.json:
+  {"pollingInterval":2000}
 /home/src/workspaces/project/tsconfig.json:
   {"pollingInterval":2000}
 
@@ -380,6 +389,10 @@ ScriptInfos::
     version: Text-1
     containingProjects: 1
         /dev/null/inferredProject1*
+/home/src/workspaces/project/src/blah.js
+    version: Text-1
+    containingProjects: 1
+        /home/src/workspaces/project/tsconfig.json
 /home/src/workspaces/project/src/index.mts (Open) *changed*
     open: true *changed*
     version: Text-1
@@ -429,7 +442,14 @@ Info seq  [hh:mm:ss:mss] response:
         "isGlobalCompletion": false,
         "isMemberCompletion": false,
         "isNewIdentifierLocation": true,
-        "entries": [],
+        "entries": [
+          {
+            "name": "#blah",
+            "kind": "script",
+            "kindModifiers": "",
+            "sortText": "11"
+          }
+        ],
         "defaultCommitCharacters": []
       }
     }
\ No newline at end of file
diff --git a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.ts b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.ts
index 4b6f1aa222da0..fdbe7436f4d96 100644
--- a/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.ts
+++ b/tests/cases/fourslash/server/pathCompletionsPackageJsonImportsSrcNoDistWildcard9.ts
@@ -6,7 +6,7 @@
 ////     "module": "nodenext",
 ////     "rootDir": "src",
 ////     "outDir": "dist",
-////     "allowJs": "true"
+////     "allowJs": true
 ////   }
 //// }
 

From 17b2aaea1c34494e308a19348921b32c1c942e2d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Thu, 17 Oct 2024 11:21:12 +0200
Subject: [PATCH 23/26] split `importsLookup` out of
 `nodeModulesDirectoryOrImportsLookup` for granular reuse

---
 src/services/stringCompletions.ts | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 5a91be0ba7721..034719082ebce 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -1014,19 +1014,24 @@ function getCompletionEntriesForNonRelativeModules(
             const resolvePackageJsonExports = getResolvePackageJsonExports(compilerOptions);
             const resolvePackageJsonImports = getResolvePackageJsonImports(compilerOptions);
             let seenPackageScope = false;
-            let ancestorLookup: (directory: string) => void | undefined = ancestor => {
-                const nodeModules = combinePaths(ancestor, "node_modules");
-                if (tryDirectoryExists(host, nodeModules)) {
-                    getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, program, host, moduleSpecifierResolutionHost, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
-                }
+
+            const importsLookup = (directory: string) => {
                 if (resolvePackageJsonImports && !seenPackageScope) {
-                    const packageFile = combinePaths(ancestor, "package.json");
+                    const packageFile = combinePaths(directory, "package.json");
                     if (seenPackageScope = tryFileExists(host, packageFile)) {
                         const packageJson = readJson(packageFile, host);
-                        exportsOrImportsLookup((packageJson as MapLike<unknown>).imports, fragment, ancestor, /*isExports*/ false, /*isImports*/ true);
+                        exportsOrImportsLookup((packageJson as MapLike<unknown>).imports, fragment, directory, /*isExports*/ false, /*isImports*/ true);
                     }
                 }
             };
+
+            let ancestorLookup: (directory: string) => void | undefined = ancestor => {
+                const nodeModules = combinePaths(ancestor, "node_modules");
+                if (tryDirectoryExists(host, nodeModules)) {
+                    getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, program, host, moduleSpecifierResolutionHost, /*moduleSpecifierIsRelative*/ false, /*exclude*/ undefined, result);
+                }
+                importsLookup(ancestor);
+            };
             if (fragmentDirectory && resolvePackageJsonExports) {
                 const nodeModulesDirectoryOrImportsLookup = ancestorLookup;
                 ancestorLookup = ancestor => {
@@ -1044,7 +1049,7 @@ function getCompletionEntriesForNonRelativeModules(
                         packagePath = combinePaths(packagePath, subName);
                     }
                     if (resolvePackageJsonImports && startsWith(packagePath, "#")) {
-                        return nodeModulesDirectoryOrImportsLookup(ancestor);
+                        return importsLookup(ancestor);
                     }
                     const packageDirectory = combinePaths(ancestor, "node_modules", packagePath);
                     const packageFile = combinePaths(packageDirectory, "package.json");

From 22e4d49cd42b4f42b2727ee006a9a7bf06ddce30 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Thu, 17 Oct 2024 12:06:31 +0200
Subject: [PATCH 24/26] Relax check for `inputExtension`

---
 src/services/stringCompletions.ts | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 034719082ebce..5687d22e9dc18 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -1190,8 +1190,12 @@ function getModulesForPathsPattern(
     const possibleInputBaseDirectoryForDeclarationDir = isImports && declarationDir && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, ignoreCase, declarationDir, getCommonSourceDirectory);
     const normalizedSuffix = normalizePath(parsed.suffix);
     const declarationExtension = normalizedSuffix && getDeclarationEmitExtensionForPath("_" + normalizedSuffix);
-    const inputExtension = (possibleInputBaseDirectoryForOutDir || possibleInputBaseDirectoryForDeclarationDir) && normalizedSuffix ? getPossibleOriginalInputExtensionForExtension("_" + normalizedSuffix) : undefined;
-    const matchingSuffixes = [...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []), declarationExtension && changeExtension(normalizedSuffix, declarationExtension), normalizedSuffix].filter(isString);
+    const inputExtension = normalizedSuffix ? getPossibleOriginalInputExtensionForExtension("_" + normalizedSuffix) : undefined;
+    const matchingSuffixes = [
+        ...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []),
+        declarationExtension && changeExtension(normalizedSuffix, declarationExtension),
+        normalizedSuffix
+    ].filter(isString);
 
     // If we have a suffix, then we read the directory all the way down to avoid returning completions for
     // directories that don't contain files that would match the suffix. A previous comment here was concerned

From a18104e495cf34bd56a63e098c8806067d45b04f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Thu, 17 Oct 2024 12:32:54 +0200
Subject: [PATCH 25/26] swap `matchingSuffixes` to change the priority order
 for `trimPrefixAndSuffix`

---
 src/services/stringCompletions.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index 5687d22e9dc18..dbe5bc5e2198a 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -1192,8 +1192,8 @@ function getModulesForPathsPattern(
     const declarationExtension = normalizedSuffix && getDeclarationEmitExtensionForPath("_" + normalizedSuffix);
     const inputExtension = normalizedSuffix ? getPossibleOriginalInputExtensionForExtension("_" + normalizedSuffix) : undefined;
     const matchingSuffixes = [
-        ...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []),
         declarationExtension && changeExtension(normalizedSuffix, declarationExtension),
+        ...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []),
         normalizedSuffix
     ].filter(isString);
 

From 36bed48e27bbf440e740b3b63a6e0cd8dfb1ffb1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Thu, 17 Oct 2024 12:50:21 +0200
Subject: [PATCH 26/26] fmt

---
 src/services/stringCompletions.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index dbe5bc5e2198a..9a9e108c20fc8 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -1194,7 +1194,7 @@ function getModulesForPathsPattern(
     const matchingSuffixes = [
         declarationExtension && changeExtension(normalizedSuffix, declarationExtension),
         ...(inputExtension ? inputExtension.map(ext => changeExtension(normalizedSuffix, ext)) : []),
-        normalizedSuffix
+        normalizedSuffix,
     ].filter(isString);
 
     // If we have a suffix, then we read the directory all the way down to avoid returning completions for