From 84173448a218a574cec27e2fcf53b79b9e1ce478 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 21:23:35 +0000 Subject: [PATCH 1/6] Update Core dependencies (non-major) --- settings.gradle.kts | 2 +- versions-root/libs.versions.toml | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 584358ef4..63f37299e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -27,7 +27,7 @@ plugins { id("conventions-repositories") id("conventions-version-resolution") id("conventions-develocity") - id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" + id("org.gradle.toolchains.foojay-resolver-convention") version "0.9.0" } dependencyResolutionManagement { diff --git a/versions-root/libs.versions.toml b/versions-root/libs.versions.toml index 9fbba714b..d506aac25 100644 --- a/versions-root/libs.versions.toml +++ b/versions-root/libs.versions.toml @@ -8,19 +8,19 @@ kotlin-compiler = "0.0.0" # default to kotlin-lang or env.KOTLIN_COMPILER_VERSIO # kotlin independent versions detekt-analyzer = "1.23.6" -coroutines = "1.9.0" -ktor = "3.0.1" -kotlin-logging = "7.0.0" +coroutines = "1.10.1" +ktor = "3.0.3" +kotlin-logging = "7.0.3" slf4j = "2.0.16" logback = "1.3.14" gradle-plugin-publish = "1.3.0" -kotlin-wrappers = "1.0.0-pre.823" +kotlin-wrappers = "1.0.0-pre.860" junit4 = "4.13.2" -junit5 = "5.11.3" +junit5 = "5.11.4" intellij = "233.13135.128" gradle-doctor = "0.10.0" -kotlinx-browser = "0.2" -shadow-jar = "9.0.0-beta2" +kotlinx-browser = "0.3" +shadow-jar = "9.0.0-beta4" # Stub versions – relpaced based on kotlin, mostly for gradle-related (plugins) dependencies # but also for dependencies for compiler-specific modules. @@ -28,12 +28,12 @@ shadow-jar = "9.0.0-beta2" # The current version is the one that is used with the latest Kotlin. # # NOTE: When updating kotlin-versions-lookup.csv, update the latest version here for the Renovate configs -atomicfu = "0.26.0" -serialization = "1.7.3" +atomicfu = "0.27.0" +serialization = "1.8.0" detekt-gradle-plugin = "1.23.7" -gradle-kotlin-dsl = "5.1.2" -binary-compatibility-validator = "0.16.3" -kover = "0.8.3" +gradle-kotlin-dsl = "5.2.0" +binary-compatibility-validator = "0.17.0" +kover = "0.9.1" [libraries] # kotlinx.rpc – references to the included builds From 82599f43739dc737932483caf1dc9596e39ca7cf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 18:16:25 +0000 Subject: [PATCH 2/6] Update dependency org.jetbrains.kotlin-wrappers:kotlin-js to v2025 --- versions-root/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions-root/libs.versions.toml b/versions-root/libs.versions.toml index d506aac25..30ffae6eb 100644 --- a/versions-root/libs.versions.toml +++ b/versions-root/libs.versions.toml @@ -14,7 +14,7 @@ kotlin-logging = "7.0.3" slf4j = "2.0.16" logback = "1.3.14" gradle-plugin-publish = "1.3.0" -kotlin-wrappers = "1.0.0-pre.860" +kotlin-wrappers = "2025.1.2" junit4 = "4.13.2" junit5 = "5.11.4" intellij = "233.13135.128" From ee30377ea75a4ed9087c1de8ed3d92d1f5c29431 Mon Sep 17 00:00:00 2001 From: Alexander Sysoev Date: Mon, 13 Jan 2025 18:33:15 +0100 Subject: [PATCH 3/6] update versions --- kotlin-js-store/yarn.lock | 7 +------ versions-root/kotlin-versions-lookup.csv | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index fe1eead6e..03189d92f 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -2458,12 +2458,7 @@ wrappy@1: resolved "https://packages.jetbrains.team/npm/p/krpc/build-deps/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@8.5.0: - version "8.5.0" - resolved "https://packages.jetbrains.team/npm/p/krpc/build-deps/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -ws@^8.18.0: +ws@8.18.0, ws@^8.18.0: version "8.18.0" resolved "https://packages.jetbrains.team/npm/p/krpc/build-deps/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== diff --git a/versions-root/kotlin-versions-lookup.csv b/versions-root/kotlin-versions-lookup.csv index cc9448d6f..4695aab06 100644 --- a/versions-root/kotlin-versions-lookup.csv +++ b/versions-root/kotlin-versions-lookup.csv @@ -1,5 +1,5 @@ Kotlin,atomicfu,serialization,detekt-gradle-plugin,gradle-kotlin-dsl,binary-compatibility-validator,kover -2.1.0,0.26.0,1.7.3,1.23.7,5.1.2,0.16.3,0.8.3 +2.1.0,0.27.0,1.8.0,1.23.7,5.1.2,0.17.0,0.9.1 2.0.21,0.26.0,1.7.3,1.23.7,5.1.2,0.16.3,0.8.3 2.0.20,0.26.0,1.7.3,1.23.7,5.1.2,0.16.3,0.8.3 2.0.10,0.26.0,1.7.1,1.23.7,5.1.2,0.16.3,0.8.3 From 1f2fcbe5652956edafc145462400aa22118b1867 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 19:02:10 +0000 Subject: [PATCH 4/6] Update Samples dependencies --- .../gradle/libs.versions.toml | 14 +++++++------- .../gradle/wrapper/gradle-wrapper.properties | 2 +- samples/ktor-all-platforms-app/gradlew | 3 +-- samples/ktor-android-app/gradle/libs.versions.toml | 14 +++++++------- .../gradle/wrapper/gradle-wrapper.properties | 2 +- samples/ktor-android-app/gradlew | 3 +-- samples/ktor-web-app/gradle/libs.versions.toml | 10 +++++----- .../gradle/wrapper/gradle-wrapper.properties | 2 +- samples/ktor-web-app/gradlew | 3 +-- samples/simple-ktor-app/build.gradle.kts | 4 ++-- .../gradle/wrapper/gradle-wrapper.properties | 2 +- samples/simple-ktor-app/gradlew | 3 +-- 12 files changed, 29 insertions(+), 33 deletions(-) diff --git a/samples/ktor-all-platforms-app/gradle/libs.versions.toml b/samples/ktor-all-platforms-app/gradle/libs.versions.toml index 3043bce74..5e430100e 100644 --- a/samples/ktor-all-platforms-app/gradle/libs.versions.toml +++ b/samples/ktor-all-platforms-app/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] kotlin = "2.0.21" -agp = "8.7.2" +agp = "8.8.0" android-compileSdk = "35" android-minSdk = "24" android-targetSdk = "35" @@ -12,13 +12,13 @@ androidx-core-ktx = "1.15.0" androidx-espresso-core = "3.6.1" androidx-material = "1.12.0" androidx-test-junit = "1.2.1" -compose = "1.7.5" -compose-plugin = "1.7.0" +compose = "1.7.6" +compose-plugin = "1.8.0+check" junit = "4.13.2" -ktor = "3.0.1" -logback = "1.5.12" -serialization = "1.7.3" -coroutines = "1.9.0" +ktor = "3.0.3" +logback = "1.5.16" +serialization = "1.8.0" +coroutines = "1.10.1" kotlinx-rpc = "0.4.0" [libraries] diff --git a/samples/ktor-all-platforms-app/gradle/wrapper/gradle-wrapper.properties b/samples/ktor-all-platforms-app/gradle/wrapper/gradle-wrapper.properties index df97d72b8..cea7a793a 100644 --- a/samples/ktor-all-platforms-app/gradle/wrapper/gradle-wrapper.properties +++ b/samples/ktor-all-platforms-app/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/samples/ktor-all-platforms-app/gradlew b/samples/ktor-all-platforms-app/gradlew index f5feea6d6..f3b75f3b0 100755 --- a/samples/ktor-all-platforms-app/gradlew +++ b/samples/ktor-all-platforms-app/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/samples/ktor-android-app/gradle/libs.versions.toml b/samples/ktor-android-app/gradle/libs.versions.toml index 37383d37c..695b44cf8 100644 --- a/samples/ktor-android-app/gradle/libs.versions.toml +++ b/samples/ktor-android-app/gradle/libs.versions.toml @@ -1,20 +1,20 @@ [versions] -agp = "8.7.2" +agp = "8.8.0" kotlin = "2.0.21" androidx-activityCompose = "1.9.3" androidx-appcompat = "1.7.0" androidx-constraintlayout = "2.2.0" androidx-core-ktx = "1.15.0" androidx-test-junit = "1.2.1" -compose = "1.7.5" +compose = "1.7.6" compose-plugin = "1.5.14" # https://mvnrepository.com/artifact/androidx.compose.compiler/compiler -compose-bom = "2024.10.01" +compose-bom = "2024.12.01" material3 = "1.3.1" junit = "4.13.2" -ktor = "3.0.1" -kotlinx-serialization-json = "1.7.3" -kotlinx-coroutines-core = "1.9.0" -logback = "1.5.12" +ktor = "3.0.3" +kotlinx-serialization-json = "1.8.0" +kotlinx-coroutines-core = "1.10.1" +logback = "1.5.16" kotlinx-rpc = "0.4.0" [libraries] diff --git a/samples/ktor-android-app/gradle/wrapper/gradle-wrapper.properties b/samples/ktor-android-app/gradle/wrapper/gradle-wrapper.properties index df97d72b8..cea7a793a 100644 --- a/samples/ktor-android-app/gradle/wrapper/gradle-wrapper.properties +++ b/samples/ktor-android-app/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/samples/ktor-android-app/gradlew b/samples/ktor-android-app/gradlew index f5feea6d6..f3b75f3b0 100755 --- a/samples/ktor-android-app/gradlew +++ b/samples/ktor-android-app/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/samples/ktor-web-app/gradle/libs.versions.toml b/samples/ktor-web-app/gradle/libs.versions.toml index 7f245a080..92791acb2 100644 --- a/samples/ktor-web-app/gradle/libs.versions.toml +++ b/samples/ktor-web-app/gradle/libs.versions.toml @@ -1,10 +1,10 @@ [versions] kotlin = "2.0.21" -kotlin-wrappers-bom = "1.0.0-pre.823" -ktor = "3.0.1" -kotlinx-serialization-json = "1.7.3" -kotlinx-coroutines-core = "1.9.0" -logback = "1.5.12" +kotlin-wrappers-bom = "1.0.0-pre.860" +ktor = "3.0.3" +kotlinx-serialization-json = "1.8.0" +kotlinx-coroutines-core = "1.10.1" +logback = "1.5.16" kotlinx-rpc = "0.4.0" [libraries] diff --git a/samples/ktor-web-app/gradle/wrapper/gradle-wrapper.properties b/samples/ktor-web-app/gradle/wrapper/gradle-wrapper.properties index df97d72b8..cea7a793a 100644 --- a/samples/ktor-web-app/gradle/wrapper/gradle-wrapper.properties +++ b/samples/ktor-web-app/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/samples/ktor-web-app/gradlew b/samples/ktor-web-app/gradlew index f5feea6d6..f3b75f3b0 100755 --- a/samples/ktor-web-app/gradlew +++ b/samples/ktor-web-app/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/samples/simple-ktor-app/build.gradle.kts b/samples/simple-ktor-app/build.gradle.kts index d0c86a58c..03aa6944a 100644 --- a/samples/simple-ktor-app/build.gradle.kts +++ b/samples/simple-ktor-app/build.gradle.kts @@ -5,7 +5,7 @@ plugins { kotlin("jvm") version "2.0.21" kotlin("plugin.serialization") version "2.0.21" - id("io.ktor.plugin") version "3.0.1" + id("io.ktor.plugin") version "3.0.3" id("org.jetbrains.kotlinx.rpc.plugin") version "0.4.0" } @@ -37,7 +37,7 @@ dependencies { implementation("io.ktor:ktor-client-cio") implementation("io.ktor:ktor-server-netty-jvm") - implementation("ch.qos.logback:logback-classic:1.5.12") + implementation("ch.qos.logback:logback-classic:1.5.16") testImplementation("io.ktor:ktor-server-test-host") testImplementation("org.jetbrains.kotlin:kotlin-test-junit:2.0.10") diff --git a/samples/simple-ktor-app/gradle/wrapper/gradle-wrapper.properties b/samples/simple-ktor-app/gradle/wrapper/gradle-wrapper.properties index df97d72b8..cea7a793a 100644 --- a/samples/simple-ktor-app/gradle/wrapper/gradle-wrapper.properties +++ b/samples/simple-ktor-app/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/samples/simple-ktor-app/gradlew b/samples/simple-ktor-app/gradlew index f5feea6d6..f3b75f3b0 100755 --- a/samples/simple-ktor-app/gradlew +++ b/samples/simple-ktor-app/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum From d5ce101c61088549042f2d5f1888075d675bdad5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 18:16:30 +0000 Subject: [PATCH 5/6] Update dependency org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom to v2025 --- samples/ktor-web-app/gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/ktor-web-app/gradle/libs.versions.toml b/samples/ktor-web-app/gradle/libs.versions.toml index 92791acb2..7f1f9e10a 100644 --- a/samples/ktor-web-app/gradle/libs.versions.toml +++ b/samples/ktor-web-app/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] kotlin = "2.0.21" -kotlin-wrappers-bom = "1.0.0-pre.860" +kotlin-wrappers-bom = "2025.1.2" ktor = "3.0.3" kotlinx-serialization-json = "1.8.0" kotlinx-coroutines-core = "1.10.1" From b213f0570ab489430717cb0e11b9964258014259 Mon Sep 17 00:00:00 2001 From: Alexander Sysoev Date: Mon, 13 Jan 2025 18:58:14 +0100 Subject: [PATCH 6/6] Update samples --- .../.fleet/settings.json | 3 +++ .../composeApp/src/commonMain/kotlin/App.kt | 6 +++--- .../gradle/libs.versions.toml | 8 ++++---- .../kotlin/kotlinx/rpc/sample/Application.kt | 6 +++--- .../kotlinx/rpc/sample/ApplicationTest.kt | 6 +++--- .../settings.gradle.kts | 2 +- .../kotlin/kotlinx/rpc/sample/data/Client.kt | 10 +++++----- .../kotlinx/rpc/sample/ui/AppViewModel.kt | 8 ++++---- .../gradle/libs.versions.toml | 4 ++-- .../kotlin/kotlinx/rpc/sample/Application.kt | 6 +++--- .../server/src/test/kotlin/ApplicationTest.kt | 6 +++--- samples/ktor-web-app/README.md | 3 --- .../ktor-web-app/frontend/build.gradle.kts | 1 + .../frontend/src/jsMain/kotlin/App.kt | 4 ++-- .../frontend/src/jsMain/kotlin/RPC.kt | 8 ++++---- .../ktor-web-app/gradle/libs.versions.toml | 4 ++-- .../server/src/main/kotlin/Application.kt | 4 ++-- .../server/src/test/kotlin/ApplicationTest.kt | 6 +++--- samples/simple-ktor-app/build.gradle.kts | 20 +++++++++---------- .../simple-ktor-app/src/main/kotlin/Client.kt | 10 ++++++---- .../src/main/kotlin/ImageRecognizer.kt | 14 ++++++++----- .../simple-ktor-app/src/main/kotlin/Server.kt | 4 ++-- .../src/test/kotlin/ApplicationTest.kt | 18 ++++++++++------- 23 files changed, 86 insertions(+), 75 deletions(-) create mode 100644 samples/ktor-all-platforms-app/.fleet/settings.json diff --git a/samples/ktor-all-platforms-app/.fleet/settings.json b/samples/ktor-all-platforms-app/.fleet/settings.json new file mode 100644 index 000000000..05bf50272 --- /dev/null +++ b/samples/ktor-all-platforms-app/.fleet/settings.json @@ -0,0 +1,3 @@ +{ + "gradle.autoImportOnSave": false +} \ No newline at end of file diff --git a/samples/ktor-all-platforms-app/composeApp/src/commonMain/kotlin/App.kt b/samples/ktor-all-platforms-app/composeApp/src/commonMain/kotlin/App.kt index ef6420d6c..6f63073b4 100644 --- a/samples/ktor-all-platforms-app/composeApp/src/commonMain/kotlin/App.kt +++ b/samples/ktor-all-platforms-app/composeApp/src/commonMain/kotlin/App.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ import androidx.compose.animation.AnimatedVisibility @@ -14,7 +14,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import io.ktor.client.* import io.ktor.http.* -import kotlinx.rpc.krpc.ktor.client.installRPC +import kotlinx.rpc.krpc.ktor.client.installKrpc import kotlinx.rpc.krpc.ktor.client.rpc import kotlinx.rpc.krpc.ktor.client.rpcConfig import kotlinx.rpc.krpc.serialization.json.json @@ -28,7 +28,7 @@ expect val DEV_SERVER_HOST: String val client by lazy { HttpClient { - installRPC() + installKrpc() } } diff --git a/samples/ktor-all-platforms-app/gradle/libs.versions.toml b/samples/ktor-all-platforms-app/gradle/libs.versions.toml index 5e430100e..7cf70fad0 100644 --- a/samples/ktor-all-platforms-app/gradle/libs.versions.toml +++ b/samples/ktor-all-platforms-app/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] -kotlin = "2.0.21" +kotlin = "2.1.0" -agp = "8.8.0" +agp = "8.8.0-alpha05" android-compileSdk = "35" android-minSdk = "24" android-targetSdk = "35" @@ -13,13 +13,13 @@ androidx-espresso-core = "3.6.1" androidx-material = "1.12.0" androidx-test-junit = "1.2.1" compose = "1.7.6" -compose-plugin = "1.8.0+check" +compose-plugin = "1.8.0-alpha01" junit = "4.13.2" ktor = "3.0.3" logback = "1.5.16" serialization = "1.8.0" coroutines = "1.10.1" -kotlinx-rpc = "0.4.0" +kotlinx-rpc = "0.5.0" [libraries] # kotlin diff --git a/samples/ktor-all-platforms-app/server/src/main/kotlin/kotlinx/rpc/sample/Application.kt b/samples/ktor-all-platforms-app/server/src/main/kotlin/kotlinx/rpc/sample/Application.kt index 9fb57c627..2e8d0f649 100644 --- a/samples/ktor-all-platforms-app/server/src/main/kotlin/kotlinx/rpc/sample/Application.kt +++ b/samples/ktor-all-platforms-app/server/src/main/kotlin/kotlinx/rpc/sample/Application.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.rpc.sample @@ -10,7 +10,7 @@ import io.ktor.server.application.* import io.ktor.server.netty.* import io.ktor.server.plugins.cors.routing.* import io.ktor.server.routing.* -import kotlinx.rpc.krpc.ktor.server.RPC +import kotlinx.rpc.krpc.ktor.server.Krpc import kotlinx.rpc.krpc.ktor.server.rpc import kotlinx.rpc.krpc.serialization.json.json @@ -18,7 +18,7 @@ fun main(args: Array): Unit = EngineMain.main(args) @Suppress("unused") fun Application.module() { - install(RPC) + install(Krpc) installCORS() diff --git a/samples/ktor-all-platforms-app/server/src/test/kotlin/kotlinx/rpc/sample/ApplicationTest.kt b/samples/ktor-all-platforms-app/server/src/test/kotlin/kotlinx/rpc/sample/ApplicationTest.kt index 7755a8551..80440fd8f 100644 --- a/samples/ktor-all-platforms-app/server/src/test/kotlin/kotlinx/rpc/sample/ApplicationTest.kt +++ b/samples/ktor-all-platforms-app/server/src/test/kotlin/kotlinx/rpc/sample/ApplicationTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.rpc.sample @@ -8,7 +8,7 @@ import UserData import UserService import io.ktor.server.testing.* import kotlinx.coroutines.flow.toList -import kotlinx.rpc.krpc.ktor.client.installRPC +import kotlinx.rpc.krpc.ktor.client.installKrpc import kotlinx.rpc.krpc.ktor.client.rpc import kotlinx.rpc.krpc.ktor.client.rpcConfig import kotlinx.rpc.krpc.serialization.json.json @@ -21,7 +21,7 @@ class ApplicationTest { @Test fun testRoot() = testApplication { val service = createClient { - installRPC() + installKrpc() }.rpc("/api") { rpcConfig { serialization { diff --git a/samples/ktor-all-platforms-app/settings.gradle.kts b/samples/ktor-all-platforms-app/settings.gradle.kts index 124e4e40d..a05d83951 100644 --- a/samples/ktor-all-platforms-app/settings.gradle.kts +++ b/samples/ktor-all-platforms-app/settings.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ @file:Suppress("UnstableApiUsage") diff --git a/samples/ktor-android-app/app/src/main/kotlin/kotlinx/rpc/sample/data/Client.kt b/samples/ktor-android-app/app/src/main/kotlin/kotlinx/rpc/sample/data/Client.kt index e6aeded96..01a658e50 100644 --- a/samples/ktor-android-app/app/src/main/kotlin/kotlinx/rpc/sample/data/Client.kt +++ b/samples/ktor-android-app/app/src/main/kotlin/kotlinx/rpc/sample/data/Client.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.rpc.sample.data @@ -7,15 +7,15 @@ package kotlinx.rpc.sample.data import io.ktor.client.HttpClient import io.ktor.client.engine.okhttp.OkHttp import io.ktor.client.request.url -import kotlinx.rpc.RPCClient -import kotlinx.rpc.krpc.ktor.client.installRPC +import kotlinx.rpc.RpcClient +import kotlinx.rpc.krpc.ktor.client.installKrpc import kotlinx.rpc.krpc.ktor.client.rpc import kotlinx.rpc.krpc.ktor.client.rpcConfig import kotlinx.rpc.krpc.serialization.json.json -suspend fun createRpcClient(): RPCClient { +suspend fun createRpcClient(): RpcClient { return HttpClient(OkHttp) { - installRPC() + installKrpc() }.rpc { url("ws://10.0.2.2:8080/api") diff --git a/samples/ktor-android-app/app/src/main/kotlin/kotlinx/rpc/sample/ui/AppViewModel.kt b/samples/ktor-android-app/app/src/main/kotlin/kotlinx/rpc/sample/ui/AppViewModel.kt index 9eb7679d5..43ee0fc08 100644 --- a/samples/ktor-android-app/app/src/main/kotlin/kotlinx/rpc/sample/ui/AppViewModel.kt +++ b/samples/ktor-android-app/app/src/main/kotlin/kotlinx/rpc/sample/ui/AppViewModel.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.rpc.sample.ui @@ -14,14 +14,14 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch -import kotlinx.rpc.RPCClient +import kotlinx.rpc.RpcClient import kotlinx.rpc.krpc.streamScoped import kotlinx.rpc.withService import kotlinx.rpc.sample.MyService import kotlinx.rpc.sample.UserData class AppViewModel : ViewModel() { - private var rpcClient: RPCClient? = null + private var rpcClient: RpcClient? = null private var apiService: MyService? = null private val _uiState = MutableStateFlow(null) @@ -64,4 +64,4 @@ class AppViewModel : ViewModel() { } } } -} \ No newline at end of file +} diff --git a/samples/ktor-android-app/gradle/libs.versions.toml b/samples/ktor-android-app/gradle/libs.versions.toml index 695b44cf8..f59b98e5e 100644 --- a/samples/ktor-android-app/gradle/libs.versions.toml +++ b/samples/ktor-android-app/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] agp = "8.8.0" -kotlin = "2.0.21" +kotlin = "2.1.0" androidx-activityCompose = "1.9.3" androidx-appcompat = "1.7.0" androidx-constraintlayout = "2.2.0" @@ -15,7 +15,7 @@ ktor = "3.0.3" kotlinx-serialization-json = "1.8.0" kotlinx-coroutines-core = "1.10.1" logback = "1.5.16" -kotlinx-rpc = "0.4.0" +kotlinx-rpc = "0.5.0" [libraries] # kotlin diff --git a/samples/ktor-android-app/server/src/main/kotlin/kotlinx/rpc/sample/Application.kt b/samples/ktor-android-app/server/src/main/kotlin/kotlinx/rpc/sample/Application.kt index d7a9370a4..1ac0a6929 100644 --- a/samples/ktor-android-app/server/src/main/kotlin/kotlinx/rpc/sample/Application.kt +++ b/samples/ktor-android-app/server/src/main/kotlin/kotlinx/rpc/sample/Application.kt @@ -1,12 +1,12 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.rpc.sample import io.ktor.server.application.* import io.ktor.server.cio.* import io.ktor.server.routing.* -import io.ktor.server.websocket.* +import kotlinx.rpc.krpc.ktor.server.Krpc import kotlinx.rpc.krpc.ktor.server.rpc import kotlinx.rpc.krpc.serialization.json.json @@ -14,7 +14,7 @@ fun main(args: Array): Unit = EngineMain.main(args) @Suppress("unused") fun Application.module() { - install(WebSockets) + install(Krpc) routing { rpc("/api") { diff --git a/samples/ktor-android-app/server/src/test/kotlin/ApplicationTest.kt b/samples/ktor-android-app/server/src/test/kotlin/ApplicationTest.kt index 1c76842c1..a706b3b6b 100644 --- a/samples/ktor-android-app/server/src/test/kotlin/ApplicationTest.kt +++ b/samples/ktor-android-app/server/src/test/kotlin/ApplicationTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ import io.ktor.client.request.* @@ -9,7 +9,7 @@ import io.ktor.server.response.* import io.ktor.server.routing.* import io.ktor.server.testing.* import kotlinx.coroutines.flow.toList -import kotlinx.rpc.krpc.ktor.client.installRPC +import kotlinx.rpc.krpc.ktor.client.installKrpc import kotlinx.rpc.krpc.ktor.client.rpc import kotlinx.rpc.krpc.ktor.client.rpcConfig import kotlinx.rpc.krpc.serialization.json.json @@ -24,7 +24,7 @@ class ApplicationTest { @Test fun testRoot() = testApplication { val service = createClient { - installRPC() + installKrpc() }.rpc("/api") { rpcConfig { serialization { diff --git a/samples/ktor-web-app/README.md b/samples/ktor-web-app/README.md index fe9243f8e..e19bf290e 100644 --- a/samples/ktor-web-app/README.md +++ b/samples/ktor-web-app/README.md @@ -1,9 +1,6 @@ # Ktor Web App Sample application with Kotlin/Js on frontend and Kotlin/Jvm on backend,that uses kRPC with Ktor to communicate. -> Warning: the code is broken due to https://youtrack.jetbrains.com/issue/KT-71757/ -> No workarounds for now - ### Running frontend To run frontend in development mode, run this command: ```bash diff --git a/samples/ktor-web-app/frontend/build.gradle.kts b/samples/ktor-web-app/frontend/build.gradle.kts index 51a5e440f..5a975aad2 100644 --- a/samples/ktor-web-app/frontend/build.gradle.kts +++ b/samples/ktor-web-app/frontend/build.gradle.kts @@ -28,6 +28,7 @@ kotlin { implementation(libs.kotlin.stdlib.js) implementation(libs.ktor.client.js) implementation(libs.ktor.client.websockets.js) + implementation(libs.kotlinx.rpc.core) implementation(libs.kotlinx.rpc.krpc.ktor.client) implementation(libs.kotlinx.rpc.krpc.serialization.json) diff --git a/samples/ktor-web-app/frontend/src/jsMain/kotlin/App.kt b/samples/ktor-web-app/frontend/src/jsMain/kotlin/App.kt index bec029654..ce8284fa1 100644 --- a/samples/ktor-web-app/frontend/src/jsMain/kotlin/App.kt +++ b/samples/ktor-web-app/frontend/src/jsMain/kotlin/App.kt @@ -2,7 +2,7 @@ * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ -import kotlinx.rpc.RPCClient +import kotlinx.rpc.RpcClient import kotlinx.rpc.withService import react.FC import react.Props @@ -11,7 +11,7 @@ import react.useEffectOnce import react.useState val App = FC { - var rpcClient by useState(null) + var rpcClient by useState(null) useEffectOnce { rpcClient = initRpcClient() diff --git a/samples/ktor-web-app/frontend/src/jsMain/kotlin/RPC.kt b/samples/ktor-web-app/frontend/src/jsMain/kotlin/RPC.kt index 3205500f8..1330b72d2 100644 --- a/samples/ktor-web-app/frontend/src/jsMain/kotlin/RPC.kt +++ b/samples/ktor-web-app/frontend/src/jsMain/kotlin/RPC.kt @@ -5,15 +5,15 @@ import io.ktor.client.* import io.ktor.client.engine.js.* import io.ktor.client.request.* -import kotlinx.rpc.RPCClient -import kotlinx.rpc.krpc.ktor.client.installRPC +import kotlinx.rpc.RpcClient +import kotlinx.rpc.krpc.ktor.client.installKrpc import kotlinx.rpc.krpc.ktor.client.rpc import kotlinx.rpc.krpc.ktor.client.rpcConfig import kotlinx.rpc.krpc.serialization.json.json -suspend fun initRpcClient(): RPCClient { +suspend fun initRpcClient(): RpcClient { return HttpClient(Js) { - installRPC() + installKrpc() }.rpc { url("ws://localhost:8080/api") diff --git a/samples/ktor-web-app/gradle/libs.versions.toml b/samples/ktor-web-app/gradle/libs.versions.toml index 7f1f9e10a..a15bf2a42 100644 --- a/samples/ktor-web-app/gradle/libs.versions.toml +++ b/samples/ktor-web-app/gradle/libs.versions.toml @@ -1,11 +1,11 @@ [versions] -kotlin = "2.0.21" +kotlin = "2.1.0" kotlin-wrappers-bom = "2025.1.2" ktor = "3.0.3" kotlinx-serialization-json = "1.8.0" kotlinx-coroutines-core = "1.10.1" logback = "1.5.16" -kotlinx-rpc = "0.4.0" +kotlinx-rpc = "0.5.0" [libraries] # kotlin diff --git a/samples/ktor-web-app/server/src/main/kotlin/Application.kt b/samples/ktor-web-app/server/src/main/kotlin/Application.kt index 7b859168d..13b1580cf 100644 --- a/samples/ktor-web-app/server/src/main/kotlin/Application.kt +++ b/samples/ktor-web-app/server/src/main/kotlin/Application.kt @@ -8,7 +8,7 @@ import io.ktor.server.cio.* import io.ktor.server.http.content.* import io.ktor.server.plugins.cors.routing.* import io.ktor.server.routing.* -import kotlinx.rpc.krpc.ktor.server.RPC +import kotlinx.rpc.krpc.ktor.server.Krpc import kotlinx.rpc.krpc.ktor.server.rpc import kotlinx.rpc.krpc.serialization.json.json @@ -16,7 +16,7 @@ fun main(args: Array): Unit = EngineMain.main(args) @Suppress("unused") fun Application.module() { - install(RPC) + install(Krpc) installCORS() diff --git a/samples/ktor-web-app/server/src/test/kotlin/ApplicationTest.kt b/samples/ktor-web-app/server/src/test/kotlin/ApplicationTest.kt index a11982f4d..837f60027 100644 --- a/samples/ktor-web-app/server/src/test/kotlin/ApplicationTest.kt +++ b/samples/ktor-web-app/server/src/test/kotlin/ApplicationTest.kt @@ -1,10 +1,10 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ import io.ktor.server.testing.* import kotlinx.coroutines.flow.toList -import kotlinx.rpc.krpc.ktor.client.installRPC +import kotlinx.rpc.krpc.ktor.client.installKrpc import kotlinx.rpc.krpc.ktor.client.rpc import kotlinx.rpc.krpc.ktor.client.rpcConfig import kotlinx.rpc.krpc.serialization.json.json @@ -21,7 +21,7 @@ class ApplicationTest { } val service = createClient { - installRPC() + installKrpc() }.rpc("/api") { rpcConfig { serialization { diff --git a/samples/simple-ktor-app/build.gradle.kts b/samples/simple-ktor-app/build.gradle.kts index 03aa6944a..00cff85e5 100644 --- a/samples/simple-ktor-app/build.gradle.kts +++ b/samples/simple-ktor-app/build.gradle.kts @@ -1,12 +1,12 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ plugins { - kotlin("jvm") version "2.0.21" - kotlin("plugin.serialization") version "2.0.21" + kotlin("jvm") version "2.1.0" + kotlin("plugin.serialization") version "2.1.0" id("io.ktor.plugin") version "3.0.3" - id("org.jetbrains.kotlinx.rpc.plugin") version "0.4.0" + id("org.jetbrains.kotlinx.rpc.plugin") version "0.5.0" } group = "kotlinx.rpc.sample" @@ -28,17 +28,17 @@ kotlin { } dependencies { - implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-client:0.4.0") - implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-server:0.4.0") - implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-serialization-json:0.4.0") + implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-client:0.5.0") + implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-server:0.5.0") + implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-serialization-json:0.5.0") - implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-ktor-client:0.4.0") - implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-ktor-server:0.4.0") + implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-ktor-client:0.5.0") + implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-ktor-server:0.5.0") implementation("io.ktor:ktor-client-cio") implementation("io.ktor:ktor-server-netty-jvm") implementation("ch.qos.logback:logback-classic:1.5.16") testImplementation("io.ktor:ktor-server-test-host") - testImplementation("org.jetbrains.kotlin:kotlin-test-junit:2.0.10") + testImplementation("org.jetbrains.kotlin:kotlin-test-junit:2.1.0") } diff --git a/samples/simple-ktor-app/src/main/kotlin/Client.kt b/samples/simple-ktor-app/src/main/kotlin/Client.kt index 284847855..b00acb2e1 100644 --- a/samples/simple-ktor-app/src/main/kotlin/Client.kt +++ b/samples/simple-ktor-app/src/main/kotlin/Client.kt @@ -3,12 +3,12 @@ */ import io.ktor.client.* -import io.ktor.client.plugins.websocket.* import io.ktor.http.* import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.flow import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking +import kotlinx.rpc.krpc.ktor.client.installKrpc import kotlinx.rpc.krpc.ktor.client.rpc import kotlinx.rpc.krpc.ktor.client.rpcConfig import kotlinx.rpc.krpc.serialization.json.json @@ -17,7 +17,7 @@ import kotlinx.rpc.withService fun main() = runBlocking { val ktorClient = HttpClient { - install(WebSockets) + installKrpc() } val client = ktorClient.rpc { @@ -37,8 +37,10 @@ fun main() = runBlocking { val recognizer: ImageRecognizer = client.withService() val stateJob = launch { - recognizer.currentlyProcessedImage.collect { - println("New state, current image: $it") + streamScoped { + recognizer.currentlyProcessedImage().collect { + println("New state, current image: $it") + } } } diff --git a/samples/simple-ktor-app/src/main/kotlin/ImageRecognizer.kt b/samples/simple-ktor-app/src/main/kotlin/ImageRecognizer.kt index 57a3df5e0..df7c4ea93 100644 --- a/samples/simple-ktor-app/src/main/kotlin/ImageRecognizer.kt +++ b/samples/simple-ktor-app/src/main/kotlin/ImageRecognizer.kt @@ -5,10 +5,9 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map import kotlinx.rpc.RemoteService -import kotlinx.rpc.RPCEagerField import kotlinx.rpc.annotations.Rpc import kotlinx.serialization.Serializable import kotlin.coroutines.CoroutineContext @@ -28,8 +27,7 @@ enum class Category { @Rpc interface ImageRecognizer : RemoteService { - @RPCEagerField - val currentlyProcessedImage: StateFlow + suspend fun currentlyProcessedImage(): Flow suspend fun recognize(image: Image): Category @@ -37,7 +35,13 @@ interface ImageRecognizer : RemoteService { } class ImageRecognizerService(override val coroutineContext: CoroutineContext) : ImageRecognizer { - override val currentlyProcessedImage: MutableStateFlow = MutableStateFlow(null) + private val currentlyProcessedImage: MutableStateFlow = MutableStateFlow(null) + + override suspend fun currentlyProcessedImage(): Flow { + return flow { + currentlyProcessedImage.collect { emit(it) } + } + } override suspend fun recognize(image: Image): Category { currentlyProcessedImage.value = image diff --git a/samples/simple-ktor-app/src/main/kotlin/Server.kt b/samples/simple-ktor-app/src/main/kotlin/Server.kt index c5fa1ae91..b8fb73b34 100644 --- a/samples/simple-ktor-app/src/main/kotlin/Server.kt +++ b/samples/simple-ktor-app/src/main/kotlin/Server.kt @@ -6,7 +6,7 @@ import io.ktor.server.application.* import io.ktor.server.engine.* import io.ktor.server.netty.* import io.ktor.server.routing.* -import kotlinx.rpc.krpc.ktor.server.RPC +import kotlinx.rpc.krpc.ktor.server.Krpc import kotlinx.rpc.krpc.ktor.server.rpc import kotlinx.rpc.krpc.serialization.json.json @@ -17,7 +17,7 @@ fun main() { } fun Application.module() { - install(RPC) + install(Krpc) routing { rpc("/image-recognizer") { diff --git a/samples/simple-ktor-app/src/test/kotlin/ApplicationTest.kt b/samples/simple-ktor-app/src/test/kotlin/ApplicationTest.kt index 2b754f0a8..8558cded5 100644 --- a/samples/simple-ktor-app/src/test/kotlin/ApplicationTest.kt +++ b/samples/simple-ktor-app/src/test/kotlin/ApplicationTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. */ import io.ktor.server.testing.* @@ -8,10 +8,12 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import kotlinx.rpc.awaitFieldInitialization +import kotlinx.rpc.krpc.ktor.client.installKrpc import kotlinx.rpc.krpc.ktor.client.installRPC import kotlinx.rpc.krpc.ktor.client.rpc import kotlinx.rpc.krpc.ktor.client.rpcConfig import kotlinx.rpc.krpc.serialization.json.json +import kotlinx.rpc.krpc.streamScoped import kotlinx.rpc.withService import org.junit.Test import kotlin.test.assertContentEquals @@ -26,7 +28,7 @@ class ApplicationTest { } val rpcClient = createClient { - installRPC() + installKrpc() }.rpc("/image-recognizer") { rpcConfig { serialization { @@ -42,12 +44,14 @@ class ApplicationTest { assertEquals(null, recognizer.awaitFieldInitialization { currentlyProcessedImage }.value) val job = CoroutineScope(Dispatchers.IO).launch { - recognizer.currentlyProcessedImage.collect { image -> - val stringValue = image?.data?.toHexString() - flowList.add(stringValue) + streamScoped { + recognizer.currentlyProcessedImage().collect { image -> + val stringValue = image?.data?.toHexString() + flowList.add(stringValue) - if (stringValue == "000203") { - coroutineContext.cancel() + if (stringValue == "000203") { + coroutineContext.cancel() + } } } }