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