[Wasm][Gradle] Enable asyncWebAssembly and topLevelAwait in webpack.
Needed for new async module ESM launchers.
Merge-request: KT-MR-5738
Merged-by: Svyatoslav Kuzmich <svyatoslav.kuzmich@jetbrains.com>
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt
index c393e83..e0c80c9 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt
@@ -18,6 +18,7 @@
import org.gradle.deployment.internal.DeploymentRegistry
import org.gradle.process.internal.ExecHandle
import org.gradle.process.internal.ExecHandleFactory
+import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.archivesName
@@ -28,6 +29,7 @@
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode
import org.jetbrains.kotlin.gradle.testing.internal.reportsDir
+import org.jetbrains.kotlin.gradle.utils.getValue
import org.jetbrains.kotlin.gradle.utils.injected
import org.jetbrains.kotlin.gradle.utils.property
import java.io.File
@@ -218,6 +220,10 @@
private val webpackConfigAppliers: MutableList<(KotlinWebpackConfig) -> Unit> =
mutableListOf()
+ private val platformType by project.provider {
+ compilation.platformType
+ }
+
private fun createRunner(): KotlinWebpackRunner {
val config = KotlinWebpackConfig(
mode = mode,
@@ -236,6 +242,13 @@
webpackMajorVersion = webpackMajorVersion
)
+ if (platformType == KotlinPlatformType.wasm) {
+ config.experiments += listOf(
+ "asyncWebAssembly",
+ "topLevelAwait"
+ )
+ }
+
webpackConfigAppliers
.forEach { it(config) }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt
index f70cc4b..4a57f57 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt
@@ -48,6 +48,8 @@
@Input
@Optional
var devServer: DevServer? = null,
+ @Input
+ var experiments: MutableSet<String> = mutableSetOf(),
@Nested
var cssSupport: KotlinWebpackCssSupport = KotlinWebpackCssSupport(),
@Input
@@ -207,6 +209,7 @@
appendErrorPlugin()
appendFromConfigDir()
appendEvaluatedFileReport()
+ appendExperiments()
if (export) {
//language=JavaScript 1.8
@@ -277,6 +280,16 @@
appendLine()
}
+ private fun Appendable.appendExperiments() {
+ if (experiments.isEmpty()) return
+
+ appendLine("config.experiments = {")
+ for (experiment in experiments.sorted()) {
+ appendLine(" $experiment: true,")
+ }
+ appendLine("}")
+ }
+
private fun Appendable.appendSourceMaps() {
if (!sourceMaps) return