From 016143328a3ef6780bc481b987b01eadc8edccd7 Mon Sep 17 00:00:00 2001 From: Svyatoslav Kuzmich Date: Tue, 15 Feb 2022 09:19:05 +0000 Subject: [PATCH] [Wasm][Gradle] Enable asyncWebAssembly and topLevelAwait in webpack. Needed for new async module ESM launchers. Merge-request: KT-MR-5738 Merged-by: Svyatoslav Kuzmich --- .../gradle/targets/js/webpack/KotlinWebpack.kt | 13 +++++++++++++ .../targets/js/webpack/KotlinWebpackConfig.kt | 13 +++++++++++++ 2 files changed, 26 insertions(+) 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 c393e835bae..e0c80c9c3ff 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.DeploymentHandle 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.RequiresNpmDependencies 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 @@ constructor( 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 @@ constructor( 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 f70cc4bee3d..4a57f57d558 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 @@ data class KotlinWebpackConfig( @Input @Optional var devServer: DevServer? = null, + @Input + var experiments: MutableSet = mutableSetOf(), @Nested var cssSupport: KotlinWebpackCssSupport = KotlinWebpackCssSupport(), @Input @@ -207,6 +209,7 @@ data class KotlinWebpackConfig( appendErrorPlugin() appendFromConfigDir() appendEvaluatedFileReport() + appendExperiments() if (export) { //language=JavaScript 1.8 @@ -277,6 +280,16 @@ data class KotlinWebpackConfig( 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