diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index fbd4f57a4a0fb..0ddbe301de2d9 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -1422,7 +1422,8 @@ namespace ts { export function getPackageNameFromTypesPackageName(mangledName: string): string { const withoutAtTypePrefix = removePrefix(mangledName, "@types/"); if (withoutAtTypePrefix !== mangledName) { - return unmangleScopedPackageName(withoutAtTypePrefix); + const withoutAtTypeNodePrefix = removePrefix(withoutAtTypePrefix, "node/"); + return unmangleScopedPackageName(withoutAtTypeNodePrefix); } return mangledName; } diff --git a/tests/baselines/reference/importDeclFromTypeNodeInJsSource.js b/tests/baselines/reference/importDeclFromTypeNodeInJsSource.js new file mode 100644 index 0000000000000..7abc439c941d6 --- /dev/null +++ b/tests/baselines/reference/importDeclFromTypeNodeInJsSource.js @@ -0,0 +1,40 @@ +//// [tests/cases/compiler/importDeclFromTypeNodeInJsSource.ts] //// + +//// [index.d.ts] +/// +//// [events.d.ts] +declare module "events" { + namespace EventEmitter { + class EventEmitter { + constructor(); + } + } + export = EventEmitter; +} + +//// [b.js] +import { EventEmitter } from 'events'; +class Foo extends EventEmitter { + constructor() { + super(); + } +} +export default Foo; + +//// [b.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const events_1 = require("events"); +class Foo extends events_1.EventEmitter { + constructor() { + super(); + } +} +exports.default = Foo; + + +//// [b.d.ts] +export default Foo; +declare class Foo extends EventEmitter { +} +import { EventEmitter } from "events"; diff --git a/tests/baselines/reference/importDeclFromTypeNodeInJsSource.symbols b/tests/baselines/reference/importDeclFromTypeNodeInJsSource.symbols new file mode 100644 index 0000000000000..107341d01ecff --- /dev/null +++ b/tests/baselines/reference/importDeclFromTypeNodeInJsSource.symbols @@ -0,0 +1,35 @@ +=== /src/node_modules/@types/node/index.d.ts === +/// +No type information for this code.=== /src/node_modules/@types/node/events.d.ts === +declare module "events" { +>"events" : Symbol("events", Decl(events.d.ts, 0, 0)) + + namespace EventEmitter { +>EventEmitter : Symbol(EventEmitter, Decl(events.d.ts, 0, 25)) + + class EventEmitter { +>EventEmitter : Symbol(EventEmitter, Decl(events.d.ts, 1, 28)) + + constructor(); + } + } + export = EventEmitter; +>EventEmitter : Symbol(EventEmitter, Decl(events.d.ts, 0, 25)) +} + +=== /src/b.js === +import { EventEmitter } from 'events'; +>EventEmitter : Symbol(EventEmitter, Decl(b.js, 0, 8)) + +class Foo extends EventEmitter { +>Foo : Symbol(Foo, Decl(b.js, 0, 38)) +>EventEmitter : Symbol(EventEmitter, Decl(b.js, 0, 8)) + + constructor() { + super(); +>super : Symbol(EventEmitter, Decl(events.d.ts, 1, 28)) + } +} +export default Foo; +>Foo : Symbol(Foo, Decl(b.js, 0, 38)) + diff --git a/tests/baselines/reference/importDeclFromTypeNodeInJsSource.types b/tests/baselines/reference/importDeclFromTypeNodeInJsSource.types new file mode 100644 index 0000000000000..4cdf90bb4e717 --- /dev/null +++ b/tests/baselines/reference/importDeclFromTypeNodeInJsSource.types @@ -0,0 +1,36 @@ +=== /src/node_modules/@types/node/index.d.ts === +/// +No type information for this code.=== /src/node_modules/@types/node/events.d.ts === +declare module "events" { +>"events" : typeof import("events") + + namespace EventEmitter { +>EventEmitter : typeof EventEmitter + + class EventEmitter { +>EventEmitter : EventEmitter + + constructor(); + } + } + export = EventEmitter; +>EventEmitter : typeof EventEmitter +} + +=== /src/b.js === +import { EventEmitter } from 'events'; +>EventEmitter : typeof EventEmitter + +class Foo extends EventEmitter { +>Foo : Foo +>EventEmitter : EventEmitter + + constructor() { + super(); +>super() : void +>super : typeof EventEmitter + } +} +export default Foo; +>Foo : Foo + diff --git a/tests/cases/compiler/importDeclFromTypeNodeInJsSource.ts b/tests/cases/compiler/importDeclFromTypeNodeInJsSource.ts new file mode 100644 index 0000000000000..040994a61d77a --- /dev/null +++ b/tests/cases/compiler/importDeclFromTypeNodeInJsSource.ts @@ -0,0 +1,26 @@ +// @target: esnext +// @module: commonjs +// @allowJs: true +// @checkJs: true +// @declaration: true +// @outDir: ./dist +// @filename: /src/node_modules/@types/node/index.d.ts +/// +// @filename: /src/node_modules/@types/node/events.d.ts +declare module "events" { + namespace EventEmitter { + class EventEmitter { + constructor(); + } + } + export = EventEmitter; +} + +// @filename: /src/b.js +import { EventEmitter } from 'events'; +class Foo extends EventEmitter { + constructor() { + super(); + } +} +export default Foo; \ No newline at end of file