@@ -333,6 +333,41 @@ describe("unittests:: tsserver:: autoImportProvider::", () => {
333333 assert . ok ( seenSymbolNames . has ( "Volume" ) ) ;
334334 baselineTsserverLogs ( "autoImportProvider" , "Shared source files between AutoImportProvider and main program" , session ) ;
335335 } ) ;
336+
337+ it ( "Does not index wildcard export targets outside the package" , ( ) => {
338+ const files = [
339+ {
340+ path : "/user/username/projects/project/node_modules/pkg/package.json" ,
341+ content : jsonToReadableText ( {
342+ name : "pkg" ,
343+ version : "1.0.0" ,
344+ exports : {
345+ "./*" : "./../../private/*.js" ,
346+ } ,
347+ } ) ,
348+ } ,
349+ { path : "/user/username/projects/project/private/leaked.d.ts" , content : `export declare const leakedAutoImport: number;` } ,
350+ { path : "/user/username/projects/project/package.json" , content : jsonToReadableText ( { dependencies : { pkg : "*" } } ) } ,
351+ {
352+ path : "/user/username/projects/project/tsconfig.json" ,
353+ content : jsonToReadableText ( {
354+ compilerOptions : {
355+ module : "nodenext" ,
356+ lib : [ "es5" ] ,
357+ } ,
358+ files : [ "index.ts" ] ,
359+ } ) ,
360+ } ,
361+ { path : "/user/username/projects/project/index.ts" , content : "" } ,
362+ ] ;
363+
364+ const { session } = setup ( files ) ;
365+ openFilesForSession ( [ files [ 4 ] ] , session ) ;
366+ const project = session . getProjectService ( ) . configuredProjects . get ( "/user/username/projects/project/tsconfig.json" ) ! ;
367+ const completions = project . getLanguageService ( ) . getCompletionsAtPosition ( files [ 4 ] . path , 0 , { includeCompletionsForModuleExports : true } ) ;
368+ assert . isDefined ( completions ) ;
369+ assert . isFalse ( completions . entries . some ( c => c . name === "leakedAutoImport" ) ) ;
370+ } ) ;
336371} ) ;
337372
338373describe ( "unittests:: tsserver:: autoImportProvider:: monorepo" , ( ) => {
0 commit comments