diff --git a/internal/compiler/program.go b/internal/compiler/program.go index de4d515f20..2a91845230 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -2093,7 +2093,7 @@ func (p *Program) GetSymlinkCache() *symlinks.KnownSymlinks { } } - if packageResolution := p.resolver.ResolvePackageDirectory(dep, packageJsonName, core.ResolutionModeCommonJS, nil); packageResolution.IsResolved() { + if packageResolution := p.resolver.ResolvePackageDirectory(dep, packageJsonName, core.ResolutionModeCommonJS, nil); packageResolution.IsResolved() && packageResolution.OriginalPath != "" { knownSymlinks.ProcessResolution( tspath.CombinePaths(packageResolution.OriginalPath, "package.json"), tspath.CombinePaths(packageResolution.ResolvedFileName, "package.json"), diff --git a/testdata/baselines/reference/compiler/jsDeclarationEmitDoesNotReuseUnrelatedJSDocImport.js b/testdata/baselines/reference/compiler/jsDeclarationEmitDoesNotReuseUnrelatedJSDocImport.js new file mode 100644 index 0000000000..9fecbd9ad9 --- /dev/null +++ b/testdata/baselines/reference/compiler/jsDeclarationEmitDoesNotReuseUnrelatedJSDocImport.js @@ -0,0 +1,82 @@ +//// [tests/cases/compiler/jsDeclarationEmitDoesNotReuseUnrelatedJSDocImport.ts] //// + +//// [package.json] +{ + "name": "project", + "private": true, + "type": "module", + "dependencies": { + "external": "1.0.0" + } +} + +//// [package.json] +{ + "name": "external", + "version": "1.0.0", + "type": "module", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "default": "./src/index.js" + }, + "./src/*.js": { + "types": "./src/*.d.ts", + "default": "./src/*.js" + } + } +} + +//// [index.d.ts] +export type SchemaElement = import('../src/types.d.ts').SchemaElement; + +//// [types.d.ts] +export interface SchemaElement { + name: string; +} + +//// [index.js] + +//// [types.d.ts] +import type { SchemaElement } from 'external'; + +export interface Writer {} + +//// [index.js] +/** + * @import {SchemaElement} from 'external' + * @import {Writer} from '../src/types.js' + */ + +export class Example { + /** + * @param {object} options + * @param {SchemaElement[]} options.schema + */ + constructor({ schema }) { + this.schema = schema; + } +} + + + + +//// [index.d.ts] +export {}; +//// [index.d.ts] +/** + * @import {SchemaElement} from 'external' + * @import {Writer} from '../src/types.js' + */ +import type { SchemaElement } from 'external'; +export declare class Example { + schema: import("external/src/types.js").SchemaElement[]; + /** + * @param {object} options + * @param {SchemaElement[]} options.schema + */ + constructor({ schema }: { + schema: SchemaElement[]; + }); +} diff --git a/testdata/tests/cases/compiler/jsDeclarationEmitDoesNotReuseUnrelatedJSDocImport.ts b/testdata/tests/cases/compiler/jsDeclarationEmitDoesNotReuseUnrelatedJSDocImport.ts new file mode 100644 index 0000000000..0448e9e36e --- /dev/null +++ b/testdata/tests/cases/compiler/jsDeclarationEmitDoesNotReuseUnrelatedJSDocImport.ts @@ -0,0 +1,68 @@ +// @allowJs: true +// @checkJs: true +// @declaration: true +// @emitDeclarationOnly: true +// @module: nodenext +// @outDir: /out +// @strict: true +// @currentDirectory: / +// @noTypesAndSymbols: true + +// @filename: /package.json +{ + "name": "project", + "private": true, + "type": "module", + "dependencies": { + "external": "1.0.0" + } +} + +// @filename: /node_modules/external/package.json +{ + "name": "external", + "version": "1.0.0", + "type": "module", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "default": "./src/index.js" + }, + "./src/*.js": { + "types": "./src/*.d.ts", + "default": "./src/*.js" + } + } +} + +// @filename: /node_modules/external/types/index.d.ts +export type SchemaElement = import('../src/types.d.ts').SchemaElement; + +// @filename: /node_modules/external/src/types.d.ts +export interface SchemaElement { + name: string; +} + +// @filename: /node_modules/external/src/index.js + +// @filename: /src/types.d.ts +import type { SchemaElement } from 'external'; + +export interface Writer {} + +// @filename: /src/index.js +/** + * @import {SchemaElement} from 'external' + * @import {Writer} from '../src/types.js' + */ + +export class Example { + /** + * @param {object} options + * @param {SchemaElement[]} options.schema + */ + constructor({ schema }) { + this.schema = schema; + } +}