From f8a8808508c0060f0d81ff03d4cf8d0cbcf5cd49 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 15 Oct 2020 00:26:37 +0600 Subject: [PATCH] more annotations to god of annotations --- build_and_publish.sh | 2 +- .../dev/inmo/micro_utils/common/DiffUtils.kt | 3 +++ .../dev/inmo/micro_utils/common/InputAllocator.kt | 3 +++ .../dev/inmo/micro_utils/coroutines/Actor.kt | 2 ++ .../inmo/micro_utils/coroutines/BroadcastFlow.kt | 3 +++ .../micro_utils/coroutines/BroadcastStateFlow.kt | 6 ++++++ .../inmo/micro_utils/coroutines/DataAsDeferred.kt | 2 ++ .../micro_utils/coroutines/DoOutsideOfCoroutine.kt | 2 ++ .../inmo/micro_utils/coroutines/HandleSafely.kt | 2 ++ .../micro_utils/ktor/client/FlowsWebsockets.kt | 3 +++ .../ktor/client/StandardHttpClientGetPost.kt | 4 ++++ .../micro_utils/ktor/common/BuildStandardUrl.kt | 5 +++++ .../ktor/common/CorrectCloseException.kt | 4 ++++ .../micro_utils/ktor/common/CorrectWebsocketUrl.kt | 3 +++ .../micro_utils/ktor/common/FromToDateTimeUrl.kt | 3 +++ .../micro_utils/ktor/common/QueryParamsBuilder.kt | 7 +++++++ .../micro_utils/ktor/common/StandardSerializer.kt | 8 ++++++++ .../inmo/micro_utils/ktor/server/FlowsWebsocket.kt | 7 ------- .../inmo/micro_utils/mime_types/KnownMimeTypes.kt | 6 ++++++ .../inmo/micro_utils/mime_types/MimeTypeTools.kt | 4 ++++ mppProjectWithSerialization | 6 +++++- .../dev/inmo/micro_utils/pagination/Pagination.kt | 7 +++++++ .../micro_utils/pagination/PaginationResult.kt | 6 ++++++ .../micro_utils/pagination/SimplePagination.kt | 5 +++++ .../inmo/micro_utils/pagination/WalkPagination.kt | 5 +++++ .../pagination/utils/IterableExtensions.kt | 4 ++++ .../inmo/micro_utils/pagination/PaginationInUrl.kt | 7 +++++++ .../micro_utils/repos/OneToManyKeyValueRepo.kt | 4 ++++ .../kotlin/dev/inmo/micro_utils/repos/Repo.kt | 3 +++ .../dev/inmo/micro_utils/repos/StandartCRUDRepo.kt | 9 +++++++++ .../inmo/micro_utils/repos/StandartKeyValueRepo.kt | 4 ++++ .../repos/pagination/CRUDPaginationExtensions.kt | 4 ++++ .../pagination/KeyValuePaginationExtensions.kt | 4 ++++ .../pagination/OneToManyPaginationExtensions.kt | 4 ++++ .../dev/inmo/micro_utils/repos/MapCRUDRepo.kt | 6 ++++++ .../dev/inmo/micro_utils/repos/MapKeyValueRepo.kt | 5 +++++ .../micro_utils/repos/MapOneToManyKeyValueRepo.kt | 5 +++++ .../ktor/client/crud/KtorReadStandardCrudRepo.kt | 2 ++ .../repos/ktor/client/crud/KtorStandardCrudRepo.kt | 2 ++ .../ktor/client/crud/KtorWriteStandardCrudRepo.kt | 2 ++ .../key_value/KtorReadStandardKeyValueRepo.kt | 2 ++ .../client/key_value/KtorStandartKeyValueRepo.kt | 2 ++ .../key_value/KtorWriteStandardKeyValueRepo.kt | 2 ++ .../one_to_many/KtorOneToManyKeyValueRepo.kt | 2 ++ .../one_to_many/KtorReadOneToManyKeyValueRepo.kt | 3 ++- .../one_to_many/KtorWriteOneToManyKeyValueRepo.kt | 2 ++ .../repos/ktor/common/crud/CrudReadRoutes.kt | 6 ++++++ .../repos/ktor/common/crud/CrudWriteRoutes.kt | 9 +++++++++ .../common/key_value/KeyValueParameterNames.kt | 4 ++++ .../ktor/common/key_value/KeyValuePostObject.kt | 2 ++ .../repos/ktor/common/key_value/KeyValueRoutes.kt | 11 +++++++++++ .../common/one_to_many/OneToManyParametersNames.kt | 5 +++++ .../ktor/common/one_to_many/OneToManyRoutes.kt | 14 ++++++++++++++ 53 files changed, 227 insertions(+), 10 deletions(-) diff --git a/build_and_publish.sh b/build_and_publish.sh index 231669a1db5..77c020f3379 100755 --- a/build_and_publish.sh +++ b/build_and_publish.sh @@ -12,4 +12,4 @@ function assert_success() { export RELEASE_MODE=true project="$1" -assert_success ./gradlew clean "$project:clean" "$project:build" "$project:publishToMavenLocal" "$project:bintrayUpload" +assert_success ./gradlew $project:build $project:bintrayUpload diff --git a/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/DiffUtils.kt b/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/DiffUtils.kt index 92e0dca214d..0ce020044c4 100644 --- a/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/DiffUtils.kt +++ b/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/DiffUtils.kt @@ -1,5 +1,8 @@ package dev.inmo.micro_utils.common +import kotlin.js.JsExport + +@JsExport fun Iterable.syncWith( other: Iterable, removed: (List) -> Unit = {}, diff --git a/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/InputAllocator.kt b/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/InputAllocator.kt index 2fd48505694..7e48a9caa9e 100644 --- a/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/InputAllocator.kt +++ b/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/InputAllocator.kt @@ -5,12 +5,15 @@ import kotlinx.serialization.builtins.ByteArraySerializer import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder +import kotlin.js.JsExport typealias ByteArrayAllocator = () -> ByteArray +@JsExport val ByteArray.asAllocator: ByteArrayAllocator get() = { this } +@JsExport object ByteArrayAllocatorSerializer : KSerializer { private val realSerializer = ByteArraySerializer() override val descriptor: SerialDescriptor = realSerializer.descriptor diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/Actor.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/Actor.kt index 310d67c32f1..d5b1c4589b6 100644 --- a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/Actor.kt +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/Actor.kt @@ -3,7 +3,9 @@ package dev.inmo.micro_utils.coroutines import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.launch +import kotlin.js.JsExport +@JsExport fun CoroutineScope.actor( channelCapacity: Int = Channel.UNLIMITED, block: suspend (T) -> Unit diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/BroadcastFlow.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/BroadcastFlow.kt index d3ff5b0b277..e1fb966144d 100644 --- a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/BroadcastFlow.kt +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/BroadcastFlow.kt @@ -2,7 +2,9 @@ package dev.inmo.micro_utils.coroutines import kotlinx.coroutines.channels.* import kotlinx.coroutines.flow.* +import kotlin.js.JsExport +@JsExport @Suppress("FunctionName") fun BroadcastFlow( internalChannelSize: Int = Channel.BUFFERED @@ -15,6 +17,7 @@ fun BroadcastFlow( ) } +@JsExport class BroadcastFlow internal constructor( private val channel: BroadcastChannel, private val flow: Flow diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/BroadcastStateFlow.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/BroadcastStateFlow.kt index f8d54aab376..3df24b6d12a 100644 --- a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/BroadcastStateFlow.kt +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/BroadcastStateFlow.kt @@ -4,7 +4,9 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.BroadcastChannel import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.* +import kotlin.js.JsExport +@JsExport class BroadcastStateFlow internal constructor( parentFlow: Flow, private val stateGetter: () -> T @@ -13,6 +15,7 @@ class BroadcastStateFlow internal constructor( get() = stateGetter() } +@JsExport fun BroadcastChannel.asStateFlow(value: T, scope: CoroutineScope): StateFlow = asFlow().let { var state: T = value it.onEach { state = it }.launchIn(scope) @@ -21,13 +24,16 @@ fun BroadcastChannel.asStateFlow(value: T, scope: CoroutineScope): StateF } } +@JsExport fun BroadcastChannel.asStateFlow(scope: CoroutineScope): StateFlow = asStateFlow(null, scope) +@JsExport fun broadcastStateFlow(initial: T, scope: CoroutineScope, channelSize: Int = Channel.BUFFERED) = BroadcastChannel( channelSize ).let { it to it.asStateFlow(initial, scope) } +@JsExport fun broadcastStateFlow(scope: CoroutineScope, channelSize: Int = Channel.BUFFERED) = broadcastStateFlow(null, scope, channelSize) diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/DataAsDeferred.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/DataAsDeferred.kt index e196df51555..d529e3de77a 100644 --- a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/DataAsDeferred.kt +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/DataAsDeferred.kt @@ -2,6 +2,8 @@ package dev.inmo.micro_utils.coroutines import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.Deferred +import kotlin.js.JsExport +@JsExport val T.asDeferred: Deferred get() = CompletableDeferred(this) diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/DoOutsideOfCoroutine.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/DoOutsideOfCoroutine.kt index a4a7e2b912b..5931053cf52 100644 --- a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/DoOutsideOfCoroutine.kt +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/DoOutsideOfCoroutine.kt @@ -1,10 +1,12 @@ package dev.inmo.micro_utils.coroutines import kotlin.coroutines.* +import kotlin.js.JsExport /** * Call this method in case you need to do something in common thread (like reading of file in JVM) */ +@JsExport suspend fun doOutsideOfCoroutine(block: () -> T): T = suspendCoroutine { try { it.resume(block()) diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/HandleSafely.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/HandleSafely.kt index c58ba10c3d3..13738f07d9c 100644 --- a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/HandleSafely.kt +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/HandleSafely.kt @@ -2,6 +2,7 @@ package dev.inmo.micro_utils.coroutines import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.supervisorScope +import kotlin.js.JsExport typealias ExceptionHandler = suspend (Throwable) -> T @@ -11,6 +12,7 @@ typealias ExceptionHandler = suspend (Throwable) -> T * @param [onException] Will be called when happen exception inside of [block]. By default will throw exception - this * exception will be available for catching */ +@JsExport suspend inline fun safely( noinline onException: ExceptionHandler = { throw it }, noinline block: suspend CoroutineScope.() -> T diff --git a/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/FlowsWebsockets.kt b/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/FlowsWebsockets.kt index 5f3512cdc2a..d807fa3815d 100644 --- a/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/FlowsWebsockets.kt +++ b/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/FlowsWebsockets.kt @@ -8,11 +8,13 @@ import io.ktor.http.cio.websocket.* import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.channelFlow import kotlinx.serialization.DeserializationStrategy +import kotlin.js.JsExport /** * @param checkReconnection This lambda will be called when it is required to reconnect to websocket to establish * connection. Must return true in case if must be reconnected. By default always reconnecting */ +@JsExport inline fun HttpClient.createStandardWebsocketFlow( url: String, crossinline checkReconnection: (Throwable?) -> Boolean = { true }, @@ -60,6 +62,7 @@ inline fun HttpClient.createStandardWebsocketFlow( * @param checkReconnection This lambda will be called when it is required to reconnect to websocket to establish * connection. Must return true in case if must be reconnected. By default always reconnecting */ +@JsExport inline fun HttpClient.createStandardWebsocketFlow( url: String, crossinline checkReconnection: (Throwable?) -> Boolean = { true }, diff --git a/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/StandardHttpClientGetPost.kt b/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/StandardHttpClientGetPost.kt index 6981ba21a30..ce7d5196f20 100644 --- a/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/StandardHttpClientGetPost.kt +++ b/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/StandardHttpClientGetPost.kt @@ -5,9 +5,11 @@ import io.ktor.client.HttpClient import io.ktor.client.request.get import io.ktor.client.request.post import kotlinx.serialization.* +import kotlin.js.JsExport typealias BodyPair = Pair, T> +@JsExport suspend fun HttpClient.uniget( url: String, resultDeserializer: DeserializationStrategy @@ -18,11 +20,13 @@ suspend fun HttpClient.uniget( } +@JsExport fun SerializationStrategy.encodeUrlQueryValue(value: T) = standardKtorSerialFormat.encodeHex( this, value ) +@JsExport suspend fun HttpClient.unipost( url: String, bodyInfo: BodyPair, diff --git a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/BuildStandardUrl.kt b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/BuildStandardUrl.kt index 60b8dc3d99f..29db9c2d07e 100644 --- a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/BuildStandardUrl.kt +++ b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/BuildStandardUrl.kt @@ -1,5 +1,8 @@ package dev.inmo.micro_utils.ktor.common +import kotlin.js.JsExport + +@JsExport fun buildStandardUrl( basePart: String, subpart: String, @@ -8,6 +11,7 @@ fun buildStandardUrl( parameters ) +@JsExport fun buildStandardUrl( basePart: String, subpart: String, @@ -16,6 +20,7 @@ fun buildStandardUrl( parameters ) +@JsExport fun buildStandardUrl( basePart: String, subpart: String, diff --git a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/CorrectCloseException.kt b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/CorrectCloseException.kt index 2189e312777..a9bef863dad 100644 --- a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/CorrectCloseException.kt +++ b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/CorrectCloseException.kt @@ -1,3 +1,7 @@ package dev.inmo.micro_utils.ktor.common +import kotlin.js.JsExport + +@JsExport +@Deprecated("Will be removed in next major release as useless") object CorrectCloseException : Exception() diff --git a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/CorrectWebsocketUrl.kt b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/CorrectWebsocketUrl.kt index f1cd5d78b0f..0466df14b51 100644 --- a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/CorrectWebsocketUrl.kt +++ b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/CorrectWebsocketUrl.kt @@ -1,7 +1,10 @@ package dev.inmo.micro_utils.ktor.common +import kotlin.js.JsExport + private val schemaRegex = Regex("^[^:]*://") +@JsExport val String.asCorrectWebSocketUrl: String get() = if (startsWith("ws")) { this diff --git a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/FromToDateTimeUrl.kt b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/FromToDateTimeUrl.kt index ff015524268..dfd1503a8cf 100644 --- a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/FromToDateTimeUrl.kt +++ b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/FromToDateTimeUrl.kt @@ -1,15 +1,18 @@ package dev.inmo.micro_utils.ktor.common import com.soywiz.klock.DateTime +import kotlin.js.JsExport typealias FromToDateTime = Pair +@JsExport val FromToDateTime.asFromToUrlPart: QueryParams get() = mapOf( "from" to first ?.unixMillis ?.toString(), "to" to second ?.unixMillis ?.toString() ) +@JsExport val QueryParams.extractFromToDateTime: FromToDateTime get() = FromToDateTime( get("from") ?.toDoubleOrNull() ?.let { DateTime(it) }, diff --git a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/QueryParamsBuilder.kt b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/QueryParamsBuilder.kt index 0ef45009594..4bcfa33492b 100644 --- a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/QueryParamsBuilder.kt +++ b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/QueryParamsBuilder.kt @@ -1,22 +1,29 @@ package dev.inmo.micro_utils.ktor.common +import kotlin.js.JsExport + typealias QueryParam = Pair typealias QueryParams = Map +@JsExport val QueryParams.asUrlQuery: String get() = keys.joinToString("&") { "${it}${get(it) ?.let { value -> "=$value" }}" } +@JsExport val List.asUrlQuery: String get() = joinToString("&") { (key, value) -> "${key}${value ?.let { _ -> "=$value" }}" } +@JsExport fun String.includeQueryParams( queryParams: QueryParams ): String = "$this${if(queryParams.isNotEmpty()) "${if (contains("?")) "&" else "?"}${queryParams.asUrlQuery}" else ""}" +@JsExport fun String.includeQueryParams( queryParams: List ): String = "$this${if (contains("?")) "&" else "?"}${queryParams.asUrlQuery}" +@JsExport val String.parseUrlQuery: QueryParams get() = split("&").map { it.split("=").let { pair -> diff --git a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/StandardSerializer.kt b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/StandardSerializer.kt index 5d088c9721b..e65678474d9 100644 --- a/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/StandardSerializer.kt +++ b/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/common/StandardSerializer.kt @@ -2,28 +2,36 @@ package dev.inmo.micro_utils.ktor.common import kotlinx.serialization.* import kotlinx.serialization.cbor.Cbor +import kotlin.js.JsExport typealias StandardKtorSerialFormat = BinaryFormat typealias StandardKtorSerialInputData = ByteArray +@JsExport val standardKtorSerialFormat: StandardKtorSerialFormat = Cbor { } +@JsExport inline fun StandardKtorSerialFormat.decodeDefault( deserializationStrategy: DeserializationStrategy, input: StandardKtorSerialInputData ): T = decodeFromByteArray(deserializationStrategy, input) +@JsExport inline fun StandardKtorSerialFormat.encodeDefault( serializationStrategy: SerializationStrategy, data: T ): StandardKtorSerialInputData = encodeToByteArray(serializationStrategy, data) +@JsExport +@Deprecated("Will be removed in next major release due to useless") val cbor = Cbor {} +@JsExport inline fun StandardKtorSerialFormat.decodeHex( deserializationStrategy: DeserializationStrategy, input: String ): T = decodeFromHexString(deserializationStrategy, input) +@JsExport inline fun StandardKtorSerialFormat.encodeHex( serializationStrategy: SerializationStrategy, data: T diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/FlowsWebsocket.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/FlowsWebsocket.kt index ed385691437..43b8a936193 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/FlowsWebsocket.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/FlowsWebsocket.kt @@ -9,13 +9,6 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect import kotlinx.serialization.SerializationStrategy -private suspend fun DefaultWebSocketSession.checkReceivedAndCloseIfExists() { - if (incoming.poll() != null) { - close() - throw CorrectCloseException - } -} - fun Route.includeWebsocketHandling( suburl: String, flow: Flow, diff --git a/mime_types/src/commonMain/kotlin/dev/inmo/micro_utils/mime_types/KnownMimeTypes.kt b/mime_types/src/commonMain/kotlin/dev/inmo/micro_utils/mime_types/KnownMimeTypes.kt index 17c13034199..8b23dd398f0 100644 --- a/mime_types/src/commonMain/kotlin/dev/inmo/micro_utils/mime_types/KnownMimeTypes.kt +++ b/mime_types/src/commonMain/kotlin/dev/inmo/micro_utils/mime_types/KnownMimeTypes.kt @@ -1,13 +1,17 @@ package dev.inmo.micro_utils.mime_types import kotlinx.serialization.Serializable +import kotlin.js.JsExport +@JsExport @Serializable(MimeTypeSerializer::class) interface MimeType { val raw: String } +@JsExport data class CustomMimeType(override val raw: String) : MimeType +@JsExport @Serializable(MimeTypeSerializer::class) sealed class KnownMimeTypes(override val raw: String) : MimeType { object Any : MimeType, KnownMimeTypes("*/*") @@ -2144,10 +2148,12 @@ internal val knownMimeTypes: Set = setOf( KnownMimeTypes.XConference.XCooltalk, ) +@JsExport val knownMimeTypesMap by lazy { knownMimeTypes.associateBy { it.raw } } +@JsExport fun findBuiltinMimeType(from: String): MimeType? { return knownMimeTypesMap[from] } diff --git a/mime_types/src/commonMain/kotlin/dev/inmo/micro_utils/mime_types/MimeTypeTools.kt b/mime_types/src/commonMain/kotlin/dev/inmo/micro_utils/mime_types/MimeTypeTools.kt index dd285d2f834..9792487ab89 100644 --- a/mime_types/src/commonMain/kotlin/dev/inmo/micro_utils/mime_types/MimeTypeTools.kt +++ b/mime_types/src/commonMain/kotlin/dev/inmo/micro_utils/mime_types/MimeTypeTools.kt @@ -5,18 +5,22 @@ import kotlinx.serialization.Serializer import kotlinx.serialization.descriptors.* import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder +import kotlin.js.JsExport private val mimesCache = mutableMapOf().also { knownMimeTypes.forEach { mimeType -> it[mimeType.raw] = mimeType } } +@JsExport fun mimeType(raw: String) = mimesCache.getOrPut(raw) { parseMimeType(raw) } +@JsExport internal fun parseMimeType(raw: String): MimeType = CustomMimeType(raw) @Serializer(MimeType::class) +@JsExport object MimeTypeSerializer : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("mimeType", PrimitiveKind.STRING) diff --git a/mppProjectWithSerialization b/mppProjectWithSerialization index 6659f1e9d57..1d76d035574 100644 --- a/mppProjectWithSerialization +++ b/mppProjectWithSerialization @@ -13,7 +13,11 @@ repositories { kotlin { jvm() js (BOTH) { - browser() + browser { + dceTask { + dceOptions.devMode = true + } + } nodejs() } diff --git a/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/Pagination.kt b/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/Pagination.kt index 53d8958dc42..e55389d8503 100644 --- a/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/Pagination.kt +++ b/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/Pagination.kt @@ -1,5 +1,6 @@ package dev.inmo.micro_utils.pagination +import kotlin.js.JsExport import kotlin.math.ceil import kotlin.math.floor @@ -9,6 +10,7 @@ import kotlin.math.floor * If you want to request something, you should use [SimplePagination]. If you need to return some result including * pagination - [PaginationResult] */ +@JsExport interface Pagination { /** * Started with 0. @@ -25,6 +27,7 @@ interface Pagination { /** * First number in index of objects. It can be used as offset for databases or other data sources */ +@JsExport val Pagination.firstIndex: Int get() = page * size @@ -34,18 +37,21 @@ val Pagination.firstIndex: Int * [[firstIndex], [lastIndex]]; That means, that for [Pagination] with [Pagination.size] == 10 and [Pagination.page] == 1 * you will retrieve [Pagination.firstIndex] == 10 and [Pagination.lastIndex] == 19. */ +@JsExport val Pagination.lastIndex: Int get() = firstIndex + size - 1 /** * Calculates pages count for given [datasetSize] */ +@JsExport fun calculatePagesNumber(datasetSize: Long, pageSize: Int): Int { return ceil(datasetSize.toDouble() / pageSize).toInt() } /** * Calculates pages count for given [datasetSize] */ +@JsExport fun calculatePagesNumber(datasetSize: Int, pageSize: Int): Int = calculatePagesNumber( datasetSize.toLong(), @@ -55,6 +61,7 @@ fun calculatePagesNumber(datasetSize: Int, pageSize: Int): Int = /** * @return calculated page number which can be correctly used in [PaginationResult] as [PaginationResult.page] value */ +@JsExport fun calculatePage(firstIndex: Int, resultsSize: Int): Int = if (resultsSize > 0) { floor(firstIndex.toFloat() / resultsSize).toInt() } else { diff --git a/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/PaginationResult.kt b/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/PaginationResult.kt index 35c3f3939a8..bf0fc730102 100644 --- a/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/PaginationResult.kt +++ b/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/PaginationResult.kt @@ -1,7 +1,9 @@ package dev.inmo.micro_utils.pagination import kotlinx.serialization.Serializable +import kotlin.js.JsExport +@JsExport @Serializable data class PaginationResult( override val page: Int, @@ -10,8 +12,10 @@ data class PaginationResult( override val size: Int ) : Pagination +@JsExport fun emptyPaginationResult() = PaginationResult(0, 0, emptyList(), 0) +@JsExport fun List.createPaginationResult( pagination: Pagination, commonObjectsNumber: Long @@ -25,6 +29,7 @@ fun List.createPaginationResult( pagination.size ) +@JsExport fun List.createPaginationResult( firstIndex: Int, commonObjectsNumber: Long @@ -38,6 +43,7 @@ fun List.createPaginationResult( size ) +@JsExport fun Pair>.createPaginationResult( pagination: Pagination ) = second.createPaginationResult(pagination, first) diff --git a/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/SimplePagination.kt b/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/SimplePagination.kt index 900bf745794..942e9395a72 100644 --- a/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/SimplePagination.kt +++ b/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/SimplePagination.kt @@ -1,12 +1,14 @@ package dev.inmo.micro_utils.pagination import kotlinx.serialization.Serializable +import kotlin.js.JsExport const val defaultSmallPageSize = 2 const val defaultMediumPageSize = 5 const val defaultLargePageSize = 10 const val defaultExtraLargePageSize = 15 +@JsExport @Suppress("NOTHING_TO_INLINE", "FunctionName") inline fun FirstPagePagination(size: Int = defaultMediumPageSize) = SimplePagination( @@ -14,6 +16,7 @@ inline fun FirstPagePagination(size: Int = defaultMediumPageSize) = size = size ) +@JsExport @Suppress("NOTHING_TO_INLINE") inline fun Pagination.nextPage() = SimplePagination( @@ -21,12 +24,14 @@ inline fun Pagination.nextPage() = size ) +@JsExport @Serializable data class SimplePagination( override val page: Int, override val size: Int ) : Pagination +@JsExport fun Pagination( page: Int, size: Int diff --git a/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/WalkPagination.kt b/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/WalkPagination.kt index aed3d2716fa..d311f22da93 100644 --- a/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/WalkPagination.kt +++ b/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/WalkPagination.kt @@ -1,5 +1,8 @@ package dev.inmo.micro_utils.pagination +import kotlin.js.JsExport + +@JsExport inline fun doWithPagination( startPagination: Pagination = FirstPagePagination(), requestMaker: (pagination: Pagination) -> Pagination? @@ -10,6 +13,7 @@ inline fun doWithPagination( } } +@JsExport @Suppress("NOTHING_TO_INLINE") inline fun PaginationResult<*>.nextPageIfNotEmpty() = if (results.isNotEmpty()) { SimplePagination( @@ -20,6 +24,7 @@ inline fun PaginationResult<*>.nextPageIfNotEmpty() = if (results.isNotEmpty()) null } +@JsExport @Suppress("NOTHING_TO_INLINE") inline fun PaginationResult<*>.thisPageIfNotEmpty(): Pagination? = if (results.isNotEmpty()) { this diff --git a/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/utils/IterableExtensions.kt b/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/utils/IterableExtensions.kt index 4b6a5d97240..db7365cf3f3 100644 --- a/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/utils/IterableExtensions.kt +++ b/pagination/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/utils/IterableExtensions.kt @@ -1,7 +1,9 @@ package dev.inmo.micro_utils.pagination.utils import dev.inmo.micro_utils.pagination.* +import kotlin.js.JsExport +@JsExport fun Iterable.paginate(with: Pagination): PaginationResult { var i = 0 val result = mutableListOf() @@ -20,6 +22,7 @@ fun Iterable.paginate(with: Pagination): PaginationResult { return result.createPaginationResult(with, i.toLong()) } +@JsExport fun List.paginate(with: Pagination): PaginationResult { return subList(with.firstIndex, with.lastIndex + 1).createPaginationResult( with, @@ -27,6 +30,7 @@ fun List.paginate(with: Pagination): PaginationResult { ) } +@JsExport fun Set.paginate(with: Pagination): PaginationResult { return this.drop(with.firstIndex).take(with.size).createPaginationResult( with, diff --git a/pagination/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/PaginationInUrl.kt b/pagination/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/PaginationInUrl.kt index 5373489bf32..2dd0904face 100644 --- a/pagination/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/PaginationInUrl.kt +++ b/pagination/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/pagination/PaginationInUrl.kt @@ -1,20 +1,27 @@ package dev.inmo.micro_utils.pagination +import kotlin.js.JsExport + +@JsExport const val paginationPageKey = "ppage" +@JsExport const val paginationSizeKey = "psize" +@JsExport val Pagination.asUrlQueryParts get() = mapOf( paginationPageKey to page.toString(), paginationSizeKey to size.toString() ) +@JsExport val Pagination.asUrlQueryArrayParts get() = arrayOf( paginationPageKey to page.toString(), paginationSizeKey to size.toString() ) +@JsExport val Map.extractPagination: Pagination get() = SimplePagination( get(paginationPageKey) ?.toIntOrNull() ?: 0, diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/OneToManyKeyValueRepo.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/OneToManyKeyValueRepo.kt index 4c6b71e6b9b..0564db7268e 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/OneToManyKeyValueRepo.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/OneToManyKeyValueRepo.kt @@ -3,7 +3,9 @@ package dev.inmo.micro_utils.repos import dev.inmo.micro_utils.pagination.Pagination import dev.inmo.micro_utils.pagination.PaginationResult import kotlinx.coroutines.flow.Flow +import kotlin.js.JsExport +@JsExport interface ReadOneToManyKeyValueRepo : Repo { suspend fun get(k: Key, pagination: Pagination, reversed: Boolean = false): PaginationResult suspend fun keys(pagination: Pagination, reversed: Boolean = false): PaginationResult @@ -15,6 +17,7 @@ interface ReadOneToManyKeyValueRepo : Repo { @Deprecated("Renamed", ReplaceWith("ReadOneToManyKeyValueRepo", "dev.inmo.micro_utils.repos.ReadOneToManyKeyValueRepo")) typealias OneToManyReadKeyValueRepo = ReadOneToManyKeyValueRepo +@JsExport interface WriteOneToManyKeyValueRepo : Repo { val onNewValue: Flow> val onValueRemoved: Flow> @@ -27,4 +30,5 @@ interface WriteOneToManyKeyValueRepo : Repo { @Deprecated("Renamed", ReplaceWith("WriteOneToManyKeyValueRepo", "dev.inmo.micro_utils.repos.WriteOneToManyKeyValueRepo")) typealias OneToManyWriteKeyValueRepo = WriteOneToManyKeyValueRepo +@JsExport interface OneToManyKeyValueRepo : ReadOneToManyKeyValueRepo, WriteOneToManyKeyValueRepo \ No newline at end of file diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/Repo.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/Repo.kt index b05c462dcbb..1d723ba91a8 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/Repo.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/Repo.kt @@ -1,3 +1,6 @@ package dev.inmo.micro_utils.repos +import kotlin.js.JsExport + +@JsExport interface Repo diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartCRUDRepo.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartCRUDRepo.kt index 28ad1ac34c7..c8e93f51675 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartCRUDRepo.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartCRUDRepo.kt @@ -3,7 +3,9 @@ package dev.inmo.micro_utils.repos import dev.inmo.micro_utils.pagination.Pagination import dev.inmo.micro_utils.pagination.PaginationResult import kotlinx.coroutines.flow.Flow +import kotlin.js.JsExport +@JsExport interface ReadStandardCRUDRepo : Repo { suspend fun getByPagination(pagination: Pagination): PaginationResult suspend fun getById(id: IdType): ObjectType? @@ -12,11 +14,14 @@ interface ReadStandardCRUDRepo : Repo { } typealias UpdatedValuePair = Pair +@JsExport val UpdatedValuePair.id get() = first +@JsExport val UpdatedValuePair<*, ValueType>.value get() = second +@JsExport interface WriteStandardCRUDRepo : Repo { val newObjectsFlow: Flow val updatedObjectsFlow: Flow @@ -28,15 +33,19 @@ interface WriteStandardCRUDRepo : Repo { suspend fun deleteById(ids: List) } +@JsExport suspend fun WriteStandardCRUDRepo.create( vararg values: InputValueType ): List = create(values.toList()) +@JsExport suspend fun WriteStandardCRUDRepo.update( vararg values: UpdatedValuePair ): List = update(values.toList()) +@JsExport suspend fun WriteStandardCRUDRepo.deleteById( vararg ids: IdType ) = deleteById(ids.toList()) +@JsExport interface StandardCRUDRepo : ReadStandardCRUDRepo, WriteStandardCRUDRepo \ No newline at end of file diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt index a2666571db6..130d1bda970 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt @@ -3,7 +3,9 @@ package dev.inmo.micro_utils.repos import dev.inmo.micro_utils.pagination.Pagination import dev.inmo.micro_utils.pagination.PaginationResult import kotlinx.coroutines.flow.Flow +import kotlin.js.JsExport +@JsExport interface ReadStandardKeyValueRepo : Repo { suspend fun get(k: Key): Value? suspend fun values(pagination: Pagination, reversed: Boolean = false): PaginationResult @@ -12,6 +14,7 @@ interface ReadStandardKeyValueRepo : Repo { suspend fun count(): Long } +@JsExport interface WriteStandardKeyValueRepo : Repo { val onNewValue: Flow> val onValueRemoved: Flow @@ -20,4 +23,5 @@ interface WriteStandardKeyValueRepo : Repo { suspend fun unset(k: Key) } +@JsExport interface StandardKeyValueRepo : ReadStandardKeyValueRepo, WriteStandardKeyValueRepo \ No newline at end of file diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/CRUDPaginationExtensions.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/CRUDPaginationExtensions.kt index e626262f229..45a63976563 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/CRUDPaginationExtensions.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/CRUDPaginationExtensions.kt @@ -2,7 +2,9 @@ package dev.inmo.micro_utils.repos.pagination import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.repos.ReadStandardCRUDRepo +import kotlin.js.JsExport +@JsExport suspend inline fun > REPO.doForAll( @Suppress("REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE") methodCaller: suspend REPO.(Pagination) -> PaginationResult, @@ -15,10 +17,12 @@ suspend inline fun > REPO.doForAll( } } +@JsExport suspend inline fun > REPO.doForAll( block: (List) -> Unit ) = doForAll({ getByPagination(it) }, block) +@JsExport suspend inline fun > REPO.getAll( @Suppress("REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE") methodCaller: suspend REPO.(Pagination) -> PaginationResult diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/KeyValuePaginationExtensions.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/KeyValuePaginationExtensions.kt index 4442571948c..09d5a80f2b8 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/KeyValuePaginationExtensions.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/KeyValuePaginationExtensions.kt @@ -2,7 +2,9 @@ package dev.inmo.micro_utils.repos.pagination import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.repos.* +import kotlin.js.JsExport +@JsExport suspend inline fun > REPO.doForAll( @Suppress("REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE") methodCaller: suspend REPO.(Pagination) -> PaginationResult, @@ -15,10 +17,12 @@ suspend inline fun > REP } } +@JsExport suspend inline fun > REPO.doForAll( block: (List>) -> Unit ) = doForAll({ keys(it, false) }, block) +@JsExport suspend inline fun > REPO.getAll( @Suppress("REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE") methodCaller: suspend REPO.(Pagination) -> PaginationResult diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/OneToManyPaginationExtensions.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/OneToManyPaginationExtensions.kt index 0c3de2def3c..52bbfba9974 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/OneToManyPaginationExtensions.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/pagination/OneToManyPaginationExtensions.kt @@ -2,7 +2,9 @@ package dev.inmo.micro_utils.repos.pagination import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.repos.* +import kotlin.js.JsExport +@JsExport suspend inline fun > REPO.doForAll( @Suppress("REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE") methodCaller: suspend REPO.(Pagination) -> PaginationResult, @@ -25,10 +27,12 @@ suspend inline fun > RE } } +@JsExport suspend inline fun > REPO.doForAll( block: (List>>) -> Unit ) = doForAll({ keys(it, false) }, block) +@JsExport suspend inline fun > REPO.getAll( @Suppress("REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE") methodCaller: suspend REPO.(Pagination) -> PaginationResult diff --git a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapCRUDRepo.kt b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapCRUDRepo.kt index a2194f0b96a..77ea3788249 100644 --- a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapCRUDRepo.kt +++ b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapCRUDRepo.kt @@ -3,7 +3,9 @@ package dev.inmo.micro_utils.repos import dev.inmo.micro_utils.coroutines.BroadcastFlow import dev.inmo.micro_utils.pagination.* import kotlinx.coroutines.flow.Flow +import kotlin.js.JsExport +@JsExport class ReadMapCRUDRepo( private val map: Map = emptyMap() ) : ReadStandardCRUDRepo { @@ -23,6 +25,7 @@ class ReadMapCRUDRepo( override suspend fun count(): Long = map.size.toLong() } +@JsExport abstract class WriteMapCRUDRepo( private val map: MutableMap = mutableMapOf() ) : WriteStandardCRUDRepo { @@ -70,12 +73,14 @@ abstract class WriteMapCRUDRepo( } +@JsExport abstract class MapCRUDRepo( map: MutableMap ) : StandardCRUDRepo, ReadStandardCRUDRepo by ReadMapCRUDRepo(map), WriteMapCRUDRepo(map) +@JsExport fun MapCRUDRepo( map: MutableMap, updateCallback: suspend (newValue: InputValueType, id: IdType, old: ObjectType) -> ObjectType, @@ -90,6 +95,7 @@ fun MapCRUDRepo( override suspend fun createObject(newValue: InputValueType): Pair = createCallback(newValue) } +@JsExport fun MutableMap.asCrudRepo( updateCallback: suspend (newValue: InputValueType, id: IdType, old: ObjectType) -> ObjectType, createCallback: suspend (newValue: InputValueType) -> Pair diff --git a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt index 506033e6c70..6c4323f26af 100644 --- a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt +++ b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt @@ -3,7 +3,9 @@ package dev.inmo.micro_utils.repos import dev.inmo.micro_utils.coroutines.BroadcastFlow import dev.inmo.micro_utils.pagination.* import kotlinx.coroutines.flow.Flow +import kotlin.js.JsExport +@JsExport class ReadMapKeyValueRepo( private val map: Map = emptyMap() ) : ReadStandardKeyValueRepo { @@ -45,6 +47,7 @@ class ReadMapKeyValueRepo( override suspend fun count(): Long = map.size.toLong() } +@JsExport class WriteMapKeyValueRepo( private val map: MutableMap = mutableMapOf() ) : WriteStandardKeyValueRepo { @@ -65,10 +68,12 @@ class WriteMapKeyValueRepo( } } +@JsExport class MapKeyValueRepo( private val map: MutableMap = mutableMapOf() ) : StandardKeyValueRepo, ReadStandardKeyValueRepo by ReadMapKeyValueRepo(map), WriteStandardKeyValueRepo by WriteMapKeyValueRepo(map) +@JsExport fun MutableMap.asKeyValueRepo(): StandardKeyValueRepo = MapKeyValueRepo(this) diff --git a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapOneToManyKeyValueRepo.kt b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapOneToManyKeyValueRepo.kt index 266f98c3baa..9f9b019c946 100644 --- a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapOneToManyKeyValueRepo.kt +++ b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapOneToManyKeyValueRepo.kt @@ -4,7 +4,9 @@ import dev.inmo.micro_utils.coroutines.BroadcastFlow import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.utils.paginate import kotlinx.coroutines.flow.Flow +import kotlin.js.JsExport +@JsExport class MapReadOneToManyKeyValueRepo( private val map: Map> = emptyMap() ) : ReadOneToManyKeyValueRepo { @@ -44,6 +46,7 @@ class MapReadOneToManyKeyValueRepo( override suspend fun count(): Long = map.size.toLong() } +@JsExport class MapWriteOneToManyKeyValueRepo( private val map: MutableMap> = mutableMapOf() ) : WriteOneToManyKeyValueRepo { @@ -71,12 +74,14 @@ class MapWriteOneToManyKeyValueRepo( } } +@JsExport class MapOneToManyKeyValueRepo( private val map: MutableMap> = mutableMapOf() ) : OneToManyKeyValueRepo, ReadOneToManyKeyValueRepo by MapReadOneToManyKeyValueRepo(map), WriteOneToManyKeyValueRepo by MapWriteOneToManyKeyValueRepo(map) +@JsExport fun MutableMap>.asOneToManyKeyValueRepo(): OneToManyKeyValueRepo = MapOneToManyKeyValueRepo( map { (k, v) -> k to v.toMutableList() }.toMap().toMutableMap() ) diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorReadStandardCrudRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorReadStandardCrudRepo.kt index 1a3d3a2bf67..5d5f780ef31 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorReadStandardCrudRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorReadStandardCrudRepo.kt @@ -11,7 +11,9 @@ import dev.inmo.micro_utils.repos.ktor.common.crud.* import io.ktor.client.HttpClient import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.serializer +import kotlin.js.JsExport +@JsExport class KtorReadStandardCrudRepo ( private val baseUrl: String, private val client: HttpClient = HttpClient(), diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorStandardCrudRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorStandardCrudRepo.kt index 97d8a0abbab..41121368fe1 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorStandardCrudRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorStandardCrudRepo.kt @@ -3,7 +3,9 @@ package dev.inmo.micro_utils.repos.ktor.client.crud import dev.inmo.micro_utils.repos.* import io.ktor.client.HttpClient import kotlinx.serialization.KSerializer +import kotlin.js.JsExport +@JsExport class KtorStandardCrudRepo ( baseUrl: String, baseSubpart: String, diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorWriteStandardCrudRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorWriteStandardCrudRepo.kt index 960ad239ad1..717b1d1ece9 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorWriteStandardCrudRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorWriteStandardCrudRepo.kt @@ -11,7 +11,9 @@ import io.ktor.client.HttpClient import kotlinx.coroutines.flow.Flow import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.* +import kotlin.js.JsExport +@JsExport class KtorWriteStandardCrudRepo ( private val baseUrl: String, private val client: HttpClient = HttpClient(), diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorReadStandardKeyValueRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorReadStandardKeyValueRepo.kt index f7c0af2e256..c2886607935 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorReadStandardKeyValueRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorReadStandardKeyValueRepo.kt @@ -11,7 +11,9 @@ import dev.inmo.micro_utils.repos.ktor.common.key_value.* import io.ktor.client.* import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.serializer +import kotlin.js.JsExport +@JsExport class KtorReadStandardKeyValueRepo ( private var baseUrl: String, private var client: HttpClient = HttpClient(), diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorStandartKeyValueRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorStandartKeyValueRepo.kt index 9c7164ab49f..982cc474709 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorStandartKeyValueRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorStandartKeyValueRepo.kt @@ -5,7 +5,9 @@ import dev.inmo.micro_utils.repos.ReadStandardKeyValueRepo import dev.inmo.micro_utils.repos.WriteStandardKeyValueRepo import io.ktor.client.* import kotlinx.serialization.KSerializer +import kotlin.js.JsExport +@JsExport class KtorStandartKeyValueRepo ( baseUrl: String, baseSubpart: String, diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorWriteStandardKeyValueRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorWriteStandardKeyValueRepo.kt index 043f21155db..951f9d30291 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorWriteStandardKeyValueRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorWriteStandardKeyValueRepo.kt @@ -11,7 +11,9 @@ import kotlinx.coroutines.flow.Flow import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.PairSerializer import kotlinx.serialization.builtins.serializer +import kotlin.js.JsExport +@JsExport class KtorWriteStandardKeyValueRepo ( private var baseUrl: String, private var client: HttpClient = HttpClient(), diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorOneToManyKeyValueRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorOneToManyKeyValueRepo.kt index 8dc20ae25ad..bb299cee216 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorOneToManyKeyValueRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorOneToManyKeyValueRepo.kt @@ -5,7 +5,9 @@ import dev.inmo.micro_utils.repos.ReadOneToManyKeyValueRepo import dev.inmo.micro_utils.repos.WriteOneToManyKeyValueRepo import io.ktor.client.HttpClient import kotlinx.serialization.KSerializer +import kotlin.js.JsExport +@JsExport class KtorOneToManyKeyValueRepo( baseUrl: String, baseSubpart: String, diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorReadOneToManyKeyValueRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorReadOneToManyKeyValueRepo.kt index 5dd4e23c9b8..92063ec1d8f 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorReadOneToManyKeyValueRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorReadOneToManyKeyValueRepo.kt @@ -11,7 +11,9 @@ import dev.inmo.micro_utils.repos.ktor.common.one_to_many.* import io.ktor.client.HttpClient import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.serializer +import kotlin.js.JsExport +@JsExport class KtorReadOneToManyKeyValueRepo ( private val baseUrl: String, private val client: HttpClient = HttpClient(), @@ -83,5 +85,4 @@ class KtorReadOneToManyKeyValueRepo ( ), Long.serializer() ) - } \ No newline at end of file diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorWriteOneToManyKeyValueRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorWriteOneToManyKeyValueRepo.kt index 3022463da8a..a78c6be3dd7 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorWriteOneToManyKeyValueRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/one_to_many/KtorWriteOneToManyKeyValueRepo.kt @@ -11,7 +11,9 @@ import kotlinx.coroutines.flow.Flow import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.PairSerializer import kotlinx.serialization.builtins.serializer +import kotlin.js.JsExport +@JsExport class KtorWriteOneToManyKeyValueRepo ( private val baseUrl: String, private val client: HttpClient = HttpClient(), diff --git a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/crud/CrudReadRoutes.kt b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/crud/CrudReadRoutes.kt index 00348cc409d..e965c294bfe 100644 --- a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/crud/CrudReadRoutes.kt +++ b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/crud/CrudReadRoutes.kt @@ -1,6 +1,12 @@ package dev.inmo.micro_utils.repos.ktor.common.crud +import kotlin.js.JsExport + +@JsExport const val getByPaginationRouting = "getByPagination" +@JsExport const val getByIdRouting = "getById" +@JsExport const val containsRouting = "contains" +@JsExport const val countRouting = "count" diff --git a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/crud/CrudWriteRoutes.kt b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/crud/CrudWriteRoutes.kt index f138429fd3a..898b266554c 100644 --- a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/crud/CrudWriteRoutes.kt +++ b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/crud/CrudWriteRoutes.kt @@ -1,10 +1,19 @@ package dev.inmo.micro_utils.repos.ktor.common.crud +import kotlin.js.JsExport + +@JsExport const val newObjectsFlowRouting = "newObjectsFlow" +@JsExport const val updatedObjectsFlowRouting = "updatedObjectsFlow" +@JsExport const val deletedObjectsIdsFlowRouting = "deletedObjectsIdsFlow" +@JsExport const val createRouting = "create" +@JsExport const val updateRouting = "update" +@JsExport const val updateManyRouting = "updateMany" +@JsExport const val deleteByIdRouting = "deleteById" diff --git a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueParameterNames.kt b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueParameterNames.kt index d0b168a7bcb..09698736169 100644 --- a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueParameterNames.kt +++ b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueParameterNames.kt @@ -1,4 +1,8 @@ package dev.inmo.micro_utils.repos.ktor.common.key_value +import kotlin.js.JsExport + +@JsExport const val keyParameterName = "key" +@JsExport const val reversedParameterName = "reversed" \ No newline at end of file diff --git a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValuePostObject.kt b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValuePostObject.kt index 77739fc2e87..b8283e05178 100644 --- a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValuePostObject.kt +++ b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValuePostObject.kt @@ -1,7 +1,9 @@ package dev.inmo.micro_utils.repos.ktor.common.key_value import kotlinx.serialization.Serializable +import kotlin.js.JsExport +@JsExport @Serializable data class KeyValuePostObject ( val key: K, diff --git a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueRoutes.kt b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueRoutes.kt index 77b32a459ad..e56ea12c562 100644 --- a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueRoutes.kt +++ b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueRoutes.kt @@ -1,12 +1,23 @@ package dev.inmo.micro_utils.repos.ktor.common.key_value +import kotlin.js.JsExport + +@JsExport const val getRoute = "get" +@JsExport const val valuesRoute = "values" +@JsExport const val keysRoute = "keys" +@JsExport const val containsRoute = "contains" +@JsExport const val countRoute = "count" +@JsExport const val onNewValueRoute = "onNewValue" +@JsExport const val onValueRemovedRoute = "onValueRemoved" +@JsExport const val setRoute = "set" +@JsExport const val unsetRoute = "unset" \ No newline at end of file diff --git a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/one_to_many/OneToManyParametersNames.kt b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/one_to_many/OneToManyParametersNames.kt index c8f8b2ea7eb..6855cd7442d 100644 --- a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/one_to_many/OneToManyParametersNames.kt +++ b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/one_to_many/OneToManyParametersNames.kt @@ -1,5 +1,10 @@ package dev.inmo.micro_utils.repos.ktor.common.one_to_many +import kotlin.js.JsExport + +@JsExport const val keyParameterName = "key" +@JsExport const val valueParameterName = "value" +@JsExport const val reversedParameterName = "reversed" \ No newline at end of file diff --git a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/one_to_many/OneToManyRoutes.kt b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/one_to_many/OneToManyRoutes.kt index 637edd9bda1..69706d5ae72 100644 --- a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/one_to_many/OneToManyRoutes.kt +++ b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/one_to_many/OneToManyRoutes.kt @@ -1,16 +1,30 @@ package dev.inmo.micro_utils.repos.ktor.common.one_to_many +import kotlin.js.JsExport + +@JsExport const val getRoute = "get" +@JsExport const val keysRoute = "keys" +@JsExport const val containsByKeyRoute = "containsByKey" +@JsExport const val containsByKeyValueRoute = "containsByKeyValue" +@JsExport const val countByKeyRoute = "countByKey" +@JsExport const val countRoute = "count" +@JsExport const val onNewValueRoute = "onNewValue" +@JsExport const val onValueRemovedRoute = "onValueRemoved" +@JsExport const val onDataClearedRoute = "onDataCleared" +@JsExport const val addRoute = "add" +@JsExport const val removeRoute = "remove" +@JsExport const val clearRoute = "clear" \ No newline at end of file