diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformerTmp.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformerTmp.kt index f69233bcb7c..0eba123859d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformerTmp.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformerTmp.kt @@ -47,7 +47,7 @@ class IrModuleToJsTransformerTmp( val exportData = modules.associate { module -> module to module.files.associate { file -> - file to exportModelGenerator.generateExport(file) + file to exportModelGenerator.generateExportWithExternals(file) } } @@ -72,7 +72,7 @@ class IrModuleToJsTransformerTmp( val exportModelGenerator = ExportModelGenerator(backendContext, generateNamespacesForPackages = true) val exportData = files.associate { file -> - file to exportModelGenerator.generateExport(file) + file to exportModelGenerator.generateExportWithExternals(file) } files.forEach { StaticMembersLowering(backendContext).lower(it) } @@ -92,6 +92,12 @@ class IrModuleToJsTransformerTmp( return result } + private fun ExportModelGenerator.generateExportWithExternals(irFile: IrFile): List { + val exports = generateExport(irFile) + val additionalExports = backendContext.externalPackageFragment[irFile.symbol]?.let { generateExport(it) } ?: emptyList() + return additionalExports + exports + } + private fun generateProgramFragments( modules: Iterable, exportData: Map>>, diff --git a/js/js.translator/testData/typescript-export/selectiveExport/selectiveExport.d.ts b/js/js.translator/testData/typescript-export/selectiveExport/selectiveExport.d.ts index 1080cdfff6d..03fc662dcd5 100644 --- a/js/js.translator/testData/typescript-export/selectiveExport/selectiveExport.d.ts +++ b/js/js.translator/testData/typescript-export/selectiveExport/selectiveExport.d.ts @@ -6,10 +6,6 @@ declare namespace JS_TESTS { interface ExportedInternalInterface { } } - namespace foo { - interface FileLevelExportedExternalInterface { - } - } namespace foo { const exportedVal: number; function exportedFun(): number; @@ -18,6 +14,10 @@ declare namespace JS_TESTS { readonly value: number; } } + namespace foo { + interface FileLevelExportedExternalInterface { + } + } namespace foo { const fileLevelExportedVal: number; function fileLevelExportedFun(): number;