Skip to content

Commit 9cc5a41

Browse files
committed
Pick up types used in module augmentations via path aliases (resolve #1850)
Follow-up to #1843. A module augmented via a path alias (`declare module '#events'`) resolves its referenced types through that module's exports, same as a relative specifier. Register those references as type imports when the augmented specifier resolves to an internal module, so the exports aren't flagged as unused. External and ambient augmentations stay neutral (no dependency usage, no unresolved import), avoiding false positives for transitive-package augmentations like `declare module '@vue/runtime-core'`.
1 parent 3764605 commit 9cc5a41

14 files changed

Lines changed: 103 additions & 4 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
declare module 'listed-lib' {
2+
export interface Payload extends Base {
3+
listed: number;
4+
}
5+
}
6+
7+
declare module 'transitive-lib' {
8+
export interface Payload extends Base {
9+
transitive: number;
10+
}
11+
}
12+
13+
export {};

packages/knip/fixtures/types/declare-module-augmentation-external/node_modules/listed-lib/index.d.ts

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/knip/fixtures/types/declare-module-augmentation-external/node_modules/listed-lib/package.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/knip/fixtures/types/declare-module-augmentation-external/node_modules/transitive-lib/index.d.ts

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/knip/fixtures/types/declare-module-augmentation-external/node_modules/transitive-lib/package.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"name": "@fixtures/declare-module-augmentation-external",
3+
"type": "module",
4+
"dependencies": {
5+
"listed-lib": "*"
6+
}
7+
}

packages/knip/fixtures/types/declare-module-augmentation/events.augmentation.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,16 @@ declare module './events.js' {
77
}
88
}
99

10+
declare module '#events' {
11+
export interface EventBusEvents {
12+
'entity:audited': AuditTrail & { at: number };
13+
}
14+
}
15+
16+
declare module '#phantom' {
17+
export interface EventBusEvents {
18+
'entity:phantom': PhantomPayload;
19+
}
20+
}
21+
1022
export {};

packages/knip/fixtures/types/declare-module-augmentation/events.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@ export interface EventEnvelope {
66
at: number;
77
}
88

9+
export interface AuditTrail {
10+
actor: string;
11+
}
12+
913
export interface EventBusEvents {}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"compilerOptions": {
3+
"module": "preserve",
4+
"paths": {
5+
"#events": ["./events.ts"]
6+
}
7+
},
8+
"include": ["**/*.ts"]
9+
}

packages/knip/src/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,4 +260,5 @@ export const IMPORT_FLAGS = {
260260
OPTIONAL: 1 << 4, // no error if not resolved
261261
SIDE_EFFECTS: 1 << 5,
262262
OPAQUE: 1 << 6,
263+
AUGMENT: 1 << 7, // module augmentation ref, attribute only if it resolves internally
263264
} as const;

0 commit comments

Comments
 (0)