diff --git a/src/compiler/builderState.ts b/src/compiler/builderState.ts index 377d731328..12936e5b2e 100644 --- a/src/compiler/builderState.ts +++ b/src/compiler/builderState.ts @@ -260,7 +260,7 @@ namespace ts.BuilderState { if (emitOutput.outputFiles && emitOutput.outputFiles.length > 0) { latestSignature = computeHash(emitOutput.outputFiles[0].text); if (exportedModulesMapCache && latestSignature !== prevSignature) { - updateExportedModules(programOfThisState, sourceFile, emitOutput.exportedModulesFromDeclarationEmit, exportedModulesMapCache); + updateExportedModules(sourceFile, emitOutput.exportedModulesFromDeclarationEmit, exportedModulesMapCache); } } else { @@ -276,20 +276,14 @@ namespace ts.BuilderState { /** * Coverts the declaration emit result into exported modules map */ - function updateExportedModules(programOfThisState: Program, sourceFile: SourceFile, exportedModulesFromDeclarationEmit: ExportedModulesFromDeclarationEmit | undefined, exportedModulesMapCache: ComputingExportedModulesMap) { + function updateExportedModules(sourceFile: SourceFile, exportedModulesFromDeclarationEmit: ExportedModulesFromDeclarationEmit | undefined, exportedModulesMapCache: ComputingExportedModulesMap) { if (!exportedModulesFromDeclarationEmit) { exportedModulesMapCache.set(sourceFile.path, false); return; } - const checker = programOfThisState.getTypeChecker(); let exportedModules: Map | undefined; - - exportedModulesFromDeclarationEmit.exportedModuleSpecifiers.forEach(importName => - addExportedModule(getReferencedFileFromImportLiteral(checker, importName))); - exportedModulesFromDeclarationEmit.exportedModuleSymbolsUsingImportTypeNodes.forEach(symbol => - addExportedModule(getReferencedFileFromImportedModuleSymbol(symbol))); - + exportedModulesFromDeclarationEmit.forEach(symbol => addExportedModule(getReferencedFileFromImportedModuleSymbol(symbol))); exportedModulesMapCache.set(sourceFile.path, exportedModules || false); function addExportedModule(exportedModulePath: Path | undefined) { diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f788e8a78d..b4e7683ed6 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -27784,7 +27784,8 @@ namespace ts { setAccessor, getAccessor }; - } + }, + getSymbolAtLocation }; function isInHeritageClause(node: PropertyAccessEntityNameExpression) { diff --git a/src/compiler/transformers/declarations.ts b/src/compiler/transformers/declarations.ts index 13c05e0f0d..e1ba313d58 100644 --- a/src/compiler/transformers/declarations.ts +++ b/src/compiler/transformers/declarations.ts @@ -37,8 +37,7 @@ namespace ts { let lateMarkedStatements: LateVisibilityPaintedStatement[] | undefined; let lateStatementReplacementMap: Map>; let suppressNewDiagnosticContexts: boolean; - let exportedModuleSpecifiers: StringLiteralLike[] | undefined; - let exportedModuleSymbolsUsingImportTypeNodes: Symbol[] | undefined; + let exportedModulesFromDeclarationEmit: Symbol[] | undefined; const host = context.getEmitHost(); const symbolTracker: SymbolTracker = { @@ -120,7 +119,7 @@ namespace ts { function trackExternalModuleSymbolOfImportTypeNode(symbol: Symbol) { if (!isBundledEmit) { - (exportedModuleSymbolsUsingImportTypeNodes || (exportedModuleSymbolsUsingImportTypeNodes = [])).push(symbol); + (exportedModulesFromDeclarationEmit || (exportedModulesFromDeclarationEmit = [])).push(symbol); } } @@ -233,12 +232,7 @@ namespace ts { combinedStatements = setTextRange(createNodeArray([...combinedStatements, createExportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, createNamedExports([]), /*moduleSpecifier*/ undefined)]), combinedStatements); } const updated = updateSourceFileNode(node, combinedStatements, /*isDeclarationFile*/ true, references, getFileReferencesForUsedTypeReferences(), node.hasNoDefaultLib); - if (exportedModuleSpecifiers || exportedModuleSymbolsUsingImportTypeNodes) { - updated.exportedModulesFromDeclarationEmit = { - exportedModuleSpecifiers: exportedModuleSpecifiers || emptyArray, - exportedModuleSymbolsUsingImportTypeNodes: exportedModuleSymbolsUsingImportTypeNodes || emptyArray - }; - } + updated.exportedModulesFromDeclarationEmit = exportedModulesFromDeclarationEmit; return updated; function getFileReferencesForUsedTypeReferences() { @@ -506,7 +500,10 @@ namespace ts { } } else { - (exportedModuleSpecifiers || (exportedModuleSpecifiers = [])).push(input); + const symbol = resolver.getSymbolAtLocation(input); + if (symbol) { + (exportedModulesFromDeclarationEmit || (exportedModulesFromDeclarationEmit = [])).push(symbol); + } } } return input; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 1bd2ca76db..d948825a77 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2629,10 +2629,7 @@ namespace ts { } /*@internal*/ - export interface ExportedModulesFromDeclarationEmit { - exportedModuleSpecifiers: ReadonlyArray; - exportedModuleSymbolsUsingImportTypeNodes: ReadonlyArray; - } + export type ExportedModulesFromDeclarationEmit = ReadonlyArray; export interface Bundle extends Node { kind: SyntaxKind.Bundle; @@ -3375,6 +3372,7 @@ namespace ts { isLiteralConstDeclaration(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration): boolean; getJsxFactoryEntity(location?: Node): EntityName | undefined; getAllAccessorDeclarations(declaration: AccessorDeclaration): AllAccessorDeclarations; + getSymbolAtLocation(node: Node): Symbol | undefined; } export const enum SymbolFlags {