Skip to content

Commit 61cc293

Browse files
authored
Merge pull request #771 from IlyaGulya/feature/add-wasmJs-target-support
Support wasmJs target
2 parents 6849fb6 + a4fe69f commit 61cc293

File tree

54 files changed

+419
-105
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+419
-105
lines changed

gradle.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ kotlin.code.style=official
22
org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8
33
org.gradle.parallel=true
44
org.gradle.caching=true
5+
org.gradle.configuration-cache=true
6+
57
# AndroidX package structure to make it clearer which packages are bundled with the
68
# Android operating system, and which are packaged with the app's APK
79
android.useAndroidX=true
810
# Automatically convert third-party libraries to use AndroidX
911
android.enableJetifier=true
1012

11-
kotlin.mpp.androidSourceSetLayoutVersion=2
1213
kotlin.mpp.applyDefaultHierarchyTemplate=false
1314

1415
# For compatibility with Kotlin 1.9.0, see https://github.com/badoo/Reaktive/issues/697

gradle/libs.versions.toml

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
[versions]
22
kotlin = "1.9.21"
3-
kotlinx-coroutines = "1.7.3"
3+
kotlinx-coroutines = "1.8.0-RC2"
44
detekt = "1.22.0"
55

66
[libraries]
77
kotlin-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
88
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
9-
kotlin-stdlib-js = { module = "org.jetbrains.kotlin:kotlin-stdlib-js", version.ref = "kotlin" }
10-
kotlin-stdlib-common = { module = "org.jetbrains.kotlin:kotlin-stdlib-common", version.ref = "kotlin" }
119

12-
kotlin-test-common = { module = "org.jetbrains.kotlin:kotlin-test-common", version.ref = "kotlin" }
13-
kotlin-test-js = { module = "org.jetbrains.kotlin:kotlin-test-js", version.ref = "kotlin" }
14-
kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" }
15-
kotlin-test-annotations = { module = "org.jetbrains.kotlin:kotlin-test-annotations-common", version.ref = "kotlin" }
10+
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
11+
kotlin-test-annotations = { module = "org.jetbrains.kotlin:kotlin-test-annotations", version.ref = "kotlin" }
1612

1713
kotlinx-compatibility = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2"
1814
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }

includedBuild/gradleConfiguration/src/main/kotlin/com/badoo/reaktive/configuration/JsPlugin.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class JsPlugin : Plugin<Project> {
1313

1414
private fun configureJsCompilation(target: Project) {
1515
target.extensions.configure(KotlinMultiplatformExtension::class.java) {
16-
js(IR) {
16+
js {
1717
browser {
1818
testTask {
1919
useKarma {
@@ -31,12 +31,12 @@ class JsPlugin : Plugin<Project> {
3131
}
3232
sourceSets.getByName("jsMain") {
3333
dependencies {
34-
implementation(project.getLibrary("kotlin-stdlib-js"))
34+
implementation(project.getLibrary("kotlin-stdlib"))
3535
}
3636
}
3737
sourceSets.getByName("jsTest") {
3838
dependencies {
39-
implementation(project.getLibrary("kotlin-test-js"))
39+
implementation(project.getLibrary("kotlin-test"))
4040
}
4141
}
4242
}

includedBuild/gradleConfiguration/src/main/kotlin/com/badoo/reaktive/configuration/MppConfigurationPlugin.kt

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,9 @@ class MppConfigurationPlugin : Plugin<Project> {
2727
target.version = target.findProperty("reaktive_version") as Any
2828
target.extensions.configure(KotlinMultiplatformExtension::class.java) {
2929
sourceSets {
30-
maybeCreate("commonMain").dependencies { implementation(target.getLibrary("kotlin-stdlib-common")) }
30+
maybeCreate("commonMain").dependencies { implementation(target.getLibrary("kotlin-stdlib")) }
3131
maybeCreate("commonTest").dependencies {
32-
implementation(target.getLibrary("kotlin-test-common"))
33-
implementation(target.getLibrary("kotlin-test-annotations"))
32+
implementation(target.getLibrary("kotlin-test"))
3433
}
3534
}
3635

@@ -48,6 +47,7 @@ class MppConfigurationPlugin : Plugin<Project> {
4847
setupAndroidTarget(project)
4948
setupJvmTarget(project)
5049
setupJsTarget(project)
50+
setupWasmJsTarget(project)
5151
setupLinuxX64Target(project)
5252
setupIosTargets(project)
5353

@@ -80,8 +80,14 @@ class MppConfigurationPlugin : Plugin<Project> {
8080
maybeCreate("androidMain").dependsOn(getByName("jvmCommonMain"))
8181
maybeCreate("androidUnitTest").dependsOn(getByName("jvmCommonTest"))
8282

83-
maybeCreate("jsMain").dependsOn(getByName("jvmJsCommonMain"))
84-
maybeCreate("jsTest").dependsOn(getByName("jvmJsCommonTest"))
83+
maybeCreate("jsCommonMain").dependsOn(getByName("jvmJsCommonMain"))
84+
maybeCreate("jsCommonTest").dependsOn(getByName("jvmJsCommonTest"))
85+
86+
maybeCreate("jsMain").dependsOn(getByName("jsCommonMain"))
87+
maybeCreate("jsTest").dependsOn(getByName("jsCommonTest"))
88+
89+
maybeCreate("wasmJsMain").dependsOn(getByName("jsCommonMain"))
90+
maybeCreate("wasmJsTest").dependsOn(getByName("jsCommonTest"))
8591

8692
maybeCreate("nativeCommonMain").dependsOn(getByName("jvmNativeCommonMain"))
8793
maybeCreate("nativeCommonTest").dependsOn(getByName("jvmNativeCommonTest"))
@@ -162,7 +168,7 @@ class MppConfigurationPlugin : Plugin<Project> {
162168
}
163169
sourceSets {
164170
maybeCreate("androidMain").dependencies { implementation(project.getLibrary("kotlin-stdlib")) }
165-
maybeCreate("androidUnitTest").dependencies { implementation(project.getLibrary("kotlin-test-junit")) }
171+
maybeCreate("androidUnitTest").dependencies { implementation(project.getLibrary("kotlin-test")) }
166172
}
167173
}
168174
}
@@ -179,7 +185,7 @@ class MppConfigurationPlugin : Plugin<Project> {
179185
}
180186
sourceSets {
181187
maybeCreate("jvmMain").dependencies { implementation(project.getLibrary("kotlin-stdlib")) }
182-
maybeCreate("jvmTest").dependencies { implementation(project.getLibrary("kotlin-test-junit")) }
188+
maybeCreate("jvmTest").dependencies { implementation(project.getLibrary("kotlin-test")) }
183189
}
184190
}
185191
}
@@ -188,6 +194,10 @@ class MppConfigurationPlugin : Plugin<Project> {
188194
project.apply<JsPlugin>()
189195
}
190196

197+
private fun setupWasmJsTarget(project: Project) {
198+
project.apply<WasmJsPlugin>()
199+
}
200+
191201
private fun setupLinuxX64Target(project: Project) {
192202
project.kotlin {
193203
linuxX64 {

includedBuild/gradleConfiguration/src/main/kotlin/com/badoo/reaktive/configuration/Target.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ enum class Target(
1313
ALL_LINUX_HOSTED(linuxHosted = true, macOsHosted = false),
1414
JVM(linuxHosted = true, macOsHosted = false),
1515
JS(linuxHosted = true, macOsHosted = false),
16+
WASM_JS(linuxHosted = true, macOsHosted = false),
1617
LINUX(linuxHosted = true, macOsHosted = false),
1718
ALL_MACOS_HOSTED(linuxHosted = false, macOsHosted = true),
1819
IOS(linuxHosted = false, macOsHosted = true),
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.badoo.reaktive.configuration
2+
3+
import com.badoo.reaktive.getLibrary
4+
import org.gradle.api.Plugin
5+
import org.gradle.api.Project
6+
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
7+
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
8+
9+
@OptIn(ExperimentalWasmDsl::class)
10+
class WasmJsPlugin : Plugin<Project> {
11+
12+
override fun apply(target: Project) {
13+
configureWasmJsCompilation(target)
14+
}
15+
16+
private fun configureWasmJsCompilation(target: Project) {
17+
target.extensions.configure(KotlinMultiplatformExtension::class.java) {
18+
wasmJs {
19+
browser()
20+
disableIfUndefined(Target.WASM_JS)
21+
}
22+
sourceSets.getByName("wasmJsMain") {
23+
dependencies {
24+
implementation(project.getLibrary("kotlin-stdlib"))
25+
}
26+
}
27+
sourceSets.getByName("wasmJsTest") {
28+
dependencies {
29+
implementation(project.getLibrary("kotlin-test"))
30+
}
31+
}
32+
}
33+
}
34+
}

includedBuild/gradleConfiguration/src/main/kotlin/com/badoo/reaktive/publish/PublishConfigurationPlugin.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ class PublishConfigurationPlugin : Plugin<Project> {
128128
KotlinMultiplatformPlugin.METADATA_TARGET_NAME to Target.shouldPublishTarget(project, Target.META),
129129
"jvm" to Target.shouldPublishTarget(project, Target.JVM),
130130
"js" to Target.shouldPublishTarget(project, Target.JS),
131+
"wasmJs" to Target.shouldPublishTarget(project, Target.WASM_JS),
131132
"androidDebug" to Target.shouldPublishTarget(project, Target.JVM),
132133
"androidRelease" to Target.shouldPublishTarget(project, Target.JVM),
133134
"linuxX64" to Target.shouldPublishTarget(project, Target.LINUX),
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.badoo.reaktive.test.single
2+
3+
expect class AsyncTestResult

reaktive-testing/src/commonMain/kotlin/com/badoo/reaktive/test/single/TestAwait.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,4 @@ import com.badoo.reaktive.single.Single
5050
* @param assertSuccess when provided, it will be called in case of [Single] success.
5151
* This gives an opportunity to assert the result.
5252
*/
53-
expect fun <T> Single<T>.testAwait(assertError: ((Throwable) -> Unit)? = null, assertSuccess: (T) -> Unit)
53+
expect fun <T> Single<T>.testAwait(assertError: ((Throwable) -> Unit)? = null, assertSuccess: (T) -> Unit): AsyncTestResult

reaktive-testing/src/commonTest/kotlin/com/badoo/reaktive/test/single/TestAwaitTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class TestAwaitTest {
1919
.testAwait(assertSuccess = { assertEquals(1, it) })
2020

2121
@Test
22-
fun succeeds_WHEN_upstream_failed_and_assertError_did_not_throw() {
22+
fun succeeds_WHEN_upstream_failed_and_assertError_did_not_throw(): AsyncTestResult {
2323
val error = Exception()
2424

2525
return singleOfError<Nothing>(error)

0 commit comments

Comments
 (0)