Skip to content

Commit 9b25861

Browse files
committed
fix: add missing required parameter for getResolvedModule to ensure typescript can resolve accurately
1 parent d3ab07e commit 9b25861

File tree

3 files changed

+46
-4
lines changed

3 files changed

+46
-4
lines changed

apps/api-extractor/src/analyzer/ExportAnalyzer.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,9 +259,18 @@ export class ExportAnalyzer {
259259
importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration | ts.ImportTypeNode,
260260
moduleSpecifier: string
261261
): boolean {
262+
const specifier: ts.TypeNode | ts.Expression | undefined = ts.isImportTypeNode(importOrExportDeclaration)
263+
? importOrExportDeclaration.argument
264+
: importOrExportDeclaration.moduleSpecifier;
265+
const mode: ts.StringLiteralLike =
266+
specifier && ts.isStringLiteralLike(specifier)
267+
? TypeScriptInternals.getModeForUsageLocation(importOrExportDeclaration.getSourceFile(), specifier)
268+
: undefined;
269+
262270
const resolvedModule: ts.ResolvedModuleFull | undefined = TypeScriptInternals.getResolvedModule(
263271
importOrExportDeclaration.getSourceFile(),
264-
moduleSpecifier
272+
moduleSpecifier,
273+
mode
265274
);
266275

267276
if (resolvedModule === undefined) {
@@ -863,9 +872,18 @@ export class ExportAnalyzer {
863872
exportSymbol: ts.Symbol
864873
): AstModule {
865874
const moduleSpecifier: string = this._getModuleSpecifier(importOrExportDeclaration);
875+
const mode: ts.StringLiteralLike | undefined =
876+
importOrExportDeclaration.moduleSpecifier &&
877+
ts.isStringLiteralLike(importOrExportDeclaration.moduleSpecifier)
878+
? TypeScriptInternals.getModeForUsageLocation(
879+
importOrExportDeclaration.getSourceFile(),
880+
importOrExportDeclaration.moduleSpecifier
881+
)
882+
: undefined;
866883
const resolvedModule: ts.ResolvedModuleFull | undefined = TypeScriptInternals.getResolvedModule(
867884
importOrExportDeclaration.getSourceFile(),
868-
moduleSpecifier
885+
moduleSpecifier,
886+
mode
869887
);
870888

871889
if (resolvedModule === undefined) {

apps/api-extractor/src/analyzer/TypeScriptInternals.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,26 @@ export class TypeScriptInternals {
8383
*/
8484
public static getResolvedModule(
8585
sourceFile: ts.SourceFile,
86-
moduleNameText: string
86+
moduleNameText: string,
87+
mode: ts.StringLiteralLike | undefined
8788
): ts.ResolvedModuleFull | undefined {
8889
// Compiler internal:
8990
// https://github.com/microsoft/TypeScript/blob/v3.2.2/src/compiler/utilities.ts#L218
9091

91-
return (ts as any).getResolvedModule(sourceFile, moduleNameText);
92+
return (ts as any).getResolvedModule(sourceFile, moduleNameText, mode);
93+
}
94+
95+
/**
96+
* Gets the mode required for module resolution required with the addition of Node16/nodenext
97+
*/
98+
public static getModeForUsageLocation(
99+
file: { impliedNodeFormat?: ts.SourceFile['impliedNodeFormat'] },
100+
usage: ts.StringLiteralLike
101+
) {
102+
// Compiler internal:
103+
// https://github.com/microsoft/TypeScript/blob/v4.7.2/src/compiler/program.ts#L568
104+
105+
return (ts as any).getModeForUsageLocation(file, usage);
92106
}
93107

94108
/**
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@microsoft/api-extractor",
5+
"comment": "add missing required parameter for getResolvedModule to ensure typescript can accurately resolve module kind",
6+
"type": "minor"
7+
}
8+
],
9+
"packageName": "@microsoft/api-extractor"
10+
}

0 commit comments

Comments
 (0)