# Changelog ## 0.22.9 * `Repos`: * `Cache`: * Add direct caching repos ## 0.22.8 * `Common`: * Add `List.breakAsPairs` extension * Add `Sequence.padWith`/`Sequence.padStart`/`Sequence.padEnd` and `List.padWith`/`List.padStart`/`List.padEnd` extensions ## 0.22.7 * `Versions`: * `Kotlin`: `2.0.20` -> `2.0.21` * `Compose`: `1.7.0-rc01` -> `1.7.0` * `KSP`: * `Sealed`: * Change package of `GenerateSealedWorkaround`. Migration: replace `dev.inmo.microutils.kps.sealed.GenerateSealedWorkaround` -> `dev.inmo.micro_utils.ksp.sealed.GenerateSealedWorkaround` ## 0.22.6 * `KSP`: * `Generator`: * Add extension `KSClassDeclaration.buildSubFileName` * Add extension `KSClassDeclaration.companion` * Add extension `KSClassDeclaration.resolveSubclasses` * `Sealed`: * Improvements ## 0.22.5 * `Versions`: * `Compose`: `1.7.0-beta02` -> `1.7.0-rc01` * `SQLite`: `3.46.1.2` -> `3.46.1.3` * `AndroidXFragment`: `1.8.3` -> `1.8.4` * `Common`: * Add extension `withReplacedAt`/`withReplaced` ([#489](https://github.com/InsanusMokrassar/MicroUtils/issues/489)) * `Coroutines`: * Add extension `Flow.debouncedBy` * `Ktor`: * `Server`: * Add `KtorApplicationConfigurator.Routing.Static` as solution for [#488](https://github.com/InsanusMokrassar/MicroUtils/issues/488) ## 0.22.4 * `Versions`: * `Exposed`: `0.54.0` -> `0.55.0` * `SQLite`: `3.46.1.0` -> `3.46.1.2` ## 0.22.3 * `Versions`: * `Serialization`: `1.7.2` -> `1.7.3` * `Coroutines`: `1.8.1` -> `1.9.0` * `Compose`: `1.7.0-alpha03` -> `1.7.0-beta02` * `Koin`: `3.5.6` -> `4.0.0` * `Okio`: `3.9.0` -> `3.9.1` * `AndroidFragment`: `1.8.2` -> `1.8.3` * `androidx.compose.material3:material3` has been replaced with `org.jetbrains.compose.material3:material3` * `Common`: * `JS`: * Add several useful extensions * `Compose`: * `JS`: * Add several useful extensions ## 0.22.2 * `Versions`: * `Exposed`: `0.53.0` -> `0.54.0` * `SQLite`: `3.46.0.1` -> `3.46.1.0` ## 0.22.1 * `Versions`: * `Kotlin`: `2.0.10` -> `2.0.20` * `Serialization`: `1.7.1` -> `1.7.2` * `KSLog`: `1.3.5` -> `1.3.6` * `Compose`: `1.7.0-alpha02` -> `1.7.0-alpha03` * `Ktor`: `2.3.11` -> `2.3.12` ## 0.22.0 **THIS UPDATE CONTAINS BREAKING CHANGES ACCORDING TO UPDATE UP TO KOTLIN 2.0** * `Versions`: * `Kotlin`: `1.9.23` -> `2.0.10` * `Serialization`: `1.6.3` -> `1.7.1` * `KSLog`: `1.3.4` -> `1.3.5` * `Compose`: `1.6.2` -> `1.7.0-alpha02` * `Exposed`: `0.50.1` -> `0.53.0` * `AndroidAppCompat`: `1.6.1` -> `1.7.0` * `AndroidFragment`: `1.7.1` -> `1.8.2` ## 0.21.6 * `KSP`: * `Sealed`: * Fixes in generation ## 0.21.5 * `KSP`: * Add utility functions `KSClassDeclaration.findSubClasses` * `Sealed`: * Improve generation ## 0.21.4 * `Common`: * `Compose`: * Add support of mingw, linux, arm64 targets * `Coroutines`: * `Compose`: * Add support of mingw, linux, arm64 targets * `Koin`: * Add support of mingw, linux, arm64 targets * `KSP`: * `ClassCasts`: * Add support of mingw, linux, arm64 targets * `Sealed`: * Add support of mingw, linux, arm64 targets ## 0.21.3 * `Colors`: * Added as a module. It should be used by default in case you wish all the API currently realized for `HEXAColor` * `Coroutines`: * Fix of [#374](https://github.com/InsanusMokrassar/MicroUtils/issues/374): * Add vararg variants of `awaitFirst` * Add `joinFirst` ## 0.21.2 * `KSP`: * `ClassCasts`: * Module has been initialized ## 0.21.1 * `KSP`: * Module has been initialized * `Generator`: * Module has been initialized * `Sealed`: * Module has been initialized ## 0.21.0 **THIS UPDATE CONTAINS BREAKING CHANGES IN `safely*`-ORIENTED FUNCTIONS** * `Coroutines`: * **All `safely` functions lost their `supervisorScope` in favor to wrapping `runCatching`** * `runCatchingSafely` is the main handling function of all `safely` functions * `launchSafely*` and `asyncSafely*` blocks lost `CoroutineScope` as their receiver ## 0.20.52 * `Coroutines`: * Small rework of weak jobs: add `WeakScope` factory, rename old weal extensions and add kdocs ## 0.20.51 * `Versions`: * `Android Fragment`: `1.7.0` -> `1.7.1` * `Pagination`: * Add `Pagination.nextPageIfTrue` and `Pagination.thisPageIftrue` extensions to get the page according to condition pass status * Add `PaginationResult.nextPageIfNotEmptyOrLastPage` and `PaginationResult.thisPageIfNotEmptyOrLastPage` * Change all `doForAll` and `getAll` extensions fo pagination to work basing on `nextPageIfNotEmptyOrLastPage` and `thisPageIfNotEmptyOrLastPage` ## 0.20.50 * `Versions`: * `Coroutines`: `1.8.0` -> `1.8.1` * `KSLog`: `1.3.3` -> `1.3.4` * `Exposed`: `0.50.0` -> `0.50.1` * `Ktor`: `2.3.10` -> `2.3.11` * A lot of inline functions became common functions due to inline with only noinline callbacks in arguments leads to low performance * `Coroutines`: * `SmartMutex`, `SmartSemaphore` and `SmartRWLocker` as their user changed their state flow to `SpecialMutableStateFlow` ## 0.20.49 * `Repos`: * `Common`: * All `Repo`s get `diff` extensions * `KeyValueRepo` and `KeyValuesRepo` get `applyDiff` extension * Add new extensions `on*` flows for crud repos ## 0.20.48 * `Versions`: * `Android Core KTX`: `1.13.0` -> `1.13.1` * `AndroidX Fragment`: `1.6.2` -> `1.7.0` ## 0.20.47 * `Versions`: * `Exposed`: `0.49.0` -> `0.50.0` ## 0.20.46 * `Common`: * Now this repo depends on `klock` * Add new object-serializer `DateTimeSerializer` for `klock` serializer ## 0.20.45 * `Versions`: * `Android Core KTX`: `1.12.0` -> `1.13.0` ## 0.20.44 * `Versions`: * `Compose`: `1.6.1` -> `1.6.2` * `Koin`: `3.5.4` -> `3.5.6` ## 0.20.43 * `Versions`: * `Ktor`: `2.3.9` -> `2.3.10` * `Koin`: `3.5.3` -> `3.5.4` ## 0.20.42 * `Repos`: * `Generator`: * Improvements ## 0.20.41 * `Repos`: * `Exposed`: * `AbstractExposedKeyValueRepo`, `ExposedKeyValueRepo`, `AbstractExposedKeyValuesRepo`, `ExposedKeyValuesRepo` got opportunity to setup some part of their flows ## 0.20.40 * `Versions`: * `KSLog`: `1.3.2` -> `1.3.3` * `Exposed`: `0.48.0` -> `0.49.0` * `UUID`: `0.8.2` -> `0.8.4` ## 0.20.39 * `Versions`: * `Kotlin`: `1.9.22` -> `1.9.23` * `Korlibs`: `5.3.2` -> `5.4.0` * `Okio`: `3.8.0` -> `3.9.0` * `Compose`: `1.6.0` -> `1.6.1` * `ComposeMaterial3`: `1.2.0` -> `1.2.1` ## 0.20.38 * `Versions`: * `Ktor`: `2.3.8` -> `2.3.9` ## 0.20.37 * `Versions`: * `Compose`: `1.5.12` -> `1.6.0` * `Exposed`: `0.47.0` -> `0.48.0` ## 0.20.36 * `Versions`: * `Serialization`: `1.6.2` -> `1.6.3` * `Korlibs`: `5.3.1` -> `5.3.2` * `Repos`: * `Cache`: * Improve work and functionality of `actualizeAll` and subsequent functions * All internal repos `invalidate`/`actualizeAll` now use common `actualizeAll` functions ## 0.20.35 * `Versions`: * `Coroutines`: `1.7.3` -> `1.8.0` * `Material3`: `1.1.2` -> `1.2.0` ## 0.20.34 * `Repos`: * `Common`: * Improve default `set` realization of `KeyValuesRepo` ## 0.20.33 * `Colors` * `Common`: * Add opportunity to use `HEXAColor` with `ahex` colors ## 0.20.32 * `Versions`: * `Okio`: `3.7.0` -> `3.8.0` * `Resources`: * Make `StringResource` serializable * Add several variants of builder usages ## 0.20.31 * `Versions`: * `Ktor`: `2.3.7` -> `2.3.8` ## 0.20.30 * `Versions`: * `Exposed`: `0.46.0` -> `0.47.0` ## 0.20.29 * `Versions`: * `Kotlin`: `1.9.21` -> `1.9.22` * `Compose`: `1.5.11` -> `1.5.12` * `Korlibs`: `5.3.0` -> `5.3.1` ## 0.20.28 * `Versions`: * `Kotlin`: `1.9.22` -> `1.9.21` (downgrade) * `Compose`: `1.6.0-dev13691` -> `1.5.11` (downgrade) ## 0.20.27 * `Versions`: * `Kotlin`: `1.9.21` -> `1.9.22` * `Compose`: `1.5.11` -> `1.6.0-dev13691` ## 0.20.26 * `Versions`: * `Exposed`: `0.45.0` -> `0.46.0`. **This update brinds new api deprecations in exposed** * `Resources`: * Add opportunity to get default translation by passing `null` as `IetfLang` argument * Add several useful extensions to get translations in `JS` target ## 0.20.25 * `Colors`: * `Common`: * Module inited ## 0.20.24 **Since this version depdendencies of klock and krypto replaced with `com.soywiz.korge:korlibs-time` and `com.soywiz.korge:korlibs-crypto`** * `Versions`: * `Klock` (since now `KorlibsTime`): `4.0.10` -> `5.3.0` * `Krypto` (since now `KorlibsCrypto`): `4.0.10` -> `5.3.0` * `Serialization`: * `Mapper`: * `Mapper` pass decoder into callback of deserialization strategy * `Mapper` pass encoder into callback of serialization strategy ## 0.20.23 * `Versions`: * `Koin`: `3.5.0` -> `3.5.3` * `Okio`: `3.6.0` -> `3.7.0` * `LanguageCodes`: * Fixes in intermediate language codes (like `Chinese.Hans`) * Rename `IetfLanguageCode` to `IetfLang` * Rename all subsequent functions (including serializer) * New lazy properties `knownLanguageCodesMap`, `knownLanguageCodesMapByLowerCasedKeys` and several others ## 0.20.22 * `Common`: * Add opportunity to create own `Diff` with base constructor ## 0.20.21 * `Resources`: * Inited ## 0.20.20 * `Repos`: * `Exposed`: * Add opportunity for setup flows in `AbstractExposedCRUDRepo` ## 0.20.19 * `Versions`: * `Ktor`: `2.3.6` -> `2.3.7` ## 0.20.18 * `Coroutines`: * `SpecialMutableStateFlow` now extends `MutableStateFlow` * `Compose`: * Deprecate `FlowState` due to its complexity in fixes ## 0.20.17 * `Versions`: * `Serialization`: `1.6.1` -> `1.6.2` ## 0.20.16 * `Versions`: * `Exposed`: `0.44.1` -> `0.45.0` * `Coroutines`: * Add `SpecialMutableStateFlow` * `Compose`: * Add `FlowState` ## 0.20.15 * `Versions`: * `Kotlin`: `1.9.20` -> `1.9.21` * `KSLog`: `1.3.0` -> `1.3.1` * `Compose`: `1.5.10` -> `1.5.11` ## 0.20.14 * `Versions`: * `Serialization`: `1.6.0` -> `1.6.1` * `KSLog`: `1.2.4` -> `1.3.0` ## 0.20.13 * `Versions`: * `Ktor`: `2.3.5` -> `2.3.6` * `UUID`: `0.8.1` -> `0.8.2` ## 0.20.12 **It is experimental migration onto new gradle version. Be careful in use of this version** **This update have JDK 17 in `compatibility` and `target` versions** ## 0.20.11 * `Versions`: * `Kotlin`: `1.9.20-RC2` -> `1.9.20` * `Exposed`: `0.44.0` -> `0.44.1` * `Compose`: `1.5.10-rc02` -> `1.5.10` * `Coroutines`: * `SmartRWLocker` now will wait first unlock of write mutex for acquiring read ## 0.20.10 * `Versions`: * `Kotlin`: `1.9.20-RC` -> `1.9.20-RC1` * `KSLog`: `1.2.1` -> `1.2.2` * `Compose`: `1.5.10-rc01` -> `1.5.10-rc02` * `RecyclerView`: `1.3.1` -> `1.3.2` ## 0.20.9 * Most of common modules now supports `linuxArm64` target ## 0.20.8 **THIS VERSION CONTAINS UPDATES OF DEPENDENCIES UP TO RC VERSIONS. USE WITH CAUTION** * `Versions`: * `Kotlin`: `1.9.20-Beta2` -> `1.9.20-RC` * `Compose`: `1.5.10-beta02` -> `1.5.10-rc01` ## 0.20.7 **THIS VERSION CONTAINS UPDATES OF DEPENDENCIES UP TO BETA VERSIONS. USE WITH CAUTION** * `Versions`: * `Kotlin`: `1.9.10` -> `1.9.20-Beta2` * `Compose`: `1.5.1` -> `1.5.10-beta02` * `Exposed`: `0.43.0` -> `0.44.0` * `Ktor`: `2.3.4` -> `2.3.5` * `Koin`: `3.4.3` -> `3.5.0` * `Okio`: `3.5.0` -> `3.6.0` * `Android Core`: `1.10.1` -> `1.12.0` * `Android Compose Material`: `1.1.1` -> `1.1.2` ## 0.20.6 * `Repos`: * `Exposed` * Fixes in exposed key-values repos ## 0.20.5 * `Coroutines`: * Fixes in `SmartRWLocker` ## 0.20.4 * `Versions`: * `Kotlin`: `1.9.0` -> `1.9.10` * `KSLog`: `1.2.0` -> `1.2.1` * `Compose`: `1.5.0` -> `1.5.1` * `UUID`: `0.8.0` -> `0.8.1` ## 0.20.3 * `Versions`: * `Compose`: `1.4.3` -> `1.5.0` * `Exposed`: `0.42.1` -> `0.43.0` * `Ktor`: `2.3.3` -> `2.3.4` * `Repos`: * `Cache`: * Fixes in locks of caches ## 0.20.2 * All main repos uses `SmartRWLocker` * `Versions`: * `Serialization`: `1.5.1` -> `1.6.0` * `Exposed`: `0.42.0` -> `0.42.1` * `Korlibs`: `4.0.9` -> `4.0.10` * `Androis SDK`: `33` -> `34` ## 0.20.1 * `SmallTextField`: * Module is initialized * `Pickers`: * Module is initialized * `Coroutines`: * Add `SmartSemaphore` * Add `SmartRWLocker` ## 0.20.0 * `Versions`: * `Kotlin`: `1.8.22` -> `1.9.0` * `KSLog`: `1.1.1` -> `1.2.0` * `Exposed`: `0.41.1` -> `0.42.0` * `UUID`: `0.7.1` -> `0.8.0` * `Korlibs`: `4.0.3` -> `4.0.9` * `Ktor`: `2.3.2` -> `2.3.3` * `Okio`: `3.4.0` -> `3.5.0` ## 0.19.9 * `Versions`: * `Koin`: `3.4.2` -> `3.4.3` * `Startup`: * Now it is possible to start application in synchronous way ## 0.19.8 * `Versions`: * `Coroutines`: `1.7.2` -> `1.7.3` * `Kotlin`: `1.8.20` -> `1.8.22` * `Compose`: `1.4.1` -> `1.4.3` * `Okio`: `3.3.0` -> `3.4.0` * `RecyclerView`: `1.3.0` -> `1.3.1` * `Fragment`: `1.6.0` -> `1.6.1` * `Repos`: * Fixes In `KeyValueRepo.clear()` of almost all inheritors of `KeyValueRepo` * `Cache`: * All full caches got `skipStartInvalidate` property. By default, this property is `false` and fully caching repos will be automatically invalidated on start of their work ## 0.19.7 * `Versions`: * `Coroutines`: `1.7.1` -> `1.7.2` ## 0.19.6 * `Versions`: * `Coroutines`: `1.6.4` -> `1.7.1` * `Ktor`: `2.3.1` -> `2.3.2` * `Compose`: `1.4.0` -> `1.4.1` ## 0.19.5 * `Repos`: * `Generator`: * Fixes in new type generation ## 0.19.4 * `Versions`: * `Koin`: `3.4.1` -> `3.4.2` * `Android Fragments`: `1.5.7` -> `1.6.0` * `Koin` * `Generator` * Fixes in new generic generator part ## 0.19.3 * `Koin` * `Generator` * New getter methods now available with opportunity to use parameters * Old notation `*Single` and `*Factory` is deprecated since this release. With old will be generated new `single*` and `factory*` notations for new generations * Add opportunity to use generic-oriented koin definitions ## 0.19.2 * `Versions`: * `Ktor`: `2.3.0` -> `2.3.1` * `Koin`: `3.4.0` -> `3.4.1` * `Uuid`: `0.7.0` -> `0.7.1` ## 0.19.1 * `Versions`: * `Korlibs`: `4.0.1` -> `4.0.3` * `Kotlin Poet`: `1.13.2` -> `1.14.0` ## 0.19.0 * `Versions`: * `Korlibs`: `3.4.0` -> `4.0.1` ## 0.18.4 * `Koin`: * New extension `lazyInject` ## 0.18.3 * `Versions`: * `Serialization`: `1.5.0` -> `1.5.1` * `Android Cor Ktx`: `1.10.0` -> `1.10.1` ## 0.18.2 * `Startup`: * Now internal `Json` is fully customizable ## 0.18.1 * `Common`: * Add `MapDiff` * `Coroutines`: * Add `SmartMutex` ## 0.18.0 **ALL PREVIOUSLY DEPRECATED FUNCTIONALITY HAVE BEEN REMOVED** * `Versions`: * `Android Fragments`: `1.5.6` -> `1.5.7` * `Ktor`: * `Server`: * Now it is possible to take query parameters as list * `Repos`: * `Common`: * New `WriteKeyValuesRepo.removeWithValue` * `Cache`: * Rename full caching factories functions to `fullyCached` ## 0.17.8 * `Versions`: * `Ktor`: `2.2.4` -> `2.3.0` ## 0.17.7 * `Versions`: * `Android CoreKtx`: `1.9.0` -> `1.10.0` * `Startup`: * Add support of `linuxX64` and `mingwX64` platforms ## 0.17.6 * `Versions`: * `Kotlin`: `1.8.10` -> `1.8.20` * `KSLog`: `1.0.0` -> `1.1.1` * `Compose`: `1.3.1` -> `1.4.0` * `Koin`: `3.3.2` -> `3.4.0` * `RecyclerView`: `1.2.1` -> `1.3.0` * `Fragment`: `1.5.5` -> `1.5.6` * Experimentally (`!!!`) add `linuxX64` and `mingwX64` targets ## 0.17.5 * `Common`: * Conversations of number primitives with bounds care * `Repos`: * `Common`: * By default, `getAll` for repos will take all the size of repo as page size * New extension for all built-in repos `maxPagePagination` * All the repos got `getAll` functions ## 0.17.4 * `Serialization`: * `Mapper`: * Module inited * `Versions`: * `Compose`: `1.3.1-rc02` -> `1.3.1` ## 0.17.3 * `Common`: * Add `fixed` extensions for `Float` and `Double` * New function `emptyDiff` * Now you may pass custom `comparisonFun` to all `diff` functions ## 0.17.2 * `FSM`: * `DefaultStatesManager.onUpdateContextsConflictResolver` and `DefaultStatesManager.onStartContextsConflictResolver` now return `false` by default ## 0.17.1 * **Hotfix** for absence of jvm dependencies in android modules * `Versions`: * `Ktor`: `2.2.3` -> `2.2.4` ## 0.17.0 * `Versions`: * `Kotlin`: `1.7.20` -> `1.8.10` * `Serialization`: `1.4.1` -> `1.5.0` * `KSLog`: `0.5.4` -> `1.0.0` * `AppCompat`: `1.6.0` -> `1.6.1` ## 0.16.13 * `Repos`: * `Generator`: * Module has been created ## 0.16.12 * `Repos`: * `Exposed`: * `CommonExposedRepo.selectByIds` uses `foldRight` by default instead of raw foreach * `Koin`: * `Generator`: * Module has been created ## 0.16.11 * `LanguageCodes`: * In android and JVM targets now available `toJavaLocale` and from Java `Locale` conversations from/to `IetfLanguageCode` ## 0.16.10 * `Repos`: * `Cache`: * New transformer type: `ReadCRUDFromKeyValueRepo` * New transformer type: `ReadKeyValueFromCRUDRepo` * `Pagination`: * New `paginate` extensions with `reversed` support for `List`/`Set` ## 0.16.9 * `Versions`: * `Koin`: `3.2.2` -> `3.3.2` * `AppCompat`: `1.5.1` -> `1.6.0` * `Ktor`: * `Client` * `HttpResponse.bodyOrNull` now retrieve callback to check if body should be received or null * New extension `HttpResponse.bodyOrNullOnNoContent` ## 0.16.8 * `Versions`: * `Ktor`: `2.2.2` -> `2.2.3` * `Ktor`: * `Client` * Fixes in `HttpClient.uniUpload` * `Server` * Fixes in `PartData.FileItem.download` * `Repos`: * `Cache`: * New type of caches: `FallbackCacheRepo` * Fixes in `Write*` variants of cached repos * New type `ActionWrapper` * New `AutoRecache*` classes for all types of repos as `FallbackCacheRepo`s * `Common`: * New transformations for key-value and key-values vice-verse * Fixes in `FileReadKeyValueRepo` ## 0.16.7 * `Common`: * New extensions `ifTrue`/`ifFalse`/`alsoIfTrue`/`alsoIfFalse`/`letIfTrue`/`letIfFalse` * `Diff` now is serializable * Add `IndexedValue` serializer * `repeatOnFailure` extending: now you may pass any lambda to check if continue to try/do something * `Compose`: * New extension `MutableState.asState` * `Coroutines`: * `Compose`: * All the `Flow` conversations to compose `State`/`MutableState`/`SnapshotStateList`/`List` got several new parameters * `Flow.toMutableState` now is deprecated in favor to `asMutableComposeState` * `Repos`: * `Cache`: * New type `FullCacheRepo` * New type `CommonCacheRepo` * `CacheRepo` got `invalidate` method. It will fully reload `FullCacheRepo` and just clear `CommonCacheRepo` * New extensions `KVCache.actualizeAll` ## 0.16.6 * `Startup`: * `Launcher`: * Improvements in `StartLauncherPlugin#start` methods * Add opportunity to pass second argument on `JVM` platform as log level * `Repos`: * `Ktor`: * `Client`: * All clients repos got opportunity to customize their flows * `Exposed`: * Extensions `eqOrIsNull` and `neqOrIsNotNull` for `Column` ## 0.16.5 * `Versions`: * `Ktor`: `2.2.1` -> `2.2.2` ## 0.16.4 * `Coroutines`: * Create `launchInCurrentThread` ## 0.16.3 * `Startup`: * `Launcher`: * All starting API have been moved into `StartLauncherPlugin` and do not require serialize/deserialize cycle for now ## 0.16.2 * `Versions`: * `Compose`: `1.2.1` -> `1.2.2` * `Startup`: * Module become available on `JS` target ## 0.16.1 * `Coroutines`: * New `runCatchingSafely`/`safelyWithResult` with receivers * `SafeWrapper`: * Module inited ## 0.16.0 * `Versions`: * `Ktor`: `2.1.3` -> `2.2.1` * `Android Fragment`: `1.5.3` -> `1.5.5` ## 0.15.1 * `Startup`: * Inited :) * `Plugin`: * Inited :) * `Launcher`: * Inited :) ## 0.15.0 * `Repos`: * `CRUD`: * `Common`: * New method `ReadCRUDRepo#getIdsByPagination` * `Android`: * `AbstractAndroidCRUDRepo` got new abstract method `toId` * `Exposed`: * `CommonExposedRepo` new abstract property `asId` * `Ktor`: * `Client`: * `KtorReadCRUDRepoClient` now requires `paginationIdType` * `LanguageCodes`: * Updates and fixes in generation * `MimeTypes`: * Updates and fixes in generation ## 0.14.4 * `Common`: * `JVM`: * New extension `downloadToTempFile` * `Ktor`: * `Server`: * Small fix in `handleUniUpload` * `ApplicationCall#uniloadMultipartFile` now uses `uniloadMultipart` * `Common`: * New extension `downloadToTempFile` * `Client`: * New extensions on top of `uniUpload` ## 0.14.3 * `Common`: * New type `Progress` * `Ktor`: * `Client`: * New universal `uniUpload` extension for `HttpClient` * `Server`: * New universal `handleUniUpload` extension for `ApplicationCall` * Add extensions `download` and `downloadToTemporalFile` ## 0.14.2 * `Versions`: * `Exposed`: `0.40.1` -> `0.41.1` ## 0.14.1 * `Versions`: * `Klock`: `3.3.1` -> `3.4.0` * `UUID`: `0.5.0` -> `0.6.0` ## 0.14.0 **ALL DEPRECATIONS HAVE BEEN REMOVED** * `Versions`: * `Kotlin`: `1.7.10` -> `1.7.20` * `Klock`: `3.3.0` -> `3.3.1` * `Compose`: `1.2.0` -> `1.2.1` * `Exposed`: `0.39.2` -> `0.40.1` ## 0.13.2 * `Versions`: * `Klock`: `3.1.0` -> `3.3.0` * `Ktor`: `2.1.2` -> `2.1.3` ## 0.13.1 * `Repos`: * `Exposed`: * `AbstractExposedWriteCRUDRepo#createAndInsertId` now is optional and returns nullable value ## 0.13.0 **ALL DEPRECATIONS HAVE BEEN REMOVED** **A LOT OF KTOR METHODS RELATED TO UnifierRouter/UnifiedRequester HAVE BEEN REMOVED** * `Repos`: * `Exposed`: * `AbstractExposedWriteCRUDRepo` got two new methods: `update` with `it` as `UpdateBuilder` and `createAndInsertId` * Old `update` method has been deprecated and not recommended to override anymore in realizations * Old `insert` method now is `open` instead of `abstract` and can be omitted * `AbstractExposedKeyValueRepo` got two new methods: `update` with `it` as `UpdateBuilder` and `insertKey` * Old `update` method has been deprecated and not recommended to override anymore * Old `insert` method now is `open` instead of `abstract` and can be omitted in realizations ## 0.12.17 * `Versions`: * `JB Compose`: `1.2.0-alpha01-dev774` -> `1.2.0-beta02` * `Ktor`: `2.1.1` -> `2.1.2` * `Koin`: `3.2.0` -> `3.2.2` ## 0.12.16 * `Coroutines`: * `Android`: * Add class `FlowOnHierarchyChangeListener` * Add `ViewGroup#setOnHierarchyChangeListenerRecursively(OnHierarchyChangeListener)` ## 0.12.15 * `Common`: * `applyDiff` will return `Diff` object since this release * `Android`: * New functions/extensions `findViewsByTag` and `findViewsByTagInActivity` * `Coroutines`: * Add `Flow` extensions `flatMap`, `flatMapNotNull` and `flatten` * Add `Flow` extensions `takeNotNull` and `filterNotNull` ## 0.12.14 * `Versions`: * `Android CoreKTX`: `1.8.0` -> `1.9.0` * `Android AppCompat`: `1.4.2` -> `1.5.1` * Android Compile SDK: 32 -> 33 * Android Build Tools: 32.0.0 -> 33.0.0 * `Common`: * `Android`: * Add `argumentOrNull`/`argumentOrThrow` delegates for fragments * `Coroutines`: * Rewrite `awaitFirstWithDeferred` onto `CompletableDeferred` instead of coroutines suspending ## 0.12.13 * `Coroutines`: * Add opportunity to use markers in actors (solution of [#160](https://github.com/InsanusMokrassar/MicroUtils/issues/160)) * `Koin`: * Module inited :) * `Repos`: * `Android`: * Add typealias `KeyValueSPRepo` and opportunity to create shared preferences `KeyValue` repo with `KeyValueStore(...)` (fix of [#155](https://github.com/InsanusMokrassar/MicroUtils/issues/155)) ## 0.12.12 * `Common`: * `Compose`: * `JS`: * Add `SkeletonAnimation` stylesheet ## 0.12.11 * `Repos`: * `Cache`: * Override `KeyValue` cache method `values` ## 0.12.10 * `Repos`: * `Cache`: * Hotfix in key values `get` ## 0.12.9 * `Versions`: * `Klock`: `3.0.0` -> `3.1.0` * `Repos`: * `Cache`: * Fixes in key values cache ## 0.12.8 * `Versions`: * `Ktor`: `2.1.0` -> `2.1.1` * `Compose`: `1.2.0-alpha01-dev764` -> `1.2.0-alpha01-dev774` * `Ktor`: * `Client`: * New extension `HttpClient#bodyOrNull` which returns `null` in case when server responded with `No Content` (204) * `Server`: * New extension `ApplicationCall#respondOrNoContent` which responds `No Content` (204) when passed data is null ## 0.12.7 * `Repos`: * `Cache`: * Force `WriteCRUDCacheRepo` to subscribe on new and updated objects of parent repo * `Pagination`: * New function `changeResultsUnchecked(Pagination)` ## 0.12.6 * `MimeeTypes>`: * Fixed absence of `image/*` in known mime types ## 0.12.5 * `Repos`: * `Exposed`: * Fixes in `paginate` extensions ## 0.12.4 * `Versions`: * `Kotlin`: `1.7.0` -> `1.7.10` * `Compose`: `1.2.0-alpha01-dev755` -> `1.2.0-alpha01-dev764` ## 0.12.3 * `Repos`: * `Exposed`: * Add abstract exposed variants of `KeyValue` and `KeyValues` repos * Add new extension `Query#selectPaginated` ## 0.12.2 * `Versions`: * `Serialization`: `1.4.0-RC` -> `1.4.0` * `Compose`: `1.2.0-alpha01-dev753` -> `1.2.0-alpha01-dev755` ## 0.12.1 * `Versions`: * `Ktor`: `2.0.3` -> `2.1.0` ## 0.12.0 **OLD DEPRECATIONS HAVE BEEN REMOVED** **MINIMAL ANDROID API HAS BEEN ENLARGED UP TO API 21 (Android 5.0)** * `Versions` * `Kotlin`: `1.6.21` -> `1.7.0` * `Coroutines`: `1.6.3` -> `1.6.4` * `Exposed`: `0.38.2` -> `0.39.2` * `Compose`: `1.2.0-alpha01-dev729` -> `1.2.0-alpha01-dev753` * `Klock`: `2.7.0` -> `3.0.0` * `uuid`: `0.4.1` -> `0.5.0` * `Android Core KTX`: `1.7.0` -> `1.8.0` * `Android AppCompat`: `1.4.1` -> `1.4.2` * `Ktor`: * All previously standard functions related to work with binary data by default have been deprecated ## 0.11.14 * `Pagination`: * `PaginationResult` got new field `objectsNumber` which by default is a times between `pagesNumber` and `size` ## 0.11.13 * `Versions`: * `Coroutines`: `1.6.3` -> `1.6.4` * `Compose`: `1.2.0-alpha01-dev629` -> `1.2.0-alpha01-dev731` ## 0.11.12 * `Repos`: * `Common`: * `JVM`: * Fixes in `ReadFileKeyValueRepo` methods (`values`/`keys`) ## 0.11.11 * `Crypto`: * `hmacSha256` has been deprecated * `Ktor`: * `Client`: * `BodyPair` has been deprecated * `Repos`: * `Cache`: * New interface `CacheRepo` * New interface `FullCacheRepo` * `actualize*` methods inside of full cache repos now open for overriding ## 0.11.10 * `Repos`: * `Cache`: * `KVCache` has been replaced to the package `dev.inmo.micro_utils.repos.cache` * `SimpleKVCache` has been replaced to the package `dev.inmo.micro_utils.repos.cache` * New `KVCache` subtype - `FullKVCache` * Add `Full*` variants of standard repos * Add `cached`/`caching` (for write repos) extensions for all standard types of repos ## 0.11.9 * `Versions` * `Coroutines`: `1.6.1` -> `1.6.3` * `Ktor`: `2.0.2` -> `2.0.3` * `Compose`: `1.2.0-alpha01-dev686` -> `1.2.0-alpha01-dev729` ## 0.11.8 * `Repos`: * `Common`: * Fixes in `FileKeyValueRepo` ## 0.11.7 * `Common`: * New abstractions `SimpleMapper` and `SimpleSuspendableMapper` * `Repos`: * `Common`: * Add mappers for `CRUDRepo` ## 0.11.6 * `FSM`: * `Common` * Several fixes related to the jobs handling ## 0.11.5 * `Coroutines`: * `Compose`: * Add extension `StateFlow#asMutableComposeListState` and `StateFlow#asComposeList` * Add extension `StateFlow#asMutableComposeState`/`StateFlow#asComposeState` ## 0.11.4 **THIS VERSION HAS BEEN BROKEN, DO NOT USE IT** ## 0.11.3 * `Ktor`: * Support of `WebSockets` has been improved * `Client`: * New extensions: `HttpClient#openBaseWebSocketFlow`, `HttpClient#openWebSocketFlow`, `HttpClient#openSecureWebSocketFlow` ## 0.11.2 * `Ktor`: * Support of `WebSockets` has been improved and added fixes inside of clients ## 0.11.1 * `Repos` * `Ktor` * In `configureReadKeyValueRepoRoutes` and `configureReadKeyValuesRepoRoutes` configurators fixed requiring of `reversed` property ## 0.11.0 * `Versions` * `UUID`: `0.4.0` -> `0.4.1` * `Ktor` * `Client`: * New extension fun `HttpResponse#throwOnUnsuccess` * All old functions, classes and extensions has been rewritten with new ktor-way with types info and keeping `ContentNegotiation` in mind * `Server`: * All old functions, classes and extensions has been rewritten with new ktor-way with types info and keeping `ContentNegotiation` in mind * `Repos` * `Ktor`: * Fully rewritten work with all declared repositories * All old functions, classes and extensions has been rewritten with new ktor-way with types info and keeping `ContentNegotiation` in mind ## 0.10.8 * `Common` * Add `Element.isOverflow*` extension properties ## 0.10.7 * `Pagination`: * Now it is possible to use `doForAll*` and `getForAll` functions in non suspend places ## 0.10.6 * `Versions` * `Ktor`: `2.0.1` -> `2.0.2` * `Common` * `JS`: * Add `ResizeObserver` functionality ## 0.10.5 * `Versions` * `Compose`: `1.2.0-alpha01-dev683` -> `1.2.0-alpha01-dev686` * `Repos` * `Android`: * New function `SharedPreferencesKeyValueRepo` * `FSM` * Add `StateHandlingErrorHandler` and opportunity to handle states handling errors ## 0.10.4 * `Versions`: * `Serialization`: `1.3.2` -> `1.3.3` ## 0.10.3 * `Versions`: * `Compose`: `1.2.0-alpha01-dev682` -> `1.2.0-alpha01-dev683` * `Coroutines`: * Fixes in `AccumulatorFlow` ## 0.10.2 * `Versions`: * `Compose`: `1.2.0-alpha01-dev675` -> `1.2.0-alpha01-dev682` ## 0.10.1 * `Versions`: * `Ktor`: `2.0.0` -> `2.0.1` * `Crypto`: * Add `hmacSha256` * Add `hex` ## 0.10.0 * `Versions`: * `Kotlin`: `1.6.10` -> `1.6.21` * `Compose`: `1.1.1` -> `1.2.0-alpha01-dev675` * `Exposed`: `0.37.3` -> `0.38.2` * `Ktor`: `1.6.8` -> `2.0.0` * `Dokka`: `1.6.10` -> `1.6.21` ## 0.9.24 * `Ktor`: * `Common`: * New extension fun `MPPFile#input` ## 0.9.23 * `Repos`: * `Exposed`: * New property `ExposedRepo#selectAll` to retrieve all the rows in the table ## 0.9.22 * `Ktor`: * `Server`: * Now `createKtorServer` fun is fully customizable ## 0.9.21 * `Repos`: * `Exposed`: * fixes in `AbstractExposedWriteCRUDRepo` ## 0.9.20 * `Repos`: * `Common`: * Fixes in `OneToManyAndroidRepo` * New `CursorIterator` ## 0.9.19 * `Versions`: * `Coroutines`: `1.6.0` -> `1.6.1` * `Repos`: * `Exposed`: * Fixes in `ExposedStandardVersionsRepoProxy` ## 0.9.18 * `Common` * New extensions for `Element`: `Element#onActionOutside` and `Element#onClickOutside` ## 0.9.17 * `Common`: * New extensions `Element#onVisibilityChanged`, `Element#onVisible` and `Element#onInvisible` * `Coroutines`: * New extension `Element.visibilityFlow()` * `FSM`: * Now it is possible to resolve conflicts on `startChain` ## 0.9.16 * `Versions`: * `Klock`: `2.6.3` -> `2.7.0` * `Common`: * New extension `Node#onRemoved` * `Compose`: * New extension `Composition#linkWithRoot` for removing of composition with root element * `Coroutines`: * `Compose`: * New function `renderComposableAndLinkToContextAndRoot` with linking of composition to root element ## 0.9.15 * `FSM`: * Rename `DefaultUpdatableStatesMachine#compare` to `DefaultUpdatableStatesMachine#shouldReplaceJob` * `DefaultStatesManager` now is extendable * `DefaultStatesMachine` will stop all jobs of states which was removed from `statesManager` ## 0.9.14 * `Versions`: * `Klock`: `2.6.2` -> `2.6.3` * `Ktor`: `1.6.7` -> `1.6.8` * `Ktor`: * Add temporal files uploading functionality (for clients to upload and for server to receive) ## 0.9.13 * `Versions`: * `Compose`: `1.1.0` -> `1.1.1` ## 0.9.12 * `Common`: * `JS`: * New function `openLink` * New function `selectFile` * New function `triggerDownloadFile` * `Compose`: * Created :) * `Common`: * `DefaultDisposableEffectResult` as a default realization of `DisposableEffectResult` * `JS`: * `openLink` on top of `openLink` with `String` target from common * `Coroutines`: * `Compose`: * `Common`: * New extension `Flow.toMutableState` * New extension `StateFlow.toMutableState` * `JS`: * New function `selectFileOrThrow` on top of `selectFile` from `common` * New function `selectFileOrNull` on top of `selectFile` from `common` ## 0.9.11 * `Versions`: * `Klock`: `2.6.1` -> `2.6.2` * `Coroutines`: * `Compose`: * Created :) * New extensions and function: * `Composition#linkWithJob` * `Composition#linkWithContext` * `renderComposableAndLinkToContext` ## 0.9.10 * `Versions`: * `Klock`: `2.5.2` -> `2.6.1` * Ktor: * Client: * New function `UnifiedRequester#createStandardWebsocketFlow` without `checkReconnection` arg * Server: * Now it is possible to filter data in `Route#includeWebsocketHandling` * Callback in `Route#includeWebsocketHandling` and dependent methods is `suspend` since now * Add `URLProtocol` support in `Route#includeWebsocketHandling` and dependent methods ## 0.9.9 * `Versions`: * `Klock`: `2.5.1` -> `2.5.2` * `Common`: * Add new diff tool - `applyDiff` * Implementation of `IntersectionObserver` in JS part (copypaste of [this](https://youtrack.jetbrains.com/issue/KT-43157#focus=Comments-27-4498582.0-0) comment) ## 0.9.8 * `Versions`: * `Exposed`: `0.37.2` -> `0.37.3` * `Klock`: `2.4.13` -> `2.5.1` * `AppCompat`: `1.4.0` -> `1.4.1` ## 0.9.7 * `Repos`: * `Exposed`: * Fix in `ExposedOneToManyKeyValueRepo` - now it will not use `insertIgnore` * `Ktor`: * `Server`: * `Route#includeWebsocketHandling` now will check that `WebSockets` feature and install it if not ## 0.9.6 * `Repos`: * `Exposed`: * Fix in `ExposedOneToManyKeyValueRepo` - now it will not use `deleteIgnoreWhere` ## 0.9.5 * `Versions`: * `Klock`: `2.4.12` -> `2.4.13` ## 0.9.4 * `Pagination`: * `Common`: * Add several `optionallyReverse` functions * `Common`: * Changes in `Either`: * Now `Either` uses `optionalT1` and `optionalT2` as main properties * `Either#t1` and `Either#t2` are deprecated * New extensions `Either#mapOnFirst` and `Either#mapOnSecond` ## 0.9.3 * `Versions`: * `UUID`: `0.3.1` -> `0.4.0` ## 0.9.2 * `Versions`: * `Klock`: `2.4.10` -> `2.4.12` ## 0.9.1 * `Repos`: * `Exposed`: * Default realizations of standard interfaces for exposed DB are using public fields for now: * `ExposedReadKeyValueRepo` * `ExposedReadOneToManyKeyValueRepo` * `ExposedStandardVersionsRepoProxy` * New typealiases for one to many exposed realizations: * `ExposedReadKeyValuesRepo` * `ExposedKeyValuesRepo` ## 0.9.0 * `Versions`: * `Kotlin`: `1.5.31` -> `1.6.10` * `Coroutines`: `1.5.2` -> `1.6.0` * `Serialization`: `1.3.1` -> `1.3.2` * `Exposed`: `0.36.2` -> `0.37.2` * `Ktor`: `1.6.5` -> `1.6.7` * `Klock`: `2.4.8` -> `2.4.10` ## 0.8.9 * `Ktor`: * `Server`: * Fixes in `uniloadMultipart` * `Client`: * Fixes in `unimultipart` * `FSM`: * Fixes in `DefaultUpdatableStatesMachine` ## 0.8.8 * `Versions`: * `AppCompat`: `1.3.1` -> `1.4.0` * Android Compile SDK: `31.0.0` -> `32.0.0` * `FSM`: * `DefaultStatesMachine` now is extendable * New type `UpdatableStatesMachine` with default realization`DefaultUpdatableStatesMachine` ## 0.8.7 * `Ktor`: * `Client`: * `UnifiedRequester` now have no private fields * Add preview work with multipart * `Server` * `UnifiedRouter` now have no private fields * Add preview work with multipart ## 0.8.6 * `Common`: * `Either` extensions `onFirst` and `onSecond` now accept not `crossinline` callbacks * All `joinTo` now accept not `crossinline` callbacks ## 0.8.5 * `Common`: * `repeatOnFailure` ## 0.8.4 * `Ktor`: * `Server`: * Several new `createKtorServer` ## 0.8.3 * `Common`: * Ranges intersection functionality * New type `Optional` * `Pagination`: * `Pagination` now extends `ClosedRange` * `Pagination` intersection functionality ## 0.8.2 * `Versions`: * `Klock`: `2.4.7` -> `2.4.8` * `Serialization`: `1.3.0` -> `1.3.1` * `FSM`: * Now it is possible to pass any `CheckableHandlerHolder` in `FSMBuilder` * Now `StatesMachine` works with `CheckableHandlerHolder` instead of `CustomizableHandlerHolder` ## 0.8.1 * `Versions`: * `Exposed`: `0.36.1` -> `0.36.2` * `Core KTX`: `1.6.0` -> `1.7.0` ## 0.8.0 * `Versions`: * `Klock`: `2.4.6` -> `2.4.7` * `Ktor`: `1.6.4` -> `1.6.5` * `Exposed`: `0.35.3` -> `0.36.1` * `Common`: * Type `Either` got its own serializer * `FSM`: * `Common`: * Full rework of FSM: * Now it is more flexible for checking of handler opportunity to handle state * Now machine and states managers are type-oriented * `StateHandlerHolder` has been renamed to `CheckableHandlerHolder` * Add opportunity for comfortable adding default state handler ## 0.7.4 * `Common`: * New type `Either` * `Serialization`: * `TypedSerializer` * New factory fun which accept vararg pairs of type and its serializer * `Repos`: * `Common` (`Android`): * `AbstractMutableAndroidCRUDRepo` flows now will have extra buffer capacity instead of reply. It means that android crud repo _WILL NOT_ send previous events to the * `Exposed`: * New parameter `AbstractExposedWriteCRUDRepo#replyCacheInFlows` * KeyValue realization `ExposedKeyValueRepo` properties `_onNewValue` and `_onValueRemoved` now are available in inheritors * `Pagination`: * `Common`: * New types `getAllBy*` for current, next and custom paging ## 0.7.3 * `Versions`: * `Exposed`: `0.35.2` -> `0.35.3` ## 0.7.2 * `Versions`: * `Klock`: `2.4.5` -> `2.4.6` ## 0.7.1 * `Versions`: * `Klock`: `2.4.3` -> `2.4.5` * `Exposed`: `0.35.1` -> `0.35.2` * `Coroutines`: * `Common`: * New `Flow` - `AccumulatorFlow` * `FSM`: * `Common`: * `InMemoryStatesManager` has been replaced * `StatesMachine` became an interface * New manager `DefaultStatesManager` with `DefaultStatesManagerRepo` for abstraction of manager and storing of data info ## 0.7.0 **THIS VERSION HAS MIGRATED FROM KOTLINX DATETIME TO KORLIBS KLOCK. CAREFUL** * `Versions` * `kotlinx.datetime` -> `Klock` ## 0.6.0 DO NOT RECOMMENDED **THIS VERSION HAS MIGRATED FROM KORLIBS KLOCK TO KOTLINX DATETIME. CAREFUL** **ALL DEPRECATION HAVE BEEN REMOVED** * `Versions` * `Klock` -> `kotlinx.datetime` ## 0.5.31 * `Versions`: * `Klock`: `2.4.2` -> `2.4.3` * `Ktor`: `1.6.3` -> `1.6.4` ## 0.5.30 * `Versions`: * `Serialization`: `1.2.2` -> `1.3.0` ## 0.5.29 * `Versions`: * `Exposed`: `0.34.2` -> `0.35.1` ## 0.5.28 * `Versions`: * `Kotlin`: `1.5.30` -> `1.5.31` * `Klock`: `2.4.1` -> `2.4.2` ## 0.5.27 * `Versions`: * `Exposed`: `0.34.1` -> `0.34.2` ## 0.5.26 * `Repos`: * `InMemory`: * `MapCRUDRepo`s and `MapKeyValueRepo`s got `protected` methods and properties instead of private ## 0.5.25 * `Versions`: * `UUID`: `0.3.0` -> `0.3.1` * `Common`: * New property `MPPFile#withoutSlashAtTheEnd` * Extension `clamp` has been deprecated * New extension `Iterable#diff` * `Serialization`: * New operators `TypedSerializer#plusAssign` and `TypedSerializer#minusAssign` ## 0.5.24 * `Versions`: * `Coroutines`: `1.5.1` -> `1.5.2` * `Klock`: `2.3.4` -> `2.4.1` * `Coroutines`: * New function `CoroutineScope` with safely exceptions handler as second parameter ## 0.5.23 * `Versions`: * `Exposed`: `0.33.1` -> `0.34.1` * `Common`: * New extensions `Iterable#joinTo` and `Array#joinTo` ## 0.5.22 * `Versions` * `Kotlin`: `1.5.21` -> `1.5.30` * `Klock`: `2.3.2` -> `2.3.4` * `AppCompat`: `1.3.0` -> `1.3.1` * `Ktor`: `1.6.2` -> `1.6.3` ## 0.5.21 * `Versions` * `Klock`: `2.3.1` -> `2.3.2` * `Serialization` * `Typed Serializer`: * `TypedSerializer` Descriptor serial name has been fixed ## 0.5.20 * `Repos`: * `Common` * `Android`: * `*OrNull` analogs of `Cursor.get*(String)` extensions have been added * Extensions `Cursor.getFloat` and `Cursor.getFloatOrNull` have been added ## 0.5.19 * `LanguageCode`: * `IetfLanguageCode` became as sealed class * `IetfLanguageCode` now override `toString` and returns its code ## 0.5.18 * `Versions` * `Kotlin Exposed`: `0.32.1` -> `0.33.1` * `LanguageCode`: * Module has been created ## 0.5.17 **SINCE THIS UPDATE JS PARTS WILL BE COMPILED WITH IR COMPILER ONLY** * `Versions` * `Kotlin`: `1.5.20` -> `1.5.21` * `Ktor`: `1.6.1` -> `1.6.2` * `Klock`: `2.2.0` -> `2.3.1` * `CryptoJS`: `4.0.0` -> `4.1.1` ## 0.5.16 * `Versions` * `Coroutines`: `1.5.0` -> `1.5.1` * `Serialization`: `1.2.1` -> `1.2.2` * `Ktor`: `1.6.0` -> `1.6.1` * `Klock`: `2.1.2` -> `2.2.0` * `Core KTX`: `1.5.0` -> `1.6.0` ## 0.5.15 HOTFIX FOR 0.5.14 * `Coroutines` * Fixes in `subscribeAsync` ## 0.5.14 NOT RECOMMENDED * `Versions` * `Kotlin`: `1.5.10` -> `1.5.20` * `Coroutines` * `subscribeSafelyWithoutExceptions` got new parameter `onException` by analogue with `safelyWithoutExceptions` * New extensions `Flow#subscribeAsync` and subsequent analogs of `subscribe` with opportunity to set up custom marker ## 0.5.13 * `Common`: * Add functionality for multiplatform working with files: * Main class for files `MPPFile` * Inline class for filenames work encapsulation `FileName` * `FSM` * Module inited and in preview state ## 0.5.12 * `Common`: * `Android` * Extension `View#changeVisibility` has been fixed * `Android` * `RecyclerView` * Default adapter got `dataCountFlow` property * New subtype of adapter based on `StateFlow`: `StateFlowBasedRecyclerViewAdapter` ## 0.5.11 * `Repos`: * `Common`: * Fixes in `WriteOneToManyRepo#add` * `Exposed`: * Fixes in `ExposedOneToManyKeyValueRepo#add` ## 0.5.10 * `Versions` * `Core KTX`: `1.3.2` -> `1.5.0` * `AndroidX Recycler`: `1.2.0` -> `1.2.1` * `AppCompat`: `1.2.0` -> `1.3.0` * `Android` * `RecyclerView`: * `data` of `RecyclerViewAdapter` became an abstract field * New function `RecyclerViewAdapter` * `Common`: * New extension `View#changeVisibility` * `Repos`: * `Common`: * `WriteOneToManyRepo` got new function `clearWithValue` * `Android`: * New extension `SQLiteDatabase#selectDistinct` * Fixes in `OneToManyAndroidRepo` * `Ktor` * `Server` * All elements in configurators became a `fun interface` * `Pagination` * New function `doForAllWithCurrentPaging` ## 0.5.9 * `Repos` * `Common` * `OneToManyAndroidRepo` got new primary constructor ## 0.5.8 * `Common`: * New extension `Iterable#firstNotNull` * `Coroutines` * New extension `Flow#firstNotNull` * New extensions `CoroutineContext#LinkedSupervisorJob`, `CoroutineScope#LinkedSupervisorJob` and `CoroutineScope#LinkedSupervisorScope` ## 0.5.7 * `Pagination` * `Ktor` * `Server` * Fixes in extension `extractPagination` * `Repos` * `Cache` * All standard cache repos have been separated to read and read/write repos ## 0.5.6 * `Versions` * `Exposed`: `0.31.1` -> `0.32.1` * `Coroutines` * `JVM` * `launchSynchronously` and subsequent functions got improved mechanism * New method `safelyWithResult` ## 0.5.5 * `Versions` * `Ktor`: `1.5.4` -> `1.6.0` ## 0.5.4 * `Versions`: * `Klock`: `2.1.0` -> `2.1.2` ## 0.5.3 * `Versions`: * `Kotlin`: `1.5.0` -> `1.5.10` * `Coroutines`: * Extensions `doInUI` and `doInDefault` were replaced in common and available on any supported platform * Extension `doInIO` replaced into `jvm` and available on any `JVM` platform * Old extension `safelyWithouException` without `onException` has been replaced by its copy with `onException` and default value * New value `defaultSafelyWithoutExceptionHandlerWithNull` which is used in all `*WithoutExceptions` by default * Analogs of `launch` and `async` for `safely` and `safelyWithoutExceptions` were added * Analogs of `runCatching` for `safely` and `safelyWithoutExceptions` were added ## 0.5.2 * `Ktor`: * `Client`: * Fixes in `UnifiedRequester` ## 0.5.1 * `Versions`: * `Kotlin Serialization`: `1.2.0` -> `1.2.1` ## 0.5.0 **Notice**: This version is still depend on Kotlin Exposed 0.31.1. That means that this version may work improperly in modules based on Kotlin Exposed * `Versions`: * `Kotlin Exposed`: `0.30.2` -> `0.31.1` * `Kotlin Coroutines`: `1.4.3` -> `1.5.0` * `RecyclerView`: `1.1.0` -> `1.2.0` * `Ktor`: `1.5.3` -> `1.5.4` * `Klock`: `2.0.7` -> `2.1.0` * `UUID`: `0.2.4` -> `0.3.0` * **ALL DEPRECATIONS WERE REMOVED** * `Android`: * `Alerts`: * `RecyclerView`: * Classes `ActionViewHolder` and `ActionsRecyclerViewAdapter` became public * `Coroutines`: * New extension and function `doSynchronously` which are the same as `launchSynchronously` * New extensions `doInDefault` and `doInIO` ## 0.4.36 * All `Android` targets inside common mpp modules now includes JVM code ## 0.4.35 * `Versions`: * `Kotlin Exposed`: `0.30.1` -> `0.30.2` * `Serialization`: * `TypedSerializer`: * Project has been inited ## 0.4.34 * `Versions`: * `uuid`: `0.2.3` -> `0.2.4` * `Repos`: * `AbstractExposedCRUDRepo` now implements `StandardCRUDRepo` * `AbstractMutableAndroidCRUDRepo` now implements `StandardCRUDRepo` ## 0.4.33 * `Versions`: * `Ktor`: `1.5.2` -> `1.5.3` * `Coroutines` * Add `WeakJob` workaround: * `CoroutineScope#weakLaunch` * `CoroutineScope#weakAsync` ## 0.4.32 * `Versions`: * `Kotlin Exposed`: `0.29.1` -> `0.30.1` ## 0.4.31 * `Versions`: * `Kotlin`: `1.4.31` -> `1.4.32` * `Pagination`: * New extensions `PaginationResult.changeResultsUnchecked` and `PaginationResult.changeResults` for mapping results with the same parameters, but different data * Extension `PaginationResult.thisPageIfNotEmpty` now is typed and will return `PaginationResult?` with the same generic type as income `PaginationResult` * New extension `PaginationResult.currentPageIfNotEmpty` - shortcut for `PaginationResult.thisPageIfNotEmpty` * New common functions. They were created as replacements for currently available for more comfortable work with repos pagination: * `doForAll` * `doForAllWithNextPaging` * `doForAllWithCurrentPaging` * `getAll` * `getAllWithNextPaging` * `getAllWithCurrentPaging` * `Coroutines`: * Rewrite `subscribeSafelyWithoutExceptions` * Now `subscribeSafelyWithoutExceptions` will use default handler instead of skipping * New extension `subscribeSafelySkippingExceptions` * `Repos` * New subproject `repos.cache` - this subproject will contain repos with data caching mechanisms * Most old `doForAll` methods have been deprecated ## 0.4.30 * `Versions`: * `Klock`: `2.0.6` -> `2.0.7` * `Pagination`: * New variable `defaultPaginationPageSize` has been added to be able to change default pagination size * Add new value `firstPageWithOneElementPagination` ## 0.4.29 * `Versions`: * `Coroutines`: `1.4.2` -> `1.4.3` * `Repos`: * `Common` * `Android`: * New `blockingReadableTransaction`/`blockingWritableTransaction` * Android databases realizations now use blocking transactions where it is possible * Several improvements in transactions work ## 0.4.28 * `Versions`: * `Kotlin`: `1.4.30` -> `1.4.31` * `Ktor`: `1.5.1` -> `1.5.2` * `Coroutines` * Add `createActionsActor`/`createSafeActionsActor` and `doWithSuspending` ## 0.4.27 * `Repos` * `Exposed` * Fix in `AbstractExposedWriteCRUDRepo` ## 0.4.26 * `Versions`: * `Serialization`: `1.0.1` -> `1.1.0` ## 0.4.25 * `Matrix`: * Subproject has been created ## 0.4.24 * `Versions`: * `Kotlin`: `1.4.21` -> `1.4.30` * `Klock`: `2.0.4` -> `2.0.6` * `Coroutines`: * New class `DoWithFirstBuilder` * Several new extensions like `firstOf`/`first`/`invokeOnFirstOf` ## 0.4.23 * `Versions`: * `Ktor`: `1.5.0` -> `1.5.1` * `Serialization` * `Base64` * New serializer `Base64BytesToFromStringSerializer` has been added ## 0.4.22 * `Versions`: * `Exposed`: `0.28.1` -> `0.29.1` * `Klock`: `2.0.2` -> `2.0.4` ## 0.4.21 * `Common` * `JS` * Extension `DataView#toByteArray` has been added * Extension `ArrayBuffer#toByteArray` has been added * Extension `ByteArray#toDataView` has been added * Extension `ByteArray#toArrayBuffer` has been added * `Coroutines` * `JS` * Extension `Blob#toByteArray` has been added * `Crypto` * Subproject has been created * `Serialization` * `Base64` * Currently, it is not depended on `common` project and use `crypto` instead ## 0.4.20 * `Serialization` * `Encapsulator`: * Has been created ## 0.4.19 * `Coroutines`: * New extension `Iterable#awaitFirstWithDeferred` has been added to identify which of `Deferred`s was normally completed * New extensions `Iterable>#invokeOnFirst` and `Iterable>.invokeFirstOf` have been added ## 0.4.18 * `Coroutines`: * New extension `Iterable#awaitFirst` has been added * `Serialization` * `Base 64` * New `Base64ByteArraySerializer` has been added ## 0.4.17 * `Common` * Functionality for decode/encode base 64 to/from `ByteArray`/`String` have been added * `Serialization` * `Base 64` * Project has been initiated ## 0.4.16 * `Coroutines`: * `safely`: * New `safelyWithoutExceptions` function may accept `onException` parameter with nullable result * Old `safelyWithoutExceptions` now using `defaultSafelyWithoutExceptionHandler` to handle exceptions "like in `safely`", but it is expected that `defaultSafelyWithoutExceptionHandler` will not throw any exception ## 0.4.15 * `Coroutines`: * `safely`: * `SafelyExceptionHandlerKey` has been deprecated * `SafelyExceptionHandler` has been deprecated * `ContextSafelyExceptionHandlerKey` has been added * `ContextSafelyExceptionHandler` has been added * `safelyWithContextExceptionHandler` has been added ## 0.4.14 * `Versions`: * `Kotlin`: `1.4.20` -> `1.4.21` * `Ktor`: `1.4.3` -> `1.5.0` * `Klock`: `2.0.1` -> `2.0.2` * `Coroutines`: * Add global variable `defaultSafelyExceptionHandler` * Add `SafelyExceptionHandlerKey` and `SafelyExceptionHandler` classes to be able to overwrite `defaultSafelyExceptionHandler` using context of coroutine ## 0.4.13 * `Common` * `Android` * Add expand/collapse functionality for horizontal expand/collapse ## 0.4.12 * `Coroutines` * `JVM` * Update `launchSynchronously` signature * `Selector` * Project created ## 0.4.11 * `Common` * Add `clamp` function ## 0.4.10 * `Versions`: * `Klock`: `2.0.0` -> `2.0.1` * `Repo` * Repo `WriteStandardKeyValueRepo` got new method `unsetWithValues` ## 0.4.9 * `Versions`: * `Ktor`: `1.4.2` -> `1.4.3` * `Coroutines`: * `launchSynchronously` has been added in JVM * `Repo` * `Common` * In repos different usages of `BroadcastChannel`s has been replaced with `MutableSharedFlow` * `Exposed` * `asObject` open fun has been added in CRUD realization ## 0.4.8 * `Versions`: * `Coroutines`: `1.4.1` -> `1.4.2` * `UUID`: `0.2.2` -> `0.2.3` * `Pagination` * Add `PaginatedIterable` and `PaginatedIterator` ## 0.4.7 * `Ktor` * `Client` * New class `UnifiedRequester` * `Server` * New class `UnifiedRouter` * `Repos` * `Ktor` * `Client` * Rewriting of all clients on new `UnifiedRequester` * `Server` * Rewriting of all clients on new `UnifiedRouter` ## 0.4.6 * `Common` * New annotation `Warning` has been added * `Pagination` * `Common` * `Pagination` got new extension: `Pagination#isFirstPage` * `Coroutines`: * New extension `FlowCollector#invoke` has been added * `Repos` * `Common` * `JVM` (and `Android` since `Android API 26`): * `FileStandardKeyValueRepo` has been added * Add several `typealias`es for each type of repos ## 0.4.5 * `Android` * `Alerts` * `Common` * Project has been created * `RecyclerView` * Project has been created * `Common` * Annotation `PreviewFeature` has been added * `Android` * Added tools to work with visibility in more comfortable way * Added tools to work with disabled/enabled state in more comfortable way * Added tools to work with expanded/collapsed state in more comfortable way (in preview mode) ## 0.4.4 * `Versions`: * `Klock`: `1.12.1` -> `2.0.0` * `Commons`: * Update left items functionality to include work with `GridLayoutManager` * `Repos`: * Add interface `VersionsRepo` * Add default realization of `VersionsRepo` named `StandardVersionsRepo` which use `StandardVersionsRepoProxy` to get access to some end-store * Add default realization of `StandardVersionsRepoProxy` based on `KeyValue` repos * Add realizations of `StandardVersionsRepoProxy` for exposed and android (`SQL` and `SharedPreferences`) * `Commons`: * In Android fully reworked transactions functions * Now `DatabaseCoroutineContext` is a shortcut for `Dispatchers.IO` ## 0.4.3 * `Versions`: * `Kotlin`: `1.4.10` -> `1.4.20` * `Common`: * Two new extensions for Android: * `Resources#getSp` * `Resources#getDp` ## 0.4.2 * `Repos`: * Add `WriteOneToManyKeyValueRepo#set` function and extensions ## 0.4.1 * `Repos`: * Fixed error in `ExposedKeyValueRepo` related to negative size of shared flow * Fixed error in `ExposedKeyValueRepo` related to avoiding of table initiation ## 0.4.0 * `Repos`: * `ReadOneToManyKeyValueRepo` got `keys` method with value parameter * All implementations inside of this library has been updated * `ReadStandardKeyValueRepo` got `keys` method with value parameter * All implementations inside of this library has been updated * New extensions `withMapper` ## 0.3.3 * `Coroutines`: * New extension `Flow#plus` ## 0.3.2 * `Versions`: * `Coroutines`: `1.4.1` -> `1.4.2` * `Repos`: * `Common`: * New inline function `mapper` for simplier creating of `MapperRepo` objects * Extensions `withMapper` for keyvalue repos and onetomany repos ## 0.3.1 **ANDROID PACKAGES** * `Android`: * `RecyclerView`: * Library has been created * `Common` * Now available package `dev.inmo:micro_utils.common-android` * `Coroutines` * Now available package `dev.inmo:micro_utils.coroutines-android` * `Ktor` * `Common` * Now available package `dev.inmo:micro_utils.ktor.common-android` * `Client` * Now available package `dev.inmo:micro_utils.ktor.client-android` * `MimeTypes` * Now available package `dev.inmo:micro_utils.mime_types-android` * `Pagination` * `Common` * Now available package `dev.inmo:micro_utils.pagination.common-android` * `Ktor` * `Common` * Now available package `dev.inmo:micro_utils.pagination.ktor.common-android` * `Repos` * `Common` * Now available package `dev.inmo:micro_utils.repos.common-android` * Now it is possible to use default realizations of repos abstractions natively on android * `Inmemory` * Now available package `dev.inmo:micro_utils.repos.inmemory-android` * `Ktor` * `Common` * Now available package `dev.inmo:micro_utils.repos.ktor.common-android` * `Common` * Now available package `dev.inmo:micro_utils.repos.ktor.client-android` ## 0.3.0 All deprecations has been removed * `Repos`: * `Common`: * `KeyValue` and `OneToMany` repos lost their deprecated methods * `OneToMany` write repos got additional extensions for mutation of repo * `KeyValue` write repos got additional extensions for mutation of repo * New interface `MapperRepo` and new classes which are using this: * `KeyValue` * `MapperReadStandardKeyValueRepo` * `MapperWriteStandardKeyValueRepo` * `MapperStandardKeyValueRepo` * `OneToMany` * `MapperReadOneToManyKeyValueRepo` * `MapperWriteOneToManyKeyValueRepo` * `MapperOneToManyKeyValueRepo` * `Exposed`: * CRUD realizations replaced their channels to shared flows ## 0.2.7 * `Versions`: * `Coroutines`: `1.4.0` -> `1.4.1` * `Repos`: * `WriteStandardKeyValueRepo` got new methods `set` and `unset` with collections * All standard realizations of repos got collections methods realizations * All old usages of `BroadcastFlow` and `BroadcastChannel` has been replaced with `MutableSharedFlow` * `Ktor`: * `Server`: * Fixed incorrect answer for `keyvalue` ## 0.2.6 * `Pagination` * Fixes in function `List#paginate` * Extension property `Pagination#lastIndexExclusive` ## 0.2.5 * `Coroutines` * Function `safelyWithoutExceptions` * Extension `CoroutineScope#safeActor` ## 0.2.4 * `Versions` * `Serialization`: `1.0.0` -> `1.0.1` * `Common` * Full rework of `DiffUtils` * Data class `Diff` has been added * Extension `Iterable#calculateDiff` has been added * Extension `Iterable#calculateStrictDiff` as replacement for `Iterable#calculateDiff` with `strictComparison` mode enabled * Functions `Diff` (as analog of `Iterable#calculateDiff`) and `StrictDiff` (as analog of `Iterable#calculateStrictDiff`) * `Coroutines` * `BroadcastFlow` now is deprecated * `BroadcastStateFlow` now is deprecated * New extensions for `Flow`s: * `Flow#subscribe` * `Flow#subscribeSafely` * `Flow#subscribeSafelyWithoutExceptions` ## 0.2.3 * `Versions` * `Coroutines`: `1.3.9` -> `1.4.0` * `Exposed`: `0.27.1` -> `0.28.1` * `Common` * `K/JS` * Add several extensions for `Element` objects to detect that object is on screen viewport * Add several extensions for `Element` objects to detect object visibility * `Coroutines` * `BroadcastStateFlow` now use different strategy for getting of state and implements `replayCache` ## 0.2.2 * `Repos` * `Common` * Several new methods `ReadOneToManyKeyValueRepo#getAll` * Several new method `WriteOneToManyKeyValueRepo#add` and several extensions * Several new method `WriteOneToManyKeyValueRepo#remove` and several extensions ## 0.2.1 * `Pagination` * `Common`: * Extension `Pagination#reverse` has been added * Factory `PaginationByIndexes` * Shortcut `calculatePagesNumber` with reversed parameters * Value `emptyPagination` for empty `SimplePagination` cases ## 0.2.0 * `Repos` * `Exposed` * Now this project depend on `micro_utils.coroutines` * Typealias `ColumnAllocator` has been replaced to root exposed package * Interface `ExposedRepo` has been added * `ExposedCRUDRepo` now extends `ExposedRepo` instead of simple `Repo` * New extension `initTable` for classes which are `Table` and `ExposedRepo` at the same time * `KeyValue`: * `tableName` parameter * Class `AbstractExposedReadKeyValueRepo` * Renamed to `ExposedReadKeyValueRepo` * Changed incoming types to `ColumnAllocator` * `open` instead of `abstract` * Implements `ExposedRepo` * Class `AbstractExposedKeyValueRepo` * Renamed to `ExposedKeyValueRepo` * Changed incoming types to `ColumnAllocator` * `open` instead of `abstract` * `OneToMany`: * `tableName` parameter * Class `AbstractExposedReadOneToManyKeyValueRepo` * Renamed to `ExposedReadOneToManyKeyValueRepo` * Changed incoming arguments order * Implements `ExposedRepo` * Class `AbstractExposedOneToManyKeyValueRepo` * Renamed to `ExposedKeyValueRepo` * Changed incoming arguments order * `open` instead of `abstract` * Release for every `Flow` in parent interfaces ## 0.1.1 * `Versions`: * `kotlinx.serialization`: `1.0.0-RC2` -> `1.0.0` * `Pagination` * `Common` * Function `calculatePage` for calculating page based on size of page and index of first element * Extension `List#createPaginationResult` which use index of first element to calculate current page and other info in `PaginationResult` object * Factory `emptyPaginationResult` for empty `PaginationResult` * Extensions `paginate` for creating of `PaginationResult` which use as source one of next types: * `Iterable` * `List` * `Set` * `Repos` * `Common` * Interfaces related to `OneToManyKeyValueRepo` were renamed with convenience to `Read`/`Write` modifier before name * All subclasses were renamed * Interfaces related to `StandartKeyValueRepo` were renamed with convenience to `Read`/`Write` modifier before name * All subclasses were renamed * Extensions `doForAll` and `getAll` were added for all current types of repos: * `ReadStandardCRUDRepo` * `ReadStandardKeyValueRepo` * `ReadOneToManyKeyValueRepo` * `ReadStandardKeyValueRepo` methods `values` and `keys` now have default value for `reversed` parameter `false` * New `Flow`'s in `WriteOneToManyKeyValueRepo`: * `onNewValue` * `onValueRemoved` * `onDataCleared` * New function `ReadStandardCRUDRepo#count` * `In Memory` * Package has been created:) you can connect it via `implementation "dev.inmo:micro_utils.repos.inmemory"` * `MapCRUDRepo` class as implementation of `StandardCRUDRepo` on top of `MutableMap` has been added * `MapKeyValueRepo` class as implementation of `StandardKeyValueRepo` on top of `MutableMap` has been added * `MapOneToManyKeyValueRepo` class as implementation of `OneToManyKeyValueRepo` on top of `MutableMap` has been added ## 0.1.0 Inited :)