diff options
8 files changed, 60 insertions, 58 deletions
diff --git a/gradle.properties b/gradle.properties index a228c62e..7b32ee5c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,16 +1,16 @@ group=pl.treksoft version=0.0.33 -kotlinVersion=1.3.21 +kotlinVersion=1.3.30 javaVersion=1.8 -coroutinesVersion=1.1.1 -serializationVersion=0.10.0 +coroutinesVersion=1.2.0 +serializationVersion=0.11.0 frontendPluginVersion=0.0.45 dokkaVersion=0.9.18 detektVersion=1.0.0.RC9.2 junitVersion=4.12 joobyVersion=1.6.0 -springBootVersion=2.1.3.RELEASE -ktorVersion=1.1.3 +springBootVersion=2.1.4.RELEASE +ktorVersion=1.1.4 guiceVersion=4.2.2 pac4jVersion=3.5.0 dependencyManagementPluginVersion=1.0.4.RELEASE diff --git a/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/RemoteAgent.kt b/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/RemoteAgent.kt index 52c0f7c3..06e150e4 100644 --- a/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/RemoteAgent.kt +++ b/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/RemoteAgent.kt @@ -198,7 +198,7 @@ interface RemoteAgent { } } - private fun findEnumValue(kClass: KClass<Any>, value: String): Any? { + fun findEnumValue(kClass: KClass<Any>, value: String): Any? { return (kClass.asDynamic().jClass.values() as Array<Any>).find { it.asDynamic().name == value } diff --git a/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/Utils.kt b/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/Utils.kt index c4f4ed6d..465fbf59 100644 --- a/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/Utils.kt +++ b/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/Utils.kt @@ -22,8 +22,9 @@ package pl.treksoft.kvision.remote import kotlinx.serialization.SerializationStrategy -import kotlinx.serialization.context.SimpleModule import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonConfiguration +import kotlinx.serialization.modules.serializersModuleOf import pl.treksoft.kvision.types.JsonDateSerializer import kotlin.browser.window import kotlin.js.Date @@ -45,13 +46,12 @@ fun obj(init: dynamic.() -> Unit): dynamic { */ object JSON { - val plain = Json().apply { - install(SimpleModule(Date::class, JsonDateSerializer)) - } + val plain = Json(context = serializersModuleOf(Date::class, JsonDateSerializer)) - val nonstrict = Json(strictMode = false).apply { - install(SimpleModule(Date::class, JsonDateSerializer)) - } + val nonstrict = Json( + configuration = JsonConfiguration.Stable.copy(strictMode = false), + context = serializersModuleOf(Date::class, JsonDateSerializer) + ) /** * An extension function to convert Serializable object to JS dynamic object diff --git a/kvision-modules/kvision-server-jooby/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt b/kvision-modules/kvision-server-jooby/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt index ca08b080..c3c179fc 100644 --- a/kvision-modules/kvision-server-jooby/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt +++ b/kvision-modules/kvision-server-jooby/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt @@ -30,8 +30,6 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.channels.SendChannel -import kotlinx.coroutines.channels.filterNotNull -import kotlinx.coroutines.channels.map import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import org.jooby.Kooby @@ -344,16 +342,19 @@ actual open class KVServiceManager<T : Any> actual constructor(val serviceClass: ws.close() } launch { - val requestChannel = incoming.map { - val jsonRpcRequest = getParameter<JsonRpcRequest>(it) - if (jsonRpcRequest.params.size == 1) { - getParameter<PAR1>(jsonRpcRequest.params[0]) - } else { - null - } - }.filterNotNull() + val requestChannel = Channel<PAR1>() val responseChannel = Channel<PAR2>() coroutineScope { + launch { + for (p in incoming) { + val jsonRpcRequest = getParameter<JsonRpcRequest>(p) + if (jsonRpcRequest.params.size == 1) { + val par = getParameter<PAR1>(jsonRpcRequest.params[0]) + requestChannel.send(par) + } + } + requestChannel.close() + } launch(Dispatchers.IO) { for (p in responseChannel) { val text = mapper.writeValueAsString( diff --git a/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt b/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt index 11771cfa..3c5391b6 100644 --- a/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt +++ b/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt @@ -44,8 +44,6 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.channels.SendChannel -import kotlinx.coroutines.channels.filterNotNull -import kotlinx.coroutines.channels.map import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import org.slf4j.Logger @@ -378,20 +376,23 @@ actual open class KVServiceManager<T : Any> actual constructor(val serviceClass: webSocketRequests["/kvws/$routeDef"] = { val wsInjector = call.injector.createChildInjector(WsSessionModule(this)) val service = wsInjector.getInstance(serviceClass.java) - val requestChannel = incoming.map { - (it as? Frame.Text)?.readText()?.let { text -> - val jsonRpcRequest = getParameter<JsonRpcRequest>(text) - if (jsonRpcRequest.params.size == 1) { - getParameter<PAR1>(jsonRpcRequest.params[0]) - } else { - null - } - } - }.filterNotNull() + val requestChannel = Channel<PAR1>() val responseChannel = Channel<PAR2>() val session = this coroutineScope { launch { + for (p in incoming) { + (p as? Frame.Text)?.readText()?.let { text -> + val jsonRpcRequest = getParameter<JsonRpcRequest>(text) + if (jsonRpcRequest.params.size == 1) { + val par = getParameter<PAR1>(jsonRpcRequest.params[0]) + requestChannel.send(par) + } + } + } + requestChannel.close() + } + launch { for (p in responseChannel) { val text = mapper.writeValueAsString( JsonRpcResponse( diff --git a/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt b/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt index af185f19..d2b4f7ea 100644 --- a/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt +++ b/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt @@ -23,14 +23,11 @@ package pl.treksoft.kvision.remote import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import kotlinx.coroutines.CoroutineStart -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.channels.SendChannel -import kotlinx.coroutines.channels.filterNotNull -import kotlinx.coroutines.channels.map import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import org.slf4j.Logger @@ -420,17 +417,20 @@ actual open class KVServiceManager<T : Any> actual constructor(val serviceClass: WebSocketSessionHolder.webSocketSession = webSocketSession ctx.getBean(serviceClass.java) } - val requestChannel = incoming.map { - val jsonRpcRequest = getParameter<JsonRpcRequest>(it) - if (jsonRpcRequest.params.size == 1) { - getParameter<PAR1>(jsonRpcRequest.params[0]) - } else { - null - } - }.filterNotNull() + val requestChannel = Channel<PAR1>() val responseChannel = Channel<PAR2>() coroutineScope { launch { + for (p in incoming) { + val jsonRpcRequest = getParameter<JsonRpcRequest>(p) + if (jsonRpcRequest.params.size == 1) { + val par = getParameter<PAR1>(jsonRpcRequest.params[0]) + requestChannel.send(par) + } + } + requestChannel.close() + } + launch { for (p in responseChannel) { val text = mapper.writeValueAsString( JsonRpcResponse( diff --git a/src/main/kotlin/pl/treksoft/kvision/form/Form.kt b/src/main/kotlin/pl/treksoft/kvision/form/Form.kt index a2d6848c..2c71e6a1 100644 --- a/src/main/kotlin/pl/treksoft/kvision/form/Form.kt +++ b/src/main/kotlin/pl/treksoft/kvision/form/Form.kt @@ -24,8 +24,7 @@ package pl.treksoft.kvision.form import kotlinx.serialization.ImplicitReflectionSerializer import kotlinx.serialization.KSerializer import kotlinx.serialization.Mapper -import kotlinx.serialization.context.MutableSerialContextImpl -import kotlinx.serialization.decode +import kotlinx.serialization.modules.serializersModuleOf import kotlinx.serialization.serializer import pl.treksoft.kvision.i18n.I18n.trans import pl.treksoft.kvision.types.DateSerializer @@ -107,9 +106,10 @@ class Form<K : Any>(private val panel: FormPanel<K>? = null, private val seriali else -> listOf(entry.key to entry.value) } }.toMap() - val mapper = Mapper().InNullableMapper(FormMapWrapper(map)) - mapper.context = MutableSerialContextImpl().apply { registerSerializer(Date::class, DateSerializer) } - mapper.decode(serializer) + Mapper(context = serializersModuleOf(Date::class, DateSerializer)).unmapNullable( + serializer, + FormMapWrapper(map) + ) } } diff --git a/src/main/kotlin/pl/treksoft/kvision/utils/JSON.kt b/src/main/kotlin/pl/treksoft/kvision/utils/JSON.kt index e30935ab..8dd8a504 100644 --- a/src/main/kotlin/pl/treksoft/kvision/utils/JSON.kt +++ b/src/main/kotlin/pl/treksoft/kvision/utils/JSON.kt @@ -23,8 +23,9 @@ package pl.treksoft.kvision.utils import kotlinx.serialization.ImplicitReflectionSerializer import kotlinx.serialization.SerializationStrategy -import kotlinx.serialization.context.SimpleModule import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonConfiguration +import kotlinx.serialization.modules.serializersModuleOf import kotlinx.serialization.serializer import pl.treksoft.kvision.types.DateSerializer import kotlin.js.Date @@ -34,13 +35,12 @@ import kotlin.js.Date */ object JSON { - val plain = Json().apply { - install(SimpleModule(Date::class, DateSerializer)) - } + val plain = Json(context = serializersModuleOf(Date::class, DateSerializer)) - val nonstrict = Json(strictMode = false).apply { - install(SimpleModule(Date::class, DateSerializer)) - } + val nonstrict = Json( + configuration = JsonConfiguration.Stable.copy(strictMode = false), + context = serializersModuleOf(Date::class, DateSerializer) + ) /** * An extension function to convert Serializable object to JS dynamic object |