[JS IR] Re-export all JS-exports from main module in multi-module mode

Add an implicit transitive re-export through
main module for all other module's JS-exports.
This commit is contained in:
Alexander Korepanov
2022-01-11 17:27:02 +03:00
committed by Space
parent d52fa8dd9b
commit b40227b66e
8 changed files with 151 additions and 21 deletions
@@ -0,0 +1,54 @@
// DONT_TARGET_EXACT_BACKEND: JS
// KJS_WITH_FULL_RUNTIME
// MODULE: ModuleA1
// FILE: modulea1.kt
package demoPackage.a1
@JsExport
data class ModuleA1Class(private val string: String = "A1") {
override fun toString(): String = string
}
// MODULE: ModuleA2(ModuleA1)
// FILE: modulea2.kt
package demoPackage.a2
import demoPackage.a1.ModuleA1Class
@JsExport
fun moduleA2Function() = ModuleA1Class("A2")
// MODULE: ModuleB
// FILE: moduleb.kt
package demoPackage.b
@JsExport
fun moduleBFunction() = "B"
// MODULE: main(ModuleA2, ModuleB)
// MODULE_KIND: COMMON_JS
// FILE: main.kt
package mainPackage
import demoPackage.*
external interface JsResult {
val moduleA1: String
val moduleA2: String
val moduleB: String
}
@JsModule("lib")
external fun jsBox(): JsResult
fun box(): String {
assertEquals(demoPackage.b.moduleBFunction(), "B")
val res = jsBox()
assertEquals(res.moduleA1, "A1")
assertEquals(res.moduleA2, "A2")
assertEquals(res.moduleB, "B")
return "OK"
}