# Changelog ## 0.5.19 * `LanguageCode`: * `IetfLanguageCode` became as sealed class * `IetfLanguageCode` now override `toString` and returns its code ## 0.5.18 * `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 :)