From 5b47b1ac24ec229cdde9c7178d85c7c806707e2c Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 25 Apr 2023 16:15:19 +0200 Subject: [PATCH] [Gradle, JS] esmodules for webpack --- .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 15 ++++++++++++--- .../targets/js/subtargets/KotlinBrowserJs.kt | 2 ++ .../gradle/targets/js/webpack/KotlinWebpack.kt | 5 ++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt index 5111baddb56..465c5e03119 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt @@ -13,6 +13,7 @@ import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.tasks.Copy import org.gradle.language.base.plugins.LifecycleBasePlugin +import org.jetbrains.kotlin.gradle.dsl.JsModuleKind import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation @@ -153,7 +154,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : task.doNotTrackStateCompat("Tracked by external webpack tool") task.commonConfigure( - compilation = compilation, + binary = binary, mode = mode, inputFilesDirectory = binary.linkSyncTask.flatMap { it.destinationDirectory }, entryModuleName = binary.linkTask.flatMap { it.compilerOptions.moduleName }, @@ -233,7 +234,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : task.dependsOn(binary.linkSyncTask) task.commonConfigure( - compilation = compilation, + binary = binary, mode = mode, inputFilesDirectory = binary.linkSyncTask.flatMap { it.destinationDirectory }, entryModuleName = binary.linkTask.flatMap { it.compilerOptions.moduleName }, @@ -267,7 +268,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : } private fun KotlinWebpack.commonConfigure( - compilation: KotlinJsCompilation, + binary: JsIrBinary, mode: KotlinJsBinaryMode, inputFilesDirectory: Provider, entryModuleName: Provider, @@ -285,7 +286,15 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : this.inputFilesDirectory.fileProvider(inputFilesDirectory) + val platformType = binary.compilation.platformType + val moduleKind = binary.linkTask.flatMap { it.compilerOptions.moduleKind } + this.entryModuleName.set(entryModuleName) + this.esModules.set( + project.provider { + platformType == KotlinPlatformType.wasm || moduleKind.get() == JsModuleKind.MODULE_ES + } + ) mainOutputFileName.convention(defaultArchivesName.orElse("main").map { "$it.js" }).finalizeValueOnRead() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index 65fd306ed17..08926867c92 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -300,6 +300,8 @@ abstract class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : } ) + this.esModules.set(false) + resolveFromModulesFirst = true mainOutputFileName.convention(defaultArchivesName.orElse("main").map { "$it.js" }).finalizeValueOnRead() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt index 38dc381279d..1f7606cd8a3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt @@ -111,10 +111,13 @@ constructor( } } + @get:Input + abstract val esModules: Property + @get:Internal val entry: Provider get() = inputFilesDirectory.map { - it.file(entryModuleName.get() + if (platformType == KotlinPlatformType.wasm) ".mjs" else ".js") + it.file(entryModuleName.get() + if (esModules.get()) ".mjs" else ".js") } init {