Skip to content

Commit 031ec5c

Browse files
ShuiRuTianscalder27
authored andcommitted
import statement from "node" in js source file could produce correct declaration path. (microsoft#41816)
* fix microsoft#41800 * add test * fix test
1 parent 7120f70 commit 031ec5c

File tree

5 files changed

+139
-1
lines changed

5 files changed

+139
-1
lines changed

src/compiler/moduleNameResolver.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1422,7 +1422,8 @@ namespace ts {
14221422
export function getPackageNameFromTypesPackageName(mangledName: string): string {
14231423
const withoutAtTypePrefix = removePrefix(mangledName, "@types/");
14241424
if (withoutAtTypePrefix !== mangledName) {
1425-
return unmangleScopedPackageName(withoutAtTypePrefix);
1425+
const withoutAtTypeNodePrefix = removePrefix(withoutAtTypePrefix, "node/");
1426+
return unmangleScopedPackageName(withoutAtTypeNodePrefix);
14261427
}
14271428
return mangledName;
14281429
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//// [tests/cases/compiler/importDeclFromTypeNodeInJsSource.ts] ////
2+
3+
//// [index.d.ts]
4+
/// <reference path="events.d.ts" />
5+
//// [events.d.ts]
6+
declare module "events" {
7+
namespace EventEmitter {
8+
class EventEmitter {
9+
constructor();
10+
}
11+
}
12+
export = EventEmitter;
13+
}
14+
15+
//// [b.js]
16+
import { EventEmitter } from 'events';
17+
class Foo extends EventEmitter {
18+
constructor() {
19+
super();
20+
}
21+
}
22+
export default Foo;
23+
24+
//// [b.js]
25+
"use strict";
26+
Object.defineProperty(exports, "__esModule", { value: true });
27+
const events_1 = require("events");
28+
class Foo extends events_1.EventEmitter {
29+
constructor() {
30+
super();
31+
}
32+
}
33+
exports.default = Foo;
34+
35+
36+
//// [b.d.ts]
37+
export default Foo;
38+
declare class Foo extends EventEmitter {
39+
}
40+
import { EventEmitter } from "events";
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
=== /src/node_modules/@types/node/index.d.ts ===
2+
/// <reference path="events.d.ts" />
3+
No type information for this code.=== /src/node_modules/@types/node/events.d.ts ===
4+
declare module "events" {
5+
>"events" : Symbol("events", Decl(events.d.ts, 0, 0))
6+
7+
namespace EventEmitter {
8+
>EventEmitter : Symbol(EventEmitter, Decl(events.d.ts, 0, 25))
9+
10+
class EventEmitter {
11+
>EventEmitter : Symbol(EventEmitter, Decl(events.d.ts, 1, 28))
12+
13+
constructor();
14+
}
15+
}
16+
export = EventEmitter;
17+
>EventEmitter : Symbol(EventEmitter, Decl(events.d.ts, 0, 25))
18+
}
19+
20+
=== /src/b.js ===
21+
import { EventEmitter } from 'events';
22+
>EventEmitter : Symbol(EventEmitter, Decl(b.js, 0, 8))
23+
24+
class Foo extends EventEmitter {
25+
>Foo : Symbol(Foo, Decl(b.js, 0, 38))
26+
>EventEmitter : Symbol(EventEmitter, Decl(b.js, 0, 8))
27+
28+
constructor() {
29+
super();
30+
>super : Symbol(EventEmitter, Decl(events.d.ts, 1, 28))
31+
}
32+
}
33+
export default Foo;
34+
>Foo : Symbol(Foo, Decl(b.js, 0, 38))
35+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
=== /src/node_modules/@types/node/index.d.ts ===
2+
/// <reference path="events.d.ts" />
3+
No type information for this code.=== /src/node_modules/@types/node/events.d.ts ===
4+
declare module "events" {
5+
>"events" : typeof import("events")
6+
7+
namespace EventEmitter {
8+
>EventEmitter : typeof EventEmitter
9+
10+
class EventEmitter {
11+
>EventEmitter : EventEmitter
12+
13+
constructor();
14+
}
15+
}
16+
export = EventEmitter;
17+
>EventEmitter : typeof EventEmitter
18+
}
19+
20+
=== /src/b.js ===
21+
import { EventEmitter } from 'events';
22+
>EventEmitter : typeof EventEmitter
23+
24+
class Foo extends EventEmitter {
25+
>Foo : Foo
26+
>EventEmitter : EventEmitter
27+
28+
constructor() {
29+
super();
30+
>super() : void
31+
>super : typeof EventEmitter
32+
}
33+
}
34+
export default Foo;
35+
>Foo : Foo
36+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// @target: esnext
2+
// @module: commonjs
3+
// @allowJs: true
4+
// @checkJs: true
5+
// @declaration: true
6+
// @outDir: ./dist
7+
// @filename: /src/node_modules/@types/node/index.d.ts
8+
/// <reference path="events.d.ts" />
9+
// @filename: /src/node_modules/@types/node/events.d.ts
10+
declare module "events" {
11+
namespace EventEmitter {
12+
class EventEmitter {
13+
constructor();
14+
}
15+
}
16+
export = EventEmitter;
17+
}
18+
19+
// @filename: /src/b.js
20+
import { EventEmitter } from 'events';
21+
class Foo extends EventEmitter {
22+
constructor() {
23+
super();
24+
}
25+
}
26+
export default Foo;

0 commit comments

Comments
 (0)