diff --git a/apps/api-extractor/src/analyzer/ExportAnalyzer.ts b/apps/api-extractor/src/analyzer/ExportAnalyzer.ts index 33867923bb5..ee15a9e356d 100644 --- a/apps/api-extractor/src/analyzer/ExportAnalyzer.ts +++ b/apps/api-extractor/src/analyzer/ExportAnalyzer.ts @@ -155,10 +155,22 @@ export class ExportAnalyzer { if (exportStarSymbol) { for (const exportStarDeclaration of exportStarSymbol.getDeclarations() || []) { if (ts.isExportDeclaration(exportStarDeclaration)) { - const starExportedModule: AstModule | undefined = this._fetchSpecifierAstModule( - exportStarDeclaration, - exportStarSymbol - ); + let starExportedModule: AstModule | undefined; + + try { + starExportedModule = this._fetchSpecifierAstModule(exportStarDeclaration, exportStarSymbol); + } catch { + // handle export star from ambient modules, they are treated as external modules + // such as export * from 'fs' in @types/fs-extra + const sourceFile: ts.SourceFile = exportStarDeclaration.getSourceFile(); + const moduleSymbol: ts.Symbol = this._getModuleSymbolFromSourceFile(sourceFile, undefined); + + starExportedModule = new AstModule({ + sourceFile, + moduleSymbol, + externalModulePath: this._getModuleSpecifier(exportStarDeclaration) + }); + } if (starExportedModule !== undefined) { astModule.starExportedModules.add(starExportedModule); diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/api-extractor-scenarios.api.md b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/api-extractor-scenarios.api.md index b1e36006e9d..9e109e4fb48 100644 --- a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/api-extractor-scenarios.api.md +++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/api-extractor-scenarios.api.md @@ -11,6 +11,7 @@ export class A { export * from "api-extractor-lib1-test"; export * from "api-extractor-lib2-test"; +export * from "fs"; // (No @packageDocumentation comment for this package) diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/rollup.d.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/rollup.d.ts index 55d21f77bf6..402fa74e8bf 100644 --- a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/rollup.d.ts +++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/rollup.d.ts @@ -5,5 +5,6 @@ export declare class A { export * from "api-extractor-lib1-test"; export * from "api-extractor-lib2-test"; +export * from "fs"; export { } diff --git a/build-tests/api-extractor-scenarios/src/exportStar2/index.ts b/build-tests/api-extractor-scenarios/src/exportStar2/index.ts index 0c69d7b4abe..1f8109aba3f 100644 --- a/build-tests/api-extractor-scenarios/src/exportStar2/index.ts +++ b/build-tests/api-extractor-scenarios/src/exportStar2/index.ts @@ -4,3 +4,4 @@ export * from './reexportStar'; export * from 'api-extractor-lib2-test'; +export * from 'fs'; diff --git a/common/changes/@microsoft/api-extractor/hotfix-export-star-ambient_2022-07-10-10-22.json b/common/changes/@microsoft/api-extractor/hotfix-export-star-ambient_2022-07-10-10-22.json new file mode 100644 index 00000000000..aabe5e46293 --- /dev/null +++ b/common/changes/@microsoft/api-extractor/hotfix-export-star-ambient_2022-07-10-10-22.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/api-extractor", + "comment": "Fix error for export star from ambient module", + "type": "patch" + } + ], + "packageName": "@microsoft/api-extractor" +} \ No newline at end of file