From 0ff895bffa64e567ef8b2894cb13b85256f1f8e8 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 6 May 2023 01:53:33 +0600 Subject: [PATCH 1/5] Update gradle.properties --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9f2f9380401..2f4bce5aad6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,5 +14,5 @@ crypto_js_version=4.1.1 # Project data group=dev.inmo -version=0.18.1 -android_code_version=192 +version=0.18.2 +android_code_version=193 From 3e366ea73b3746cc46e625e2c88cf2db3fb10d40 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 6 May 2023 01:54:15 +0600 Subject: [PATCH 2/5] Update libs.versions.toml --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 250c3e379c5..fbbdb80b256 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ kt = "1.8.20" kt-serialization = "1.5.0" -kt-coroutines = "1.6.4" +kt-coroutines = "1.7.0" kslog = "1.1.1" From 9fb62e1e253c4086379802d21524702101819a28 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 9 May 2023 01:38:04 +0600 Subject: [PATCH 3/5] start 0.18.2 and make json of Startup customizable --- CHANGELOG.md | 5 +++ startup/launcher/build.gradle | 9 +++++ ...GeneratedDefinitionsStartLauncherPlugin.kt | 38 +++++++++++++++++++ .../commonMain/kotlin/StartLauncherPlugin.kt | 19 +++++++++- 4 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 startup/launcher/src/commonMain/kotlin/GeneratedDefinitionsStartLauncherPlugin.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index 5965bb0e95d..2fa1754ab7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.18.2 + +* `Startup`: + * Now internal `Json` is fully customizable + ## 0.18.1 * `Common`: diff --git a/startup/launcher/build.gradle b/startup/launcher/build.gradle index 38fe1179d7a..ac47e384790 100644 --- a/startup/launcher/build.gradle +++ b/startup/launcher/build.gradle @@ -2,6 +2,7 @@ plugins { id "org.jetbrains.kotlin.multiplatform" id "org.jetbrains.kotlin.plugin.serialization" id "application" + id "com.google.devtools.ksp" } apply from: "$mppJvmJsLinuxMingwProjectPresetPath" @@ -11,6 +12,7 @@ kotlin { commonMain { dependencies { api internalProject("micro_utils.startup.plugin") + api internalProject("micro_utils.koin") } } commonTest { @@ -29,3 +31,10 @@ java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } + +dependencies { + add("kspCommonMainMetadata", project(":micro_utils.koin.generator")) +} + +ksp { +} diff --git a/startup/launcher/src/commonMain/kotlin/GeneratedDefinitionsStartLauncherPlugin.kt b/startup/launcher/src/commonMain/kotlin/GeneratedDefinitionsStartLauncherPlugin.kt new file mode 100644 index 00000000000..52d5b7e3dae --- /dev/null +++ b/startup/launcher/src/commonMain/kotlin/GeneratedDefinitionsStartLauncherPlugin.kt @@ -0,0 +1,38 @@ +// THIS CODE HAVE BEEN GENERATED AUTOMATICALLY +// TO REGENERATE IT JUST DELETE FILE +// ORIGINAL FILE: StartLauncherPlugin.kt +package dev.inmo.micro_utils.startup.launcher + +import kotlin.Boolean +import kotlinx.serialization.json.Json +import org.koin.core.Koin +import org.koin.core.definition.Definition +import org.koin.core.definition.KoinDefinition +import org.koin.core.module.Module +import org.koin.core.qualifier.named +import org.koin.core.scope.Scope + +/** + * @return Definition by key "baseJsonProvider" + */ +public val Scope.baseJsonProvider: Json? + get() = getOrNull(named("baseJsonProvider")) + +/** + * @return Definition by key "baseJsonProvider" + */ +public val Koin.baseJsonProvider: Json? + get() = getOrNull(named("baseJsonProvider")) + +/** + * Will register [definition] with [org.koin.core.module.Module.single] and key "baseJsonProvider" + */ +public fun Module.baseJsonProviderSingle(createdAtStart: Boolean = false, definition: Definition): + KoinDefinition = single(named("baseJsonProvider"), createdAtStart = createdAtStart, definition + = definition) + +/** + * Will register [definition] with [org.koin.core.module.Module.factory] and key "baseJsonProvider" + */ +public fun Module.baseJsonProviderFactory(definition: Definition): KoinDefinition = + factory(named("baseJsonProvider"), definition = definition) diff --git a/startup/launcher/src/commonMain/kotlin/StartLauncherPlugin.kt b/startup/launcher/src/commonMain/kotlin/StartLauncherPlugin.kt index e9e14facee2..ccae5011089 100644 --- a/startup/launcher/src/commonMain/kotlin/StartLauncherPlugin.kt +++ b/startup/launcher/src/commonMain/kotlin/StartLauncherPlugin.kt @@ -1,9 +1,11 @@ +@file:GenerateKoinDefinition("baseJsonProvider", Json::class) package dev.inmo.micro_utils.startup.launcher import dev.inmo.kslog.common.i import dev.inmo.kslog.common.taggedLogger import dev.inmo.kslog.common.w import dev.inmo.micro_utils.coroutines.runCatchingSafely +import dev.inmo.micro_utils.koin.annotations.GenerateKoinDefinition import dev.inmo.micro_utils.startup.launcher.StartLauncherPlugin.setupDI import dev.inmo.micro_utils.startup.launcher.StartLauncherPlugin.startPlugin import dev.inmo.micro_utils.startup.plugin.StartPlugin @@ -13,9 +15,10 @@ import kotlinx.coroutines.joinAll import kotlinx.coroutines.launch import kotlinx.serialization.SerialFormat import kotlinx.serialization.StringFormat +import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject -import kotlinx.serialization.json.decodeFromJsonElement import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.modules.SerializersModule import org.koin.core.Koin import org.koin.core.KoinApplication import org.koin.core.context.startKoin @@ -35,7 +38,19 @@ object StartLauncherPlugin : StartPlugin { single { rawJsonObject } single { config } single { CoroutineScope(Dispatchers.Default) } - single { defaultJson } binds arrayOf(StringFormat::class, SerialFormat::class) + single { + val serializersModules = getAll().distinct() + val baseJson = baseJsonProvider ?: defaultJson + if (serializersModules.isEmpty()) { + baseJson + } else { + Json(baseJson) { + SerializersModule { + serializersModules.forEach { include(it) } + } + } + } + } binds arrayOf(StringFormat::class, SerialFormat::class) includes( config.plugins.mapNotNull { From 5d74eac81486c4748383fc8126bd4f7aae5edbff Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 9 May 2023 01:41:25 +0600 Subject: [PATCH 4/5] Update libs.versions.toml --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fbbdb80b256..250c3e379c5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ kt = "1.8.20" kt-serialization = "1.5.0" -kt-coroutines = "1.7.0" +kt-coroutines = "1.6.4" kslog = "1.1.1" From 438fefa7a37a2cff37ab2ac2ab1a29ebd15c425f Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 9 May 2023 15:09:37 +0600 Subject: [PATCH 5/5] fixes --- startup/launcher/src/commonMain/kotlin/StartLauncherPlugin.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/startup/launcher/src/commonMain/kotlin/StartLauncherPlugin.kt b/startup/launcher/src/commonMain/kotlin/StartLauncherPlugin.kt index ccae5011089..47bc9e3d928 100644 --- a/startup/launcher/src/commonMain/kotlin/StartLauncherPlugin.kt +++ b/startup/launcher/src/commonMain/kotlin/StartLauncherPlugin.kt @@ -45,7 +45,8 @@ object StartLauncherPlugin : StartPlugin { baseJson } else { Json(baseJson) { - SerializersModule { + serializersModule = SerializersModule { + include(baseJson.serializersModule) serializersModules.forEach { include(it) } } }