diff --git a/deps.versions.toml b/deps.versions.toml index 8d49ff52..92ae63bd 100644 --- a/deps.versions.toml +++ b/deps.versions.toml @@ -8,7 +8,7 @@ kotlin = "1.9.20" kotlinxBinaryCompatibilityValidator = "0.13.2" kotlinxCoroutines = "1.7.3" intellijGradlePlugin = "1.15.0" -detektGradlePlugin = "1.22.0" +detektGradlePlugin = "1.23.3" essenty = "1.2.0" reaktive = "1.3.0" multiplatformSettings = "0.8.1" diff --git a/detekt.yml b/detekt.yml index 741e5b12..bbdc710e 100644 --- a/detekt.yml +++ b/detekt.yml @@ -31,7 +31,7 @@ performance: style: ForbiddenComment: - values: ['FIXME:', 'STOPSHIP:'] + comments: ['FIXME:', 'STOPSHIP:'] MagicNumber: active: false MaxLineLength: diff --git a/mvikotlin-extensions-coroutines/src/commonMain/kotlin/com/arkivanov/mvikotlin/extensions/coroutines/Binder.kt b/mvikotlin-extensions-coroutines/src/commonMain/kotlin/com/arkivanov/mvikotlin/extensions/coroutines/Binder.kt index 32f69562..e60c912f 100644 --- a/mvikotlin-extensions-coroutines/src/commonMain/kotlin/com/arkivanov/mvikotlin/extensions/coroutines/Binder.kt +++ b/mvikotlin-extensions-coroutines/src/commonMain/kotlin/com/arkivanov/mvikotlin/extensions/coroutines/Binder.kt @@ -8,6 +8,7 @@ import com.arkivanov.mvikotlin.core.store.Store import com.arkivanov.mvikotlin.core.utils.assertOnMainThread import com.arkivanov.mvikotlin.core.view.ViewRenderer import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job @@ -96,6 +97,7 @@ private class BuilderBinder( this bindTo { store.accept(it) } } + @OptIn(DelicateCoroutinesApi::class) override fun start() { job = GlobalScope.launch(mainContext) { diff --git a/mvikotlin-timetravel-client/extension-chrome/src/jsMain/kotlin/com/arkivanov/mvikotlin/timetravel/chrome/Utils.kt b/mvikotlin-timetravel-client/extension-chrome/src/jsMain/kotlin/com/arkivanov/mvikotlin/timetravel/chrome/Utils.kt index 7260ba8b..485f71cc 100644 --- a/mvikotlin-timetravel-client/extension-chrome/src/jsMain/kotlin/com/arkivanov/mvikotlin/timetravel/chrome/Utils.kt +++ b/mvikotlin-timetravel-client/extension-chrome/src/jsMain/kotlin/com/arkivanov/mvikotlin/timetravel/chrome/Utils.kt @@ -7,8 +7,8 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import com.badoo.reaktive.observable.subscribe import com.badoo.reaktive.subject.behavior.BehaviorObservable -import org.jetbrains.compose.web.attributes.AttrsBuilder import org.jetbrains.compose.web.attributes.AttrsScope +import org.jetbrains.compose.web.attributes.AttrsScopeBuilder import org.jetbrains.compose.web.dom.AttrBuilderContext import org.w3c.dom.Element @@ -28,7 +28,7 @@ internal fun BehaviorObservable.subscribeAsState(): State { return state } -internal fun AttrsBuilder.add(attrs: AttrBuilderContext?) { +internal fun AttrsScopeBuilder.add(attrs: AttrBuilderContext?) { attrs?.invoke(this) } diff --git a/mvikotlin-timetravel/src/darwinMain/kotlin/com/arkivanov/mvikotlin/timetravel/server/ConnectionThread.kt b/mvikotlin-timetravel/src/darwinMain/kotlin/com/arkivanov/mvikotlin/timetravel/server/ConnectionThread.kt index cbc66923..388a0068 100644 --- a/mvikotlin-timetravel/src/darwinMain/kotlin/com/arkivanov/mvikotlin/timetravel/server/ConnectionThread.kt +++ b/mvikotlin-timetravel/src/darwinMain/kotlin/com/arkivanov/mvikotlin/timetravel/server/ConnectionThread.kt @@ -46,13 +46,13 @@ internal class ConnectionThread( memScoped { val sin = alloc() - memset(sin.ptr, 0, sockaddr_in.size.convert()) + memset(sin.ptr, 0, sizeOf().convert()) sin.sin_len = sizeOf().convert() sin.sin_family = AF_INET.convert() sin.sin_port = getSinPort() sin.sin_addr.s_addr = INADDR_ANY - if (bind(serverSocket, sin.ptr.reinterpret(), sockaddr_in.size.convert()) < 0) { + if (bind(serverSocket, sin.ptr.reinterpret(), sizeOf().convert()) < 0) { onError(Exception("Error bind socket: $errno")) return } diff --git a/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/BehaviorSubject.kt b/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/BehaviorSubject.kt index da44a43c..a4642bc6 100644 --- a/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/BehaviorSubject.kt +++ b/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/BehaviorSubject.kt @@ -10,7 +10,7 @@ interface BehaviorSubject : Subject { val value: T } -@Suppress("FunctionName") +@Suppress("FunctionNaming") // https://github.com/detekt/detekt/issues/6601 fun BehaviorSubject(initialValue: T): BehaviorSubject = BehaviorSubjectImpl(initialValue) private class BehaviorSubjectImpl(initialValue: T) : BaseSubject(), BehaviorSubject { diff --git a/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/PublishSubject.kt b/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/PublishSubject.kt index d73178ee..40b0a77e 100644 --- a/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/PublishSubject.kt +++ b/rx-internal/src/commonMain/kotlin/com/arkivanov/mvikotlin/rx/internal/PublishSubject.kt @@ -2,7 +2,7 @@ package com.arkivanov.mvikotlin.rx.internal interface PublishSubject : Subject -@Suppress("FunctionName") +@Suppress("FunctionNaming") // https://github.com/detekt/detekt/issues/6601 fun PublishSubject(): PublishSubject = PublishSubjectImpl() private class PublishSubjectImpl : BaseSubject(), PublishSubject diff --git a/sample/coroutines/app-js/build.gradle.kts b/sample/coroutines/app-js/build.gradle.kts index 5e44bf99..e2c94251 100644 --- a/sample/coroutines/app-js/build.gradle.kts +++ b/sample/coroutines/app-js/build.gradle.kts @@ -1,26 +1,38 @@ -import com.arkivanov.gradle.setupJsApp +import com.arkivanov.gradle.bundle +import com.arkivanov.gradle.setupMultiplatform +import com.arkivanov.gradle.setupSourceSets plugins { - id("org.jetbrains.kotlin.js") + id("kotlin-multiplatform") id("com.arkivanov.gradle.setup") } -setupJsApp() +setupMultiplatform { + js { + browser() + binaries.executable() + } +} + +kotlin { + setupSourceSets { + val js by bundle() -dependencies { - implementation(kotlin("stdlib-js")) - implementation(project(":rx")) - implementation(project(":mvikotlin-main")) - implementation(project(":mvikotlin-logging")) - implementation(project(":mvikotlin-timetravel")) - implementation(project(":sample:coroutines:shared")) + js.main.dependencies { + implementation(project(":rx")) + implementation(project(":mvikotlin-main")) + implementation(project(":mvikotlin-logging")) + implementation(project(":mvikotlin-timetravel")) + implementation(project(":sample:coroutines:shared")) - implementation(enforcedPlatform(deps.kotlinWrappers.kotlinWrappersBom)) - implementation("org.jetbrains.kotlin-wrappers:kotlin-react") - implementation("org.jetbrains.kotlin-wrappers:kotlin-react-dom") - implementation("org.jetbrains.kotlin-wrappers:kotlin-react-router-dom") - implementation("org.jetbrains.kotlin-wrappers:kotlin-styled") - implementation("org.jetbrains.kotlin-wrappers:kotlin-extensions") - implementation("org.jetbrains.kotlin-wrappers:kotlin-emotion") - implementation("org.jetbrains.kotlin-wrappers:kotlin-mui") + implementation(project.dependencies.platform(deps.kotlinWrappers.kotlinWrappersBom)) + implementation("org.jetbrains.kotlin-wrappers:kotlin-react") + implementation("org.jetbrains.kotlin-wrappers:kotlin-react-dom") + implementation("org.jetbrains.kotlin-wrappers:kotlin-react-router-dom") + implementation("org.jetbrains.kotlin-wrappers:kotlin-styled") + implementation("org.jetbrains.kotlin-wrappers:kotlin-extensions") + implementation("org.jetbrains.kotlin-wrappers:kotlin-emotion") + implementation("org.jetbrains.kotlin-wrappers:kotlin-mui") + } + } } diff --git a/sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/DetailsComponent.kt b/sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/DetailsComponent.kt similarity index 100% rename from sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/DetailsComponent.kt rename to sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/DetailsComponent.kt diff --git a/sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt b/sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt similarity index 97% rename from sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt rename to sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt index cc0a40b2..094e9762 100644 --- a/sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt +++ b/sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt @@ -6,6 +6,7 @@ import com.arkivanov.mvikotlin.sample.coroutines.shared.DefaultDispatchers import com.arkivanov.mvikotlin.sample.coroutines.shared.TodoDispatchers import com.arkivanov.mvikotlin.sample.database.DefaultTodoDatabase import com.arkivanov.mvikotlin.sample.database.TodoDatabase +import com.arkivanov.mvikotlin.timetravel.ExperimentalTimeTravelApi import com.arkivanov.mvikotlin.timetravel.TimeTravelServer import kotlinx.coroutines.flow.MutableSharedFlow import mui.material.Box @@ -28,6 +29,7 @@ import web.cssom.vh import web.cssom.vw import web.dom.document +@OptIn(ExperimentalTimeTravelApi::class) fun main() { TimeTravelServer().start() diff --git a/sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/MainComponent.kt b/sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/MainComponent.kt similarity index 100% rename from sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/MainComponent.kt rename to sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/MainComponent.kt diff --git a/sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Utils.kt b/sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Utils.kt similarity index 100% rename from sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Utils.kt rename to sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Utils.kt diff --git a/sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/ViewProxy.kt b/sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/ViewProxy.kt similarity index 100% rename from sample/coroutines/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/ViewProxy.kt rename to sample/coroutines/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/ViewProxy.kt diff --git a/sample/coroutines/app-js/src/main/resources/index.html b/sample/coroutines/app-js/src/jsMain/resources/index.html similarity index 100% rename from sample/coroutines/app-js/src/main/resources/index.html rename to sample/coroutines/app-js/src/jsMain/resources/index.html diff --git a/sample/reaktive/app-js/build.gradle.kts b/sample/reaktive/app-js/build.gradle.kts index e6ab1e95..ad517679 100644 --- a/sample/reaktive/app-js/build.gradle.kts +++ b/sample/reaktive/app-js/build.gradle.kts @@ -1,26 +1,38 @@ -import com.arkivanov.gradle.setupJsApp +import com.arkivanov.gradle.bundle +import com.arkivanov.gradle.setupMultiplatform +import com.arkivanov.gradle.setupSourceSets plugins { - id("org.jetbrains.kotlin.js") + id("kotlin-multiplatform") id("com.arkivanov.gradle.setup") } -setupJsApp() +setupMultiplatform { + js { + browser() + binaries.executable() + } +} + +kotlin { + setupSourceSets { + val js by bundle() -dependencies { - implementation(kotlin("stdlib-js")) - implementation(project(":rx")) - implementation(project(":mvikotlin-main")) - implementation(project(":mvikotlin-logging")) - implementation(project(":mvikotlin-timetravel")) - implementation(project(":sample:reaktive:shared")) + js.main.dependencies { + implementation(project(":rx")) + implementation(project(":mvikotlin-main")) + implementation(project(":mvikotlin-logging")) + implementation(project(":mvikotlin-timetravel")) + implementation(project(":sample:reaktive:shared")) - implementation(enforcedPlatform(deps.kotlinWrappers.kotlinWrappersBom)) - implementation("org.jetbrains.kotlin-wrappers:kotlin-react") - implementation("org.jetbrains.kotlin-wrappers:kotlin-react-dom") - implementation("org.jetbrains.kotlin-wrappers:kotlin-react-router-dom") - implementation("org.jetbrains.kotlin-wrappers:kotlin-styled") - implementation("org.jetbrains.kotlin-wrappers:kotlin-extensions") - implementation("org.jetbrains.kotlin-wrappers:kotlin-emotion") - implementation("org.jetbrains.kotlin-wrappers:kotlin-mui") + implementation(project.dependencies.platform(deps.kotlinWrappers.kotlinWrappersBom)) + implementation("org.jetbrains.kotlin-wrappers:kotlin-react") + implementation("org.jetbrains.kotlin-wrappers:kotlin-react-dom") + implementation("org.jetbrains.kotlin-wrappers:kotlin-react-router-dom") + implementation("org.jetbrains.kotlin-wrappers:kotlin-styled") + implementation("org.jetbrains.kotlin-wrappers:kotlin-extensions") + implementation("org.jetbrains.kotlin-wrappers:kotlin-emotion") + implementation("org.jetbrains.kotlin-wrappers:kotlin-mui") + } + } } diff --git a/sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/DetailsComponent.kt b/sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/DetailsComponent.kt similarity index 100% rename from sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/DetailsComponent.kt rename to sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/DetailsComponent.kt diff --git a/sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt b/sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt similarity index 96% rename from sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt rename to sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt index c015f35a..53362ece 100644 --- a/sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt +++ b/sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Main.kt @@ -2,9 +2,9 @@ package com.arkivanov.mvikotlin.sample.reaktive.app import com.arkivanov.mvikotlin.core.store.StoreFactory import com.arkivanov.mvikotlin.logging.store.LoggingStoreFactory -import com.arkivanov.mvikotlin.main.store.DefaultStoreFactory import com.arkivanov.mvikotlin.sample.database.DefaultTodoDatabase import com.arkivanov.mvikotlin.sample.database.TodoDatabase +import com.arkivanov.mvikotlin.timetravel.ExperimentalTimeTravelApi import com.arkivanov.mvikotlin.timetravel.TimeTravelServer import com.arkivanov.mvikotlin.timetravel.store.TimeTravelStoreFactory import com.badoo.reaktive.subject.publish.PublishSubject @@ -28,6 +28,7 @@ import web.cssom.vh import web.cssom.vw import web.dom.document +@OptIn(ExperimentalTimeTravelApi::class) fun main() { TimeTravelServer().start() diff --git a/sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/MainComponent.kt b/sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/MainComponent.kt similarity index 100% rename from sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/MainComponent.kt rename to sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/MainComponent.kt diff --git a/sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Utils.kt b/sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Utils.kt similarity index 100% rename from sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Utils.kt rename to sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/Utils.kt diff --git a/sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/ViewProxy.kt b/sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/ViewProxy.kt similarity index 100% rename from sample/reaktive/app-js/src/main/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/ViewProxy.kt rename to sample/reaktive/app-js/src/jsMain/kotlin/com/arkivanov/mvikotlin/sample/reaktive/app/ViewProxy.kt diff --git a/sample/reaktive/app-js/src/main/resources/index.html b/sample/reaktive/app-js/src/jsMain/resources/index.html similarity index 100% rename from sample/reaktive/app-js/src/main/resources/index.html rename to sample/reaktive/app-js/src/jsMain/resources/index.html diff --git a/sample/reaktive/shared/build.gradle.kts b/sample/reaktive/shared/build.gradle.kts index 9cd87917..43677759 100644 --- a/sample/reaktive/shared/build.gradle.kts +++ b/sample/reaktive/shared/build.gradle.kts @@ -13,7 +13,7 @@ plugins { } setupMultiplatform { - android() + androidTarget() js { browser() } iosCompat( arm64 = null, // Comment out to enable arm64 target diff --git a/settings.gradle.kts b/settings.gradle.kts index 38fbc1c8..aa23c636 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,7 +15,7 @@ pluginManagement { resolutionStrategy { eachPlugin { if (requested.id.toString() == "com.arkivanov.gradle.setup") { - useModule("com.github.arkivanov:gradle-setup-plugin:2571f348ff") + useModule("com.github.arkivanov:gradle-setup-plugin:655aedff78") } } } diff --git a/utils-internal/src/javaMain/kotlin/com/arkivanov/mvikotlin/utils/internal/Atomic.kt b/utils-internal/src/javaMain/kotlin/com/arkivanov/mvikotlin/utils/internal/Atomic.kt index 7f0d308e..a3ce0e74 100644 --- a/utils-internal/src/javaMain/kotlin/com/arkivanov/mvikotlin/utils/internal/Atomic.kt +++ b/utils-internal/src/javaMain/kotlin/com/arkivanov/mvikotlin/utils/internal/Atomic.kt @@ -28,7 +28,5 @@ actual fun atomic(value: Int): AtomicInt = override fun toByte(): Byte = value.toByte() - override fun toChar(): Char = value.toChar() - override fun toShort(): Short = value.toShort() }