├── gradle ├── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties └── libs.versions.toml ├── jitpack.yml ├── .github ├── sh │ ├── parse_gradle_property.sh │ ├── update_release_version.sh │ ├── validate_has_git_changes.sh │ ├── update_gradle_property.sh │ ├── validate_version_format.sh │ ├── validate_version_update.sh │ ├── validate_publishing_branch.sh │ └── validate_version_increased.sh ├── changelogconfig │ ├── plugin-configuration.json │ └── configuration.json └── workflows │ ├── code-quality.yml │ ├── publish-to-maven.yml │ └── release.yml ├── samples ├── coroutines-loader │ ├── src │ │ └── main │ │ │ ├── res │ │ │ ├── mipmap │ │ │ │ └── ic_launcher.png │ │ │ ├── values │ │ │ │ ├── themes.xml │ │ │ │ └── strings.xml │ │ │ ├── layout │ │ │ │ ├── activity_main.xml │ │ │ │ └── fragment_main.xml │ │ │ └── xml │ │ │ │ └── disable_backup.xml │ │ │ ├── kotlin │ │ │ └── money │ │ │ │ └── vivid │ │ │ │ └── elmslie │ │ │ │ └── samples │ │ │ │ └── coroutines │ │ │ │ └── timer │ │ │ │ ├── elm │ │ │ │ ├── StoreFactory.kt │ │ │ │ ├── TimerModels.kt │ │ │ │ ├── TimerActor.kt │ │ │ │ └── TimerReducer.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ └── MainFragment.kt │ │ │ └── AndroidManifest.xml │ └── build.gradle.kts └── kotlin-calculator │ ├── build.gradle.kts │ └── src │ ├── main │ └── kotlin │ │ └── money │ │ └── vivid │ │ └── elmslie │ │ └── samples │ │ └── calculator │ │ ├── Models.kt │ │ ├── Calculator.kt │ │ └── Store.kt │ └── test │ └── kotlin │ └── money │ └── vivid │ └── elmslie │ └── samples │ └── calculator │ └── StoreTest.kt ├── elmslie-core ├── src │ ├── commonMain │ │ └── kotlin │ │ │ └── money │ │ │ └── vivid │ │ │ └── elmslie │ │ │ └── core │ │ │ ├── logger │ │ │ ├── LogSeverity.kt │ │ │ ├── strategy │ │ │ │ ├── IgnoreLog.kt │ │ │ │ └── LogStrategy.kt │ │ │ ├── ElmslieLogConfiguration.kt │ │ │ └── ElmslieLogger.kt │ │ │ ├── utils │ │ │ ├── DispatcherProvider.kt │ │ │ └── ResolveStoreKey.kt │ │ │ ├── store │ │ │ ├── NoOpReducer.kt │ │ │ ├── NoOpActor.kt │ │ │ ├── dsl │ │ │ │ ├── OperationsBuilder.kt │ │ │ │ └── ResultBuilder.kt │ │ │ ├── StateReducer.kt │ │ │ ├── StoreListener.kt │ │ │ ├── Result.kt │ │ │ ├── ScreenReducer.kt │ │ │ ├── Store.kt │ │ │ ├── EffectCachingElmStore.kt │ │ │ ├── Actor.kt │ │ │ └── ElmStore.kt │ │ │ ├── ElmScope.kt │ │ │ ├── config │ │ │ └── ElmslieConfig.kt │ │ │ └── switcher │ │ │ └── Switcher.kt │ ├── jvmMain │ │ └── kotlin │ │ │ └── money │ │ │ └── vivid │ │ │ └── elmslie │ │ │ └── core │ │ │ └── utils │ │ │ ├── DispatcherProvider.kt │ │ │ └── ResolveStoreKey.kt │ ├── nativeMain │ │ └── kotlin │ │ │ └── money │ │ │ └── vivid │ │ │ └── elmslie │ │ │ └── core │ │ │ └── utils │ │ │ ├── DispatcherProvider.kt │ │ │ └── ResolveStoreKey.kt │ ├── commonWebMain │ │ └── kotlin │ │ │ └── money │ │ │ └── vivid │ │ │ └── elmslie │ │ │ └── core │ │ │ └── utils │ │ │ ├── DispatcherProvider.kt │ │ │ └── ResolveStoreKey.kt │ └── commonTest │ │ └── kotlin │ │ └── money │ │ └── vivid │ │ └── elmslie │ │ └── core │ │ ├── testutil │ │ └── model │ │ │ └── StoreModels.kt │ │ └── store │ │ ├── dsl │ │ ├── Models.kt │ │ ├── ScreenReducerTest.kt │ │ └── DslReducerTest.kt │ │ ├── EffectCachingElmStoreTest.kt │ │ └── ElmStoreTest.kt ├── build.gradle.kts └── api │ └── elmslie-core.api ├── elmslie-android ├── src │ └── main │ │ ├── kotlin │ │ └── money │ │ │ └── vivid │ │ │ └── elmslie │ │ │ └── android │ │ │ ├── util │ │ │ └── FastLazy.kt │ │ │ ├── processdeath │ │ │ ├── ProcessDeathDetectorInitializer.kt │ │ │ ├── EmptyActivityLifecycleCallbacks.kt │ │ │ └── ProcessDeathDetector.kt │ │ │ ├── logger │ │ │ ├── DefaultLoggerConfigurations.kt │ │ │ ├── strategy │ │ │ │ ├── AndroidLog.kt │ │ │ │ └── Crash.kt │ │ │ ├── DefaultLoggerInitializer.kt │ │ │ └── EmptyContentProvider.kt │ │ │ ├── renderer │ │ │ ├── ElmRenderer.kt │ │ │ └── ElmRendererDelegate.kt │ │ │ └── ElmStoreLazy.kt │ │ └── AndroidManifest.xml ├── build.gradle.kts ├── detekt-baseline.xml └── api │ └── elmslie-android.api ├── settings.gradle.kts ├── .gitignore ├── gradle.properties ├── README.md ├── gradlew.bat ├── gradlew ├── LICENSE └── detekt └── detekt.yml /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vivid-money/elmslie/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /jitpack.yml: -------------------------------------------------------------------------------- 1 | jdk: 2 | - zulu17 3 | before_install: 4 | - sdk install java 17.0.7-zulu 5 | - sdk use java 17.0.7-zulu -------------------------------------------------------------------------------- /.github/sh/parse_gradle_property.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | PROPERTY="$1" 3 | FILE="gradle.properties" 4 | sed -En "s/^$PROPERTY=([^\n]+)$/\1/p" "$FILE" 5 | -------------------------------------------------------------------------------- /samples/coroutines-loader/src/main/res/mipmap/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vivid-money/elmslie/HEAD/samples/coroutines-loader/src/main/res/mipmap/ic_launcher.png -------------------------------------------------------------------------------- /.github/sh/update_release_version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | KEY=$1 3 | VALUE=$2 4 | ./.github/sh/update_gradle_property.sh "$KEY" "$VALUE" 5 | ./.github/sh/validate_has_git_changes.sh 6 | -------------------------------------------------------------------------------- /.github/sh/validate_has_git_changes.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Condition checks that git status is empty 3 | if [[ -z $(git status -s) ]]; then 4 | echo "::error ::No git changes" 5 | exit 1 6 | fi -------------------------------------------------------------------------------- /elmslie-core/src/commonMain/kotlin/money/vivid/elmslie/core/logger/LogSeverity.kt: -------------------------------------------------------------------------------- 1 | package money.vivid.elmslie.core.logger 2 | 3 | enum class LogSeverity { 4 | Fatal, 5 | NonFatal, 6 | Debug, 7 | } 8 | -------------------------------------------------------------------------------- /samples/coroutines-loader/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |